Index: globals.c =================================================================== RCS file: /cvs/gnome/gnome-xml/globals.c,v retrieving revision 1.37 diff -c -r1.37 globals.c *** a/globals.c 20 Dec 2003 02:10:21 -0000 1.37 --- b/globals.c 29 May 2004 12:30:36 -0000 *************** *** 169,174 **** --- 169,175 ---- #undef xmlMemStrdup #undef xmlRealloc + #undef xmlRegisterParserInputBufferCreateFilenameValue /** * xmlParserVersion: * *************** *** 282,287 **** --- 283,291 ---- xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue = NULL; static xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValueThrDef = NULL; + xmlRegisterParserInputBufferCreateFilenameFunc xmlRegisterParserInputBufferCreateFilenameValue = NULL; + static xmlRegisterParserInputBufferCreateFilenameFunc xmlRegisterParserInputBufferCreateFilenameValueThrDef = NULL; + /* * Error handling */ *************** *** 545,550 **** --- 549,556 ---- gs->xmlGenericErrorContext = xmlGenericErrorContextThrDef; gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef; gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef; + + gs->xmlRegisterParserInputBufferCreateFilenameValue = xmlRegisterParserInputBufferCreateFilenameValueThrDef; memset(&gs->xmlLastError, 0, sizeof(xmlError)); xmlMutexUnlock(xmlThrDefMutex); *************** *** 639,644 **** --- 645,680 ---- return(old); } + /** + * xmlRegisterParserInputBufferCreateFilename: + * @func: function pointer to the new RegisterNodeFunc + * + * Registers a callback for node creation + * + * Returns the old value of the registration function + */ + xmlRegisterParserInputBufferCreateFilenameFunc + xmlRegisterParserInputBufferCreateFilenameDefault(xmlRegisterParserInputBufferCreateFilenameFunc func) + { + xmlRegisterParserInputBufferCreateFilenameFunc old = xmlRegisterParserInputBufferCreateFilenameValue; + + xmlRegisterParserInputBufferCreateFilenameValue = func; + return(old); + } + + xmlRegisterParserInputBufferCreateFilenameFunc + xmlThrDefRegisterParserInputBufferCreateFilenameDefault(xmlRegisterParserInputBufferCreateFilenameFunc func) + { + xmlRegisterParserInputBufferCreateFilenameFunc old; + + xmlMutexLock(xmlThrDefMutex); + old = xmlRegisterParserInputBufferCreateFilenameValueThrDef; + + xmlRegisterParserInputBufferCreateFilenameValueThrDef = func; + xmlMutexUnlock(xmlThrDefMutex); + + return(old); + } #ifdef LIBXML_DOCB_ENABLED #undef docbDefaultSAXHandler *************** *** 981,983 **** --- 1017,1028 ---- else return (&xmlGetGlobalState()->xmlDeregisterNodeDefaultValue); } + + #undef xmlRegisterParserInputBufferCreateFilenameValue + xmlRegisterParserInputBufferCreateFilenameFunc * + __xmlRegisterParserInputBufferCreateFilenameValue(void) { + if (IS_MAIN_THREAD) + return (&xmlRegisterParserInputBufferCreateFilenameValue); + else + return (&xmlGetGlobalState()->xmlRegisterParserInputBufferCreateFilenameValue); + } \ No newline at end of file Index: xmlIO.c =================================================================== RCS file: /cvs/gnome/gnome-xml/xmlIO.c,v retrieving revision 1.144 diff -c -r1.144 xmlIO.c *** a/xmlIO.c 14 May 2004 21:50:42 -0000 1.144 --- b/xmlIO.c 29 May 2004 12:30:38 -0000 *************** *** 2125,2145 **** } #endif /* LIBXML_OUTPUT_ENABLED */ ! /** ! * xmlParserInputBufferCreateFilename: ! * @URI: a C string containing the URI or filename ! * @enc: the charset encoding if known ! * ! * Create a buffered parser input for the progressive parsing of a file ! * If filename is "-' then we use stdin as the input. ! * Automatic support for ZLIB/Compress compressed document is provided ! * by default if found at compile-time. ! * Do an encoding check if enc == XML_CHAR_ENCODING_NONE ! * ! * Returns the new parser input or NULL ! */ ! xmlParserInputBufferPtr ! xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) { xmlParserInputBufferPtr ret; int i = 0; void *context = NULL; --- 2125,2132 ---- } #endif /* LIBXML_OUTPUT_ENABLED */ ! static xmlParserInputBufferPtr ! __xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) { xmlParserInputBufferPtr ret; int i = 0; void *context = NULL; *************** *** 2196,2201 **** --- 2183,2209 ---- return(ret); } + /** + * xmlParserInputBufferCreateFilename: + * @URI: a C string containing the URI or filename + * @enc: the charset encoding if known + * + * Create a buffered parser input for the progressive parsing of a file + * If filename is "-' then we use stdin as the input. + * Automatic support for ZLIB/Compress compressed document is provided + * by default if found at compile-time. + * Do an encoding check if enc == XML_CHAR_ENCODING_NONE + * + * Returns the new parser input or NULL + */ + xmlParserInputBufferPtr + xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) { + if ((xmlRegisterParserInputBufferCreateFilenameValue)) { + return xmlRegisterParserInputBufferCreateFilenameValue(URI, enc); + } + return __xmlParserInputBufferCreateFilename(URI, enc); + } + #ifdef LIBXML_OUTPUT_ENABLED /** * xmlOutputBufferCreateFilename: Index: include/libxml/globals.h =================================================================== RCS file: /cvs/gnome/gnome-xml/include/libxml/globals.h,v retrieving revision 1.21 diff -c -r1.21 globals.h *** a/include/libxml/globals.h 5 Dec 2003 14:57:41 -0000 1.21 --- b/include/libxml/globals.h 29 May 2004 12:30:38 -0000 *************** *** 63,72 **** --- 63,75 ---- #undef xmlRegisterNodeDefaultValue #undef xmlDeregisterNodeDefaultValue #undef xmlLastError + #undef xmlRegisterParserInputBufferCreateFilenameValue typedef void (*xmlRegisterNodeFunc) (xmlNodePtr node); typedef void (*xmlDeregisterNodeFunc) (xmlNodePtr node); + typedef xmlParserInputBufferPtr (*xmlRegisterParserInputBufferCreateFilenameFunc) (const char *URI, xmlCharEncoding enc); + typedef struct _xmlGlobalState xmlGlobalState; typedef xmlGlobalState *xmlGlobalStatePtr; struct _xmlGlobalState *************** *** 110,115 **** --- 113,120 ---- xmlMallocFunc xmlMallocAtomic; xmlError xmlLastError; + + xmlRegisterParserInputBufferCreateFilenameFunc xmlRegisterParserInputBufferCreateFilenameValue; }; #ifdef __cplusplus *************** *** 131,136 **** --- 136,144 ---- XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func); XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func); + XMLPUBFUN xmlRegisterParserInputBufferCreateFilenameFunc XMLCALL xmlRegisterParserInputBufferCreateFilenameDefault(xmlRegisterParserInputBufferCreateFilenameFunc func); + XMLPUBFUN xmlRegisterParserInputBufferCreateFilenameFunc XMLCALL xmlThrDefRegisterParserInputBufferCreateFilenameDefault(xmlRegisterParserInputBufferCreateFilenameFunc func); + /** DOC_DISABLE */ /* * In general the memory allocation entry points are not kept *************** *** 415,420 **** --- 423,436 ---- XMLPUBVAR xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue; #endif + XMLPUBFUN xmlRegisterParserInputBufferCreateFilenameFunc * XMLCALL __xmlRegisterParserInputBufferCreateFilenameValue(void); + #ifdef LIBXML_THREAD_ENABLED + #define xmlRegisterParserInputBufferCreateFilenameValue \ + (*(__xmlRegisterParserInputBufferCreateFilenameValue())) + #else + XMLPUBVAR xmlRegisterParserInputBufferCreateFilenameFunc xmlRegisterParserInputBufferCreateFilenameValue; + #endif + #ifdef __cplusplus } #endif