From e2b45cf9a0b19aef57e1c4645752fc04b17de463 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 20 Feb 2003 08:40:35 +0000 Subject: [PATCH] (check_fontset_name): If NAME is nil, return the default fontset. (override_font_info): New function. (Ffontset_info): If FONTSET is not the default fontset, merge FONTSET onto the copy of the default fontset, and work on that copy. --- src/fontset.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/fontset.c b/src/fontset.c index 2c1074e4d82..c7e5507f248 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -955,7 +955,7 @@ clear_fontset_elements (fontset) /* Check validity of NAME as a fontset name and return the corresponding fontset. If not valid, signal an error. - If NAME is t, return Vdefault_fontset. */ + If NAME is nil, return Vdefault_fontset. */ static Lisp_Object check_fontset_name (name) @@ -963,7 +963,7 @@ check_fontset_name (name) { int id; - if (EQ (name, Qt)) + if (EQ (name, Qnil)) return Vdefault_fontset; CHECK_STRING (name); @@ -1189,13 +1189,26 @@ DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 1, 0, } +/* Called from Ffontset_info via map_char_table on each leaf of + fontset. ARG is a copy of the default fontset. The current leaf + is indexed by CHARACTER and has value ELT. This function override + the copy by ELT if ELT is not nil. */ + +static void +override_font_info (fontset, character, elt) + Lisp_Object fontset, character, elt; +{ + if (! NILP (elt)) + Faset (fontset, character, elt); +} + /* Called from Ffontset_info via map_char_table on each leaf of fontset. ARG is a list (LAST FONT-INFO ...), where LAST is `(last ARG)' and FONT-INFOs have this form: (CHAR FONT-SPEC) or ((FROM . TO) FONT-SPEC) The current leaf is indexed by CHARACTER and has value ELT. This function add the information of the current leaf to ARG by - appending a new element or modifying the last element.. */ + appending a new element or modifying the last element. */ static void accumulate_font_info (arg, character, elt) @@ -1286,6 +1299,14 @@ If FRAME is omitted, it defaults to the currently selected frame. */) realized[n_realized++] = elt; } + if (! EQ (fontset, Vdefault_fontset)) + { + /* Merge FONTSET onto the default fontset. */ + val = Fcopy_sequence (Vdefault_fontset); + map_char_table (override_font_info, Qnil, fontset, val, 0, indices); + fontset = val; + } + /* Accumulate information of the fontset in VAL. The format is (LAST FONT-INFO FONT-INFO ...), where FONT-INFO is (CHAR-OR-RANGE FONT-SPEC). See the comment for accumulate_font_info for the -- 2.39.2