-- Tambet Ingo <tambet@ximian.com> |
? autom4te-2.53.cache ? fontconfig.diff ? stamp-h1 ? tests/fonts ? tests/fonts.c Index: ChangeLog =================================================================== RCS file: /cvs/gnome/libgnomeprint/ChangeLog,v retrieving revision 1.174 diff -u -r1.174 ChangeLog --- ChangeLog 19 Sep 2002 02:27:35 -0000 1.174 +++ ChangeLog 31 Oct 2002 14:32:12 -0000 @@ -1,3 +1,15 @@ +2002-10-31 Tambet Ingo <tambet@ximian.com> + + * tests/Makefile.am (SUBDIRS): Added build instructions for new test called fonts.c + + * libgnomeprint/drivers/Makefile.am: s/libexec/plugin/ + + * libgnomeprint/transports/Makefile.am: ditto. + + * configure.in: Add checks for fontconfig. + + * libgnomeprint/gnome-fontmap.c: Use fontconfig to get fonts. + 2002-09-18 Chema Celorio <chema@ximian.com> * libgnomeprint/Makefile.am (libgnomeprintincdir): fix the second part of #93271 Index: configure.in =================================================================== RCS file: /cvs/gnome/libgnomeprint/configure.in,v retrieving revision 1.199 diff -u -r1.199 configure.in --- configure.in 1 Sep 2002 16:20:55 -0000 1.199 +++ configure.in 31 Oct 2002 14:32:13 -0000 @@ -85,7 +85,8 @@ libart_modules="libart-2.0 >= 2.3.7" pango_modules="pango >= 0.21" libxml2_modules="libxml-2.0 >= 2.4.23" -PKG_CHECK_MODULES(GP, [ $glib_modules $libart_modules $pango_modules $libxml2_modules $libbonobo_modules ]) +fontconfig_modules="fontconfig >= 1.0" +PKG_CHECK_MODULES(GP, [ $glib_modules $libart_modules $pango_modules $libxml2_modules $libbonobo_modules $fontconfig_modules ]) AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal) Index: libgnomeprint/gnome-fontmap.c =================================================================== RCS file: /cvs/gnome/libgnomeprint/libgnomeprint/gnome-fontmap.c,v retrieving revision 1.23 diff -u -r1.23 gnome-fontmap.c --- libgnomeprint/gnome-fontmap.c 29 Aug 2002 17:12:47 -0000 1.23 +++ libgnomeprint/gnome-fontmap.c 31 Oct 2002 14:32:14 -0000 @@ -29,11 +29,7 @@ #include <time.h> #include <stdlib.h> #include <string.h> -#include <dirent.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <libxml/parser.h> -#include <libxml/xmlmemory.h> +#include <fontconfig/fontconfig.h> #include "gnome-fontmap.h" /* @@ -46,27 +42,15 @@ */ static GPFontMap *gp_fontmap_load (void); -static void gp_fontmap_load_dir (GPFontMap *map, const guchar *dirname); -static void gp_fontmap_load_file (GPFontMap *map, const guchar *filename); -static void gp_fm_load_font_2_0_type1 (GPFontMap *map, xmlNodePtr node); -static void gp_fm_load_font_2_0_type1alias (GPFontMap *map, xmlNodePtr node); -static void gp_fm_load_font_2_0_truetype (GPFontMap *map, xmlNodePtr node); -static void gp_font_entry_2_0_load_data (GPFontEntry *e, xmlNodePtr node); -static void gp_font_entry_2_0_type1_load_files (GPFontEntryT1 *t1, xmlNodePtr node); -static void gp_font_entry_2_0_truetype_load_files (GPFontEntryTT *tt, xmlNodePtr node); -static void gp_fm_load_fonts_2_0 (GPFontMap * map, xmlNodePtr root); static void gp_fontmap_ref (GPFontMap * map); static void gp_fontmap_unref (GPFontMap * map); static void gp_family_entry_ref (GPFamilyEntry * entry); static void gp_family_entry_unref (GPFamilyEntry * entry); -static gchar * gp_xmlGetPropString (xmlNodePtr node, const gchar * name); static gint gp_fe_sortname (gconstpointer a, gconstpointer b); static gint gp_fe_sortspecies (gconstpointer a, gconstpointer b); static gint gp_familyentry_sortname (gconstpointer a, gconstpointer b); -static gchar * gp_fm_get_species_name (const gchar * fullname, const gchar * familyname); -static gboolean gp_fm_is_changed (GPFontMap * map); /* Fontlist -> FontMap */ static GHashTable * fontlist2map = NULL; @@ -81,7 +65,7 @@ if (map) { /* If > 1 sec is passed from last query, check timestamps */ - if ((time (NULL) > lastaccess) && gp_fm_is_changed (map)) { + if ((time (NULL) > lastaccess)) { /* Any directory is changed, so force rereading of map */ gp_fontmap_release (map); map = NULL; @@ -168,13 +152,161 @@ } } +static GnomeFontWeight +convert_fc_weight (gint i) +{ + if (i < FC_WEIGHT_LIGHT) + return GNOME_FONT_LIGHTEST; + if (i < (FC_WEIGHT_LIGHT + FC_WEIGHT_MEDIUM) / 2) + return GNOME_FONT_LIGHT; + if (i < (FC_WEIGHT_MEDIUM + FC_WEIGHT_DEMIBOLD) / 2) + return GNOME_FONT_REGULAR; + if (i < (FC_WEIGHT_DEMIBOLD + FC_WEIGHT_BOLD) / 2) + return GNOME_FONT_DEMI; + if (i < (FC_WEIGHT_BOLD + FC_WEIGHT_BLACK) / 2) + return GNOME_FONT_BOLD; + + return GNOME_FONT_HEAVIEST; +} + +static GPFontEntry * +fcpattern_to_gp_font_entry (FcPattern *font) +{ + GPFontEntry *e; + GPFontEntryTT *tt; + FcResult result; + FcChar8 *str; + int i; + + tt = g_new0 (GPFontEntryTT, 1); + e = (GPFontEntry *)tt; + + e->type = GP_FONT_ENTRY_TRUETYPE; + e->refcount = 1; + e->face = NULL; + + result = FcPatternGetString (font, FC_FAMILY, 0, &str); + if (result == FcResultMatch) + e->familyname = g_strdup (str); + + result = FcPatternGetString (font, FC_STYLE, 0, &str); + if (result == FcResultMatch) { + e->speciesname = g_strdup (str); + e->weight = g_strdup (str); + } + + result = FcPatternGetInteger (font, FC_WEIGHT, 0, &i); + if (result == FcResultMatch) + e->Weight = convert_fc_weight (i); + else + e->Weight = GNOME_FONT_REGULAR; + + e->version = g_strdup ("1.0"); + + e->name = g_strdup_printf ("%s %s", e->familyname, e->weight); + e->psname = g_strdup_printf ("%s-%s", e->familyname, e->weight); + + result = FcPatternGetInteger (font, FC_SLANT, 0, &i); + if (result == FcResultMatch) + e->ItalicAngle = i; + + result = FcPatternGetString (font, FC_FILE, 0, &str); + if (result == FcResultMatch) + tt->ttf.name = g_strdup (str); + + return e; +} + +static GPFontEntry * +fcpattern_to_gp_font_entry_alias (FcPattern *font, const gchar *family, const gchar *style) +{ + GPFontEntry *e; + + e = fcpattern_to_gp_font_entry (font); + + /* Override font name and style */ + if (e->name) + g_free (e->name); + if (e->psname) + g_free (e->psname); + + e->name = g_strdup_printf ("%s %s", family, style); + e->psname = g_strdup_printf ("%s-%s", family, style); + + return e; +} + +/* Add well-known aliases Sans Sans-Serif and Monospace */ +static void +gp_fontmap_add_aliases (GPFontMap *map) +{ + FcPattern *match_pattern, *result_pattern; + GPFontEntry *e; + gchar *aliases[] = { "Sans", "Serif", "Monospace", NULL }; + gchar *styles[] = { "Regular", "Bold", "Italic", "Bold Italic", NULL }; + FcResult res; + gint i, j; + + for (i = 0; aliases[i]; i++) { + for (j = 0; styles[j]; j++) { + match_pattern = FcPatternBuild (NULL, + FC_FAMILY, FcTypeString, aliases[i], + FC_STYLE, FcTypeString, styles[j], + NULL); + + FcConfigSubstitute (NULL, match_pattern, FcMatchPattern); + FcDefaultSubstitute (match_pattern); + + g_assert (match_pattern); + + result_pattern = FcFontMatch (NULL, match_pattern, &res); + if (result_pattern) { + e = fcpattern_to_gp_font_entry_alias (result_pattern, aliases[i], styles[j]); + if (e) { + g_hash_table_insert (map->fontdict, e->name, e); + map->num_fonts++; + map->fonts = g_slist_prepend (map->fonts, e); + } + + FcPatternDestroy (result_pattern); + } + + FcPatternDestroy (match_pattern); + } + } +} + +static void +gp_fontmap_load_fontconfig (GPFontMap *map) +{ + FcFontSet *fontset; + FcPattern *font; + GPFontEntry *e; + int i; + + fontset = FcConfigGetFonts (NULL, FcSetSystem); + if (fontset == NULL) { + return; + } + + for (i = 0; i < fontset->nfont; i++) { + font = fontset->fonts[i]; + + e = fcpattern_to_gp_font_entry (font); + if (e) { + g_hash_table_insert (map->fontdict, e->name, e); + map->num_fonts++; + map->fonts = g_slist_prepend (map->fonts, e); + } + } + + gp_fontmap_add_aliases (map); +} + static GPFontMap * gp_fontmap_load (void) { GPFontMap *map; - struct stat s; - const gchar *homedir; - gchar *mapdir; GSList * l; map = g_new (GPFontMap, 1); @@ -194,42 +326,7 @@ map->defaults = NULL; map->defaultsdict = g_hash_table_new (g_str_hash, g_str_equal); - /* User map */ - homedir = g_get_home_dir (); - mapdir = g_strdup_printf ("%s/.gnome/fonts", homedir); - if (!stat (mapdir, &s) && S_ISDIR (s.st_mode)) { - map->mtime_user = s.st_mtime; - gp_fontmap_load_dir (map, mapdir); - } - g_free (mapdir); - /* Dynamic map */ - if (!stat (FONTMAPDIR_DYNAMIC, &s) && S_ISDIR (s.st_mode)) { - map->mtime_dynamic = s.st_mtime; - gp_fontmap_load_dir (map, FONTMAPDIR_DYNAMIC); - } - /* Static map */ - if (!stat (FONTMAPDIR_STATIC, &s) && S_ISDIR (s.st_mode)) { - map->mtime_static = s.st_mtime; - gp_fontmap_load_dir (map, FONTMAPDIR_STATIC); - } - - /* Sanity check */ - if (map->num_fonts < 24) { - /* Less than 24 fonts means, you do not have PS ones */ - if (!stat (DATADIR "/fonts/fontmap2", &s) && S_ISREG (s.st_mode)) { - gp_fontmap_load_file (map, DATADIR "/fonts/fontmap2"); - } - } - /* More sanity check */ - if (map->num_fonts < 24) { - gchar *filename; - /* Less than 24 fonts means, you do not have PS ones */ - filename = g_strdup_printf ("%s/.gnome/fonts/fontmap", homedir); - if (!stat (filename, &s) && S_ISREG (s.st_mode)) { - gp_fontmap_load_file (map, filename); - } - g_free (filename); - } + gp_fontmap_load_fontconfig (map); /* Sort fonts alphabetically */ map->fonts = g_slist_sort (map->fonts, gp_fe_sortname); @@ -319,369 +416,6 @@ return map; } -static gint -gp_fontmap_compare_names (gconstpointer a, gconstpointer b) -{ - if (!strcmp (a, "gnome-print.fontmap")) return -1; - if (!strcmp (b, "gnome-print.fontmap")) return 1; - return strcmp (a, b); -} - -/* Tries to load all *.fontmap files from given directory */ - -static void -gp_fontmap_load_dir (GPFontMap *map, const guchar *dirname) -{ - DIR *dir; - struct dirent *dent; - - dir = opendir (dirname); - - if (dir) { - GSList *files; - files = NULL; - while ((dent = readdir (dir))) { - gint len; - len = strlen (dent->d_name); - if ((len > 8) && !strcmp (dent->d_name + len - 8, ".fontmap")) { - /* Seems to be what we are looking for */ - files = g_slist_prepend (files, g_strdup (dent->d_name)); - } - } - closedir (dir); - /* Sort names alphabetically */ - files = g_slist_sort (files, gp_fontmap_compare_names); - while (files) { - struct stat s; - gchar *filename; - filename = g_strdup_printf ("%s/%s", dirname, (gchar *) files->data); - g_free (files->data); - if (!stat (filename, &s) && S_ISREG (s.st_mode)) { - gp_fontmap_load_file (map, filename); - } - g_free (filename); - files = g_slist_remove (files, files->data); - } - } -} - -/* Parse file, and add fonts to map, if it is valid fontmap */ - -static void -gp_fontmap_load_file (GPFontMap *map, const guchar *filename) -{ - xmlDocPtr doc; - - doc = xmlParseFile (filename); - if (doc) { - xmlNodePtr root; - /* In minimum we are valid xml file */ - root = xmlDocGetRootElement (doc); - if (root && !strcmp (root->name, "fontmap")) { - xmlChar *version; - /* We are really fontmap */ - version = xmlGetProp (root, "version"); - if (version) { - if (!strcmp (version, "2.0")) { - xmlChar *test; - gboolean try; - /* We are even right version */ - try = TRUE; - test = xmlGetProp (root, "test"); - if (test) { - struct stat s; - if (stat (test, &s) || !S_ISREG (s.st_mode)) try = FALSE; - xmlFree (test); - } - if (try) gp_fm_load_fonts_2_0 (map, root); - } - xmlFree (version); - } - } - xmlFreeDoc (doc); - } -} - -/* Parse root element and build fontmap step 1 */ - -static void -gp_fm_load_fonts_2_0 (GPFontMap * map, xmlNodePtr root) -{ - xmlNodePtr child; - - for (child = root->xmlChildrenNode; child != NULL; child = child->next) { - if (!strcmp (child->name, "font")) { - xmlChar *format; - /* We are font */ - format = xmlGetProp (child, "format"); - if (format) { - if (!strcmp (format, "type1")) { - /* We are type1/type1alias entry */ - gp_fm_load_font_2_0_type1 (map, child); - } else if (!strcmp (format, "type1alias")) { - /* We are type1/type1alias entry */ - gp_fm_load_font_2_0_type1alias (map, child); - } else if (!strcmp (format, "truetype")) { - /* We are truetype entry */ - gp_fm_load_font_2_0_truetype (map, child); - } - xmlFree (format); - } - } else if (!strcmp (child->name, "default")) { - xmlChar *font; - font = xmlGetProp (child, "font"); - if (font) { - xmlChar *locales; - guchar *loc; - GSList *l; - locales = xmlGetProp (child, "locales"); - loc = (locales) ? g_strdup (locales) : g_strdup ("C"); - /* fixme: This is not nice (Lauris) */ - l = g_slist_prepend (NULL, g_strdup (font)); - l = g_slist_prepend (l, loc); - map->defaults = g_slist_prepend (map->defaults, l); - if (locales) xmlFree (locales); - xmlFree (font); - } - } - } -} - -static void -gp_fm_load_font_2_0_type1 (GPFontMap *map, xmlNodePtr node) -{ - GPFontEntryT1 *t1; - GPFontEntry *e; - xmlChar *xmlname, *t; - - /* Get our unique name */ - xmlname = xmlGetProp (node, "name"); - /* Check, whether we are already registered */ - if (g_hash_table_lookup (map->fontdict, xmlname)) { - xmlFree (xmlname); - return; - } - - t1 = g_new0 (GPFontEntryT1, 1); - e = (GPFontEntry *) t1; - - e->type = GP_FONT_ENTRY_TYPE1; - e->refcount = 1; - e->face = NULL; - e->name = g_strdup (xmlname); - xmlFree (xmlname); - - gp_font_entry_2_0_load_data (e, node); - gp_font_entry_2_0_type1_load_files (t1, node); - if (!e->familyname || !e->psname || !t1->pfb.name) { - gp_font_entry_unref (e); - return; - } - - e->Weight = gp_fontmap_lookup_weight (e->weight); - - if (!e->speciesname) { - e->speciesname = gp_fm_get_species_name (e->name, e->familyname); - } - - t = xmlGetProp (node, "italicangle"); - if (t == NULL) { - gchar *p; - p = strstr (e->speciesname, "Italic"); - if (!p) p = strstr (e->speciesname, "Oblique"); - e->ItalicAngle = p ? -10.0 : 0.0; - } else { - e->ItalicAngle = atof (t); - xmlFree (t); - } - - g_hash_table_insert (map->fontdict, e->name, e); - map->num_fonts++; - map->fonts = g_slist_prepend (map->fonts, e); -} - -static void -gp_fm_load_font_2_0_type1alias (GPFontMap *map, xmlNodePtr node) -{ - GPFontEntryT1Alias *t1a; - GPFontEntryT1 *t1; - GPFontEntry *e; - xmlChar *xmlname, *xmlalias, *t; - - /* Get our unique name */ - xmlname = xmlGetProp (node, "name"); - /* Check, whether we are already registered */ - if (g_hash_table_lookup (map->fontdict, xmlname)) { - xmlFree (xmlname); - return; - } - /* Get our alternate PS name */ - xmlalias = xmlGetProp (node, "alias"); - if (!xmlalias) { - xmlFree (xmlname); - return; - } - - t1a = g_new0 (GPFontEntryT1Alias, 1); - t1 = (GPFontEntryT1 *) t1a; - e = (GPFontEntry *) t1a; - - e->type = GP_FONT_ENTRY_TYPE1_ALIAS; - e->refcount = 1; - e->face = NULL; - e->name = g_strdup (xmlname); - xmlFree (xmlname); - t1a->alias = g_strdup (xmlalias); - xmlFree (xmlalias); - - gp_font_entry_2_0_load_data (e, node); - gp_font_entry_2_0_type1_load_files (t1, node); - if (!e->familyname || !e->psname || !t1->pfb.name) { - gp_font_entry_unref (e); - return; - } - - e->Weight = gp_fontmap_lookup_weight (e->weight); - - if (!e->speciesname) { - e->speciesname = gp_fm_get_species_name (e->name, e->familyname); - } - - t = xmlGetProp (node, "italicangle"); - if (t == NULL) { - gchar *p; - p = strstr (e->speciesname, "Italic"); - if (!p) p = strstr (e->speciesname, "Oblique"); - e->ItalicAngle = p ? -10.0 : 0.0; - } else { - e->ItalicAngle = atof (t); - xmlFree (t); - } - - g_hash_table_insert (map->fontdict, e->name, e); - map->num_fonts++; - map->fonts = g_slist_prepend (map->fonts, e); -} - -static void -gp_fm_load_font_2_0_truetype (GPFontMap *map, xmlNodePtr node) -{ - GPFontEntryTT *tt; - GPFontEntry *e; - xmlChar *xmlname, *t; - - /* Get our unique name */ - xmlname = xmlGetProp (node, "name"); - /* Check, whether we are already registered */ - if (g_hash_table_lookup (map->fontdict, xmlname)) { - xmlFree (xmlname); - return; - } - - tt = g_new0 (GPFontEntryTT, 1); - e = (GPFontEntry *) tt; - - e->type = GP_FONT_ENTRY_TRUETYPE; - e->refcount = 1; - e->face = NULL; - e->name = g_strdup (xmlname); - xmlFree (xmlname); - - gp_font_entry_2_0_load_data (e, node); - gp_font_entry_2_0_truetype_load_files (tt, node); - if (!e->familyname || !e->psname || !tt->ttf.name) { - gp_font_entry_unref (e); - return; - } - - e->Weight = gp_fontmap_lookup_weight (e->weight); - - if (!e->speciesname) { - e->speciesname = gp_fm_get_species_name (e->name, e->familyname); - } - - t = xmlGetProp (node, "italicangle"); - if (t == NULL) { - gchar *p; - p = strstr (e->speciesname, "Italic"); - if (!p) p = strstr (e->speciesname, "Oblique"); - e->ItalicAngle = p ? -10.0 : 0.0; - } else { - e->ItalicAngle = atof (t); - xmlFree (t); - } - - t = xmlGetProp (node, "subface"); - tt->facenum = (t) ? atoi (t) : 0; - if (t) xmlFree (t); - - g_hash_table_insert (map->fontdict, e->name, e); - map->num_fonts++; - map->fonts = g_slist_prepend (map->fonts, e); -} - -/* Loads common font property data */ - -static void -gp_font_entry_2_0_load_data (GPFontEntry *e, xmlNodePtr node) -{ - /* fixme: We could do some checking here to save alloc/free calls */ - /* name is parsed by parent */ - e->version = gp_xmlGetPropString (node, "version"); - e->familyname = gp_xmlGetPropString (node, "familyname"); - e->speciesname = gp_xmlGetPropString (node, "speciesname"); - e->psname = gp_xmlGetPropString (node, "psname"); - /* Read Weight attribute */ - e->weight = gp_xmlGetPropString (node, "weight"); - if (!e->weight) e->weight = g_strdup ("Book"); -} - -/* Loads "afm" and "pfb" file nodes */ - -static void -gp_font_entry_2_0_type1_load_files (GPFontEntryT1 *t1, xmlNodePtr node) -{ - xmlNodePtr child; - - for (child = node->xmlChildrenNode; child != NULL; child = child->next) { - /* Scan all children nodes */ - if (!strcmp (child->name, "file")) { - xmlChar *type; - /* We are <file> node */ - type = xmlGetProp (child, "type"); - if (type && !strcmp (type, "afm") && !t1->afm.name) { - t1->afm.name = gp_xmlGetPropString (child, "path"); - } else if (type && !strcmp (type, "pfb") && !t1->pfb.name) { - t1->pfb.name = gp_xmlGetPropString (child, "path"); - } - if (type) xmlFree (type); - } - if (t1->afm.name && t1->pfb.name) return; - } -} - -/* Loads "afm" and "pfb" file nodes */ - -static void -gp_font_entry_2_0_truetype_load_files (GPFontEntryTT *tt, xmlNodePtr node) -{ - xmlNodePtr child; - - for (child = node->xmlChildrenNode; child != NULL; child = child->next) { - /* Scan all children nodes */ - if (!strcmp (child->name, "file")) { - xmlChar *type; - /* We are <file> node */ - type = xmlGetProp (child, "type"); - if (type && !strcmp (type, "ttf") && !tt->ttf.name) { - tt->ttf.name = gp_xmlGetPropString (child, "path"); - } - if (type) xmlFree (type); - } - if (tt->ttf.name) return; - } -} - /* This is experimental method (not public anyways) (Lauris) */ GPFontEntry *gp_font_entry_from_files (GPFontMap *map, @@ -761,6 +495,7 @@ GPFontEntryT1 *t1; GPFontEntryT1Alias *t1a; GPFontEntrySpecial *s; + GPFontEntryTT *tt; g_return_if_fail (entry->face == NULL); @@ -782,6 +517,10 @@ break; case GP_FONT_ENTRY_ALIAS: break; + case GP_FONT_ENTRY_TRUETYPE: + tt = (GPFontEntryTT *) entry; + if (tt->ttf.name) g_free (tt->ttf.name); + break; case GP_FONT_ENTRY_SPECIAL: s = (GPFontEntrySpecial *) entry; if (s->file.name) g_free (s->file.name); @@ -880,26 +619,6 @@ gp_fontmap_unref (map); } -/* - * Returns newly allocated string or NULL - */ - -static gchar * -gp_xmlGetPropString (xmlNodePtr node, const gchar * name) -{ - xmlChar * prop; - gchar * str; - - prop = xmlGetProp (node, name); - if (prop) { - str = g_strdup (prop); - xmlFree (prop); - return str; - } - - return NULL; -} - static gint gp_fe_sortname (gconstpointer a, gconstpointer b) { @@ -918,24 +637,6 @@ return strcasecmp (((GPFamilyEntry *) a)->name, ((GPFamilyEntry *) b)->name); } -static gchar * -gp_fm_get_species_name (const gchar * fullname, const gchar * familyname) -{ - gchar * p; - - p = strstr (fullname, familyname); - - if (!p) return g_strdup ("Normal"); - - p = p + strlen (familyname); - - while (*p && (*p < 'A')) p++; - - if (!*p) return g_strdup ("Normal"); - - return g_strdup (p); -} - GnomeFontWeight gp_fontmap_lookup_weight (const gchar * weight) { @@ -980,43 +681,4 @@ wcode = GPOINTER_TO_INT (g_hash_table_lookup (weights, weight)); return wcode; -} - -/* - * This is not correct, if you only edit some file, - * but I do not want to keep timestamps for all fontmaps - * files. So please touch directory, after editing - * files manually. - */ - -static gboolean -gp_fm_is_changed (GPFontMap * map) -{ - struct stat s; - const gchar *homedir; - gchar *userdir; - - homedir = g_get_home_dir (); - if (homedir) { - userdir = g_strdup_printf ("%s/.gnome/fonts", homedir); - if (!stat (userdir, &s) && !S_ISDIR (s.st_mode)) { - /* User dir does not exist */ - g_free (userdir); - if (s.st_mtime != map->mtime_user) return TRUE; - } else { - g_free (userdir); - } - } - - if (!stat (FONTMAPDIR_DYNAMIC, &s) && S_ISDIR (s.st_mode)) { - /* Dynamic dir exists */ - if (s.st_mtime != map->mtime_dynamic) return TRUE; - } - - if (!stat (FONTMAPDIR_STATIC, &s) && S_ISDIR (s.st_mode)) { - /* Static dir exists */ - if (s.st_mtime != map->mtime_static) return TRUE; - } - - return FALSE; } Index: libgnomeprint/drivers/Makefile.am =================================================================== RCS file: /cvs/gnome/libgnomeprint/libgnomeprint/drivers/Makefile.am,v retrieving revision 1.8 diff -u -r1.8 Makefile.am --- libgnomeprint/drivers/Makefile.am 26 Aug 2002 04:28:47 -0000 1.8 +++ libgnomeprint/drivers/Makefile.am 31 Oct 2002 14:32:23 -0000 @@ -11,7 +11,7 @@ libgnomeprint_fax_la_LDFLAGS = -version-info 0:0:0 -module libgnomeprint_fax_la_LIBADD = -libexecdir = $(GNOME_PRINT_MODULES_DIR)/drivers +plugindir = $(GNOME_PRINT_MODULES_DIR)/drivers if HAVE_OMNI omni_libraries = $(OMNI2_LIB) @@ -23,7 +23,7 @@ omni_libadd = endif -libexec_LTLIBRARIES = \ +plugin_LTLIBRARIES = \ $(FAX_LIB) \ $(omni_libraries) noinst_LTLIBRARIES = Index: libgnomeprint/transports/Makefile.am =================================================================== RCS file: /cvs/gnome/libgnomeprint/libgnomeprint/transports/Makefile.am,v retrieving revision 1.10 diff -u -r1.10 Makefile.am --- libgnomeprint/transports/Makefile.am 29 Aug 2002 17:12:50 -0000 1.10 +++ libgnomeprint/transports/Makefile.am 31 Oct 2002 14:32:23 -0000 @@ -1,5 +1,5 @@ -libexecdir = $(GNOME_PRINT_MODULES_DIR)/transports -libexec_LTLIBRARIES = \ +plugindir = $(GNOME_PRINT_MODULES_DIR)/transports +plugin_LTLIBRARIES = \ $(FILE_LIB) \ $(LPR_LIB) \ $(CUSTOM_LIB) Index: tests/Makefile.am =================================================================== RCS file: /cvs/gnome/libgnomeprint/tests/Makefile.am,v retrieving revision 1.27 diff -u -r1.27 Makefile.am --- tests/Makefile.am 29 Aug 2002 21:04:43 -0000 1.27 +++ tests/Makefile.am 31 Oct 2002 14:32:23 -0000 @@ -2,7 +2,7 @@ CFLAGS=$(WARN_CFLAGS) -noinst_PROGRAMS = generate gpa-test +noinst_PROGRAMS = generate gpa-test fonts INCLUDES = \ -I$(top_srcdir) \ @@ -24,3 +24,7 @@ gpa_test_LDFLAGS = gpa_test_DEPENDENCIES = $(DEPS) gpa_test_LDADD = $(print_libs) + +fonts_SOURCES = fonts.c +fonts_LDFLAGS = +fonts_LDADD = $(print_libs)
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * fonts.c: test functions for the libgpa config database * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Authors: * Tambet Ingo <tambet@ximian.com> * * Copyright (C) 2002 Ximian Inc. and authors * */ #include <popt.h> #include <glib.h> #include <libgnomeprint/gnome-font.h> gboolean dump_list = FALSE; gboolean dump_long_list = FALSE; static struct poptOption options[] = { { "list", 'l', POPT_ARG_NONE, &dump_list, 0, "List fonts gnome-print knows about (Default action)", NULL}, { "list-full", 'f', POPT_ARG_NONE, &dump_long_list, 0, "Dump full list of fonts and their properties", NULL}, POPT_AUTOHELP { NULL } }; static void print_short_list (void) { GList *list, *tmp; gchar *font; tmp = list = gnome_font_list (); while (tmp) { font = tmp->data; tmp = tmp->next; g_print ("%s\n", font); } gnome_font_list_free (list); } static void print_long_list (void) { g_print ("You think it's that easy? :)\n"); } int main (int argc, char *argv[]) { poptContext popt; popt = poptGetContext ("test", argc, argv, options, 0); poptGetNextOpt (popt); if (dump_long_list) print_long_list (); else print_short_list (); poptFreeContext (popt); return 0; }