comparison src/font.c @ 96136:73e422173a87

(Ffont_face_attributes): Omit key-attribute pairs not defined by the font.
author Chong Yidong <cyd@stupidchicken.com>
date Fri, 20 Jun 2008 23:27:07 +0000
parents 86e3f462b0c2
children 5f7a1e1f15c4
comparison
equal deleted inserted replaced
96135:65e4e649a274 96136:73e422173a87
3731 The return value is a list of the form 3731 The return value is a list of the form
3732 3732
3733 \(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH) 3733 \(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH)
3734 3734
3735 where FAMILY, HEIGHT, WEIGHT, SLANT, and WIDTH are face attribute values 3735 where FAMILY, HEIGHT, WEIGHT, SLANT, and WIDTH are face attribute values
3736 compatible with `set-face-attribute'. 3736 compatible with `set-face-attribute'. Some of these key-attribute pairs
3737 may be omitted from the list if they are not specified by FONT.
3737 3738
3738 The optional argument FRAME specifies the frame that the face attributes 3739 The optional argument FRAME specifies the frame that the face attributes
3739 are to be displayed on. If omitted, the selected frame is used. */) 3740 are to be displayed on. If omitted, the selected frame is used. */)
3740 (font, frame) 3741 (font, frame)
3741 Lisp_Object font, frame; 3742 Lisp_Object font, frame;
3742 { 3743 {
3743 struct frame *f; 3744 struct frame *f;
3744 Lisp_Object plist[10]; 3745 Lisp_Object plist[10];
3745 Lisp_Object val; 3746 Lisp_Object val;
3747 int n = 0;
3746 3748
3747 if (NILP (frame)) 3749 if (NILP (frame))
3748 frame = selected_frame; 3750 frame = selected_frame;
3749 CHECK_LIVE_FRAME (frame); 3751 CHECK_LIVE_FRAME (frame);
3750 f = XFRAME (frame); 3752 f = XFRAME (frame);
3760 signal_error ("Invalid font name", name); 3762 signal_error ("Invalid font name", name);
3761 } 3763 }
3762 else if (! FONTP (font)) 3764 else if (! FONTP (font))
3763 signal_error ("Invalid font object", font); 3765 signal_error ("Invalid font object", font);
3764 3766
3765 plist[0] = QCfamily;
3766 val = AREF (font, FONT_FAMILY_INDEX); 3767 val = AREF (font, FONT_FAMILY_INDEX);
3767 plist[1] = NILP (val) ? Qnil : SYMBOL_NAME (val); 3768 if (! NILP (val))
3768 3769 {
3769 plist[2] = QCheight; 3770 plist[n++] = QCfamily;
3771 plist[n++] = SYMBOL_NAME (val);
3772 }
3773
3770 val = AREF (font, FONT_SIZE_INDEX); 3774 val = AREF (font, FONT_SIZE_INDEX);
3771 if (INTEGERP (val)) 3775 if (INTEGERP (val))
3772 { 3776 {
3773 Lisp_Object font_dpi = AREF (font, FONT_DPI_INDEX); 3777 Lisp_Object font_dpi = AREF (font, FONT_DPI_INDEX);
3774 int dpi = INTEGERP (font_dpi) ? XINT (font_dpi) : f->resy; 3778 int dpi = INTEGERP (font_dpi) ? XINT (font_dpi) : f->resy;
3775 plist[3] = make_number (10 * PIXEL_TO_POINT (XINT (val), dpi)); 3779 plist[n++] = QCheight;
3780 plist[n++] = make_number (10 * PIXEL_TO_POINT (XINT (val), dpi));
3776 } 3781 }
3777 else if (FLOATP (val)) 3782 else if (FLOATP (val))
3778 plist[3] = make_number (10 * (int) XFLOAT_DATA (val)); 3783 {
3779 else 3784 plist[n++] = QCheight;
3780 plist[3] = Qnil; 3785 plist[n++] = make_number (10 * (int) XFLOAT_DATA (val));
3781 3786 }
3782 plist[4] = QCweight; 3787
3783 val = FONT_WEIGHT_FOR_FACE (font); 3788 val = FONT_WEIGHT_FOR_FACE (font);
3784 plist[5] = NILP (val) ? Qnormal : val; 3789 if (! NILP (val))
3785 3790 {
3786 plist[6] = QCslant; 3791 plist[n++] = QCweight;
3792 plist[n++] = val;
3793 }
3794
3787 val = FONT_SLANT_FOR_FACE (font); 3795 val = FONT_SLANT_FOR_FACE (font);
3788 plist[7] = NILP (val) ? Qnormal : val; 3796 if (! NILP (val))
3789 3797 {
3790 plist[8] = QCwidth; 3798 plist[n++] = QCslant;
3799 plist[n++] = val;
3800 }
3801
3791 val = FONT_WIDTH_FOR_FACE (font); 3802 val = FONT_WIDTH_FOR_FACE (font);
3792 plist[9] = NILP (val) ? Qnormal : val; 3803 if (! NILP (val))
3793 3804 {
3794 return Flist (10, plist); 3805 plist[n++] = QCwidth;
3806 plist[n++] = val;
3807 }
3808
3809 return Flist (n, plist);
3795 } 3810 }
3796 3811
3797 #endif 3812 #endif
3798 3813
3799 DEFUN ("font-put", Ffont_put, Sfont_put, 3, 3, 0, 3814 DEFUN ("font-put", Ffont_put, Sfont_put, 3, 3, 0,