]> git.wh0rd.org - fontconfig.git/blobdiff - fc-glyphname/fc-glyphname.c
Get rid of $Id$ tags
[fontconfig.git] / fc-glyphname / fc-glyphname.c
index fb18feade9ce15bb70b066b178cc7602777a6e55..e0f0a1770b2dedc279a9c5ccdd2feed8a4b364f6 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * $Id$
+ * fontconfig/fc-glyphname/fc-glyphname.c
  *
- * Copyright © 2003 Keith Packard
+ * Copyright Â© 2003 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
 
 #include "fcint.h"
 
+static int
+rawindex (const FcGlyphName *gn);
+
+static void
+scan (FILE *f, char *filename);
+
+static int
+isprime (int i);
+
+static void
+find_hash (void);
+
+static FcChar32
+FcHashGlyphName (const FcChar8 *name);
+
+static void
+insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h);
+
+static void
+dump (FcGlyphName * const *table, const char *name);
+
 static FcGlyphName *
 FcAllocGlyphName (FcChar32 ucs, FcChar8 *name)
 {
@@ -38,9 +59,13 @@ FcAllocGlyphName (FcChar32 ucs, FcChar8 *name)
 }
 
 static void 
-fatal (char *file, int lineno, char *msg)
+fatal (const char *file, int lineno, const char *msg)
 {
-    fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
+    if (lineno)
+        fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
+    else 
+       fprintf (stderr, "%s: %s\n", file, msg);
+
     exit (1);
 }
 
@@ -48,15 +73,15 @@ fatal (char *file, int lineno, char *msg)
 #define MAX_GLYPHNAME      10240
 #define MAX_NAMELEN        1024
 
-FcGlyphName *raw[MAX_GLYPHNAME];
-int        nraw;
-int        max_name_len;
-FcGlyphName *name_to_ucs[MAX_GLYPHNAME*2];
-FcGlyphName *ucs_to_name[MAX_GLYPHNAME*2];
-int        hash, rehash;
+static FcGlyphName *raw[MAX_GLYPHNAME];
+static int         nraw;
+static int         max_name_len;
+static FcGlyphName *name_to_ucs[MAX_GLYPHNAME*2];
+static FcGlyphName *ucs_to_name[MAX_GLYPHNAME*2];
+static unsigned int hash, rehash;
 
-int
-rawindex (FcGlyphName *gn)
+static int
+rawindex (const FcGlyphName *gn)
 {
     int        i;
 
@@ -66,7 +91,7 @@ rawindex (FcGlyphName *gn)
     return -1;
 }
 
-void
+static void
 scan (FILE *f, char *filename)
 {
     char           buf[MAX_NAMELEN];
@@ -84,7 +109,7 @@ scan (FILE *f, char *filename)
        gn = FcAllocGlyphName ((FcChar32) ucs, (FcChar8 *) name);
        if (!gn)
            fatal (filename, lineno, "out of memory");
-       len = strlen ((FcChar8 *) name);
+       len = strlen (name);
        if (len > max_name_len)
            max_name_len = len;
        raw[nraw++] = gn;
@@ -122,7 +147,7 @@ isqrt (int a)
     return h;
 }
 
-int
+static int
 isprime (int i)
 {
     int        l, t;
@@ -146,7 +171,7 @@ isprime (int i)
  * Find a prime pair that leaves at least 25% of the hash table empty
  */
 
-void
+static void
 find_hash (void)
 {
     int        h;
@@ -160,7 +185,7 @@ find_hash (void)
     rehash = h-2;
 }
 
-FcChar32
+static FcChar32
 FcHashGlyphName (const FcChar8 *name)
 {
     FcChar32   h = 0;
@@ -173,7 +198,7 @@ FcHashGlyphName (const FcChar8 *name)
     return h;
 }
 
-void
+static void
 insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h)
 {
     int                i, r = 0;
@@ -181,7 +206,7 @@ insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h)
     i = (int) (h % hash);
     while (table[i])
     {
-       if (!r) r = (int) (h % rehash);
+       if (!r) r = (int) (h % rehash + 1);
        i += r;
        if (i >= hash)
            i -= hash;
@@ -189,18 +214,18 @@ insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h)
     table[i] = gn;
 }
 
-void
-dump (FcGlyphName **table, char *name)
+static void
+dump (FcGlyphName * const *table, const char *name)
 {
-    int        i;
+    int            i;
     
-    printf ("static FcGlyphName        *%s[%d] = {\n", name, hash);
+    printf ("static const FcGlyphId %s[%d] = {\n", name, hash);
 
     for (i = 0; i < hash; i++)
        if (table[i])
-           printf ("(FcGlyphName *) &glyph%d,\n", rawindex(table[i]));
+           printf ("    %d,\n", rawindex(table[i]));
        else
-           printf ("0,\n");
+           printf ("    -1,\n");
     
     printf ("};\n");
 }
@@ -212,13 +237,15 @@ main (int argc, char **argv)
     char       line[1024];
     FILE       *f;
     int                i;
+    char       *type;
     
     i = 0;
-    while (*++argv)
+    while (argv[i+1])
     {
        if (i == MAX_GLYPHFILE)
            fatal (*argv, 0, "Too many glyphname files");
-       files[i++] = *argv;
+       files[i] = argv[i+1];
+       i++;
     }
     files[i] = 0;
     qsort (files, i, sizeof (char *), compare_string);
@@ -257,16 +284,27 @@ main (int argc, char **argv)
     printf ("#define FC_GLYPHNAME_HASH %u\n", hash);
     printf ("#define FC_GLYPHNAME_REHASH %u\n", rehash);
     printf ("#define FC_GLYPHNAME_MAXLEN %d\n\n", max_name_len);
+    if (nraw < 128)
+       type = "int8_t";
+    else if (nraw < 32768)
+       type = "int16_t";
+    else
+       type = "int32_t";
+    
+    printf ("typedef %s FcGlyphId;\n\n", type);
     
     /*
      * Dump out entries
      */
     
+    printf ("static const struct { const FcChar32 ucs; const FcChar8 name[%d]; } glyphs[%d] = {\n",
+           max_name_len + 1, nraw);
+    
     for (i = 0; i < nraw; i++)
-       printf ("static struct { FcChar32 ucs; FcChar8 name[%d]; }"
-               " glyph%d = { 0x%lx, \"%s\" };\n",
-               strlen (raw[i]->name) + 1,
-               i, (unsigned long) raw[i]->ucs, raw[i]->name);
+       printf ("    { 0x%lx, \"%s\" },\n",
+               (unsigned long) raw[i]->ucs, raw[i]->name);
+
+    printf ("};\n");
 
     /*
      * Dump out name_to_ucs table