# HG changeset patch # User Kenichi Handa # Date 1076638644 0 # Node ID b17725d55ba24cca70ef3ba1ac282b60d662f274 # Parent 513b9f2079009551b254da1edd3bd17dc492208b (Fset_fontset_font): Fix previous change. diff -r 513b9f207900 -r b17725d55ba2 src/fontset.c --- a/src/fontset.c Fri Feb 13 01:46:50 2004 +0000 +++ b/src/fontset.c Fri Feb 13 02:17:24 2004 +0000 @@ -84,16 +84,17 @@ where FAMILY, WEIGHT, SLANT, SWIDTH, ADSTYLE, REGISTRY, and FONT-NAME are strings. - ENCODING is a charset ID or a char-table that can convert - characters to glyph codes of the corresponding font. + ENCODING is a charset ID that can convert characters to glyph codes + of the corresponding font. - REPERTORY is a charset ID or nil. If REPERTORY is a charset ID, - the repertory of the charset exactly matches with that of the font. - If REPERTORY is nil, we consult with the font itself to get the - repertory. + REPERTORY is a charset ID, a char-table, or nil. If REPERTORY is a + charset ID, the repertory of the charset exactly matches with that + of the font. If REPERTORY is a char-table, all characters who have + a non-nil value in the table are supported. If REPERTORY is nil, + we consult with the font itself to get the repertory. ENCODING and REPERTORY are extracted from the variable - Vfont_encoding_alist by using a font name generated form FONT-SPEC + Vfont_encoding_alist by using a font name generated from FONT-SPEC (if it is a vector) or FONT-NAME as a key. @@ -615,6 +616,13 @@ /* This font can't display C. */ continue; } + else if (CHAR_TABLE_P (AREF (font_def, 2))) + { + /* The repertory is specified by a char table. */ + if (NILP (CHAR_TABLE_REF (AREF (font_def, 2), c))) + /* This font can't display C. */ + continue; + } else { Lisp_Object slot; @@ -1003,9 +1011,8 @@ : CONSP (XCDR (elt)) && CHARSETP (XCAR (XCDR (elt))))) return (XCDR (elt)); } - /* We don't know the encoding of this font. Let's assume Unicode - encoding. */ - return Qunicode; + /* We don't know the encoding of this font. */ + return Qnil; } @@ -1383,12 +1390,25 @@ encoding = find_font_encoding ((char *) SDATA (font_spec)); else encoding = find_font_encoding ((char *) SDATA (registry)); + if (NILP (encoding)) + /* We don't know how to use this font. */ + return Qnil; if (SYMBOLP (encoding)) - encoding = repertory = CHARSET_SYMBOL_ID (encoding); + { + CHECK_CHARSET (encoding); + encoding = repertory = CHARSET_SYMBOL_ID (encoding); + } else { repertory = XCDR (encoding); - encoding = CHARSET_SYMBOL_ID (XCAR (encoding)); + encoding = XCAR (encoding); + CHECK_CHARSET (encoding); + encoding = CHARSET_SYMBOL_ID (encoding); + if (! NILP (repertory) && SYMBOLP (repertory)) + { + CHECK_CHARSET (repertory); + repertory = CHARSET_SYMBOL_ID (repertory); + } } font_def = Fmake_vector (make_number (3), font_spec); ASET (font_def, 1, encoding);