Index: configure.in =================================================================== RCS file: /cvs/fontconfig/fontconfig/configure.in,v retrieving revision 1.66.2.1 diff -u -2 -r1.66.2.1 configure.in --- configure.in 23 Sep 2005 05:59:19 -0000 1.66.2.1 +++ configure.in 23 Sep 2005 21:10:29 -0000 @@ -191,4 +191,15 @@ # +# 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 # @@ -198,8 +209,9 @@ 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) @@ -285,13 +297,14 @@ 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 # Index: src/Makefile.am =================================================================== RCS file: /cvs/fontconfig/fontconfig/src/Makefile.am,v retrieving revision 1.12 diff -u -2 -r1.12 Makefile.am --- src/Makefile.am 5 Dec 2004 05:49:20 -0000 1.12 +++ src/Makefile.am 23 Sep 2005 21:10:29 -0000 @@ -67,4 +67,5 @@ INCLUDES = \ $(FREETYPE_CFLAGS) \ + $(LIBXML2_CFLAGS) \ $(EXPAT_CFLAGS) \ $(WARN_CFLAGS) \ @@ -103,5 +104,5 @@ -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 Index: src/fcxml.c =================================================================== RCS file: /cvs/fontconfig/fontconfig/src/fcxml.c,v retrieving revision 1.37.4.6 diff -u -2 -r1.37.4.6 fcxml.c --- src/fcxml.c 22 Sep 2005 23:45:53 -0000 1.37.4.6 +++ src/fcxml.c 23 Sep 2005 21:10:30 -0000 @@ -27,4 +27,17 @@ #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 @@ -37,4 +50,6 @@ #endif +#endif /* ENABLE_LIBXML2 */ + #ifdef _WIN32 #define STRICT @@ -2214,4 +2229,26 @@ } +#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) @@ -2219,4 +2256,6 @@ } +#endif /* ENABLE_LIBXML2 */ + static FcBool FcConfigParseAndLoadDir (FcConfig *config, @@ -2312,8 +2351,14 @@ 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) @@ -2341,5 +2386,10 @@ goto bail0; +#if ENABLE_LIBXML2 + p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, filename); +#else p = XML_ParserCreate ("UTF-8"); +#endif + if (!p) goto bail1; @@ -2348,4 +2398,16 @@ 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); @@ -2354,5 +2416,8 @@ XML_SetCharacterDataHandler (p, FcCharacterData); +#endif /* ENABLE_LIBXML2 */ + do { +#if !ENABLE_LIBXML2 buf = XML_GetBuffer (p, BUFSIZ); if (!buf) @@ -2361,4 +2426,5 @@ goto bail3; } +#endif len = fread (buf, 1, BUFSIZ, f); if (len < 0) @@ -2367,5 +2433,10 @@ 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",