diff options
| author | Chong Yidong | 2008-06-20 23:27:07 +0000 |
|---|---|---|
| committer | Chong Yidong | 2008-06-20 23:27:07 +0000 |
| commit | 5989ba2f87b231d9421ec13fb9e0811767921aa5 (patch) | |
| tree | 84d1b59efdd4e77e1c4d802c33d9b3ce5acf8d21 /src | |
| parent | eaf1f6e7feeddf0ffac635cc846d12802353cfcd (diff) | |
| download | emacs-5989ba2f87b231d9421ec13fb9e0811767921aa5.tar.gz emacs-5989ba2f87b231d9421ec13fb9e0811767921aa5.zip | |
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
font.
Diffstat (limited to 'src')
| -rw-r--r-- | src/font.c | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/src/font.c b/src/font.c index d49a19acac0..f10235249f6 100644 --- a/src/font.c +++ b/src/font.c | |||
| @@ -3733,7 +3733,8 @@ The return value is a list of the form | |||
| 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. */) |
| @@ -3743,6 +3744,7 @@ are to be displayed on. If omitted, the selected frame is used. */) | |||
| 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; |
| @@ -3762,36 +3764,49 @@ are to be displayed on. If omitted, the selected frame is used. */) | |||
| 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)) |
| 3769 | { | ||
| 3770 | plist[n++] = QCfamily; | ||
| 3771 | plist[n++] = SYMBOL_NAME (val); | ||
| 3772 | } | ||
| 3768 | 3773 | ||
| 3769 | plist[2] = QCheight; | ||
| 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)); |
| 3786 | } | ||
| 3781 | 3787 | ||
| 3782 | plist[4] = QCweight; | ||
| 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)) |
| 3790 | { | ||
| 3791 | plist[n++] = QCweight; | ||
| 3792 | plist[n++] = val; | ||
| 3793 | } | ||
| 3785 | 3794 | ||
| 3786 | plist[6] = QCslant; | ||
| 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)) |
| 3797 | { | ||
| 3798 | plist[n++] = QCslant; | ||
| 3799 | plist[n++] = val; | ||
| 3800 | } | ||
| 3789 | 3801 | ||
| 3790 | plist[8] = QCwidth; | ||
| 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)) |
| 3804 | { | ||
| 3805 | plist[n++] = QCwidth; | ||
| 3806 | plist[n++] = val; | ||
| 3807 | } | ||
| 3793 | 3808 | ||
| 3794 | return Flist (10, plist); | 3809 | return Flist (n, plist); |
| 3795 | } | 3810 | } |
| 3796 | 3811 | ||
| 3797 | #endif | 3812 | #endif |