summaryrefslogtreecommitdiff
path: root/pango/mini-xft/minixftdir.c
diff options
context:
space:
mode:
authorAlexander Larsson <alla@lysator.liu.se>2001-11-18 16:06:02 +0000
committerAlexander Larsson <alexl@src.gnome.org>2001-11-18 16:06:02 +0000
commit0766534429b5830716e782418179ea63f8f1f65d (patch)
tree1ab6b8c50e572af8320c8f3623b8135276c010f6 /pango/mini-xft/minixftdir.c
parentb12c0fb6263fd542bb03f8bb10076a0653694f12 (diff)
downloadpango-0766534429b5830716e782418179ea63f8f1f65d.tar.gz
Check for LEX and YACC. This will be made optional later, with the build
2001-11-17 Alexander Larsson <alla@lysator.liu.se> * configure.in: Check for LEX and YACC. This will be made optional later, with the build sources checked in to cvs. Generate pango/mini-xft/Makefile * modules/basic/basic-ft2.c: Use the new pangoft2 API. * pango/Makefile.am: Build mini-xft. Add new files. * pango/pango-context.[ch]: Support only one fontmap per context. Use pango_font_map_load_fontset() and PangoFontset instead of internal fontset. * pango/pango-fontmap.[ch]: New virtual function pango_font_map_load_fontset() and default implementation that uses pango_font_map_load_font(). * pango/pango-utils.[ch] (pango_lookup_aliases): Utility function for looking up aliases. This can be used by backend that has no backend specific aliases. * pango/pangoft2-fontcache.c: Removed file. * pango/pangoft2-fontmap.c: * pango/pangoft2-private.h: * pango/pangoft2.c: * pango/pangoft2.h: Major rewrite. Doesn't handle fontsets. Uses mini-xft so that it will always match the PangoXft backend. Simplified the public API. * pango/pangowin32.c: * pango/pangox.c: pango_context_add_font_map -> pango_context_set_font_map * pango/pangoxft-font.c: * pango/pangoxft-fontmap.c: * pango/pangoxft-private.h: New code to handle fontsets. * pango/mini-xft/*: Mini version of libXft from XFree86 in order to have the pangoFT2 and pangXft backends have same config files and generate the same fonts.
Diffstat (limited to 'pango/mini-xft/minixftdir.c')
-rw-r--r--pango/mini-xft/minixftdir.c136
1 files changed, 136 insertions, 0 deletions
diff --git a/pango/mini-xft/minixftdir.c b/pango/mini-xft/minixftdir.c
new file mode 100644
index 00000000..c6eacb10
--- /dev/null
+++ b/pango/mini-xft/minixftdir.c
@@ -0,0 +1,136 @@
+/*
+ * $XFree86: xc/lib/MiniXft/xftdir.c,v 1.3 2001/05/16 10:32:54 keithp Exp $
+ *
+ * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <dirent.h>
+#include <stdlib.h>
+#include <string.h>
+#include "minixftint.h"
+
+Bool
+MiniXftDirScan (MiniXftFontSet *set, const char *dir, Bool force)
+{
+ DIR *d;
+ struct dirent *e;
+ char *file;
+ char *base;
+ MiniXftPattern *font;
+ char *name;
+ int count;
+ Bool ret = True;
+ int id;
+
+ file = (char *) malloc (strlen (dir) + 1 + 256 + 1);
+ if (!file)
+ return False;
+
+ strcpy (file, dir);
+ strcat (file, "/");
+ base = file + strlen (file);
+ if (!force)
+ {
+ strcpy (base, "MiniXftCache");
+
+ if (MiniXftFileCacheReadDir (set, file))
+ {
+ free (file);
+ return True;
+ }
+ }
+
+ d = opendir (dir);
+ if (!d)
+ {
+ free (file);
+ return False;
+ }
+ while (ret && (e = readdir (d)))
+ {
+ if (e->d_name[0] != '.')
+ {
+ id = 0;
+ strcpy (base, e->d_name);
+ do
+ {
+ if (!force)
+ name = MiniXftFileCacheFind (file, id, &count);
+ else
+ name = 0;
+ if (name)
+ {
+ font = MiniXftNameParse (name);
+ if (font)
+ MiniXftPatternAddString (font, XFT_FILE, file);
+ }
+ else
+ {
+ font = MiniXftFreeTypeQuery (file, id, &count);
+ if (font && !force)
+ {
+ char unparse[8192];
+
+ if (MiniXftNameUnparse (font, unparse, sizeof (unparse)))
+ {
+ (void) MiniXftFileCacheUpdate (file, id, unparse);
+ }
+ }
+ }
+ if (font)
+ {
+ if (!MiniXftFontSetAdd (set, font))
+ {
+ MiniXftPatternDestroy (font);
+ font = 0;
+ ret = False;
+ }
+ }
+ id++;
+ } while (font && ret && id < count);
+ }
+ }
+ free (file);
+ closedir (d);
+ return ret;
+}
+
+Bool
+MiniXftDirSave (MiniXftFontSet *set, const char *dir)
+{
+ char *file;
+ char *base;
+ Bool ret;
+
+ file = (char *) malloc (strlen (dir) + 1 + 256 + 1);
+ if (!file)
+ return False;
+
+ strcpy (file, dir);
+ strcat (file, "/");
+ base = file + strlen (file);
+ strcpy (base, "MiniXftCache");
+ ret = MiniXftFileCacheWriteDir (set, file);
+ free (file);
+ return ret;
+}
+