# HG changeset patch # User Chong Yidong # Date 1214004427 0 # Node ID 73e422173a877aeefc0cf39a96ec8fa58e1b600a # Parent 65e4e649a2741e53ef05cc27888b7b25c9e836d4 (Ffont_face_attributes): Omit key-attribute pairs not defined by the font. diff -r 65e4e649a274 -r 73e422173a87 src/font.c --- a/src/font.c Fri Jun 20 23:27:00 2008 +0000 +++ b/src/font.c Fri Jun 20 23:27:07 2008 +0000 @@ -3733,7 +3733,8 @@ \(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH) where FAMILY, HEIGHT, WEIGHT, SLANT, and WIDTH are face attribute values -compatible with `set-face-attribute'. +compatible with `set-face-attribute'. Some of these key-attribute pairs +may be omitted from the list if they are not specified by FONT. The optional argument FRAME specifies the frame that the face attributes are to be displayed on. If omitted, the selected frame is used. */) @@ -3743,6 +3744,7 @@ struct frame *f; Lisp_Object plist[10]; Lisp_Object val; + int n = 0; if (NILP (frame)) frame = selected_frame; @@ -3762,36 +3764,49 @@ else if (! FONTP (font)) signal_error ("Invalid font object", font); - plist[0] = QCfamily; val = AREF (font, FONT_FAMILY_INDEX); - plist[1] = NILP (val) ? Qnil : SYMBOL_NAME (val); - - plist[2] = QCheight; + if (! NILP (val)) + { + plist[n++] = QCfamily; + plist[n++] = SYMBOL_NAME (val); + } + val = AREF (font, FONT_SIZE_INDEX); if (INTEGERP (val)) { Lisp_Object font_dpi = AREF (font, FONT_DPI_INDEX); int dpi = INTEGERP (font_dpi) ? XINT (font_dpi) : f->resy; - plist[3] = make_number (10 * PIXEL_TO_POINT (XINT (val), dpi)); + plist[n++] = QCheight; + plist[n++] = make_number (10 * PIXEL_TO_POINT (XINT (val), dpi)); } else if (FLOATP (val)) - plist[3] = make_number (10 * (int) XFLOAT_DATA (val)); - else - plist[3] = Qnil; - - plist[4] = QCweight; + { + plist[n++] = QCheight; + plist[n++] = make_number (10 * (int) XFLOAT_DATA (val)); + } + val = FONT_WEIGHT_FOR_FACE (font); - plist[5] = NILP (val) ? Qnormal : val; - - plist[6] = QCslant; + if (! NILP (val)) + { + plist[n++] = QCweight; + plist[n++] = val; + } + val = FONT_SLANT_FOR_FACE (font); - plist[7] = NILP (val) ? Qnormal : val; - - plist[8] = QCwidth; + if (! NILP (val)) + { + plist[n++] = QCslant; + plist[n++] = val; + } + val = FONT_WIDTH_FOR_FACE (font); - plist[9] = NILP (val) ? Qnormal : val; - - return Flist (10, plist); + if (! NILP (val)) + { + plist[n++] = QCwidth; + plist[n++] = val; + } + + return Flist (n, plist); } #endif