changeset 102793:0e6449977a63

(fontset_from_font): Specify only registry in a font-spec for all characters supported by that registry.
author Kenichi Handa <handa@m17n.org>
date Mon, 30 Mar 2009 12:50:50 +0000
parents 185805e67458
children 159a238ef4ba
files src/fontset.c
diffstat 1 files changed, 21 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/fontset.c	Mon Mar 30 05:39:01 2009 +0000
+++ b/src/fontset.c	Mon Mar 30 12:50:50 2009 +0000
@@ -1729,7 +1729,14 @@
 /* Number of automatically created fontsets.  */
 static int num_auto_fontsets;
 
-/* Retun a fontset synthesized from FONT-OBJECT.  */
+/* Retun a fontset synthesized from FONT-OBJECT.  This is called from
+   x_new_font when FONT-OBJECT is used for the default ASCII font of a
+   frame, and the returned fontset is used for the default fontset of
+   that frame.  The fontset specifies a font of the same registry as
+   FONT-OBJECT for all characters in the repertory of the registry
+   (see Vfont_encoding_alist).  If the repertory is not known, the
+   fontset specifies the font for all Latin characters assuming that a
+   user intends to use FONT-OBJECT for Latin characters.  */
 
 int
 fontset_from_font (font_object)
@@ -1765,17 +1772,19 @@
   alias = Fdowncase (AREF (font_object, FONT_NAME_INDEX));
   Vfontset_alias_alist = Fcons (Fcons (name, alias), Vfontset_alias_alist);
   auto_fontset_alist = Fcons (Fcons (font_spec, fontset), auto_fontset_alist);
-  font_spec = Fcopy_font_spec (font_spec);
-  for (i = FONT_WEIGHT_INDEX; i < FONT_EXTRA_INDEX; i++)
-    ASET (font_spec, i, Qnil);
-  Fset_fontset_font (name, Qlatin, font_spec, Qnil, Qnil);
-  Fset_fontset_font (name, Qnil, font_spec, Qnil, Qnil);
-  if (!EQ (registry, Qiso10646_1))
-    {
-      font_spec = Fcopy_font_spec (font_spec);
-      ASET (font_spec, FONT_REGISTRY_INDEX, Qiso10646_1);
-      Fset_fontset_font (name, Qlatin, font_spec, Qnil, Qappend);
-    }
+  font_spec = Ffont_spec (0, NULL);
+  ASET (font_spec, FONT_REGISTRY_INDEX, registry);
+  {
+    Lisp_Object target = find_font_encoding (SYMBOL_NAME (registry));
+
+    if (CONSP (target))
+      target = XCDR (target);
+    if (! CHARSETP (target))
+      target = Qlatin;
+    Fset_fontset_font (name, target, font_spec, Qnil, Qnil);
+    Fset_fontset_font (name, Qnil, font_spec, Qnil, Qnil);
+  }
+
   FONTSET_ASCII (fontset) = font_name;
 
 #ifdef HAVE_NS