diff src/fontset.c @ 17112:5c48ff325655

(syms_of_fontset): Intern Qfontset. Declare new lisp variable use-default-ascent. (Vuse_default_ascent): New variable. (Ffont_info): Return also the value of default-ascent of a font. (fs_load_font): Disable updating fontsetp->height by non-ASCII character sets. This should be enabled when Emacs supports variable height lines. (fs_load_font, Fset_fontset_font): Bug fix to cope with the change of charsets to symbols.
author Kenichi Handa <handa@m17n.org>
date Thu, 27 Feb 1997 07:52:23 +0000
parents 70194012fb3a
children 6637001cdb4b
line wrap: on
line diff
--- a/src/fontset.c	Thu Feb 27 07:49:24 1997 +0000
+++ b/src/fontset.c	Thu Feb 27 07:52:23 1997 +0000
@@ -33,6 +33,7 @@
 Lisp_Object Vglobal_fontset_alist;
 
 Lisp_Object Vfont_encoding_alist;
+Lisp_Object Vuse_default_ascent;
 
 /* We had better have our own strcasecmp function because some system
    doesn't have it.  */
@@ -196,7 +197,6 @@
 
 	      for (tmp = XCONS (elt)->cdr; CONSP (tmp); tmp = XCONS (tmp)->cdr)
 		if (CONSP (XCONS (tmp)->car)
-		    && INTEGERP (XCONS (XCONS (tmp)->car)->car)
 		    && ((i = get_charset_id (XCONS (XCONS (tmp)->car)->car))
 			>= 0)
 		    && INTEGERP (XCONS (XCONS (tmp)->car)->cdr)
@@ -251,8 +251,12 @@
 
 		  if (fontp2->size != fontp->size * CHARSET_WIDTH (i))
 		    fontsetp->font_indexes[i] = FONT_NOT_OPENED;
+		  /* The following code should be disabled until Emacs
+		     supports variable height lines.  */
+#if 0
 		  else if (fontsetp->height < fontp->height)
 		    fontsetp->height = fontp->height;
+#endif
 		}
 	    }
 	}
@@ -613,11 +617,12 @@
   if (NILP (frame))
     {
       Lisp_Object fontset_info = Fassoc (fullname, Vglobal_fontset_alist);
-      Lisp_Object tem = Fassq (charset, XCONS (fontset_info)->cdr);
+      Lisp_Object tem = Fassq (charset_symbol, XCONS (fontset_info)->cdr);
 
       if (NILP (tem))
 	XCONS (fontset_info)->cdr
-	  = Fcons (Fcons (charset, fontname), XCONS (fontset_info)->cdr);
+	  = Fcons (Fcons (charset_symbol, fontname),
+		   XCONS (fontset_info)->cdr);
       else
 	XCONS (tem)->cdr = fontname;
     }
@@ -636,13 +641,13 @@
 	  struct fontset_info *fontsetp
 	    = FRAME_FONTSET_DATA (f)->fontset_table[fontset];
 
-	  if (fontsetp->fontname[XINT (charset)])
-	    xfree (fontsetp->fontname[XINT (charset)]);
-	  fontsetp->fontname[XINT (charset)]
+	  if (fontsetp->fontname[charset])
+	    xfree (fontsetp->fontname[charset]);
+	  fontsetp->fontname[charset]
 	    = (char *) xmalloc (XSTRING (fontname)->size + 1);
-	  bcopy (XSTRING (fontname)->data, fontsetp->fontname[XINT (charset)],
+	  bcopy (XSTRING (fontname)->data, fontsetp->fontname[charset],
 		 XSTRING (fontname)->size + 1);
-	  fontsetp->font_indexes[XINT (charset)] = FONT_NOT_OPENED;
+	  fontsetp->font_indexes[charset] = FONT_NOT_OPENED;
 
 	  if (charset == CHARSET_ASCII)
 	    {
@@ -667,7 +672,7 @@
   "Return information about a font named NAME on frame FRAME.\n\
 If FRAME is omitted or nil, use the selected frame.\n\
 The returned value is a vector of OPENED-NAME, FULL-NAME, CHARSET, SIZE,\n\
-  HEIGHT, BASELINE-OFFSET, and RELATIVE-COMPOSE,\n\
+  HEIGHT, BASELINE-OFFSET, RELATIVE-COMPOSE, and DEFAULT-ASCENT,\n\
 where\n\
   OPENED-NAME is the name used for opening the font,\n\
   FULL-NAME is the full name of the font,\n\
@@ -675,7 +680,8 @@
   SIZE is the minimum bound width of the font,\n\
   HEIGHT is the height of the font,\n\
   BASELINE-OFFSET is the upward offset pixels from ASCII baseline,\n\
-  RELATIVE-COMPOSE is the number controlling how to compose characters.\n\
+  RELATIVE-COMPOSE and DEFAULT-ASCENT are the numbers controlling\n\
+    how to compose characters.\n\
 If the named font is not yet loaded, return nil.")
   (name, frame)
      Lisp_Object name, frame;
@@ -702,7 +708,7 @@
   if (!fontp)
     return Qnil;
 
-  info = Fmake_vector (make_number (6), Qnil);
+  info = Fmake_vector (make_number (7), Qnil);
 
   XVECTOR (info)->contents[0] = build_string (fontp->name);
   XVECTOR (info)->contents[1] = build_string (fontp->full_name);
@@ -711,6 +717,7 @@
   XVECTOR (info)->contents[4] = make_number (fontp->height);
   XVECTOR (info)->contents[5] = make_number (fontp->baseline_offset);
   XVECTOR (info)->contents[6] = make_number (fontp->relative_compose);
+  XVECTOR (info)->contents[7] = make_number (fontp->default_ascent);
 
   return info;
 }
@@ -790,6 +797,7 @@
     /* Window system initializer should have set proper functions.  */
     abort ();
 
+  Qfontset = intern ("fontset");
   staticpro (&Qfontset);
 
   Vcached_fontset_data = Qnil;
@@ -813,6 +821,12 @@
 	3: code points 0xA020..0xFF7F are used.");
   Vfont_encoding_alist = Qnil;
 
+  DEFVAR_LISP ("use-default-ascent", &Vuse_default_ascent,
+     "Char table of characters of which ascent values should be ignored.\n\
+If an entry for a character is non-nil, the ascent value of the glyph\n\
+is assumed to be what specified by _MULE_DEFAULT_ASCENT property of a font.");
+  Vuse_default_ascent = Qnil;
+
   defsubr (&Squery_fontset);
   defsubr (&Snew_fontset);
   defsubr (&Sset_fontset_font);