diff src/font.c @ 92183:275e5e980fc4

If the font driver doesn't have `shape' function, return Qnil.
author Kenichi Handa <handa@m17n.org>
date Mon, 25 Feb 2008 01:43:02 +0000
parents 2a9ed1c080b4
children 3642a8778bbf
line wrap: on
line diff
--- a/src/font.c	Mon Feb 25 01:40:09 2008 +0000
+++ b/src/font.c	Mon Feb 25 01:43:02 2008 +0000
@@ -3625,6 +3625,12 @@
   Lisp_Object gstring, n;
   int len, i, j;
 
+  if (! FONT_OBJECT_P (font_object))
+    return Qnil;
+  CHECK_FONT_GET_OBJECT (font_object, font);
+  if (! font->driver->shape)
+    return Qnil;
+
   if (NILP (string))
     {
       validate_region (&from, &to);
@@ -3641,49 +3647,9 @@
 	args_out_of_range_3 (string, from, to);
     }
 
-  if (! FONT_OBJECT_P (font_object))
-    return to;
-
-  CHECK_FONT_GET_OBJECT (font_object, font);
   len = end - start;
   gstring = Ffont_make_gstring (font_object, make_number (len));
   Ffont_fill_gstring (gstring, font_object, from, to, string);
-  if (! font->driver->shape)
-    {
-      /* Make zero-width glyphs to have one pixel width to make the
-	 display routine not lose the cursor.  */
-      for (i = 0; i < len; i++)
-	{
-	  Lisp_Object g = LGSTRING_GLYPH (gstring, i);
-	  unsigned code;
-	  struct font_metrics metrics;
-
-	  if (NILP (g))
-	    break;
-	  code = LGLYPH_CODE (g);
-	  if (font->driver->text_extents (font, &code, 1, &metrics) == 0)
-	    {
-	      Lisp_Object gstr = Ffont_make_gstring (font_object,
-						     make_number (1));
-	      LGSTRING_SET_WIDTH (gstr, 1);
-	      LGSTRING_SET_LBEARING (gstr, metrics.lbearing);
-	      LGSTRING_SET_RBEARING (gstr, metrics.rbearing + 1);
-	      LGSTRING_SET_ASCENT (gstr, metrics.ascent);
-	      LGSTRING_SET_DESCENT (gstr, metrics.descent);
-	      LGLYPH_SET_FROM (g, 0);
-	      LGLYPH_SET_TO (g, 1);
-	      LGSTRING_SET_GLYPH (gstr, 0, g);
-	      from = make_number (start + i);
-	      to = make_number (start + i + 1);
-	      if (NILP (string))
-		Fcompose_region_internal (from, to, gstr, Qnil);
-	      else
-		Fcompose_string_internal (string, from, to, gstr, Qnil);
-	    }
-	}
-      return make_number (end);
-    }
-
   
   /* Try at most three times with larger gstring each time.  */
   for (i = 0; i < 3; i++)