diff src/xfont.c @ 103274:0e85983c95eb

(xfont_list_pattern): Don't initialize xfont_scripts_cache and xfont_scratch_props. (syms_of_xfont): Do it here instead. (xfont_find_ccl_program): Delete, unused. (xfont_open): Delete unused var `i'.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 21 May 2009 16:36:29 +0000
parents c4706100caab
children 11b57e1bdb96
line wrap: on
line diff
--- a/src/xfont.c	Thu May 21 15:31:31 2009 +0000
+++ b/src/xfont.c	Thu May 21 16:36:29 2009 +0000
@@ -49,7 +49,6 @@
 extern void x_clear_errors P_ ((Display *));
 
 static XCharStruct *xfont_get_pcm P_ ((XFontStruct *, XChar2b *));
-static void xfont_find_ccl_program P_ ((struct font *));
 
 /* Get metrics of character CHAR2B in XFONT.  Value is null if CHAR2B
    is not contained in the font.  */
@@ -119,42 +118,6 @@
 	  ? NULL : pcm);
 }
 
-/* Find a CCL program for a font specified by FONTP, and set the member
- `encoder' of the structure.  */
-
-static void
-xfont_find_ccl_program (font)
-     struct font *font;
-{
-  Lisp_Object list, elt;
-
-  elt = Qnil;
-  for (list = Vfont_ccl_encoder_alist; CONSP (list); list = XCDR (list))
-    {
-      elt = XCAR (list);
-      if (CONSP (elt)
-	  && STRINGP (XCAR (elt))
-	  && ((fast_string_match_ignore_case (XCAR (elt),
-					      font->props[FONT_NAME_INDEX])
-	       >= 0)
-	      || (fast_string_match_ignore_case (XCAR (elt),
-						 font->props[FONT_FULLNAME_INDEX])
-		  >= 0)))
-	break;
-    }
-
-  if (! NILP (list))
-    {
-      struct ccl_program *ccl
-	= (struct ccl_program *) xmalloc (sizeof (struct ccl_program));
-
-      if (setup_ccl_program (ccl, XCDR (elt)) < 0)
-	xfree (ccl);
-      else
-	font->font_encoder = ccl;
-    }
-}
-
 static Lisp_Object xfont_get_cache P_ ((FRAME_PTR));
 static Lisp_Object xfont_list P_ ((Lisp_Object, Lisp_Object));
 static Lisp_Object xfont_match P_ ((Lisp_Object, Lisp_Object));
@@ -408,14 +371,6 @@
 	  script = Qnil;
 	}
     }
-  if (! repertory && NILP (xfont_scripts_cache))
-    {
-      Lisp_Object args[2];
-
-      args[0] = QCtest;
-      args[1] = Qequal;
-      xfont_scripts_cache = Fmake_hash_table (2, args);
-    }
       
   BLOCK_INPUT;
   x_catch_errors (display);
@@ -439,20 +394,11 @@
   if (num_fonts > 0)
     {
       char **indices = alloca (sizeof (char *) * num_fonts);
-      Lisp_Object *props;
+      Lisp_Object *props = XVECTOR (xfont_scratch_props)->contents;
       Lisp_Object scripts = Qnil;
 
-      if (NILP (xfont_scratch_props))
-	{
-	  xfont_scratch_props = Fmake_vector (make_number (8), Qnil);
-	  props = XVECTOR (xfont_scratch_props)->contents;
-	}
-      else
-	{
-	  props = XVECTOR (xfont_scratch_props)->contents;
-	  for (i = 0; i < 8; i++)
-	    props[i] = Qnil;
-	}
+      for (i = 0; i < ASIZE (xfont_scratch_props); i++)
+	props[i] = Qnil;
       for (i = 0; i < num_fonts; i++)
 	indices[i] = names[i];
       qsort (indices, num_fonts, sizeof (char *), compare_font_names);
@@ -749,7 +695,6 @@
   Lisp_Object font_object, fullname;
   struct font *font;
   XFontStruct *xfont;
-  int i;
 
   /* At first, check if we know how to encode characters for this
      font.  */
@@ -1176,9 +1121,15 @@
 syms_of_xfont ()
 {
   staticpro (&xfont_scripts_cache);
-  xfont_scripts_cache = Qnil;
+  { /* Here we rely on the fact that syms_of_xfont (via syms_of_font)
+       is called fairly late, when QCtest and Qequal are known to be set.  */
+    Lisp_Object args[2];
+    args[0] = QCtest;
+    args[1] = Qequal;
+    xfont_scripts_cache = Fmake_hash_table (2, args);
+  }
   staticpro (&xfont_scratch_props);
-  xfont_scratch_props = Qnil;;
+  xfont_scratch_props = Fmake_vector (make_number (8), Qnil);
   xfont_driver.type = Qx;
   register_font_driver (&xfont_driver, NULL);
 }