diff options
Diffstat (limited to 'src/font.c')
| -rw-r--r-- | src/font.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/src/font.c b/src/font.c index e01f67a95f6..7fe0815d80e 100644 --- a/src/font.c +++ b/src/font.c | |||
| @@ -125,14 +125,16 @@ Lisp_Object QCfoundry; | |||
| 125 | static Lisp_Object QCadstyle, QCregistry; | 125 | static Lisp_Object QCadstyle, QCregistry; |
| 126 | /* Symbols representing keys of font extra info. */ | 126 | /* Symbols representing keys of font extra info. */ |
| 127 | Lisp_Object QCspacing, QCdpi, QCscalable, QCotf, QClang, QCscript, QCavgwidth; | 127 | Lisp_Object QCspacing, QCdpi, QCscalable, QCotf, QClang, QCscript, QCavgwidth; |
| 128 | Lisp_Object QCantialias, QCfont_entity, QCfc_unknown_spec; | 128 | Lisp_Object QCantialias, QCfont_entity; |
| 129 | static Lisp_Object QCfc_unknown_spec; | ||
| 129 | /* Symbols representing values of font spacing property. */ | 130 | /* Symbols representing values of font spacing property. */ |
| 130 | Lisp_Object Qc, Qm, Qp, Qd; | 131 | static Lisp_Object Qc, Qm, Qd; |
| 132 | Lisp_Object Qp; | ||
| 131 | /* Special ADSTYLE properties to avoid fonts used for Latin | 133 | /* Special ADSTYLE properties to avoid fonts used for Latin |
| 132 | characters; used in xfont.c and ftfont.c. */ | 134 | characters; used in xfont.c and ftfont.c. */ |
| 133 | Lisp_Object Qja, Qko; | 135 | Lisp_Object Qja, Qko; |
| 134 | 136 | ||
| 135 | Lisp_Object QCuser_spec; | 137 | static Lisp_Object QCuser_spec; |
| 136 | 138 | ||
| 137 | /* Alist of font registry symbol and the corresponding charsets | 139 | /* Alist of font registry symbol and the corresponding charsets |
| 138 | information. The information is retrieved from | 140 | information. The information is retrieved from |
| @@ -2725,7 +2727,7 @@ font_list_entities (Lisp_Object frame, Lisp_Object spec) | |||
| 2725 | val = null_vector; | 2727 | val = null_vector; |
| 2726 | else | 2728 | else |
| 2727 | val = Fvconcat (1, &val); | 2729 | val = Fvconcat (1, &val); |
| 2728 | copy = Fcopy_font_spec (scratch_font_spec); | 2730 | copy = copy_font_spec (scratch_font_spec); |
| 2729 | ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); | 2731 | ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); |
| 2730 | XSETCDR (cache, Fcons (Fcons (copy, val), XCDR (cache))); | 2732 | XSETCDR (cache, Fcons (Fcons (copy, val), XCDR (cache))); |
| 2731 | } | 2733 | } |
| @@ -2753,7 +2755,7 @@ font_matching_entity (FRAME_PTR f, Lisp_Object *attrs, Lisp_Object spec) | |||
| 2753 | struct font_driver_list *driver_list = f->font_driver_list; | 2755 | struct font_driver_list *driver_list = f->font_driver_list; |
| 2754 | Lisp_Object ftype, size, entity; | 2756 | Lisp_Object ftype, size, entity; |
| 2755 | Lisp_Object frame; | 2757 | Lisp_Object frame; |
| 2756 | Lisp_Object work = Fcopy_font_spec (spec); | 2758 | Lisp_Object work = copy_font_spec (spec); |
| 2757 | 2759 | ||
| 2758 | XSETFRAME (frame, f); | 2760 | XSETFRAME (frame, f); |
| 2759 | ftype = AREF (spec, FONT_TYPE_INDEX); | 2761 | ftype = AREF (spec, FONT_TYPE_INDEX); |
| @@ -2780,7 +2782,7 @@ font_matching_entity (FRAME_PTR f, Lisp_Object *attrs, Lisp_Object spec) | |||
| 2780 | else | 2782 | else |
| 2781 | { | 2783 | { |
| 2782 | entity = driver_list->driver->match (frame, work); | 2784 | entity = driver_list->driver->match (frame, work); |
| 2783 | copy = Fcopy_font_spec (work); | 2785 | copy = copy_font_spec (work); |
| 2784 | ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); | 2786 | ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); |
| 2785 | XSETCDR (cache, Fcons (Fcons (copy, entity), XCDR (cache))); | 2787 | XSETCDR (cache, Fcons (Fcons (copy, entity), XCDR (cache))); |
| 2786 | } | 2788 | } |
| @@ -2870,7 +2872,7 @@ font_open_entity (FRAME_PTR f, Lisp_Object entity, int pixel_size) | |||
| 2870 | 2872 | ||
| 2871 | /* Close FONT_OBJECT that is opened on frame F. */ | 2873 | /* Close FONT_OBJECT that is opened on frame F. */ |
| 2872 | 2874 | ||
| 2873 | void | 2875 | static void |
| 2874 | font_close_object (FRAME_PTR f, Lisp_Object font_object) | 2876 | font_close_object (FRAME_PTR f, Lisp_Object font_object) |
| 2875 | { | 2877 | { |
| 2876 | struct font *font = XFONT_OBJECT (font_object); | 2878 | struct font *font = XFONT_OBJECT (font_object); |
| @@ -2974,7 +2976,7 @@ font_clear_prop (Lisp_Object *attrs, enum font_property_index prop) | |||
| 2974 | 2976 | ||
| 2975 | if (! NILP (Ffont_get (font, QCname))) | 2977 | if (! NILP (Ffont_get (font, QCname))) |
| 2976 | { | 2978 | { |
| 2977 | font = Fcopy_font_spec (font); | 2979 | font = copy_font_spec (font); |
| 2978 | font_put_extra (font, QCname, Qnil); | 2980 | font_put_extra (font, QCname, Qnil); |
| 2979 | } | 2981 | } |
| 2980 | 2982 | ||
| @@ -2985,7 +2987,7 @@ font_clear_prop (Lisp_Object *attrs, enum font_property_index prop) | |||
| 2985 | && prop != FONT_SIZE_INDEX) | 2987 | && prop != FONT_SIZE_INDEX) |
| 2986 | return; | 2988 | return; |
| 2987 | if (EQ (font, attrs[LFACE_FONT_INDEX])) | 2989 | if (EQ (font, attrs[LFACE_FONT_INDEX])) |
| 2988 | font = Fcopy_font_spec (font); | 2990 | font = copy_font_spec (font); |
| 2989 | ASET (font, prop, Qnil); | 2991 | ASET (font, prop, Qnil); |
| 2990 | if (prop == FONT_FAMILY_INDEX || prop == FONT_FOUNDRY_INDEX) | 2992 | if (prop == FONT_FAMILY_INDEX || prop == FONT_FOUNDRY_INDEX) |
| 2991 | { | 2993 | { |
| @@ -3096,7 +3098,7 @@ font_find_for_lface (FRAME_PTR f, Lisp_Object *attrs, Lisp_Object spec, int c) | |||
| 3096 | return Qnil; | 3098 | return Qnil; |
| 3097 | } | 3099 | } |
| 3098 | 3100 | ||
| 3099 | work = Fcopy_font_spec (spec); | 3101 | work = copy_font_spec (spec); |
| 3100 | ASET (work, FONT_TYPE_INDEX, AREF (spec, FONT_TYPE_INDEX)); | 3102 | ASET (work, FONT_TYPE_INDEX, AREF (spec, FONT_TYPE_INDEX)); |
| 3101 | XSETFRAME (frame, f); | 3103 | XSETFRAME (frame, f); |
| 3102 | pixel_size = font_pixel_size (f, spec); | 3104 | pixel_size = font_pixel_size (f, spec); |
| @@ -3866,9 +3868,9 @@ usage: (font-spec ARGS...) */) | |||
| 3866 | return spec; | 3868 | return spec; |
| 3867 | } | 3869 | } |
| 3868 | 3870 | ||
| 3869 | DEFUN ("copy-font-spec", Fcopy_font_spec, Scopy_font_spec, 1, 1, 0, | 3871 | /* Return a copy of FONT as a font-spec. */ |
| 3870 | doc: /* Return a copy of FONT as a font-spec. */) | 3872 | Lisp_Object |
| 3871 | (Lisp_Object font) | 3873 | copy_font_spec (Lisp_Object font) |
| 3872 | { | 3874 | { |
| 3873 | Lisp_Object new_spec, tail, prev, extra; | 3875 | Lisp_Object new_spec, tail, prev, extra; |
| 3874 | int i; | 3876 | int i; |
| @@ -3892,18 +3894,18 @@ DEFUN ("copy-font-spec", Fcopy_font_spec, Scopy_font_spec, 1, 1, 0, | |||
| 3892 | return new_spec; | 3894 | return new_spec; |
| 3893 | } | 3895 | } |
| 3894 | 3896 | ||
| 3895 | DEFUN ("merge-font-spec", Fmerge_font_spec, Smerge_font_spec, 2, 2, 0, | 3897 | /* Merge font-specs FROM and TO, and return a new font-spec. |
| 3896 | doc: /* Merge font-specs FROM and TO, and return a new font-spec. | 3898 | Every specified property in FROM overrides the corresponding |
| 3897 | Every specified properties in FROM override the corresponding | 3899 | property in TO. */ |
| 3898 | properties in TO. */) | 3900 | Lisp_Object |
| 3899 | (Lisp_Object from, Lisp_Object to) | 3901 | merge_font_spec (Lisp_Object from, Lisp_Object to) |
| 3900 | { | 3902 | { |
| 3901 | Lisp_Object extra, tail; | 3903 | Lisp_Object extra, tail; |
| 3902 | int i; | 3904 | int i; |
| 3903 | 3905 | ||
| 3904 | CHECK_FONT (from); | 3906 | CHECK_FONT (from); |
| 3905 | CHECK_FONT (to); | 3907 | CHECK_FONT (to); |
| 3906 | to = Fcopy_font_spec (to); | 3908 | to = copy_font_spec (to); |
| 3907 | for (i = 0; i < FONT_EXTRA_INDEX; i++) | 3909 | for (i = 0; i < FONT_EXTRA_INDEX; i++) |
| 3908 | ASET (to, i, AREF (from, i)); | 3910 | ASET (to, i, AREF (from, i)); |
| 3909 | extra = AREF (to, FONT_EXTRA_INDEX); | 3911 | extra = AREF (to, FONT_EXTRA_INDEX); |