diff -ru -b -x aclocal.m4 -x Makefile.in -x 'config.*' -x '*.cache' -x configure -x ltmain.sh fontconfig-2.3.2/configure.in fontconfig-2.3.2-libxml2/configure.in --- fontconfig-2.3.2/configure.in 2005-04-27 20:54:24.000000000 +0200 +++ fontconfig-2.3.2-libxml2/configure.in 2005-09-22 11:05:14.000000000 +0200 @@ -190,6 +190,17 @@ LIBS="$fontconfig_save_libs" # +# Check libxml2 configuration +# + +AC_ARG_ENABLE(libxml2, [ --enable-libxml2 Use libxml2 instead of Expat]) + +if test "$enable_libxml2" = "yes"; then + PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6]) + AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat]) +fi + +# # Check expat configuration # @@ -197,10 +208,11 @@ AC_ARG_WITH(expat-includes, [ --with-expat-includes=DIR Use Expat includes in DIR], expat_includes=$withval, expat_includes=yes) AC_ARG_WITH(expat-lib, [ --with-expat-lib=DIR Use Expat library in DIR], expat_lib=$withval, expat_lib=yes) -case "$expat" in -no) +if test "$enable_libxml2" != "yes"; then + case "$expat" in + no) ;; -*) + *) case "$expat_includes" in yes) case "$expat" in @@ -284,15 +296,16 @@ CPPFLAGS="$expatsaved_CPPFLAGS" LIBS="$expatsaved_LIBS" ;; -esac -AC_SUBST(EXPAT_LIBS) -AC_SUBST(EXPAT_CFLAGS) + esac + AC_SUBST(EXPAT_LIBS) + AC_SUBST(EXPAT_CFLAGS) -case "$expat" in -no) + case "$expat" in + no) AC_MSG_ERROR([Cannot find usable expat library. This could mean that your version is too old.]) ;; -esac + esac +fi # # Set default font directory diff -ru -b -x aclocal.m4 -x Makefile.in -x 'config.*' -x '*.cache' -x configure -x ltmain.sh fontconfig-2.3.2/src/fcxml.c fontconfig-2.3.2-libxml2/src/fcxml.c --- fontconfig-2.3.2/src/fcxml.c 2005-01-29 00:51:15.000000000 +0100 +++ fontconfig-2.3.2-libxml2/src/fcxml.c 2005-09-22 11:04:22.000000000 +0200 @@ -26,6 +26,19 @@ #include "fcint.h" #include +#if ENABLE_LIBXML2 + +#include + +#define XML_Char xmlChar +#define XML_Parser xmlParserCtxtPtr +#define XML_ParserFree xmlFreeParserCtxt +#define XML_GetCurrentLineNumber xmlSAX2GetLineNumber +#define XML_GetErrorCode xmlCtxtGetLastError +#define XML_ErrorString(Error) (Error)->message + +#else /* ENABLE_LIBXML2 */ + #ifndef HAVE_XMLPARSE_H #define HAVE_XMLPARSE_H 0 #endif @@ -36,6 +49,8 @@ #include #endif +#endif /* ENABLE_LIBXML2 */ + #ifdef _WIN32 #define STRICT #include @@ -2213,11 +2228,35 @@ FcConfigMessage (parse, FcSevereError, "invalid doctype \"%s\"", doctypeName); } +#if ENABLE_LIBXML2 + +static void +FcInternalSubsetDecl (void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid) +{ + FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 1); +} + +static void +FcExternalSubsetDecl (void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid) +{ + FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 0); +} + +#else /* ENABLE_LIBXML2 */ + static void FcEndDoctypeDecl (void *userData) { } +#endif /* ENABLE_LIBXML2 */ + static FcBool FcConfigParseAndLoadDir (FcConfig *config, const FcChar8 *name, @@ -2306,10 +2345,16 @@ FcChar8 *filename; FILE *f; int len; - void *buf; FcConfigParse parse; FcBool error = FcTrue; +#if ENABLE_LIBXML2 + xmlSAXHandler sax; + char buf[BUFSIZ]; +#else + void *buf; +#endif + filename = FcConfigFilename (name); if (!filename) goto bail0; @@ -2335,33 +2380,59 @@ if (!f) goto bail0; +#if ENABLE_LIBXML2 + p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, filename); +#else p = XML_ParserCreate ("UTF-8"); +#endif + if (!p) goto bail1; if (!FcConfigInit (&parse, name, config, p)) goto bail2; +#if ENABLE_LIBXML2 + + memset(&sax, 0, sizeof(sax)); + + sax.internalSubset = FcInternalSubsetDecl; + sax.externalSubset = FcExternalSubsetDecl; + sax.startElement = FcStartElement; + sax.endElement = FcEndElement; + sax.characters = FcCharacterData; + +#else /* ENABLE_LIBXML2 */ + XML_SetUserData (p, &parse); XML_SetDoctypeDeclHandler (p, FcStartDoctypeDecl, FcEndDoctypeDecl); XML_SetElementHandler (p, FcStartElement, FcEndElement); XML_SetCharacterDataHandler (p, FcCharacterData); +#endif /* ENABLE_LIBXML2 */ + do { +#if !ENABLE_LIBXML2 buf = XML_GetBuffer (p, BUFSIZ); if (!buf) { FcConfigMessage (&parse, FcSevereError, "cannot get parse buffer"); goto bail3; } +#endif len = fread (buf, 1, BUFSIZ, f); if (len < 0) { FcConfigMessage (&parse, FcSevereError, "failed reading config file"); goto bail3; } + +#if ENABLE_LIBXML2 + if (!xmlParseChunk (p, buf, len, len == 0)) +#else if (!XML_ParseBuffer (p, len, len == 0)) +#endif { FcConfigMessage (&parse, FcSevereError, "%s", XML_ErrorString (XML_GetErrorCode (p))); diff -ru -b -x aclocal.m4 -x Makefile.in -x 'config.*' -x '*.cache' -x configure -x ltmain.sh fontconfig-2.3.2/src/Makefile.am fontconfig-2.3.2-libxml2/src/Makefile.am --- fontconfig-2.3.2/src/Makefile.am 2004-12-05 06:49:20.000000000 +0100 +++ fontconfig-2.3.2-libxml2/src/Makefile.am 2005-09-22 10:42:59.000000000 +0200 @@ -66,6 +66,7 @@ INCLUDES = \ $(FREETYPE_CFLAGS) \ + $(LIBXML2_CFLAGS) \ $(EXPAT_CFLAGS) \ $(WARN_CFLAGS) \ -DFONTCONFIG_PATH='"$(CONFDIR)"' \ @@ -102,7 +103,7 @@ libfontconfig_la_LDFLAGS = \ -version-info @LT_VERSION_INFO@ $(no_undefined) $(export_symbols) -libfontconfig_la_LIBADD = $(FREETYPE_LIBS) $(EXPAT_LIBS) +libfontconfig_la_LIBADD = $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS) install-data-local: install-ms-import-lib install-libtool-import-lib