diff options
| author | Kenichi Handa | 2008-02-04 12:16:40 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2008-02-04 12:16:40 +0000 |
| commit | 3d4448a85bd57bf1c5afcf546e1a2a1cae1b4c1f (patch) | |
| tree | ae73cedf796a914e61590cf8ee039d7d545b5dfc /src | |
| parent | ad05a5defdcc719f9ef2bb8d8db3dc220adfe869 (diff) | |
| download | emacs-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/ChangeLog | 19 | ||||
| -rw-r--r-- | src/fontset.c | 81 |
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 @@ | |||
| 1 | 2008-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 | |||
| 8 | 2008-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 | |||
| 13 | 2008-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 | |||
| 1 | 2008-02-04 Jason Rumney <jasonr@gnu.org> | 20 | 2008-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) |