emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/fontset.c,v


From: Kenichi Handa
Subject: [Emacs-diffs] Changes to emacs/src/fontset.c,v
Date: Mon, 04 Feb 2008 12:15:16 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Kenichi Handa <handa>   08/02/04 12:15:15

Index: fontset.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/fontset.c,v
retrieving revision 1.110
retrieving revision 1.111
diff -u -b -r1.110 -r1.111
--- fontset.c   1 Feb 2008 16:00:54 -0000       1.110
+++ fontset.c   4 Feb 2008 12:15:14 -0000       1.111
@@ -2188,7 +2188,12 @@
 
              /* At first, set ALIST to ((FONT-SPEC) ...).  */
              for (alist = Qnil, i = 0; i < ASIZE (val); i++)
+               {
+                 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,6 +2205,37 @@
                    val = FONTSET_FALLBACK (realized[k][i]);
                  if (! VECTORP (val))
                    continue;
+#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++)
+                     {
+                       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,
@@ -2210,19 +2246,22 @@
                        Lisp_Object font_idx;
 
                        font_idx = AREF (AREF (val, j), 1);
-                       elt = Fassq (AREF (AREF (AREF (val, j), 2), 0), alist);
+                           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))
+                       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)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]