aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa2008-02-04 12:16:40 +0000
committerKenichi Handa2008-02-04 12:16:40 +0000
commit3d4448a85bd57bf1c5afcf546e1a2a1cae1b4c1f (patch)
treeae73cedf796a914e61590cf8ee039d7d545b5dfc /src
parentad05a5defdcc719f9ef2bb8d8db3dc220adfe869 (diff)
downloademacs-3d4448a85bd57bf1c5afcf546e1a2a1cae1b4c1f.tar.gz
emacs-3d4448a85bd57bf1c5afcf546e1a2a1cae1b4c1f.zip
(Ffontset_info): Handle the case of inhibitting the
fallback fonts. (Ffontset_info) [USE_FONT_BACKEND]: Fix getting of opened font names.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog19
-rw-r--r--src/fontset.c81
2 files changed, 79 insertions, 21 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index a332e604267..2747f40fe40 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,22 @@
12008-02-04 Kenichi Handa <handa@ni.aist.go.jp>
2
3 * fontset.c (Ffontset_info): Handle the case of inhibitting the
4 fallback fonts.
5 (Ffontset_info) [USE_FONT_BACKEND]: Fix getting of opened font
6 names.
7
82008-02-01 Kenichi Handa <handa@ni.aist.go.jp>
9
10 * ccl.c (CCL_WRITE_CHAR, CCL_WRITE_MULTIBYTE_CHAR, ccl_driver):
11 Cancel previous change.
12
132008-01-31 Kenichi Handa <handa@ni.aist.go.jp>
14
15 * ccl.c (CCL_WRITE_CHAR): Increment extra_bytes only when
16 ccl->eight_bit_control. Fix check for buffer overflow.
17 (CCL_WRITE_MULTIBYTE_CHAR): Fix check for buffer overflow.
18 (ccl_driver): Initialize extra_bytes to 0.
19
12008-02-04 Jason Rumney <jasonr@gnu.org> 202008-02-04 Jason Rumney <jasonr@gnu.org>
2 21
3 * w32font.c (w32font_open_internal): Use font_unparse_fcname to 22 * w32font.c (w32font_open_internal): Use font_unparse_fcname to
diff --git a/src/fontset.c b/src/fontset.c
index a6d06c5d040..36ac055a9d7 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -2188,7 +2188,12 @@ fontset. The format is the same as abobe. */)
2188 2188
2189 /* At first, set ALIST to ((FONT-SPEC) ...). */ 2189 /* At first, set ALIST to ((FONT-SPEC) ...). */
2190 for (alist = Qnil, i = 0; i < ASIZE (val); i++) 2190 for (alist = Qnil, i = 0; i < ASIZE (val); i++)
2191 alist = Fcons (Fcons (AREF (AREF (val, i), 0), Qnil), alist); 2191 {
2192 if (NILP (AREF (val, i)))
2193 alist = Fcons (Qnil, alist);
2194 else
2195 alist = Fcons (Fcons (AREF (AREF (val, i), 0), Qnil), alist);
2196 }
2192 alist = Fnreverse (alist); 2197 alist = Fnreverse (alist);
2193 2198
2194 /* Then store opend font names to cdr of each elements. */ 2199 /* Then store opend font names to cdr of each elements. */
@@ -2200,29 +2205,63 @@ fontset. The format is the same as abobe. */)
2200 val = FONTSET_FALLBACK (realized[k][i]); 2205 val = FONTSET_FALLBACK (realized[k][i]);
2201 if (! VECTORP (val)) 2206 if (! VECTORP (val))
2202 continue; 2207 continue;
2203 /* VAL is [int int ? 2208#ifdef USE_FONT_BACKEND
2204 [FACE-ID FONT-INDEX FONT-DEF FONT-NAME] ...]. 2209 /* VAL: [int int ?
2205 If a font of an element is already opened, 2210 [FACE-ID FONT-INDEX FONT-DEF FONT-ENTITY/OBJECT]
2206 FONT-NAME is the name of a opened font. */ 2211 ...] */
2207 for (j = 3; j < ASIZE (val); j++) 2212 if (enable_font_backend)
2208 if (STRINGP (AREF (AREF (val, j), 3))) 2213 for (j = 3; j < ASIZE (val); j++)
2209 { 2214 {
2210 Lisp_Object font_idx; 2215 elt = AREF (val, j);
2211 2216 if (INTEGERP (AREF (elt, 1))
2212 font_idx = AREF (AREF (val, j), 1); 2217 && XINT (AREF (elt, 1)) >= 0)
2213 elt = Fassq (AREF (AREF (AREF (val, j), 2), 0), alist); 2218 {
2214 if (CONSP (elt) 2219 Lisp_Object font_object = AREF (elt, 3);
2215 && NILP (Fmemq (font_idx, XCDR(elt)))) 2220
2216 nconc2 (elt, Fcons (font_idx, Qnil)); 2221 if (FONT_OBJECT_P (font_object))
2222 {
2223 struct font *font
2224 = XSAVE_VALUE (font_object)->pointer;
2225 char *name = font->font.full_name;;
2226 int len = strlen (name);
2227 Lisp_Object slot;
2228
2229 slot = Fassq (AREF (AREF (elt, 2), 0), alist);
2230 nconc2 (slot,
2231 Fcons (make_unibyte_string (name, len),
2232 Qnil));
2233 }
2234 }
2217 } 2235 }
2236 else
2237#endif /* not USE_FONT_BACKEND */
2238 {
2239 /* VAL is [int int ?
2240 [FACE-ID FONT-INDEX FONT-DEF FONT-NAME] ...].
2241 If a font of an element is already opened,
2242 FONT-NAME is the name of a opened font. */
2243 for (j = 3; j < ASIZE (val); j++)
2244 if (STRINGP (AREF (AREF (val, j), 3)))
2245 {
2246 Lisp_Object font_idx;
2247
2248 font_idx = AREF (AREF (val, j), 1);
2249 elt = Fassq (AREF (AREF (AREF (val, j), 2), 0),
2250 alist);
2251 if (CONSP (elt)
2252 && NILP (Fmemq (font_idx, XCDR(elt))))
2253 nconc2 (elt, Fcons (font_idx, Qnil));
2254 }
2255 for (val = alist; CONSP (val); val = XCDR (val))
2256 for (elt = XCDR (XCAR (val)); CONSP (elt);
2257 elt = XCDR (elt))
2258 {
2259 struct font_info *font_info
2260 = (*get_font_info_func) (f, XINT (XCAR (elt)));
2261 XSETCAR (elt, build_string (font_info->full_name));
2262 }
2263 }
2218 } 2264 }
2219 for (val = alist; CONSP (val); val = XCDR (val))
2220 for (elt = XCDR (XCAR (val)); CONSP (elt); elt = XCDR (elt))
2221 {
2222 struct font_info *font_info
2223 = (*get_font_info_func) (f, XINT (XCAR (elt)));
2224 XSETCAR (elt, build_string (font_info->full_name));
2225 }
2226 2265
2227 /* Store ALIST in TBL for characters C..TO. */ 2266 /* Store ALIST in TBL for characters C..TO. */
2228 if (c <= MAX_5_BYTE_CHAR) 2267 if (c <= MAX_5_BYTE_CHAR)