# HG changeset patch # User Kenichi Handa # Date 1177502785 0 # Node ID c307aa794b2d5f53d0fcec1fb3ea344eaec60e7d # Parent d2c230a6774193ca85000b42776a2f0de0d457b1 (fontset_find_font): Pay attention to font size specified for a font. diff -r d2c230a67741 -r c307aa794b2d src/fontset.c --- a/src/fontset.c Wed Apr 25 12:05:28 2007 +0000 +++ b/src/fontset.c Wed Apr 25 12:06:25 2007 +0000 @@ -583,6 +583,8 @@ if (! fallback && enable_font_backend && EQ (base_fontset, Vdefault_fontset)) + /* Extra one element is for an automatically added + font-def specifying only a script. */ vec = Fmake_vector (make_number (ASIZE (elt) + 4), Qnil); else #endif /* not USE_FONT_BACKEND */ @@ -680,44 +682,49 @@ /* ELT == [ FACE-ID FONT-INDEX FONT-DEF FONT-ENTITY FONT-OBJECT ] */ Lisp_Object font_entity = AREF (elt, 3); Lisp_Object font_object = AREF (elt, 4); + Lisp_Object font_spec = AREF (font_def, 0); int has_char; - if (NILP (font_entity) && ! NILP (AREF (font_def, 0))) - { - Lisp_Object tmp = AREF (font_def, 0); - Lisp_Object spec = Ffont_spec (0, NULL); - - if (STRINGP (tmp)) - font_merge_old_spec (tmp, Qnil, Qnil, spec); - else - { - Lisp_Object family = AREF (tmp, 0); - Lisp_Object registry = AREF (tmp, 5);; - - font_merge_old_spec (Qnil, family, registry, spec); - } - font_entity = font_find_for_lface (f, face->lface, spec); - ASET (elt, 3, font_entity); - } - else if (FONT_SPEC_P (font_entity)) - { - font_entity = font_find_for_lface (f, face->lface, font_entity); - ASET (elt, 3, font_entity); - } if (NILP (font_entity)) { - ASET (elt, 1, make_number (-1)); - continue; + if (! FONT_SPEC_P (font_spec)) + { + /* FONT_SPEC is FONT-NAME or (FAMILY . REGISTRY). */ + font_spec = Ffont_spec (0, NULL); + if (STRINGP (AREF (font_def, 0))) + font_merge_old_spec (AREF (font_def, 0), Qnil, Qnil, + font_spec); + else + { + Lisp_Object family = AREF (AREF (font_def, 0), 0); + Lisp_Object registry = AREF (AREF (font_def, 0), 5);; + + font_merge_old_spec (Qnil, family, registry, font_spec); + } + ASET (font_def, 0, font_spec); + } + font_entity = font_find_for_lface (f, face->lface, font_spec); + ASET (elt, 3, font_entity); + if (NILP (font_entity)) + { + ASET (elt, 1, make_number (-1)); + continue; + } + font_object = Qnil; } has_char = font_has_char (f, font_entity, c); if (has_char == 0) continue; if (NILP (font_object)) - font_object = font_open_for_lface (f, face->lface, font_entity); - if (NILP (font_object)) { - ASET (elt, 1, make_number (-1)); - continue; + font_object = font_open_for_lface (f, font_entity, + face->lface, font_spec); + ASET (elt, 4, font_object); + if (NILP (font_object)) + { + ASET (elt, 1, make_number (-1)); + continue; + } } ASET (elt, 1, make_number (0)); ASET (elt, 4, font_object);