Index: Makefile.am =================================================================== RCS file: /cvs/gnome/gtksourceview/Makefile.am,v retrieving revision 1.5 diff -u -p -r1.5 Makefile.am --- Makefile.am 25 May 2003 23:47:05 -0000 1.5 +++ Makefile.am 30 Nov 2005 15:11:53 -0000 @@ -14,6 +14,7 @@ EXTRA_DIST = \ intltool-merge.in \ intltool-update.in \ gtksourceview-1.0.pc.in \ + gtksourceview-zip.in \ HACKING \ MAINTAINERS \ TODO Index: configure.in =================================================================== RCS file: /cvs/gnome/gtksourceview/configure.in,v retrieving revision 1.101 diff -u -p -r1.101 configure.in --- configure.in 14 Nov 2005 17:55:04 -0000 1.101 +++ configure.in 30 Nov 2005 15:11:53 -0000 @@ -104,6 +104,7 @@ GTK_DOC_CHECK([1.0]) AC_CONFIG_FILES([ gtksourceview-1.0.pc Makefile +gtksourceview-zip po/Makefile.in gtksourceview/Makefile gtksourceview/gnu-regex/Makefile Index: gtksourceview/Makefile.am =================================================================== RCS file: /cvs/gnome/gtksourceview/gtksourceview/Makefile.am,v retrieving revision 1.18 diff -u -p -r1.18 Makefile.am --- gtksourceview/Makefile.am 14 Nov 2005 17:18:18 -0000 1.18 +++ gtksourceview/Makefile.am 30 Nov 2005 15:11:53 -0000 @@ -7,6 +7,7 @@ REGEX_LIBS = endif INCLUDES = \ + -DPREFIX=\""$(prefix)"\" \ -DDATADIR=\""$(datadir)"\" \ -DG_LOG_DOMAIN=\"GtkSourceView\"\ -I$(top_srcdir) -I$(srcdir) \ Index: gtksourceview/gtksourcelanguage.c =================================================================== RCS file: /cvs/gnome/gtksourceview/gtksourceview/gtksourcelanguage.c,v retrieving revision 1.13 diff -u -p -r1.13 gtksourcelanguage.c --- gtksourceview/gtksourcelanguage.c 14 Nov 2005 17:18:18 -0000 1.13 +++ gtksourceview/gtksourcelanguage.c 30 Nov 2005 15:11:58 -0000 @@ -22,10 +22,12 @@ #endif #include +#include #include #include +#include #include "gtksourcelanguage-private.h" #include "gtksourcelanguage.h" @@ -66,13 +68,19 @@ _gtk_source_language_new_from_file (cons { GtkSourceLanguage *lang = NULL; - xmlTextReaderPtr reader; + xmlTextReaderPtr reader = NULL; gint ret; - + int fd; + g_return_val_if_fail (filename != NULL, NULL); g_return_val_if_fail (lm != NULL, NULL); - reader = xmlNewTextReaderFilename (filename); + /* + * Use fd instead of filename so that it's utf8 safe on w32. + */ + fd = g_open (filename, O_RDONLY, 0); + if (fd != -1) + reader = xmlReaderForFd (fd, filename, NULL, 0); if (reader != NULL) { @@ -103,7 +111,8 @@ _gtk_source_language_new_from_file (cons } xmlFreeTextReader (reader); - + close (fd); + if (ret != 0) { g_warning("Failed to parse '%s'", filename); @@ -119,7 +128,6 @@ _gtk_source_language_new_from_file (cons return lang; } - GType gtk_source_language_get_type (void) { @@ -471,14 +479,20 @@ gtk_source_language_get_mime_types (GtkS static GSList * get_mime_types_from_file (GtkSourceLanguage *language) { - xmlTextReaderPtr reader; + xmlTextReaderPtr reader = NULL; gint ret; GSList *mime_types = NULL; + int fd; g_return_val_if_fail (GTK_IS_SOURCE_LANGUAGE (language), NULL); g_return_val_if_fail (language->priv->lang_file_name != NULL, NULL); - reader = xmlNewTextReaderFilename (language->priv->lang_file_name); + /* + * Use fd instead of filename so that it's utf8 safe on w32. + */ + fd = g_open (language->priv->lang_file_name, O_RDONLY, 0); + if (fd != -1) + reader = xmlReaderForFd (fd, language->priv->lang_file_name, NULL, 0); if (reader != NULL) { @@ -538,7 +552,8 @@ get_mime_types_from_file (GtkSourceLangu } xmlFreeTextReader (reader); - + close (fd); + if (ret != 0) { g_warning("Failed to parse '%s'", language->priv->lang_file_name); @@ -1130,7 +1145,26 @@ language_file_parse (GtkSourceLanguage * xmlKeepBlanksDefault (0); + /* + * Use of filename is not ut8 safe on w32, so read + * the whole file there. + */ +#ifndef G_OS_WIN32 doc = xmlParseFile (language->priv->lang_file_name); +#else + { + gchar *file_contents; + gsize file_length; + + if (g_file_get_contents (language->priv->lang_file_name, + &file_contents, &file_length, NULL)) { + doc = xmlParseMemory (file_contents, file_length); + g_free (file_contents); + } else { + doc = NULL; + } + } +#endif if (doc == NULL) { g_warning ("Impossible to parse file '%s'",