Commit f084f942 authored by Kenichi Handa's avatar Kenichi Handa

(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.
parent 0da746de
2009-06-24 Kenichi Handa <handa@m17n.org>
* 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 <dann@ics.uci.edu> 2009-06-23 Dan Nicolaescu <dann@ics.uci.edu>
* sysdep.c (child_setup_tty): Remove SIGNALS_VIA_CHARACTERS * sysdep.c (child_setup_tty): Remove SIGNALS_VIA_CHARACTERS
......
...@@ -459,6 +459,12 @@ reorder_font_vector (font_group, font) ...@@ -459,6 +459,12 @@ reorder_font_vector (font_group, font)
XSETCAR (font_group, make_number (charset_ordered_list_tick)); 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 static Lisp_Object
fontset_get_font_group (Lisp_Object fontset, int c) fontset_get_font_group (Lisp_Object fontset, int c)
{ {
...@@ -480,9 +486,10 @@ 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); font_group = FONTSET_FALLBACK (base_fontset);
if (NILP (font_group)) if (NILP (font_group))
{ {
font_group = make_number (0);
if (c >= 0) if (c >= 0)
char_table_set_range (fontset, from, to, make_number (0)); char_table_set_range (fontset, from, to, font_group);
return Qnil; return font_group;
} }
font_group = Fcopy_sequence (font_group); font_group = Fcopy_sequence (font_group);
for (i = 0; i < ASIZE (font_group); i++) for (i = 0; i < ASIZE (font_group); i++)
...@@ -683,7 +690,7 @@ fontset_font (fontset, c, face, id) ...@@ -683,7 +690,7 @@ fontset_font (fontset, c, face, id)
struct face *face; struct face *face;
int id; int id;
{ {
Lisp_Object rfont_def; Lisp_Object rfont_def, default_rfont_def;
Lisp_Object base_fontset; Lisp_Object base_fontset;
/* Try a font-group of FONTSET. */ /* Try a font-group of FONTSET. */
...@@ -691,8 +698,8 @@ fontset_font (fontset, c, face, id) ...@@ -691,8 +698,8 @@ fontset_font (fontset, c, face, id)
rfont_def = fontset_find_font (fontset, c, face, id, 0); rfont_def = fontset_find_font (fontset, c, face, id, 0);
if (VECTORP (rfont_def)) if (VECTORP (rfont_def))
return rfont_def; return rfont_def;
if (EQ (rfont_def, Qt)) if (NILP (rfont_def))
goto no_font; FONTSET_SET (fontset, make_number (c), make_number (0));
/* Try a font-group of the default fontset. */ /* Try a font-group of the default fontset. */
base_fontset = FONTSET_BASE (fontset); base_fontset = FONTSET_BASE (fontset);
...@@ -702,34 +709,38 @@ fontset_font (fontset, c, face, id) ...@@ -702,34 +709,38 @@ fontset_font (fontset, c, face, id)
FONTSET_DEFAULT (fontset) FONTSET_DEFAULT (fontset)
= make_fontset (FONTSET_FRAME (fontset), Qnil, Vdefault_fontset); = make_fontset (FONTSET_FRAME (fontset), Qnil, Vdefault_fontset);
FONT_DEFERRED_LOG ("default fontset: font for", make_number (c), Qnil); FONT_DEFERRED_LOG ("default fontset: font for", make_number (c), Qnil);
rfont_def = fontset_find_font (FONTSET_DEFAULT (fontset), c, face, id, 0); default_rfont_def
if (VECTORP (rfont_def)) = fontset_find_font (FONTSET_DEFAULT (fontset), c, face, id, 0);
return rfont_def; if (VECTORP (default_rfont_def))
if (EQ (rfont_def, Qt)) return default_rfont_def;
goto no_font; if (NILP (default_rfont_def))
FONTSET_SET (FONTSET_DEFAULT (fontset), make_number (c),
make_number (0));
} }
/* Try a fallback font-group of FONTSET. */ /* Try a fallback font-group of FONTSET. */
FONT_DEFERRED_LOG ("current fallback: font for", make_number (c), Qnil); if (! EQ (rfont_def, Qt))
rfont_def = fontset_find_font (fontset, c, face, id, 1); {
if (VECTORP (rfont_def)) FONT_DEFERRED_LOG ("current fallback: font for", make_number (c), Qnil);
return rfont_def; rfont_def = fontset_find_font (fontset, c, face, id, 1);
if (EQ (rfont_def, Qt)) if (VECTORP (rfont_def))
goto no_font; 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 . */ /* Try a fallback font-group of the default fontset. */
if (! EQ (base_fontset, Vdefault_fontset)) if (! EQ (base_fontset, Vdefault_fontset)
&& ! EQ (default_rfont_def, Qt))
{ {
FONT_DEFERRED_LOG ("default fallback: font for", make_number (c), Qnil); FONT_DEFERRED_LOG ("default fallback: font for", make_number (c), Qnil);
rfont_def = fontset_find_font (FONTSET_DEFAULT (fontset), c, face, id, 1); rfont_def = fontset_find_font (FONTSET_DEFAULT (fontset), c, face, id, 1);
if (VECTORP (rfont_def)) if (VECTORP (rfont_def))
return 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; return Qnil;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment