aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenichi Handa <[email protected]>2008-02-04 12:16:40 +0000
committerKenichi Handa <[email protected]>2008-02-04 12:16:40 +0000
commit3d4448a85bd57bf1c5afcf546e1a2a1cae1b4c1f (patch)
treeae73cedf796a914e61590cf8ee039d7d545b5dfc
parentad05a5defdcc719f9ef2bb8d8db3dc220adfe869 (diff)
(Ffontset_info): Handle the case of inhibitting the
fallback fonts. (Ffontset_info) [USE_FONT_BACKEND]: Fix getting of opened font names.
-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 a332e60426..2747f40fe4 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,22 @@
+2008-02-04 Kenichi Handa <[email protected]>
+
+ * fontset.c (Ffontset_info): Handle the case of inhibitting the
+ fallback fonts.
+ (Ffontset_info) [USE_FONT_BACKEND]: Fix getting of opened font
+ names.
+
+2008-02-01 Kenichi Handa <[email protected]>
+
+ * ccl.c (CCL_WRITE_CHAR, CCL_WRITE_MULTIBYTE_CHAR, ccl_driver):
+ Cancel previous change.
+
+2008-01-31 Kenichi Handa <[email protected]>
+
+ * ccl.c (CCL_WRITE_CHAR): Increment extra_bytes only when
+ ccl->eight_bit_control. Fix check for buffer overflow.
+ (CCL_WRITE_MULTIBYTE_CHAR): Fix check for buffer overflow.
+ (ccl_driver): Initialize extra_bytes to 0.
+
2008-02-04 Jason Rumney <[email protected]>
* w32font.c (w32font_open_internal): Use font_unparse_fcname to
diff --git a/src/fontset.c b/src/fontset.c
index a6d06c5d04..36ac055a9d 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -2188,7 +2188,12 @@ fontset. The format is the same as abobe. */)
/* At first, set ALIST to ((FONT-SPEC) ...). */
for (alist = Qnil, i = 0; i < ASIZE (val); i++)
- alist = Fcons (Fcons (AREF (AREF (val, i), 0), Qnil), alist);
+ {
+ if (NILP (AREF (val, i)))
+ alist = Fcons (Qnil, alist);
+ else
+ alist = Fcons (Fcons (AREF (AREF (val, i), 0), Qnil), alist);
+ }
alist = Fnreverse (alist);
/* Then store opend font names to cdr of each elements. */
@@ -2200,29 +2205,63 @@ fontset. The format is the same as abobe. */)
val = FONTSET_FALLBACK (realized[k][i]);
if (! VECTORP (val))
continue;
- /* VAL is [int int ?
- [FACE-ID FONT-INDEX FONT-DEF FONT-NAME] ...].
- If a font of an element is already opened,
- FONT-NAME is the name of a opened font. */
- for (j = 3; j < ASIZE (val); j++)
- if (STRINGP (AREF (AREF (val, j), 3)))
+#ifdef USE_FONT_BACKEND
+ /* VAL: [int int ?
+ [FACE-ID FONT-INDEX FONT-DEF FONT-ENTITY/OBJECT]
+ ...] */
+ if (enable_font_backend)
+ for (j = 3; j < ASIZE (val); j++)
{
- Lisp_Object font_idx;
-
- font_idx = AREF (AREF (val, j), 1);
- elt = Fassq (AREF (AREF (AREF (val, j), 2), 0), alist);
- if (CONSP (elt)
- && NILP (Fmemq (font_idx, XCDR(elt))))
- nconc2 (elt, Fcons (font_idx, Qnil));
+ elt = AREF (val, j);
+ if (INTEGERP (AREF (elt, 1))
+ && XINT (AREF (elt, 1)) >= 0)
+ {
+ Lisp_Object font_object = AREF (elt, 3);
+
+ if (FONT_OBJECT_P (font_object))
+ {
+ struct font *font
+ = XSAVE_VALUE (font_object)->pointer;
+ char *name = font->font.full_name;;
+ int len = strlen (name);
+ Lisp_Object slot;
+
+ slot = Fassq (AREF (AREF (elt, 2), 0), alist);
+ nconc2 (slot,
+ Fcons (make_unibyte_string (name, len),
+ Qnil));
+ }
+ }
}
+ else
+#endif /* not USE_FONT_BACKEND */
+ {
+ /* VAL is [int int ?
+ [FACE-ID FONT-INDEX FONT-DEF FONT-NAME] ...].
+ If a font of an element is already opened,
+ FONT-NAME is the name of a opened font. */
+ for (j = 3; j < ASIZE (val); j++)
+ if (STRINGP (AREF (AREF (val, j), 3)))
+ {
+ Lisp_Object font_idx;
+
+ font_idx = AREF (AREF (val, j), 1);
+ elt = Fassq (AREF (AREF (AREF (val, j), 2), 0),
+ alist);
+ if (CONSP (elt)
+ && NILP (Fmemq (font_idx, XCDR(elt))))
+ nconc2 (elt, Fcons (font_idx, Qnil));
+ }
+ for (val = alist; CONSP (val); val = XCDR (val))
+ for (elt = XCDR (XCAR (val)); CONSP (elt);
+ elt = XCDR (elt))
+ {
+ struct font_info *font_info
+ = (*get_font_info_func) (f, XINT (XCAR (elt)));
+ XSETCAR (elt, build_string (font_info->full_name));
+ }
+ }
}
- for (val = alist; CONSP (val); val = XCDR (val))
- for (elt = XCDR (XCAR (val)); CONSP (elt); elt = XCDR (elt))
- {
- struct font_info *font_info
- = (*get_font_info_func) (f, XINT (XCAR (elt)));
- XSETCAR (elt, build_string (font_info->full_name));
- }
/* Store ALIST in TBL for characters C..TO. */
if (c <= MAX_5_BYTE_CHAR)