39#define WITH_XSLT_DEBUG_FUNCTION
47#define DOCBOOK_XSL_HACK
63 xmlXPathContextPtr ctxt = (xmlXPathContextPtr) vctxt;
69#ifdef WITH_XSLT_DEBUG_FUNCTION
71 "Lookup function {%s}%s\n", ns_uri,
name);
83#ifdef WITH_XSLT_DEBUG_FUNCTION
86 "found function %s\n",
name);
105 xmlXPathContextPtr xptrctxt =
NULL;
106 xmlXPathObjectPtr resObj =
NULL;
113 "document() : internal error tctxt == NULL\n");
135 if (fragment ==
NULL) {
136 valuePush(ctxt, xmlXPathNewNodeSet((xmlNodePtr) doc));
141#ifdef LIBXML_XPTR_ENABLED
142 xptrctxt = xmlXPathNewContext(doc);
143 if (xptrctxt ==
NULL) {
145 "document() : internal error xptrctxt == NULL\n");
149#if LIBXML_VERSION >= 20911 || \
150 defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
151 xptrctxt->opLimit = ctxt->context->opLimit;
152 xptrctxt->opCount = ctxt->context->opCount;
153 xptrctxt->depth = ctxt->context->depth;
155 resObj = xmlXPtrEval(fragment, xptrctxt);
157 ctxt->context->opCount = xptrctxt->opCount;
159 resObj = xmlXPtrEval(fragment, xptrctxt);
162 xmlXPathFreeContext(xptrctxt);
165 if ((resObj !=
NULL) && (resObj->type != XPATH_NODESET)) {
167 "document() : XPointer does not select a node set: #%s\n",
169 xmlXPathFreeObject(resObj);
175 resObj = xmlXPathNewNodeSet(
NULL);
176 valuePush(ctxt, resObj);
190 xmlXPathObjectPtr
obj, obj2 =
NULL;
195 if ((nargs < 1) || (nargs > 2)) {
197 "document() : invalid number of args %d\n",
199 ctxt->error = XPATH_INVALID_ARITY;
202 if (ctxt->value ==
NULL) {
204 "document() : invalid arg value\n");
205 ctxt->error = XPATH_INVALID_TYPE;
210 if (ctxt->value->type != XPATH_NODESET) {
212 "document() : invalid arg expecting a nodeset\n");
213 ctxt->error = XPATH_INVALID_TYPE;
217 obj2 = valuePop(ctxt);
220 if ((ctxt->value !=
NULL) && (ctxt->value->type == XPATH_NODESET)) {
222 xmlXPathObjectPtr newobj,
ret;
224 obj = valuePop(ctxt);
225 ret = xmlXPathNewNodeSet(
NULL);
228 for (
i = 0;
i <
obj->nodesetval->nodeNr;
i++) {
230 xmlXPathNewNodeSet(
obj->nodesetval->nodeTab[
i]));
231 xmlXPathStringFunction(ctxt, 1);
233 valuePush(ctxt, xmlXPathObjectCopy(obj2));
236 xmlXPathNewNodeSet(
obj->nodesetval->
242 newobj = valuePop(ctxt);
243 if (newobj !=
NULL) {
244 ret->nodesetval = xmlXPathNodeSetMerge(
ret->nodesetval,
246 xmlXPathFreeObject(newobj);
252 xmlXPathFreeObject(
obj);
254 xmlXPathFreeObject(obj2);
255 valuePush(ctxt,
ret);
261 xmlXPathStringFunction(ctxt, 1);
262 if ((ctxt->value ==
NULL) || (ctxt->value->type != XPATH_STRING)) {
264 "document() : invalid arg expecting a string\n");
265 ctxt->error = XPATH_INVALID_TYPE;
267 xmlXPathFreeObject(obj2);
270 obj = valuePop(ctxt);
272 valuePush(ctxt, xmlXPathNewNodeSet(
NULL));
285 "document() : failed to parse URI '%s'\n",
url);
286 valuePush(ctxt, xmlXPathNewNodeSet(
NULL));
301 if ((obj2 !=
NULL) && (obj2->nodesetval !=
NULL) &&
302 (obj2->nodesetval->nodeNr > 0) &&
306 target = obj2->nodesetval->nodeTab[0];
307 if ((
target->type == XML_ATTRIBUTE_NODE) ||
308 (
target->type == XML_PI_NODE)) {
330 valuePush(ctxt, xmlXPathNewNodeSet((xmlNodePtr) tctxt->
style->
doc));
332 valuePush(ctxt, xmlXPathNewNodeSet(
NULL));
343 xmlXPathFreeObject(
obj);
345 xmlXPathFreeObject(obj2);
358 xmlXPathObjectPtr obj1, obj2;
362 "key() : expects two arguments\n");
363 ctxt->error = XPATH_INVALID_ARITY;
370 obj2 = valuePop(ctxt);
371 xmlXPathStringFunction(ctxt, 1);
372 if ((obj2 ==
NULL) ||
373 (ctxt->value ==
NULL) || (ctxt->value->type != XPATH_STRING)) {
375 "key() : invalid arg expecting a string\n");
376 ctxt->error = XPATH_INVALID_TYPE;
377 xmlXPathFreeObject(obj2);
384 obj1 = valuePop(ctxt);
386 if ((obj2->type == XPATH_NODESET) || (obj2->type == XPATH_XSLT_TREE)) {
388 xmlXPathObjectPtr newobj,
ret;
390 ret = xmlXPathNewNodeSet(
NULL);
392 ctxt->error = XPATH_MEMORY_ERROR;
393 xmlXPathFreeObject(obj1);
394 xmlXPathFreeObject(obj2);
398 if (obj2->nodesetval !=
NULL) {
399 for (
i = 0;
i < obj2->nodesetval->nodeNr;
i++) {
400 valuePush(ctxt, xmlXPathObjectCopy(obj1));
402 xmlXPathNewNodeSet(obj2->nodesetval->nodeTab[
i]));
403 xmlXPathStringFunction(ctxt, 1);
405 newobj = valuePop(ctxt);
407 ret->nodesetval = xmlXPathNodeSetMerge(
ret->nodesetval,
409 xmlXPathFreeObject(newobj);
412 valuePush(ctxt,
ret);
414 xmlNodeSetPtr nodelist =
NULL;
419 xmlXPathContextPtr xpctxt = ctxt->context;
420 xmlNodePtr tmpNode =
NULL;
427 if (xpctxt->node ==
NULL) {
429 "Internal error in xsltKeyFunction(): "
430 "The context node is not set on the XPath context.\n");
437 qname = obj1->stringval;
446 keyURI = xmlXPathNsLookup(xpctxt,
prefix);
447 if (keyURI ==
NULL) {
449 "key() : prefix %s is not bound\n",
prefix);
463 valuePush(ctxt, obj2);
464 xmlXPathStringFunction(ctxt, 1);
465 obj2 = valuePop(ctxt);
466 if ((obj2 ==
NULL) || (obj2->type != XPATH_STRING)) {
468 "key() : invalid arg expecting a string\n");
469 ctxt->error = XPATH_INVALID_TYPE;
472 value = obj2->stringval;
484 if (xpctxt->node->type == XML_NAMESPACE_DECL) {
490 if ((((xmlNsPtr) xpctxt->node)->next !=
NULL) &&
491 (((xmlNsPtr) xpctxt->node)->next->type == XML_ELEMENT_NODE))
493 tmpNode = (xmlNodePtr) ((xmlNsPtr) xpctxt->node)->
next;
496 tmpNode = xpctxt->node;
498 if ((tmpNode ==
NULL) || (tmpNode->doc ==
NULL)) {
500 "Internal error in xsltKeyFunction(): "
501 "Couldn't get the doc of the XPath context node.\n");
508 if (tmpNode->doc->name && (tmpNode->doc->name[0] ==
' ')) {
512 if (tmpNode->doc->_private ==
NULL) {
514 if (tmpNode->doc->_private ==
NULL)
527 "Internal error in xsltKeyFunction(): "
528 "Could not get the document info of a context doc.\n");
540 valuePush(ctxt, xmlXPathWrapNodeSet(
541 xmlXPathNodeSetMerge(
NULL, nodelist)));
547 xmlXPathFreeObject(obj1);
549 xmlXPathFreeObject(obj2);
562 xmlXPathObjectPtr
obj;
565 if ((nargs != 1) || (ctxt->value ==
NULL)) {
567 "unparsed-entity-uri() : expects one string arg\n");
568 ctxt->error = XPATH_INVALID_ARITY;
571 obj = valuePop(ctxt);
572 if (
obj->type != XPATH_STRING) {
573 obj = xmlXPathConvertString(
obj);
575 xmlXPathErr(ctxt, XPATH_MEMORY_ERROR);
582 valuePush(ctxt, xmlXPathNewString((
const xmlChar *)
""));
588 valuePush(ctxt, xmlXPathNewString((
const xmlChar *)
""));
591 valuePush(ctxt, xmlXPathNewString(
entity->URI));
593 valuePush(ctxt, xmlXPathNewString((
const xmlChar *)
""));
596 xmlXPathFreeObject(
obj);
610 xmlXPathObjectPtr numberObj =
NULL;
611 xmlXPathObjectPtr formatObj =
NULL;
612 xmlXPathObjectPtr decimalObj =
NULL;
624 sheet = tctxt->
style;
631 if ((ctxt->value !=
NULL) && (ctxt->value->type != XPATH_STRING))
632 xmlXPathStringFunction(ctxt, 1);
633 decimalObj = valuePop(ctxt);
639 "format-number : No namespace found for QName '%s:%s'\n",
648 if (ncname !=
NULL) {
651 if (formatValues ==
NULL) {
653 "format-number() : undeclared decimal format '%s'\n",
654 decimalObj->stringval);
658 if ((ctxt->value !=
NULL) && (ctxt->value->type != XPATH_STRING))
659 xmlXPathStringFunction(ctxt, 1);
660 formatObj = valuePop(ctxt);
661 if ((ctxt->value !=
NULL) && (ctxt->value->type != XPATH_NUMBER))
662 xmlXPathNumberFunction(ctxt, 1);
663 numberObj = valuePop(ctxt);
666 xmlXPathErr(ctxt, XPATH_INVALID_ARITY);
670 if ((ctxt->error == 0) &&
671 (formatValues !=
NULL) && (formatObj !=
NULL) && (numberObj !=
NULL)) {
673 formatObj->stringval,
675 &
result) == XPATH_EXPRESSION_OK) {
676 valuePush(ctxt, xmlXPathNewString(
result));
681 xmlXPathFreeObject(numberObj);
682 xmlXPathFreeObject(formatObj);
683 xmlXPathFreeObject(decimalObj);
703 size_t size, nsPrefixSize = 0;
708 cur = ctxt->context->node;
709 }
else if (nargs == 1) {
710 xmlNodeSetPtr nodelist;
713 if ((ctxt->value ==
NULL) || (ctxt->value->type != XPATH_NODESET)) {
714 ctxt->error = XPATH_INVALID_TYPE;
716 "generate-id() : invalid arg expecting a node-set\n");
719 obj = valuePop(ctxt);
720 nodelist =
obj->nodesetval;
721 if ((nodelist ==
NULL) || (nodelist->nodeNr <= 0)) {
722 valuePush(ctxt, xmlXPathNewCString(
""));
725 cur = nodelist->nodeTab[0];
726 for (
i = 1;
i < nodelist->nodeNr;
i++) {
727 ret = xmlXPathCmpNodes(
cur, nodelist->nodeTab[
i]);
729 cur = nodelist->nodeTab[
i];
733 "generate-id() : invalid number of args %d\n", nargs);
734 ctxt->error = XPATH_INVALID_ARITY;
740 if (
cur->type == XML_NAMESPACE_DECL) {
741 xmlNsPtr
ns = (xmlNsPtr)
cur;
744 if (nsPrefix ==
NULL)
748 size += nsPrefixSize * 2 + 2;
751 cur = (xmlNodePtr)
ns->next;
755 if (psviPtr ==
NULL) {
757 "generate-id(): invalid node type %d\n",
cur->type);
758 ctxt->error = XPATH_INVALID_TYPE;
763 id = (
unsigned long) (
size_t) *psviPtr;
768 }
else if (*psviPtr !=
NULL) {
770 "generate-id(): psvi already set\n");
771 ctxt->error = XPATH_MEMORY_ERROR;
777 "generate-id(): id overflow\n");
778 ctxt->error = XPATH_MEMORY_ERROR;
783 *psviPtr = (
void *) (
size_t)
id;
790 "generate-id(): out of memory\n");
791 ctxt->error = XPATH_MEMORY_ERROR;
794 if (nsPrefix ==
NULL) {
805 for (
i = 0;
i < nsPrefixSize;
i++) {
808 v = nsPrefix[
i] >> 4;
809 str[
j++] =
v < 10 ?
'0' +
v :
'A' + (
v - 10);
810 v = nsPrefix[
i] & 15;
811 str[
j++] =
v < 10 ?
'0' +
v :
'A' + (
v - 10);
818 xmlXPathFreeObject(
obj);
831 xmlXPathObjectPtr
obj;
837 "system-property() : expects one string arg\n");
838 ctxt->error = XPATH_INVALID_ARITY;
841 if ((ctxt->value ==
NULL) || (ctxt->value->type != XPATH_STRING)) {
843 "system-property() : invalid arg expecting a string\n");
844 ctxt->error = XPATH_INVALID_TYPE;
847 obj = valuePop(ctxt);
849 valuePush(ctxt, xmlXPathNewString((
const xmlChar *)
""));
855 nsURI = xmlXPathNsLookup(ctxt->context,
prefix);
858 "system-property() : prefix %s is not bound\n",
prefix);
863#ifdef DOCBOOK_XSL_HACK
874 sheet = tctxt->
style;
881 valuePush(ctxt, xmlXPathNewString(
882 (
const xmlChar *)
"libxslt (SAXON 6.2 compatible)"));
885 valuePush(ctxt, xmlXPathNewString(
891 valuePush(ctxt, xmlXPathNewString(
896 valuePush(ctxt, xmlXPathNewString(
899 valuePush(ctxt, xmlXPathNewString(
902 valuePush(ctxt, xmlXPathNewString((
const xmlChar *)
""));
905 valuePush(ctxt, xmlXPathNewString((
const xmlChar *)
""));
912 xmlXPathFreeObject(
obj);
925 xmlXPathObjectPtr
obj;
932 "element-available() : expects one string arg\n");
933 ctxt->error = XPATH_INVALID_ARITY;
936 xmlXPathStringFunction(ctxt, 1);
937 if ((ctxt->value ==
NULL) || (ctxt->value->type != XPATH_STRING)) {
939 "element-available() : invalid arg expecting a string\n");
940 ctxt->error = XPATH_INVALID_TYPE;
943 obj = valuePop(ctxt);
947 "element-available() : internal error tctxt == NULL\n");
948 xmlXPathFreeObject(
obj);
949 valuePush(ctxt, xmlXPathNewBoolean(0));
962 nsURI = xmlXPathNsLookup(ctxt->context,
prefix);
965 "element-available() : prefix %s is not bound\n",
prefix);
970 valuePush(ctxt, xmlXPathNewBoolean(1));
972 valuePush(ctxt, xmlXPathNewBoolean(0));
975 xmlXPathFreeObject(
obj);
992 xmlXPathObjectPtr
obj;
998 "function-available() : expects one string arg\n");
999 ctxt->error = XPATH_INVALID_ARITY;
1002 xmlXPathStringFunction(ctxt, 1);
1003 if ((ctxt->value ==
NULL) || (ctxt->value->type != XPATH_STRING)) {
1005 "function-available() : invalid arg expecting a string\n");
1006 ctxt->error = XPATH_INVALID_TYPE;
1009 obj = valuePop(ctxt);
1015 nsURI = xmlXPathNsLookup(ctxt->context,
prefix);
1016 if (nsURI ==
NULL) {
1018 "function-available() : prefix %s is not bound\n",
prefix);
1022 if (xmlXPathFunctionLookupNS(ctxt->context,
name, nsURI) !=
NULL) {
1023 valuePush(ctxt, xmlXPathNewBoolean(1));
1025 valuePush(ctxt, xmlXPathNewBoolean(0));
1028 xmlXPathFreeObject(
obj);
1049 "current() : function uses no argument\n");
1050 ctxt->error = XPATH_INVALID_ARITY;
1054 if (tctxt ==
NULL) {
1056 "current() : internal error tctxt == NULL\n");
1057 valuePush(ctxt, xmlXPathNewNodeSet(
NULL));
1059 valuePush(ctxt, xmlXPathNewNodeSet(tctxt->
node));
1078 xmlXPathRegisterFunc(ctxt, (
const xmlChar *)
"current",
1080 xmlXPathRegisterFunc(ctxt, (
const xmlChar *)
"document",
1083 xmlXPathRegisterFunc(ctxt, (
const xmlChar *)
"unparsed-entity-uri",
1085 xmlXPathRegisterFunc(ctxt, (
const xmlChar *)
"format-number",
1087 xmlXPathRegisterFunc(ctxt, (
const xmlChar *)
"generate-id",
1089 xmlXPathRegisterFunc(ctxt, (
const xmlChar *)
"system-property",
1091 xmlXPathRegisterFunc(ctxt, (
const xmlChar *)
"element-available",
1093 xmlXPathRegisterFunc(ctxt, (
const xmlChar *)
"function-available",
xsltTransformContextPtr xsltXPathGetTransformContext(xmlXPathParserContextPtr ctxt)
xmlXPathFunction xsltExtModuleFunctionLookup(const xmlChar *name, const xmlChar *URI)
xsltTransformFunction xsltExtElementLookup(xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *URI)
xmlXPathError xsltFormatNumberConversion(xsltDecimalFormatPtr self, xmlChar *format, double number, xmlChar **result)
_ACRTIMP size_t __cdecl strlen(const char *)
xsltDocumentPtr xsltNewDocument(xsltTransformContextPtr ctxt, xmlDocPtr doc)
xsltDocumentPtr xsltFindDocument(xsltTransformContextPtr ctxt, xmlDocPtr doc)
xsltDocumentPtr xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI)
void xsltSystemPropertyFunction(xmlXPathParserContextPtr ctxt, int nargs)
void xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs)
void xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs)
void xsltRegisterAllFunctions(xmlXPathContextPtr ctxt)
void xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, int nargs)
xmlXPathFunction xsltXPathFunctionLookup(void *vctxt, const xmlChar *name, const xmlChar *ns_uri)
void xsltElementAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs)
void xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs)
void xsltUnparsedEntityURIFunction(xmlXPathParserContextPtr ctxt, int nargs)
void xsltFunctionAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs)
static void xsltCurrentFunction(xmlXPathParserContextPtr ctxt, int nargs)
static void xsltDocumentFunctionLoadDocument(xmlXPathParserContextPtr ctxt, const xmlChar *URI, const xmlChar *fragment)
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
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 GLint GLint j
xmlNodeSetPtr xsltGetKey(xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *nameURI, const xmlChar *value)
XMLPUBFUN xmlEntityPtr xmlGetDocEntity(const xmlDoc *doc, const xmlChar *name)
static unsigned __int64 next
void * xmlHashLookup2(xmlHashTablePtr hash, const xmlChar *key, const xmlChar *key2)
xsltDecimalFormatPtr decimalFormat
Character const *const prefix
XMLPUBFUN xmlChar * xmlBuildURI(const xmlChar *URI, const xmlChar *base)
XMLPUBFUN void xmlFreeURI(xmlURIPtr uri)
XMLPUBFUN xmlURIPtr xmlParseURI(const char *str)
XMLPUBFUN xmlChar * xmlSaveUri(xmlURIPtr uri)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
XMLPUBFUN int xmlStrlen(const xmlChar *str)
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)
#define XML_CAST_FPTR(fptr)
xsltDocument * xsltDocumentPtr
xsltDecimalFormatPtr xsltDecimalFormatGetByQName(xsltStylesheetPtr style, const xmlChar *nsUri, const xmlChar *name)
#define XSLT_DEFAULT_VENDOR
#define XSLT_DEFAULT_VERSION
void xsltTransformError(xsltTransformContextPtr ctxt, xsltStylesheetPtr style, xmlNodePtr node, const char *msg,...)
xmlGenericErrorFunc xsltGenericError
int xsltSetSourceNodeFlags(xsltTransformContextPtr ctxt, xmlNodePtr node, int flags)
int xsltGetSourceNodeFlags(xmlNodePtr node)
xmlGenericErrorFunc xsltGenericDebug
void ** xsltGetPSVIPtr(xmlNodePtr cur)
void * xsltGenericDebugContext
void * xsltGenericErrorContext
const xmlChar * xsltSplitQName(xmlDictPtr dict, const xmlChar *name, const xmlChar **prefix)
#define IS_XSLT_REAL_NODE(n)