From: Kenichi Handa Date: Wed, 24 Jun 2009 04:24:18 +0000 (+0000) Subject: (fontset_get_font_group): Return 0 if no font-group is X-Git-Tag: emacs-pretest-23.1.90~2433 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f084f942444b667b3f0338b32b1966da0d3e67b7;p=emacs.git (fontset_get_font_group): Return 0 if no font-group is set for C. (fontset_font): Record the availability of a font for C both in the realized fontset of the current one and the default one. --- diff --git a/src/ChangeLog b/src/ChangeLog index ea12313667f..fa2a8ef91d5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2009-06-24 Kenichi Handa + + * fontset.c (fontset_get_font_group): Return 0 if no font-group is + set for C. + (fontset_font): Record the availability of a font for C both in + the realized fontsets of the current one and the default one. + 2009-06-23 Dan Nicolaescu * sysdep.c (child_setup_tty): Remove SIGNALS_VIA_CHARACTERS diff --git a/src/fontset.c b/src/fontset.c index 08a011306c5..f144cb1dd96 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -459,6 +459,12 @@ reorder_font_vector (font_group, font) XSETCAR (font_group, make_number (charset_ordered_list_tick)); } +/* Return a font-group (actually a cons (-1 . FONT-GROUP-VECTOR)) for + character C in FONTSET. If C is -1, return a fallback font-group. + If C is not -1, the value may be Qt (FONTSET doesn't have a font + for C even in the fallback group, or 0 (a font for C may be found + only in the fallback group). */ + static Lisp_Object fontset_get_font_group (Lisp_Object fontset, int c) { @@ -480,9 +486,10 @@ fontset_get_font_group (Lisp_Object fontset, int c) font_group = FONTSET_FALLBACK (base_fontset); if (NILP (font_group)) { + font_group = make_number (0); if (c >= 0) - char_table_set_range (fontset, from, to, make_number (0)); - return Qnil; + char_table_set_range (fontset, from, to, font_group); + return font_group; } font_group = Fcopy_sequence (font_group); for (i = 0; i < ASIZE (font_group); i++) @@ -683,7 +690,7 @@ fontset_font (fontset, c, face, id) struct face *face; int id; { - Lisp_Object rfont_def; + Lisp_Object rfont_def, default_rfont_def; Lisp_Object base_fontset; /* Try a font-group of FONTSET. */ @@ -691,8 +698,8 @@ fontset_font (fontset, c, face, id) rfont_def = fontset_find_font (fontset, c, face, id, 0); if (VECTORP (rfont_def)) return rfont_def; - if (EQ (rfont_def, Qt)) - goto no_font; + if (NILP (rfont_def)) + FONTSET_SET (fontset, make_number (c), make_number (0)); /* Try a font-group of the default fontset. */ base_fontset = FONTSET_BASE (fontset); @@ -702,34 +709,38 @@ fontset_font (fontset, c, face, id) FONTSET_DEFAULT (fontset) = make_fontset (FONTSET_FRAME (fontset), Qnil, Vdefault_fontset); FONT_DEFERRED_LOG ("default fontset: font for", make_number (c), Qnil); - rfont_def = fontset_find_font (FONTSET_DEFAULT (fontset), c, face, id, 0); - if (VECTORP (rfont_def)) - return rfont_def; - if (EQ (rfont_def, Qt)) - goto no_font; + default_rfont_def + = fontset_find_font (FONTSET_DEFAULT (fontset), c, face, id, 0); + if (VECTORP (default_rfont_def)) + return default_rfont_def; + if (NILP (default_rfont_def)) + FONTSET_SET (FONTSET_DEFAULT (fontset), make_number (c), + make_number (0)); } /* Try a fallback font-group of FONTSET. */ - FONT_DEFERRED_LOG ("current fallback: font for", make_number (c), Qnil); - rfont_def = fontset_find_font (fontset, c, face, id, 1); - if (VECTORP (rfont_def)) - return rfont_def; - if (EQ (rfont_def, Qt)) - goto no_font; + if (! EQ (rfont_def, Qt)) + { + FONT_DEFERRED_LOG ("current fallback: font for", make_number (c), Qnil); + rfont_def = fontset_find_font (fontset, c, face, id, 1); + if (VECTORP (rfont_def)) + return rfont_def; + /* Remember that FONTSET has no font for C. */ + FONTSET_SET (fontset, make_number (c), Qt); + } - /* Try a fallback font-group of the default fontset . */ - if (! EQ (base_fontset, Vdefault_fontset)) + /* Try a fallback font-group of the default fontset. */ + if (! EQ (base_fontset, Vdefault_fontset) + && ! EQ (default_rfont_def, Qt)) { FONT_DEFERRED_LOG ("default fallback: font for", make_number (c), Qnil); rfont_def = fontset_find_font (FONTSET_DEFAULT (fontset), c, face, id, 1); if (VECTORP (rfont_def)) return rfont_def; + /* Remember that the default fontset has no font for C. */ + FONTSET_SET (FONTSET_DEFAULT (fontset), make_number (c), Qt); } - no_font: - /* Remember that we have no font for C. */ - FONTSET_SET (fontset, make_number (c), Qt); - return Qnil; }