Mercurial > emacs
annotate src/font.c @ 109140:3e48102ba93a
* src/atimer.c: Use "" instead of <> for local includes for
consistency with the rest of the code.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Sun, 04 Jul 2010 21:57:13 -0700 |
parents | aec1143e8d85 |
children | 8cfee7d2955f c11d07f3d731 |
rev | line source |
---|---|
90400 | 1 /* font.c -- "Font" primitives. |
106815 | 2 Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
3 Copyright (C) 2006, 2007, 2008, 2009, 2010 | |
90400 | 4 National Institute of Advanced Industrial Science and Technology (AIST) |
5 Registration Number H13PRO009 | |
6 | |
7 This file is part of GNU Emacs. | |
8 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94926
diff
changeset
|
9 GNU Emacs is free software: you can redistribute it and/or modify |
90400 | 10 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94926
diff
changeset
|
11 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94926
diff
changeset
|
12 (at your option) any later version. |
90400 | 13 |
14 GNU Emacs is distributed in the hope that it will be useful, | |
15 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 GNU General Public License for more details. | |
18 | |
19 You should have received a copy of the GNU General Public License | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94926
diff
changeset
|
20 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
90400 | 21 |
22 #include <config.h> | |
23 #include <stdio.h> | |
24 #include <stdlib.h> | |
25 #include <ctype.h> | |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105576
diff
changeset
|
26 #include <setjmp.h> |
90400 | 27 |
28 #include "lisp.h" | |
29 #include "buffer.h" | |
30 #include "frame.h" | |
90541 | 31 #include "window.h" |
90400 | 32 #include "dispextern.h" |
33 #include "charset.h" | |
34 #include "character.h" | |
35 #include "composite.h" | |
36 #include "fontset.h" | |
37 #include "font.h" | |
38 | |
91909 | 39 #ifdef HAVE_X_WINDOWS |
40 #include "xterm.h" | |
41 #endif /* HAVE_X_WINDOWS */ | |
42 | |
43 #ifdef HAVE_NTGUI | |
44 #include "w32term.h" | |
45 #endif /* HAVE_NTGUI */ | |
46 | |
96675
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
47 #ifdef HAVE_NS |
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
48 #include "nsterm.h" |
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
49 #endif /* HAVE_NS */ |
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
50 |
96831
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
51 #ifdef HAVE_NS |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
52 extern Lisp_Object Qfontsize; |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
53 #endif |
90400 | 54 |
90677
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
55 Lisp_Object Qopentype; |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
56 |
94926 | 57 /* Important character set strings. */ |
95699 | 58 Lisp_Object Qascii_0, Qiso8859_1, Qiso10646_1, Qunicode_bmp, Qunicode_sip; |
90439
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
59 |
96675
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
60 #define DEFAULT_ENCODING Qiso8859_1 |
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
61 |
97822 | 62 /* Unicode category `Cf'. */ |
63 static Lisp_Object QCf; | |
64 | |
90400 | 65 /* Special vector of zero length. This is repeatedly used by (struct |
66 font_driver *)->list when a specified font is not found. */ | |
94926 | 67 static Lisp_Object null_vector; |
68 | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
69 static Lisp_Object Vfont_weight_table, Vfont_slant_table, Vfont_width_table; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
70 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
71 /* Vector of Vfont_weight_table, Vfont_slant_table, and Vfont_width_table. */ |
90400 | 72 static Lisp_Object font_style_table; |
73 | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
74 /* Structure used for tables mapping weight, slant, and width numeric |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
75 values and their names. */ |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
76 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
77 struct table_entry |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
78 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
79 int numeric; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
80 /* The first one is a valid name as a face attribute. |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
81 The second one (if any) is a typical name in XLFD field. */ |
105872
89183b6f6e9d
* process.c (socket_options): Make it const.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
82 const char *names[5]; |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
83 }; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
84 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
85 /* Table of weight numeric values and their names. This table must be |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
86 sorted by numeric values in ascending order. */ |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
87 |
105872
89183b6f6e9d
* process.c (socket_options): Make it const.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
88 static const struct table_entry weight_table[] = |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
89 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
90 { 0, { "thin" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
91 { 20, { "ultra-light", "ultralight" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
92 { 40, { "extra-light", "extralight" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
93 { 50, { "light" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
94 { 75, { "semi-light", "semilight", "demilight", "book" }}, |
102298
b666efc8e847
(font_style_to_value): Set value for unknown symbols to
Chong Yidong <cyd@stupidchicken.com>
parents:
102159
diff
changeset
|
95 { 100, { "normal", "medium", "regular", "unspecified" }}, |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
96 { 180, { "semi-bold", "semibold", "demibold", "demi" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
97 { 200, { "bold" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
98 { 205, { "extra-bold", "extrabold" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
99 { 210, { "ultra-bold", "ultrabold", "black" }} |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
100 }; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
101 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
102 /* Table of slant numeric values and their names. This table must be |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
103 sorted by numeric values in ascending order. */ |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
104 |
105872
89183b6f6e9d
* process.c (socket_options): Make it const.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
105 static const struct table_entry slant_table[] = |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
106 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
107 { 0, { "reverse-oblique", "ro" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
108 { 10, { "reverse-italic", "ri" }}, |
102298
b666efc8e847
(font_style_to_value): Set value for unknown symbols to
Chong Yidong <cyd@stupidchicken.com>
parents:
102159
diff
changeset
|
109 { 100, { "normal", "r", "unspecified" }}, |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
110 { 200, { "italic" ,"i", "ot" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
111 { 210, { "oblique", "o" }} |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
112 }; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
113 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
114 /* Table of width numeric values and their names. This table must be |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
115 sorted by numeric values in ascending order. */ |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
116 |
105872
89183b6f6e9d
* process.c (socket_options): Make it const.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105669
diff
changeset
|
117 static const struct table_entry width_table[] = |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
118 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
119 { 50, { "ultra-condensed", "ultracondensed" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
120 { 63, { "extra-condensed", "extracondensed" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
121 { 75, { "condensed", "compressed", "narrow" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
122 { 87, { "semi-condensed", "semicondensed", "demicondensed" }}, |
102298
b666efc8e847
(font_style_to_value): Set value for unknown symbols to
Chong Yidong <cyd@stupidchicken.com>
parents:
102159
diff
changeset
|
123 { 100, { "normal", "medium", "regular", "unspecified" }}, |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
124 { 113, { "semi-expanded", "semiexpanded", "demiexpanded" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
125 { 125, { "expanded" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
126 { 150, { "extra-expanded", "extraexpanded" }}, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
127 { 200, { "ultra-expanded", "ultraexpanded", "wide" }} |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
128 }; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
129 |
94926 | 130 extern Lisp_Object Qnormal; |
90400 | 131 |
132 /* Symbols representing keys of normal font properties. */ | |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
133 extern Lisp_Object QCtype, QCfamily, QCweight, QCslant, QCwidth; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
134 extern Lisp_Object QCheight, QCsize, QCname; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
135 |
94926 | 136 Lisp_Object QCfoundry, QCadstyle, QCregistry; |
90400 | 137 /* Symbols representing keys of font extra info. */ |
94926 | 138 Lisp_Object QCspacing, QCdpi, QCscalable, QCotf, QClang, QCscript, QCavgwidth; |
139 Lisp_Object QCantialias, QCfont_entity, QCfc_unknown_spec; | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
140 /* Symbols representing values of font spacing property. */ |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
141 Lisp_Object Qc, Qm, Qp, Qd; |
103011
8f0fbb48af5a
* font.c (Qja, Qko): Move definitions here from ftfont.c.
Chong Yidong <cyd@stupidchicken.com>
parents:
102990
diff
changeset
|
142 /* Special ADSTYLE properties to avoid fonts used for Latin |
8f0fbb48af5a
* font.c (Qja, Qko): Move definitions here from ftfont.c.
Chong Yidong <cyd@stupidchicken.com>
parents:
102990
diff
changeset
|
143 characters; used in xfont.c and ftfont.c. */ |
8f0fbb48af5a
* font.c (Qja, Qko): Move definitions here from ftfont.c.
Chong Yidong <cyd@stupidchicken.com>
parents:
102990
diff
changeset
|
144 Lisp_Object Qja, Qko; |
90400 | 145 |
106750
10b9609fb6b7
Fixing user-spec for fonts instead of using name.
Jan D. <jan.h.d@swipnet.se>
parents:
106618
diff
changeset
|
146 Lisp_Object QCuser_spec; |
10b9609fb6b7
Fixing user-spec for fonts instead of using name.
Jan D. <jan.h.d@swipnet.se>
parents:
106618
diff
changeset
|
147 |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
148 Lisp_Object Vfont_encoding_alist; |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
149 |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
150 /* Alist of font registry symbol and the corresponding charsets |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
151 information. The information is retrieved from |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
152 Vfont_encoding_alist on demand. |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
153 |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
154 Eash element has the form: |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
155 (REGISTRY . (ENCODING-CHARSET-ID . REPERTORY-CHARSET-ID)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
156 or |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
157 (REGISTRY . nil) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
158 |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
159 In the former form, ENCODING-CHARSET-ID is an ID of a charset that |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
160 encodes a character code to a glyph code of a font, and |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
161 REPERTORY-CHARSET-ID is an ID of a charset that tells if a |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
162 character is supported by a font. |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
163 |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
164 The latter form means that the information for REGISTRY couldn't be |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
165 retrieved. */ |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
166 static Lisp_Object font_charset_alist; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
167 |
91112
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
168 /* List of all font drivers. Each font-backend (XXXfont.c) calls |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
169 register_font_driver in syms_of_XXXfont to register its font-driver |
90400 | 170 here. */ |
171 static struct font_driver_list *font_driver_list; | |
172 | |
94926 | 173 |
174 | |
175 /* Creaters of font-related Lisp object. */ | |
176 | |
177 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
178 font_make_spec (void) |
94926 | 179 { |
180 Lisp_Object font_spec; | |
181 struct font_spec *spec | |
182 = ((struct font_spec *) | |
183 allocate_pseudovector (VECSIZE (struct font_spec), | |
184 FONT_SPEC_MAX, PVEC_FONT)); | |
185 XSETFONT (font_spec, spec); | |
186 return font_spec; | |
187 } | |
188 | |
189 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
190 font_make_entity (void) |
94926 | 191 { |
192 Lisp_Object font_entity; | |
193 struct font_entity *entity | |
194 = ((struct font_entity *) | |
195 allocate_pseudovector (VECSIZE (struct font_entity), | |
196 FONT_ENTITY_MAX, PVEC_FONT)); | |
197 XSETFONT (font_entity, entity); | |
198 return font_entity; | |
199 } | |
200 | |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
201 /* Create a font-object whose structure size is SIZE. If ENTITY is |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
202 not nil, copy properties from ENTITY to the font-object. If |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
203 PIXELSIZE is positive, set the `size' property to PIXELSIZE. */ |
94926 | 204 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
205 font_make_object (int size, Lisp_Object entity, int pixelsize) |
94926 | 206 { |
207 Lisp_Object font_object; | |
208 struct font *font | |
209 = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX, PVEC_FONT); | |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
210 int i; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
211 |
94926 | 212 XSETFONT (font_object, font); |
213 | |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
214 if (! NILP (entity)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
215 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
216 for (i = 1; i < FONT_SPEC_MAX; i++) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
217 font->props[i] = AREF (entity, i); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
218 if (! NILP (AREF (entity, FONT_EXTRA_INDEX))) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
219 font->props[FONT_EXTRA_INDEX] |
106201
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
220 = Fcopy_alist (AREF (entity, FONT_EXTRA_INDEX)); |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
221 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
222 if (size > 0) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
223 font->props[FONT_SIZE_INDEX] = make_number (pixelsize); |
94926 | 224 return font_object; |
225 } | |
226 | |
227 | |
228 | |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
229 static int font_pixel_size (FRAME_PTR f, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
230 static Lisp_Object font_open_entity (FRAME_PTR, Lisp_Object, int); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
231 static Lisp_Object font_matching_entity (FRAME_PTR, Lisp_Object *, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
232 Lisp_Object); |
90400 | 233 |
234 /* Number of registered font drivers. */ | |
235 static int num_font_drivers; | |
236 | |
94926 | 237 |
238 /* Return a Lispy value of a font property value at STR and LEN bytes. | |
239 If STR is "*", it returns nil. | |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
240 If FORCE_SYMBOL is zero and all characters in STR are digits, it |
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
241 returns an integer. Otherwise, it returns a symbol interned from |
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
242 STR. */ |
94926 | 243 |
244 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
245 font_intern_prop (char *str, int len, int force_symbol) |
94926 | 246 { |
247 int i; | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
248 Lisp_Object tem; |
94926 | 249 Lisp_Object obarray; |
100759
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
250 int nbytes, nchars; |
94926 | 251 |
252 if (len == 1 && *str == '*') | |
253 return Qnil; | |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
254 if (!force_symbol && len >=1 && isdigit (*str)) |
94926 | 255 { |
256 for (i = 1; i < len; i++) | |
257 if (! isdigit (str[i])) | |
258 break; | |
259 if (i == len) | |
260 return make_number (atoi (str)); | |
261 } | |
262 | |
100759
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
263 /* The following code is copied from the function intern (in |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
264 lread.c), and modified to suite our purpose. */ |
94926 | 265 obarray = Vobarray; |
266 if (!VECTORP (obarray) || XVECTOR (obarray)->size == 0) | |
267 obarray = check_obarray (obarray); | |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
268 parse_str_as_multibyte ((unsigned char *) str, len, &nchars, &nbytes); |
100759
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
269 if (len == nchars || len != nbytes) |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
270 /* CONTENTS contains no multibyte sequences or contains an invalid |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
271 multibyte sequence. We'll make a unibyte string. */ |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
272 tem = oblookup (obarray, str, len, len); |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
273 else |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
274 tem = oblookup (obarray, str, nchars, len); |
94926 | 275 if (SYMBOLP (tem)) |
276 return tem; | |
100759
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
277 if (len == nchars || len != nbytes) |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
278 tem = make_unibyte_string (str, len); |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
279 else |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
280 tem = make_multibyte_string (str, nchars, len); |
fd802fcbb882
(font_intern_prop): Validate str as multibyte.
Kenichi Handa <handa@m17n.org>
parents:
100445
diff
changeset
|
281 return Fintern (tem, obarray); |
94926 | 282 } |
283 | |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
284 /* Return a pixel size of font-spec SPEC on frame F. */ |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
285 |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
286 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
287 font_pixel_size (FRAME_PTR f, Lisp_Object spec) |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
288 { |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
289 #ifdef HAVE_WINDOW_SYSTEM |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
290 Lisp_Object size = AREF (spec, FONT_SIZE_INDEX); |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
291 double point_size; |
94926 | 292 int dpi, pixel_size; |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
293 Lisp_Object val; |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
294 |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
295 if (INTEGERP (size)) |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
296 return XINT (size); |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
297 if (NILP (size)) |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
298 return 0; |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
299 font_assert (FLOATP (size)); |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
300 point_size = XFLOAT_DATA (size); |
94926 | 301 val = AREF (spec, FONT_DPI_INDEX); |
302 if (INTEGERP (val)) | |
95483
d3cbd7d56845
(font_pixel_size): Don't take cdr of an integer.
Chong Yidong <cyd@stupidchicken.com>
parents:
95475
diff
changeset
|
303 dpi = XINT (val); |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
304 else |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
305 dpi = f->resy; |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
306 pixel_size = POINT_TO_PIXEL (point_size, dpi); |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
307 return pixel_size; |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
308 #else |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
309 return 1; |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
310 #endif |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
311 } |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
312 |
94926 | 313 |
314 /* Return a value of PROP's VAL (symbol or integer) to be stored in a | |
315 font vector. If VAL is not valid (i.e. not registered in | |
316 font_style_table), return -1 if NOERROR is zero, and return a | |
317 proper index if NOERROR is nonzero. In that case, register VAL in | |
318 font_style_table if VAL is a symbol, and return a closest index if | |
319 VAL is an integer. */ | |
320 | |
321 int | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
322 font_style_to_value (enum font_property_index prop, Lisp_Object val, int noerror) |
90400 | 323 { |
94926 | 324 Lisp_Object table = AREF (font_style_table, prop - FONT_WEIGHT_INDEX); |
325 int len = ASIZE (table); | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
326 int i, j; |
94926 | 327 |
328 if (SYMBOLP (val)) | |
90400 | 329 { |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
330 unsigned char *s; |
94926 | 331 Lisp_Object args[2], elt; |
332 | |
333 /* At first try exact match. */ | |
334 for (i = 0; i < len; i++) | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
335 for (j = 1; j < ASIZE (AREF (table, i)); j++) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
336 if (EQ (val, AREF (AREF (table, i), j))) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
337 return ((XINT (AREF (AREF (table, i), 0)) << 8) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
338 | (i << 4) | (j - 1)); |
94926 | 339 /* Try also with case-folding match. */ |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
340 s = SDATA (SYMBOL_NAME (val)); |
94926 | 341 for (i = 0; i < len; i++) |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
342 for (j = 1; j < ASIZE (AREF (table, i)); j++) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
343 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
344 elt = AREF (AREF (table, i), j); |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
345 if (xstrcasecmp (s, SDATA (SYMBOL_NAME (elt))) == 0) |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
346 return ((XINT (AREF (AREF (table, i), 0)) << 8) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
347 | (i << 4) | (j - 1)); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
348 } |
94926 | 349 if (! noerror) |
350 return -1; | |
351 if (len == 255) | |
352 abort (); | |
102298
b666efc8e847
(font_style_to_value): Set value for unknown symbols to
Chong Yidong <cyd@stupidchicken.com>
parents:
102159
diff
changeset
|
353 elt = Fmake_vector (make_number (2), make_number (100)); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
354 ASET (elt, 1, val); |
94926 | 355 args[0] = table; |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
356 args[1] = Fmake_vector (make_number (1), elt); |
94926 | 357 ASET (font_style_table, prop - FONT_WEIGHT_INDEX, Fvconcat (2, args)); |
102298
b666efc8e847
(font_style_to_value): Set value for unknown symbols to
Chong Yidong <cyd@stupidchicken.com>
parents:
102159
diff
changeset
|
358 return (100 << 8) | (i << 4); |
90400 | 359 } |
94926 | 360 else |
361 { | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
362 int i, last_n; |
94926 | 363 int numeric = XINT (val); |
364 | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
365 for (i = 0, last_n = -1; i < len; i++) |
94926 | 366 { |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
367 int n = XINT (AREF (AREF (table, i), 0)); |
94926 | 368 |
369 if (numeric == n) | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
370 return (n << 8) | (i << 4); |
94926 | 371 if (numeric < n) |
372 { | |
373 if (! noerror) | |
374 return -1; | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
375 return ((i == 0 || n - numeric < numeric - last_n) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
376 ? (n << 8) | (i << 4): (last_n << 8 | ((i - 1) << 4))); |
94926 | 377 } |
378 last_n = n; | |
379 } | |
380 if (! noerror) | |
381 return -1; | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
382 return ((last_n << 8) | ((i - 1) << 4)); |
94926 | 383 } |
90400 | 384 } |
385 | |
386 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
387 font_style_symbolic (Lisp_Object font, enum font_property_index prop, int for_face) |
90400 | 388 { |
96005
66f0213be62a
Fix crashing bug in use of bold fonts from x-select-font on W32.
Jason Rumney <jasonr@gnu.org>
parents:
96000
diff
changeset
|
389 Lisp_Object val = AREF (font, prop); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
390 Lisp_Object table, elt; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
391 int i; |
94926 | 392 |
393 if (NILP (val)) | |
394 return Qnil; | |
395 table = AREF (font_style_table, prop - FONT_WEIGHT_INDEX); | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
396 i = XINT (val) & 0xFF; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
397 font_assert (((i >> 4) & 0xF) < ASIZE (table)); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
398 elt = AREF (table, ((i >> 4) & 0xF)); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
399 font_assert ((i & 0xF) + 1 < ASIZE (elt)); |
100336
d53183123ad7
* font.c (Ffont_spec): Move usage to end of docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
100173
diff
changeset
|
400 return (for_face ? AREF (elt, 1) : AREF (elt, (i & 0xF) + 1)); |
95894
76261fd18708
* w32fns.c (Fw32_select_font): Removed old font API function.
Jason Rumney <jasonr@gnu.org>
parents:
95890
diff
changeset
|
401 } |
76261fd18708
* w32fns.c (Fw32_select_font): Removed old font API function.
Jason Rumney <jasonr@gnu.org>
parents:
95890
diff
changeset
|
402 |
90400 | 403 extern Lisp_Object Vface_alternative_font_family_alist; |
404 | |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
405 extern Lisp_Object find_font_encoding (Lisp_Object); |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
406 |
94926 | 407 |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
408 /* Return ENCODING or a cons of ENCODING and REPERTORY of the font |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
409 FONTNAME. ENCODING is a charset symbol that specifies the encoding |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
410 of the font. REPERTORY is a charset symbol or nil. */ |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
411 |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
412 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
413 find_font_encoding (Lisp_Object fontname) |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
414 { |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
415 Lisp_Object tail, elt; |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
416 |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
417 for (tail = Vfont_encoding_alist; CONSP (tail); tail = XCDR (tail)) |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
418 { |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
419 elt = XCAR (tail); |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
420 if (CONSP (elt) |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
421 && STRINGP (XCAR (elt)) |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
422 && fast_string_match_ignore_case (XCAR (elt), fontname) >= 0 |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
423 && (SYMBOLP (XCDR (elt)) |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
424 ? CHARSETP (XCDR (elt)) |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
425 : CONSP (XCDR (elt)) && CHARSETP (XCAR (XCDR (elt))))) |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
426 return (XCDR (elt)); |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
427 } |
102708
c8014e79191f
(find_font_encoding): Return Qnil for unsupported encoding.
Kenichi Handa <handa@m17n.org>
parents:
102483
diff
changeset
|
428 return Qnil; |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
429 } |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
430 |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
431 /* Return encoding charset and repertory charset for REGISTRY in |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
432 ENCODING and REPERTORY correspondingly. If correct information for |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
433 REGISTRY is available, return 0. Otherwise return -1. */ |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
434 |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
435 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
436 font_registry_charsets (Lisp_Object registry, struct charset **encoding, struct charset **repertory) |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
437 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
438 Lisp_Object val; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
439 int encoding_id, repertory_id; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
440 |
94926 | 441 val = Fassoc_string (registry, font_charset_alist, Qt); |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
442 if (! NILP (val)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
443 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
444 val = XCDR (val); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
445 if (NILP (val)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
446 return -1; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
447 encoding_id = XINT (XCAR (val)); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
448 repertory_id = XINT (XCDR (val)); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
449 } |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
450 else |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
451 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
452 val = find_font_encoding (SYMBOL_NAME (registry)); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
453 if (SYMBOLP (val) && CHARSETP (val)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
454 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
455 encoding_id = repertory_id = XINT (CHARSET_SYMBOL_ID (val)); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
456 } |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
457 else if (CONSP (val)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
458 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
459 if (! CHARSETP (XCAR (val))) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
460 goto invalid_entry; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
461 encoding_id = XINT (CHARSET_SYMBOL_ID (XCAR (val))); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
462 if (NILP (XCDR (val))) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
463 repertory_id = -1; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
464 else |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
465 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
466 if (! CHARSETP (XCDR (val))) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
467 goto invalid_entry; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
468 repertory_id = XINT (CHARSET_SYMBOL_ID (XCDR (val))); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
469 } |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
470 } |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
471 else |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
472 goto invalid_entry; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
473 val = Fcons (make_number (encoding_id), make_number (repertory_id)); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
474 font_charset_alist |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
475 = nconc2 (font_charset_alist, Fcons (Fcons (registry, val), Qnil)); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
476 } |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
477 |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
478 if (encoding) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
479 *encoding = CHARSET_FROM_ID (encoding_id); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
480 if (repertory) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
481 *repertory = repertory_id >= 0 ? CHARSET_FROM_ID (repertory_id) : NULL; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
482 return 0; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
483 |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
484 invalid_entry: |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
485 font_charset_alist |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
486 = nconc2 (font_charset_alist, Fcons (Fcons (registry, Qnil), Qnil)); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
487 return -1; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
488 } |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
489 |
90400 | 490 |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
491 /* Font property value validaters. See the comment of |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
492 font_property_table for the meaning of the arguments. */ |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
493 |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
494 static Lisp_Object font_prop_validate (int, Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
495 static Lisp_Object font_prop_validate_symbol (Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
496 static Lisp_Object font_prop_validate_style (Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
497 static Lisp_Object font_prop_validate_non_neg (Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
498 static Lisp_Object font_prop_validate_spacing (Lisp_Object, Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
499 static int get_font_prop_index (Lisp_Object); |
90400 | 500 |
501 static Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
502 font_prop_validate_symbol (Lisp_Object prop, Lisp_Object val) |
90400 | 503 { |
504 if (STRINGP (val)) | |
94926 | 505 val = Fintern (val, Qnil); |
506 if (! SYMBOLP (val)) | |
507 val = Qerror; | |
508 else if (EQ (prop, QCregistry)) | |
509 val = Fintern (Fdowncase (SYMBOL_NAME (val)), Qnil); | |
510 return val; | |
511 } | |
512 | |
513 | |
514 static Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
515 font_prop_validate_style (Lisp_Object style, Lisp_Object val) |
94926 | 516 { |
517 enum font_property_index prop = (EQ (style, QCweight) ? FONT_WEIGHT_INDEX | |
518 : EQ (style, QCslant) ? FONT_SLANT_INDEX | |
519 : FONT_WIDTH_INDEX); | |
520 int n; | |
521 if (INTEGERP (val)) | |
522 { | |
523 n = XINT (val); | |
95194
6be267398fe5
(font_prop_validate_style): Adjusted for the format
Kenichi Handa <handa@m17n.org>
parents:
95177
diff
changeset
|
524 if (((n >> 4) & 0xF) |
94926 | 525 >= ASIZE (AREF (font_style_table, prop - FONT_WEIGHT_INDEX))) |
526 val = Qerror; | |
527 else | |
528 { | |
95194
6be267398fe5
(font_prop_validate_style): Adjusted for the format
Kenichi Handa <handa@m17n.org>
parents:
95177
diff
changeset
|
529 Lisp_Object elt = AREF (AREF (font_style_table, prop - FONT_WEIGHT_INDEX), (n >> 4) & 0xF); |
6be267398fe5
(font_prop_validate_style): Adjusted for the format
Kenichi Handa <handa@m17n.org>
parents:
95177
diff
changeset
|
530 |
6be267398fe5
(font_prop_validate_style): Adjusted for the format
Kenichi Handa <handa@m17n.org>
parents:
95177
diff
changeset
|
531 if ((n & 0xF) + 1 >= ASIZE (elt)) |
6be267398fe5
(font_prop_validate_style): Adjusted for the format
Kenichi Handa <handa@m17n.org>
parents:
95177
diff
changeset
|
532 val = Qerror; |
6be267398fe5
(font_prop_validate_style): Adjusted for the format
Kenichi Handa <handa@m17n.org>
parents:
95177
diff
changeset
|
533 else if (XINT (AREF (elt, 0)) != (n >> 8)) |
94926 | 534 val = Qerror; |
535 } | |
536 } | |
90400 | 537 else if (SYMBOLP (val)) |
538 { | |
94926 | 539 int n = font_style_to_value (prop, val, 0); |
540 | |
541 val = n >= 0 ? make_number (n) : Qerror; | |
90400 | 542 } |
543 else | |
544 val = Qerror; | |
545 return val; | |
546 } | |
547 | |
548 static Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
549 font_prop_validate_non_neg (Lisp_Object prop, Lisp_Object val) |
90400 | 550 { |
551 return (NATNUMP (val) || (FLOATP (val) && XFLOAT_DATA (val) >= 0) | |
552 ? val : Qerror); | |
553 } | |
554 | |
555 static Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
556 font_prop_validate_spacing (Lisp_Object prop, Lisp_Object val) |
90400 | 557 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
558 if (NILP (val) || (NATNUMP (val) && XINT (val) <= FONT_SPACING_CHARCELL)) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
559 return val; |
95504
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
560 if (SYMBOLP (val) && SBYTES (SYMBOL_NAME (val)) == 1) |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
561 { |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
562 char spacing = SDATA (SYMBOL_NAME (val))[0]; |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
563 |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
564 if (spacing == 'c' || spacing == 'C') |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
565 return make_number (FONT_SPACING_CHARCELL); |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
566 if (spacing == 'm' || spacing == 'M') |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
567 return make_number (FONT_SPACING_MONO); |
95523
3c4256715c94
(font_prop_validate_spacing): Fix last change.
Andreas Schwab <schwab@suse.de>
parents:
95516
diff
changeset
|
568 if (spacing == 'p' || spacing == 'P') |
95504
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
569 return make_number (FONT_SPACING_PROPORTIONAL); |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
570 if (spacing == 'd' || spacing == 'D') |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
571 return make_number (FONT_SPACING_DUAL); |
00bdff60fc10
(font_prop_validate_spacing): Handle uppercase symbols.
Kenichi Handa <handa@m17n.org>
parents:
95483
diff
changeset
|
572 } |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
573 return Qerror; |
90400 | 574 } |
575 | |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
576 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
577 font_prop_validate_otf (Lisp_Object prop, Lisp_Object val) |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
578 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
579 Lisp_Object tail, tmp; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
580 int i; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
581 |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
582 /* VAL = (SCRIPT [ LANGSYS [ GSUB-FEATURES [ GPOS-FEATURES ]]]) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
583 GSUB-FEATURES = (FEATURE ... [ nil FEATURE ... ]) | nil |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
584 GPOS-FEATURES = (FEATURE ... [ nil FEATURE ... ]) | nil */ |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
585 if (! CONSP (val)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
586 return Qerror; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
587 if (! SYMBOLP (XCAR (val))) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
588 return Qerror; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
589 tail = XCDR (val); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
590 if (NILP (tail)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
591 return val; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
592 if (! CONSP (tail) || ! SYMBOLP (XCAR (val))) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
593 return Qerror; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
594 for (i = 0; i < 2; i++) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
595 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
596 tail = XCDR (tail); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
597 if (NILP (tail)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
598 return val; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
599 if (! CONSP (tail)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
600 return Qerror; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
601 for (tmp = XCAR (tail); CONSP (tmp); tmp = XCDR (tmp)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
602 if (! SYMBOLP (XCAR (tmp))) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
603 return Qerror; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
604 if (! NILP (tmp)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
605 return Qerror; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
606 } |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
607 return val; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
608 } |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
609 |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
610 /* Structure of known font property keys and validater of the |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
611 values. */ |
90400 | 612 struct |
613 { | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
614 /* Pointer to the key symbol. */ |
90400 | 615 Lisp_Object *key; |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
616 /* Function to validate PROP's value VAL, or NULL if any value is |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
617 ok. The value is VAL or its regularized value if VAL is valid, |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
618 and Qerror if not. */ |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
619 Lisp_Object (*validater) (Lisp_Object prop, Lisp_Object val); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
620 } font_property_table[] = |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
621 { { &QCtype, font_prop_validate_symbol }, |
90400 | 622 { &QCfoundry, font_prop_validate_symbol }, |
623 { &QCfamily, font_prop_validate_symbol }, | |
624 { &QCadstyle, font_prop_validate_symbol }, | |
625 { &QCregistry, font_prop_validate_symbol }, | |
626 { &QCweight, font_prop_validate_style }, | |
627 { &QCslant, font_prop_validate_style }, | |
628 { &QCwidth, font_prop_validate_style }, | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
629 { &QCsize, font_prop_validate_non_neg }, |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
630 { &QCdpi, font_prop_validate_non_neg }, |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
631 { &QCspacing, font_prop_validate_spacing }, |
94926 | 632 { &QCavgwidth, font_prop_validate_non_neg }, |
633 /* The order of the above entries must match with enum | |
634 font_property_index. */ | |
635 { &QClang, font_prop_validate_symbol }, | |
636 { &QCscript, font_prop_validate_symbol }, | |
637 { &QCotf, font_prop_validate_otf } | |
90400 | 638 }; |
639 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
640 /* Size (number of elements) of the above table. */ |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
641 #define FONT_PROPERTY_TABLE_SIZE \ |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
642 ((sizeof font_property_table) / (sizeof *font_property_table)) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
643 |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
644 /* Return an index number of font property KEY or -1 if KEY is not an |
94926 | 645 already known property. */ |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
646 |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
647 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
648 get_font_prop_index (Lisp_Object key) |
90400 | 649 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
650 int i; |
94926 | 651 |
652 for (i = 0; i < FONT_PROPERTY_TABLE_SIZE; i++) | |
653 if (EQ (key, *font_property_table[i].key)) | |
654 return i; | |
655 return -1; | |
656 } | |
657 | |
658 /* Validate the font property. The property key is specified by the | |
659 symbol PROP, or the index IDX (if PROP is nil). If VAL is invalid, | |
660 signal an error. The value is VAL or the regularized one. */ | |
661 | |
662 static Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
663 font_prop_validate (int idx, Lisp_Object prop, Lisp_Object val) |
94926 | 664 { |
665 Lisp_Object validated; | |
666 | |
94964
5ffc88767cc1
(font_prop_validate): Make nil a valid value.
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
667 if (NILP (val)) |
5ffc88767cc1
(font_prop_validate): Make nil a valid value.
Kenichi Handa <handa@m17n.org>
parents:
94963
diff
changeset
|
668 return val; |
94926 | 669 if (NILP (prop)) |
670 prop = *font_property_table[idx].key; | |
671 else | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
672 { |
94926 | 673 idx = get_font_prop_index (prop); |
674 if (idx < 0) | |
675 return val; | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
676 } |
94926 | 677 validated = (font_property_table[idx].validater) (prop, val); |
678 if (EQ (validated, Qerror)) | |
679 signal_error ("invalid font property", Fcons (prop, val)); | |
680 return validated; | |
90400 | 681 } |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
682 |
94926 | 683 |
684 /* Store VAL as a value of extra font property PROP in FONT while | |
685 keeping the sorting order. Don't check the validity of VAL. */ | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
686 |
90888
5f03b3602143
(font_put_extra): Expose externally.
Jason Rumney <jasonr@gnu.org>
parents:
90883
diff
changeset
|
687 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
688 font_put_extra (Lisp_Object font, Lisp_Object prop, Lisp_Object val) |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
689 { |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
690 Lisp_Object extra = AREF (font, FONT_EXTRA_INDEX); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
691 Lisp_Object slot = (NILP (extra) ? Qnil : assq_no_quit (prop, extra)); |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
692 |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
693 if (NILP (slot)) |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
694 { |
94926 | 695 Lisp_Object prev = Qnil; |
696 | |
697 while (CONSP (extra) | |
698 && NILP (Fstring_lessp (prop, XCAR (XCAR (extra))))) | |
699 prev = extra, extra = XCDR (extra); | |
106201
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
700 |
106433
7c2192f52cb6
Fix a comment and delete trailing whitespace.
Chong Yidong <cyd@stupidchicken.com>
parents:
106350
diff
changeset
|
701 if (NILP (prev)) |
106201
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
702 ASET (font, FONT_EXTRA_INDEX, Fcons (Fcons (prop, val), extra)); |
106433
7c2192f52cb6
Fix a comment and delete trailing whitespace.
Chong Yidong <cyd@stupidchicken.com>
parents:
106350
diff
changeset
|
703 else |
106201
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
704 XSETCDR (prev, Fcons (Fcons (prop, val), extra)); |
106433
7c2192f52cb6
Fix a comment and delete trailing whitespace.
Chong Yidong <cyd@stupidchicken.com>
parents:
106350
diff
changeset
|
705 |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
706 return val; |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
707 } |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
708 XSETCDR (slot, val); |
102897
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
709 if (NILP (val)) |
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
710 ASET (font, FONT_EXTRA_INDEX, Fdelq (slot, extra)); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
711 return val; |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
712 } |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
713 |
90400 | 714 |
715 /* Font name parser and unparser */ | |
716 | |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
717 static int parse_matrix (char *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
718 static int font_expand_wildcards (Lisp_Object *, int); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
719 static int font_parse_name (char *, Lisp_Object); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
720 |
90400 | 721 /* An enumerator for each field of an XLFD font name. */ |
722 enum xlfd_field_index | |
723 { | |
724 XLFD_FOUNDRY_INDEX, | |
725 XLFD_FAMILY_INDEX, | |
726 XLFD_WEIGHT_INDEX, | |
727 XLFD_SLANT_INDEX, | |
728 XLFD_SWIDTH_INDEX, | |
729 XLFD_ADSTYLE_INDEX, | |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
730 XLFD_PIXEL_INDEX, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
731 XLFD_POINT_INDEX, |
90400 | 732 XLFD_RESX_INDEX, |
733 XLFD_RESY_INDEX, | |
734 XLFD_SPACING_INDEX, | |
735 XLFD_AVGWIDTH_INDEX, | |
736 XLFD_REGISTRY_INDEX, | |
737 XLFD_ENCODING_INDEX, | |
738 XLFD_LAST_INDEX | |
739 }; | |
740 | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
741 /* An enumerator for mask bit corresponding to each XLFD field. */ |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
742 enum xlfd_field_mask |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
743 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
744 XLFD_FOUNDRY_MASK = 0x0001, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
745 XLFD_FAMILY_MASK = 0x0002, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
746 XLFD_WEIGHT_MASK = 0x0004, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
747 XLFD_SLANT_MASK = 0x0008, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
748 XLFD_SWIDTH_MASK = 0x0010, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
749 XLFD_ADSTYLE_MASK = 0x0020, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
750 XLFD_PIXEL_MASK = 0x0040, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
751 XLFD_POINT_MASK = 0x0080, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
752 XLFD_RESX_MASK = 0x0100, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
753 XLFD_RESY_MASK = 0x0200, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
754 XLFD_SPACING_MASK = 0x0400, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
755 XLFD_AVGWIDTH_MASK = 0x0800, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
756 XLFD_REGISTRY_MASK = 0x1000, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
757 XLFD_ENCODING_MASK = 0x2000 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
758 }; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
759 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
760 |
90400 | 761 /* Parse P pointing the pixel/point size field of the form |
762 `[A B C D]' which specifies a transformation matrix: | |
763 | |
764 A B 0 | |
765 C D 0 | |
766 0 0 1 | |
767 | |
768 by which all glyphs of the font are transformed. The spec says | |
769 that scalar value N for the pixel/point size is equivalent to: | |
770 A = N * resx/resy, B = C = 0, D = N. | |
771 | |
772 Return the scalar value N if the form is valid. Otherwise return | |
773 -1. */ | |
774 | |
775 static int | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
776 parse_matrix (char *p) |
90400 | 777 { |
778 double matrix[4]; | |
779 char *end; | |
780 int i; | |
781 | |
782 for (i = 0, p++; i < 4 && *p && *p != ']'; i++) | |
783 { | |
784 if (*p == '~') | |
785 matrix[i] = - strtod (p + 1, &end); | |
786 else | |
787 matrix[i] = strtod (p, &end); | |
788 p = end; | |
789 } | |
790 return (i == 4 ? (int) matrix[3] : -1); | |
791 } | |
792 | |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
793 /* Expand a wildcard field in FIELD (the first N fields are filled) to |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
794 multiple fields to fill in all 14 XLFD fields while restring a |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
795 field position by its contents. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
796 |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
797 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
798 font_expand_wildcards (Lisp_Object *field, int n) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
799 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
800 /* Copy of FIELD. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
801 Lisp_Object tmp[XLFD_LAST_INDEX]; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
802 /* Array of information about where this element can go. Nth |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
803 element is for Nth element of FIELD. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
804 struct { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
805 /* Minimum possible field. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
806 int from; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
807 /* Maxinum possible field. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
808 int to; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
809 /* Bit mask of possible field. Nth bit corresponds to Nth field. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
810 int mask; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
811 } range[XLFD_LAST_INDEX]; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
812 int i, j; |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
813 int range_from, range_to; |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
814 unsigned range_mask; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
815 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
816 #define XLFD_SYMBOL_MASK (XLFD_FOUNDRY_MASK | XLFD_FAMILY_MASK \ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
817 | XLFD_ADSTYLE_MASK | XLFD_REGISTRY_MASK) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
818 #define XLFD_NULL_MASK (XLFD_FOUNDRY_MASK | XLFD_ADSTYLE_MASK) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
819 #define XLFD_LARGENUM_MASK (XLFD_POINT_MASK | XLFD_RESX_MASK | XLFD_RESY_MASK \ |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
820 | XLFD_AVGWIDTH_MASK) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
821 #define XLFD_REGENC_MASK (XLFD_REGISTRY_MASK | XLFD_ENCODING_MASK) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
822 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
823 /* Initialize RANGE_MASK for FIELD[0] which can be 0th to (14 - N)th |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
824 field. The value is shifted to left one bit by one in the |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
825 following loop. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
826 for (i = 0, range_mask = 0; i <= 14 - n; i++) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
827 range_mask = (range_mask << 1) | 1; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
828 |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
829 /* The triplet RANGE_FROM, RANGE_TO, and RANGE_MASK is a |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
830 position-based retriction for FIELD[I]. */ |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
831 for (i = 0, range_from = 0, range_to = 14 - n; i < n; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
832 i++, range_from++, range_to++, range_mask <<= 1) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
833 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
834 Lisp_Object val = field[i]; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
835 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
836 tmp[i] = val; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
837 if (NILP (val)) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
838 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
839 /* Wildcard. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
840 range[i].from = range_from; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
841 range[i].to = range_to; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
842 range[i].mask = range_mask; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
843 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
844 else |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
845 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
846 /* The triplet FROM, TO, and MASK is a value-based |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
847 retriction for FIELD[I]. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
848 int from, to; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
849 unsigned mask; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
850 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
851 if (INTEGERP (val)) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
852 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
853 int numeric = XINT (val); |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
854 |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
855 if (i + 1 == n) |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
856 from = to = XLFD_ENCODING_INDEX, |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
857 mask = XLFD_ENCODING_MASK; |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
858 else if (numeric == 0) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
859 from = XLFD_PIXEL_INDEX, to = XLFD_AVGWIDTH_INDEX, |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
860 mask = XLFD_PIXEL_MASK | XLFD_LARGENUM_MASK; |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
861 else if (numeric <= 48) |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
862 from = to = XLFD_PIXEL_INDEX, |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
863 mask = XLFD_PIXEL_MASK; |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
864 else |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
865 from = XLFD_POINT_INDEX, to = XLFD_AVGWIDTH_INDEX, |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
866 mask = XLFD_LARGENUM_MASK; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
867 } |
94926 | 868 else if (SBYTES (SYMBOL_NAME (val)) == 0) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
869 from = XLFD_FOUNDRY_INDEX, to = XLFD_ADSTYLE_INDEX, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
870 mask = XLFD_NULL_MASK; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
871 else if (i == 0) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
872 from = to = XLFD_FOUNDRY_INDEX, mask = XLFD_FOUNDRY_MASK; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
873 else if (i + 1 == n) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
874 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
875 Lisp_Object name = SYMBOL_NAME (val); |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
876 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
877 if (SDATA (name)[SBYTES (name) - 1] == '*') |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
878 from = XLFD_REGISTRY_INDEX, to = XLFD_ENCODING_INDEX, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
879 mask = XLFD_REGENC_MASK; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
880 else |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
881 from = to = XLFD_ENCODING_INDEX, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
882 mask = XLFD_ENCODING_MASK; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
883 } |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
884 else if (range_from <= XLFD_WEIGHT_INDEX |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
885 && range_to >= XLFD_WEIGHT_INDEX |
94926 | 886 && FONT_WEIGHT_NAME_NUMERIC (val) >= 0) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
887 from = to = XLFD_WEIGHT_INDEX, mask = XLFD_WEIGHT_MASK; |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
888 else if (range_from <= XLFD_SLANT_INDEX |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
889 && range_to >= XLFD_SLANT_INDEX |
94926 | 890 && FONT_SLANT_NAME_NUMERIC (val) >= 0) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
891 from = to = XLFD_SLANT_INDEX, mask = XLFD_SLANT_MASK; |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
892 else if (range_from <= XLFD_SWIDTH_INDEX |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
893 && range_to >= XLFD_SWIDTH_INDEX |
94926 | 894 && FONT_WIDTH_NAME_NUMERIC (val) >= 0) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
895 from = to = XLFD_SWIDTH_INDEX, mask = XLFD_SWIDTH_MASK; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
896 else |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
897 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
898 if (EQ (val, Qc) || EQ (val, Qm) || EQ (val, Qp) || EQ (val, Qd)) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
899 from = to = XLFD_SPACING_INDEX, mask = XLFD_SPACING_MASK; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
900 else |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
901 from = XLFD_FOUNDRY_INDEX, to = XLFD_ENCODING_INDEX, |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
902 mask = XLFD_SYMBOL_MASK; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
903 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
904 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
905 /* Merge position-based and value-based restrictions. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
906 mask &= range_mask; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
907 while (from < range_from) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
908 mask &= ~(1 << from++); |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
909 while (from < 14 && ! (mask & (1 << from))) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
910 from++; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
911 while (to > range_to) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
912 mask &= ~(1 << to--); |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
913 while (to >= 0 && ! (mask & (1 << to))) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
914 to--; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
915 if (from > to) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
916 return -1; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
917 range[i].from = from; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
918 range[i].to = to; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
919 range[i].mask = mask; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
920 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
921 if (from > range_from || to < range_to) |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
922 { |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
923 /* The range is narrowed by value-based restrictions. |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
924 Reflect it to the other fields. */ |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
925 |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
926 /* Following fields should be after FROM. */ |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
927 range_from = from; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
928 /* Preceding fields should be before TO. */ |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
929 for (j = i - 1, from--, to--; j >= 0; j--, from--, to--) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
930 { |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
931 /* Check FROM for non-wildcard field. */ |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
932 if (! NILP (tmp[j]) && range[j].from < from) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
933 { |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
934 while (range[j].from < from) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
935 range[j].mask &= ~(1 << range[j].from++); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
936 while (from < 14 && ! (range[j].mask & (1 << from))) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
937 from++; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
938 range[j].from = from; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
939 } |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
940 else |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
941 from = range[j].from; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
942 if (range[j].to > to) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
943 { |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
944 while (range[j].to > to) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
945 range[j].mask &= ~(1 << range[j].to--); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
946 while (to >= 0 && ! (range[j].mask & (1 << to))) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
947 to--; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
948 range[j].to = to; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
949 } |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
950 else |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
951 to = range[j].to; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
952 if (from > to) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
953 return -1; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
954 } |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
955 } |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
956 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
957 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
958 |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
959 /* Decide all fileds from restrictions in RANGE. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
960 for (i = j = 0; i < n ; i++) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
961 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
962 if (j < range[i].from) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
963 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
964 if (i == 0 || ! NILP (tmp[i - 1])) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
965 /* None of TMP[X] corresponds to Jth field. */ |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
966 return -1; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
967 for (; j < range[i].from; j++) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
968 field[j] = Qnil; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
969 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
970 field[j++] = tmp[i]; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
971 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
972 if (! NILP (tmp[n - 1]) && j < XLFD_REGISTRY_INDEX) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
973 return -1; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
974 for (; j < XLFD_LAST_INDEX; j++) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
975 field[j] = Qnil; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
976 if (INTEGERP (field[XLFD_ENCODING_INDEX])) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
977 field[XLFD_ENCODING_INDEX] |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
978 = Fintern (Fnumber_to_string (field[XLFD_ENCODING_INDEX]), Qnil); |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
979 return 0; |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
980 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
981 |
92113
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
982 |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
983 #ifdef ENABLE_CHECKING |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
984 /* Match a 14-field XLFD pattern against a full XLFD font name. */ |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
985 static int |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
986 font_match_xlfd (char *pattern, char *name) |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
987 { |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
988 while (*pattern && *name) |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
989 { |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
990 if (*pattern == *name) |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
991 pattern++; |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
992 else if (*pattern == '*') |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
993 if (*name == pattern[1]) |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
994 pattern += 2; |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
995 else |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
996 ; |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
997 else |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
998 return 0; |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
999 name++; |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1000 } |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1001 return 1; |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1002 } |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1003 |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1004 /* Make sure the font object matches the XLFD font name. */ |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1005 static int |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1006 font_check_xlfd_parse (Lisp_Object font, char *name) |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1007 { |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1008 char name_check[256]; |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1009 font_unparse_xlfd (font, 0, name_check, 255); |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1010 return font_match_xlfd (name_check, name); |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1011 } |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1012 |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1013 #endif |
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
1014 |
94926 | 1015 |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1016 /* Parse NAME (null terminated) as XLFD and store information in FONT |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1017 (font-spec or font-entity). Size property of FONT is set as |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1018 follows: |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1019 specified XLFD fields FONT property |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1020 --------------------- ------------- |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1021 PIXEL_SIZE PIXEL_SIZE (Lisp integer) |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1022 POINT_SIZE and RESY calculated pixel size (Lisp integer) |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1023 POINT_SIZE POINT_SIZE/10 (Lisp float) |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1024 |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1025 If NAME is successfully parsed, return 0. Otherwise return -1. |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1026 |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1027 FONT is usually a font-spec, but when this function is called from |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1028 X font backend driver, it is a font-entity. In that case, NAME is |
94926 | 1029 a fully specified XLFD. */ |
90400 | 1030 |
1031 int | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1032 font_parse_xlfd (char *name, Lisp_Object font) |
90400 | 1033 { |
1034 int len = strlen (name); | |
94926 | 1035 int i, j, n; |
90695
a1cd7344d6a2
(font_parse_xlfd): Fix the array size of `f'.
Kenichi Handa <handa@m17n.org>
parents:
90677
diff
changeset
|
1036 char *f[XLFD_LAST_INDEX + 1]; |
90400 | 1037 Lisp_Object val; |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1038 char *p; |
90400 | 1039 |
101422
9e1fcd81389c
(font_parse_xlfd): Handle patterns of length < 2.
Chong Yidong <cyd@stupidchicken.com>
parents:
101293
diff
changeset
|
1040 if (len > 255 || !len) |
90400 | 1041 /* Maximum XLFD name length is 255. */ |
1042 return -1; | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1043 /* Accept "*-.." as a fully specified XLFD. */ |
101422
9e1fcd81389c
(font_parse_xlfd): Handle patterns of length < 2.
Chong Yidong <cyd@stupidchicken.com>
parents:
101293
diff
changeset
|
1044 if (name[0] == '*' && (len == 1 || name[1] == '-')) |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1045 i = 1, f[XLFD_FOUNDRY_INDEX] = name; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1046 else |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1047 i = 0; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1048 for (p = name + i; *p; p++) |
94926 | 1049 if (*p == '-') |
1050 { | |
1051 f[i++] = p + 1; | |
1052 if (i == XLFD_LAST_INDEX) | |
1053 break; | |
1054 } | |
1055 f[i] = name + len; | |
1056 | |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1057 #define INTERN_FIELD(N) font_intern_prop (f[N], f[(N) + 1] - 1 - f[N], 0) |
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1058 #define INTERN_FIELD_SYM(N) font_intern_prop (f[N], f[(N) + 1] - 1 - f[N], 1) |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1059 |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1060 if (i == XLFD_LAST_INDEX) |
90400 | 1061 { |
94926 | 1062 /* Fully specified XLFD. */ |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1063 int pixel_size; |
94926 | 1064 |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1065 ASET (font, FONT_FOUNDRY_INDEX, INTERN_FIELD_SYM (XLFD_FOUNDRY_INDEX)); |
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1066 ASET (font, FONT_FAMILY_INDEX, INTERN_FIELD_SYM (XLFD_FAMILY_INDEX)); |
94926 | 1067 for (i = XLFD_WEIGHT_INDEX, j = FONT_WEIGHT_INDEX; |
1068 i <= XLFD_SWIDTH_INDEX; i++, j++) | |
90400 | 1069 { |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1070 val = INTERN_FIELD_SYM (i); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1071 if (! NILP (val)) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1072 { |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1073 if ((n = font_style_to_value (j, INTERN_FIELD_SYM (i), 0)) < 0) |
94926 | 1074 return -1; |
1075 ASET (font, j, make_number (n)); | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1076 } |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1077 } |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1078 ASET (font, FONT_ADSTYLE_INDEX, INTERN_FIELD_SYM (XLFD_ADSTYLE_INDEX)); |
94926 | 1079 if (strcmp (f[XLFD_REGISTRY_INDEX], "*-*") == 0) |
1080 ASET (font, FONT_REGISTRY_INDEX, Qnil); | |
1081 else | |
1082 ASET (font, FONT_REGISTRY_INDEX, | |
1083 font_intern_prop (f[XLFD_REGISTRY_INDEX], | |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1084 f[XLFD_LAST_INDEX] - f[XLFD_REGISTRY_INDEX], |
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1085 1)); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1086 p = f[XLFD_PIXEL_INDEX]; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1087 if (*p == '[' && (pixel_size = parse_matrix (p)) >= 0) |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
1088 ASET (font, FONT_SIZE_INDEX, make_number (pixel_size)); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1089 else |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1090 { |
94926 | 1091 val = INTERN_FIELD (XLFD_PIXEL_INDEX); |
1092 if (INTEGERP (val)) | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1093 ASET (font, FONT_SIZE_INDEX, val); |
107061
fa65fbe23fdb
font.c (font_parse_xlfd): If FONT is a font-entity and pixel size in NAME is invalid, return -1.
Kenichi Handa <handa@m17n.org>
parents:
106815
diff
changeset
|
1094 else if (FONT_ENTITY_P (font)) |
fa65fbe23fdb
font.c (font_parse_xlfd): If FONT is a font-entity and pixel size in NAME is invalid, return -1.
Kenichi Handa <handa@m17n.org>
parents:
106815
diff
changeset
|
1095 return -1; |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1096 else |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1097 { |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1098 double point_size = -1; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1099 |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
1100 font_assert (FONT_SPEC_P (font)); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1101 p = f[XLFD_POINT_INDEX]; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1102 if (*p == '[') |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1103 point_size = parse_matrix (p); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1104 else if (isdigit (*p)) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1105 point_size = atoi (p), point_size /= 10; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1106 if (point_size >= 0) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1107 ASET (font, FONT_SIZE_INDEX, make_float (point_size)); |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1108 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1109 } |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1110 |
104091
5ad8c9beecab
(font_parse_xlfd): Check DPI and AVGWIDTH properties more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
103889
diff
changeset
|
1111 val = INTERN_FIELD (XLFD_RESY_INDEX); |
5ad8c9beecab
(font_parse_xlfd): Check DPI and AVGWIDTH properties more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
103889
diff
changeset
|
1112 if (! NILP (val) && ! INTEGERP (val)) |
5ad8c9beecab
(font_parse_xlfd): Check DPI and AVGWIDTH properties more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
103889
diff
changeset
|
1113 return -1; |
5ad8c9beecab
(font_parse_xlfd): Check DPI and AVGWIDTH properties more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
103889
diff
changeset
|
1114 ASET (font, FONT_DPI_INDEX, val); |
94926 | 1115 val = INTERN_FIELD (XLFD_SPACING_INDEX); |
1116 if (! NILP (val)) | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1117 { |
94926 | 1118 val = font_prop_validate_spacing (QCspacing, val); |
1119 if (! INTEGERP (val)) | |
1120 return -1; | |
1121 ASET (font, FONT_SPACING_INDEX, val); | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1122 } |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1123 p = f[XLFD_AVGWIDTH_INDEX]; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1124 if (*p == '~') |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1125 p++; |
104091
5ad8c9beecab
(font_parse_xlfd): Check DPI and AVGWIDTH properties more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
103889
diff
changeset
|
1126 val = font_intern_prop (p, f[XLFD_REGISTRY_INDEX] - 1 - p, 0); |
5ad8c9beecab
(font_parse_xlfd): Check DPI and AVGWIDTH properties more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
103889
diff
changeset
|
1127 if (! NILP (val) && ! INTEGERP (val)) |
5ad8c9beecab
(font_parse_xlfd): Check DPI and AVGWIDTH properties more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
103889
diff
changeset
|
1128 return -1; |
5ad8c9beecab
(font_parse_xlfd): Check DPI and AVGWIDTH properties more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
103889
diff
changeset
|
1129 ASET (font, FONT_AVGWIDTH_INDEX, val); |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1130 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1131 else |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1132 { |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1133 int wild_card_found = 0; |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1134 Lisp_Object prop[XLFD_LAST_INDEX]; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1135 |
94926 | 1136 if (FONT_ENTITY_P (font)) |
1137 return -1; | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1138 for (j = 0; j < i; j++) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1139 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1140 if (*f[j] == '*') |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1141 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1142 if (f[j][1] && f[j][1] != '-') |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1143 return -1; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1144 prop[j] = Qnil; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1145 wild_card_found = 1; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1146 } |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1147 else if (j + 1 < i) |
94926 | 1148 prop[j] = INTERN_FIELD (j); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1149 else |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1150 prop[j] = font_intern_prop (f[j], f[i] - f[j], 0); |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1151 } |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1152 if (! wild_card_found) |
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1153 return -1; |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1154 if (font_expand_wildcards (prop, i) < 0) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1155 return -1; |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1156 |
94926 | 1157 ASET (font, FONT_FOUNDRY_INDEX, prop[XLFD_FOUNDRY_INDEX]); |
1158 ASET (font, FONT_FAMILY_INDEX, prop[XLFD_FAMILY_INDEX]); | |
1159 for (i = XLFD_WEIGHT_INDEX, j = FONT_WEIGHT_INDEX; | |
1160 i <= XLFD_SWIDTH_INDEX; i++, j++) | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1161 if (! NILP (prop[i])) |
94926 | 1162 { |
1163 if ((n = font_style_to_value (j, prop[i], 1)) < 0) | |
1164 return -1; | |
1165 ASET (font, j, make_number (n)); | |
1166 } | |
1167 ASET (font, FONT_ADSTYLE_INDEX, prop[XLFD_ADSTYLE_INDEX]); | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1168 val = prop[XLFD_REGISTRY_INDEX]; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1169 if (NILP (val)) |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1170 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1171 val = prop[XLFD_ENCODING_INDEX]; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1172 if (! NILP (val)) |
94926 | 1173 val = concat2 (build_string ("*-"), SYMBOL_NAME (val)); |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1174 } |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1175 else if (NILP (prop[XLFD_ENCODING_INDEX])) |
94926 | 1176 val = concat2 (SYMBOL_NAME (val), build_string ("-*")); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1177 else |
94926 | 1178 val = concat3 (SYMBOL_NAME (val), build_string ("-"), |
1179 SYMBOL_NAME (prop[XLFD_ENCODING_INDEX])); | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1180 if (! NILP (val)) |
94926 | 1181 ASET (font, FONT_REGISTRY_INDEX, Fintern (val, Qnil)); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1182 |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1183 if (INTEGERP (prop[XLFD_PIXEL_INDEX])) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1184 ASET (font, FONT_SIZE_INDEX, prop[XLFD_PIXEL_INDEX]); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1185 else if (INTEGERP (prop[XLFD_POINT_INDEX])) |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1186 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1187 double point_size = XINT (prop[XLFD_POINT_INDEX]); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1188 |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1189 ASET (font, FONT_SIZE_INDEX, make_float (point_size / 10)); |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1190 } |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1191 |
94926 | 1192 if (INTEGERP (prop[XLFD_RESX_INDEX])) |
1193 ASET (font, FONT_DPI_INDEX, prop[XLFD_RESY_INDEX]); | |
1194 if (! NILP (prop[XLFD_SPACING_INDEX])) | |
1195 { | |
1196 val = font_prop_validate_spacing (QCspacing, | |
1197 prop[XLFD_SPACING_INDEX]); | |
1198 if (! INTEGERP (val)) | |
1199 return -1; | |
1200 ASET (font, FONT_SPACING_INDEX, val); | |
1201 } | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1202 if (INTEGERP (prop[XLFD_AVGWIDTH_INDEX])) |
94926 | 1203 ASET (font, FONT_AVGWIDTH_INDEX, prop[XLFD_AVGWIDTH_INDEX]); |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
1204 } |
90400 | 1205 |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1206 return 0; |
90400 | 1207 } |
1208 | |
1209 /* Store XLFD name of FONT (font-spec or font-entity) in NAME (NBYTES | |
1210 length), and return the name length. If FONT_SIZE_INDEX of FONT is | |
1211 0, use PIXEL_SIZE instead. */ | |
1212 | |
1213 int | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1214 font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes) |
90400 | 1215 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1216 char *f[XLFD_REGISTRY_INDEX + 1]; |
90400 | 1217 Lisp_Object val; |
1218 int i, j, len = 0; | |
1219 | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
1220 font_assert (FONTP (font)); |
90400 | 1221 |
1222 for (i = FONT_FOUNDRY_INDEX, j = XLFD_FOUNDRY_INDEX; i <= FONT_REGISTRY_INDEX; | |
1223 i++, j++) | |
1224 { | |
1225 if (i == FONT_ADSTYLE_INDEX) | |
1226 j = XLFD_ADSTYLE_INDEX; | |
1227 else if (i == FONT_REGISTRY_INDEX) | |
1228 j = XLFD_REGISTRY_INDEX; | |
1229 val = AREF (font, i); | |
1230 if (NILP (val)) | |
90439
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1231 { |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1232 if (j == XLFD_REGISTRY_INDEX) |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1233 f[j] = "*-*", len += 4; |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1234 else |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1235 f[j] = "*", len += 2; |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1236 } |
90400 | 1237 else |
1238 { | |
1239 if (SYMBOLP (val)) | |
1240 val = SYMBOL_NAME (val); | |
90439
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1241 if (j == XLFD_REGISTRY_INDEX |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1242 && ! strchr ((char *) SDATA (val), '-')) |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1243 { |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1244 /* Change "jisx0208*" and "jisx0208" to "jisx0208*-*". */ |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1245 if (SDATA (val)[SBYTES (val) - 1] == '*') |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1246 { |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1247 f[j] = alloca (SBYTES (val) + 3); |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1248 sprintf (f[j], "%s-*", SDATA (val)); |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1249 len += SBYTES (val) + 3; |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1250 } |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1251 else |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1252 { |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1253 f[j] = alloca (SBYTES (val) + 4); |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1254 sprintf (f[j], "%s*-*", SDATA (val)); |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1255 len += SBYTES (val) + 4; |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1256 } |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1257 } |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1258 else |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
1259 f[j] = (char *) SDATA (val), len += SBYTES (val) + 1; |
90400 | 1260 } |
1261 } | |
1262 | |
1263 for (i = FONT_WEIGHT_INDEX, j = XLFD_WEIGHT_INDEX; i <= FONT_WIDTH_INDEX; | |
1264 i++, j++) | |
1265 { | |
94926 | 1266 val = font_style_symbolic (font, i, 0); |
90400 | 1267 if (NILP (val)) |
1268 f[j] = "*", len += 2; | |
1269 else | |
1270 { | |
94926 | 1271 val = SYMBOL_NAME (val); |
90400 | 1272 f[j] = (char *) SDATA (val), len += SBYTES (val) + 1; |
1273 } | |
1274 } | |
1275 | |
1276 val = AREF (font, FONT_SIZE_INDEX); | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
1277 font_assert (NUMBERP (val) || NILP (val)); |
90400 | 1278 if (INTEGERP (val)) |
1279 { | |
94926 | 1280 i = XINT (val); |
91943
c5e5ad126614
(font_unparse_xlfd): Don't ignore integer pixel size specs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91909
diff
changeset
|
1281 if (i <= 0) |
c5e5ad126614
(font_unparse_xlfd): Don't ignore integer pixel size specs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91909
diff
changeset
|
1282 i = pixel_size; |
90400 | 1283 if (i > 0) |
91943
c5e5ad126614
(font_unparse_xlfd): Don't ignore integer pixel size specs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91909
diff
changeset
|
1284 { |
c5e5ad126614
(font_unparse_xlfd): Don't ignore integer pixel size specs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91909
diff
changeset
|
1285 f[XLFD_PIXEL_INDEX] = alloca (22); |
c5e5ad126614
(font_unparse_xlfd): Don't ignore integer pixel size specs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91909
diff
changeset
|
1286 len += sprintf (f[XLFD_PIXEL_INDEX], "%d-*", i) + 1; |
c5e5ad126614
(font_unparse_xlfd): Don't ignore integer pixel size specs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91909
diff
changeset
|
1287 } |
c5e5ad126614
(font_unparse_xlfd): Don't ignore integer pixel size specs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91909
diff
changeset
|
1288 else |
c5e5ad126614
(font_unparse_xlfd): Don't ignore integer pixel size specs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91909
diff
changeset
|
1289 f[XLFD_PIXEL_INDEX] = "*-*", len += 4; |
90400 | 1290 } |
1291 else if (FLOATP (val)) | |
1292 { | |
94926 | 1293 i = XFLOAT_DATA (val) * 10; |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1294 f[XLFD_PIXEL_INDEX] = alloca (12); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1295 len += sprintf (f[XLFD_PIXEL_INDEX], "*-%d", i) + 1; |
90400 | 1296 } |
1297 else | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1298 f[XLFD_PIXEL_INDEX] = "*-*", len += 4; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1299 |
94926 | 1300 if (INTEGERP (AREF (font, FONT_DPI_INDEX))) |
90400 | 1301 { |
94926 | 1302 i = XINT (AREF (font, FONT_DPI_INDEX)); |
1303 f[XLFD_RESX_INDEX] = alloca (22); | |
1304 len += sprintf (f[XLFD_RESX_INDEX], | |
1305 "%d-%d", i, i) + 1; | |
90400 | 1306 } |
1307 else | |
94926 | 1308 f[XLFD_RESX_INDEX] = "*-*", len += 4; |
1309 if (INTEGERP (AREF (font, FONT_SPACING_INDEX))) | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1310 { |
94926 | 1311 int spacing = XINT (AREF (font, FONT_SPACING_INDEX)); |
1312 | |
1313 f[XLFD_SPACING_INDEX] = (spacing <= FONT_SPACING_PROPORTIONAL ? "p" | |
1314 : spacing <= FONT_SPACING_DUAL ? "d" | |
1315 : spacing <= FONT_SPACING_MONO ? "m" | |
1316 : "c"); | |
1317 len += 2; | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1318 } |
94926 | 1319 else |
1320 f[XLFD_SPACING_INDEX] = "*", len += 2; | |
1321 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX))) | |
1322 { | |
1323 f[XLFD_AVGWIDTH_INDEX] = alloca (11); | |
105576
9e1a1361da63
(font_unparse_xlfd, font_unparse_fcname): Use long format in printf, and cast argument.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
105155
diff
changeset
|
1324 len += sprintf (f[XLFD_AVGWIDTH_INDEX], "%ld", |
9e1a1361da63
(font_unparse_xlfd, font_unparse_fcname): Use long format in printf, and cast argument.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
105155
diff
changeset
|
1325 (long) XINT (AREF (font, FONT_AVGWIDTH_INDEX))) + 1; |
94926 | 1326 } |
1327 else | |
1328 f[XLFD_AVGWIDTH_INDEX] = "*", len += 2; | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1329 len++; /* for terminating '\0'. */ |
90400 | 1330 if (len >= nbytes) |
1331 return -1; | |
94926 | 1332 return sprintf (name, "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s", |
90400 | 1333 f[XLFD_FOUNDRY_INDEX], f[XLFD_FAMILY_INDEX], |
1334 f[XLFD_WEIGHT_INDEX], f[XLFD_SLANT_INDEX], | |
94926 | 1335 f[XLFD_SWIDTH_INDEX], f[XLFD_ADSTYLE_INDEX], |
1336 f[XLFD_PIXEL_INDEX], f[XLFD_RESX_INDEX], | |
1337 f[XLFD_SPACING_INDEX], f[XLFD_AVGWIDTH_INDEX], | |
1338 f[XLFD_REGISTRY_INDEX]); | |
90400 | 1339 } |
1340 | |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1341 /* Parse NAME (null terminated) and store information in FONT |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1342 (font-spec or font-entity). NAME is supplied in either the |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1343 Fontconfig or GTK font name format. If NAME is successfully |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1344 parsed, return 0. Otherwise return -1. |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1345 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1346 The fontconfig format is |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1347 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1348 FAMILY[-SIZE][:PROP1[=VAL1][:PROP2[=VAL2]...]] |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1349 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1350 The GTK format is |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1351 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1352 FAMILY [PROPS...] [SIZE] |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1353 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1354 This function tries to guess which format it is. */ |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1355 |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1356 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1357 font_parse_fcname (char *name, Lisp_Object font) |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1358 { |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1359 char *p, *q; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1360 char *size_beg = NULL, *size_end = NULL; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1361 char *props_beg = NULL, *family_end = NULL; |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1362 int len = strlen (name); |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1363 |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1364 if (len == 0) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1365 return -1; |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1366 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1367 for (p = name; *p; p++) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1368 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1369 if (*p == '\\' && p[1]) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1370 p++; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1371 else if (*p == ':') |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1372 { |
96049
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1373 props_beg = family_end = p; |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1374 break; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1375 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1376 else if (*p == '-') |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1377 { |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1378 int decimal = 0, size_found = 1; |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1379 for (q = p + 1; *q && *q != ':'; q++) |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1380 if (! isdigit(*q)) |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1381 { |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1382 if (*q != '.' || decimal) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1383 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1384 size_found = 0; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1385 break; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1386 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1387 decimal = 1; |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1388 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1389 if (size_found) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1390 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1391 family_end = p; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1392 size_beg = p + 1; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1393 size_end = q; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1394 break; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1395 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1396 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1397 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1398 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1399 if (family_end) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1400 { |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1401 Lisp_Object extra_props = Qnil; |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1402 |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1403 /* A fontconfig name with size and/or property data. */ |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1404 if (family_end > name) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1405 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1406 Lisp_Object family; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1407 family = font_intern_prop (name, family_end - name, 1); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1408 ASET (font, FONT_FAMILY_INDEX, family); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1409 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1410 if (size_beg) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1411 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1412 double point_size = strtod (size_beg, &size_end); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1413 ASET (font, FONT_SIZE_INDEX, make_float (point_size)); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1414 if (*size_end == ':' && size_end[1]) |
96049
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1415 props_beg = size_end; |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1416 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1417 if (props_beg) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1418 { |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
1419 /* Now parse ":KEY=VAL" patterns. */ |
96049
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1420 Lisp_Object val; |
96016
c1105df0f9c8
(font_parse_fcname): Fix handling of unknown-spec string.
Chong Yidong <cyd@stupidchicken.com>
parents:
96014
diff
changeset
|
1421 |
96049
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1422 for (p = props_beg; *p; p = q) |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1423 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1424 for (q = p + 1; *q && *q != '=' && *q != ':'; q++); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1425 if (*q != '=') |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1426 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1427 /* Must be an enumerated value. */ |
96049
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1428 int word_len; |
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1429 p = p + 1; |
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1430 word_len = q - p; |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1431 val = font_intern_prop (p, q - p, 1); |
95984 | 1432 |
1433 #define PROP_MATCH(STR,N) ((word_len == N) && memcmp (p, STR, N) == 0) | |
1434 | |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1435 if (PROP_MATCH ("light", 5) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1436 || PROP_MATCH ("medium", 6) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1437 || PROP_MATCH ("demibold", 8) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1438 || PROP_MATCH ("bold", 4) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1439 || PROP_MATCH ("black", 5)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1440 FONT_SET_STYLE (font, FONT_WEIGHT_INDEX, val); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1441 else if (PROP_MATCH ("roman", 5) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1442 || PROP_MATCH ("italic", 6) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1443 || PROP_MATCH ("oblique", 7)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1444 FONT_SET_STYLE (font, FONT_SLANT_INDEX, val); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1445 else if (PROP_MATCH ("charcell", 8)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1446 ASET (font, FONT_SPACING_INDEX, |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1447 make_number (FONT_SPACING_CHARCELL)); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1448 else if (PROP_MATCH ("mono", 4)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1449 ASET (font, FONT_SPACING_INDEX, |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1450 make_number (FONT_SPACING_MONO)); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1451 else if (PROP_MATCH ("proportional", 12)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1452 ASET (font, FONT_SPACING_INDEX, |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1453 make_number (FONT_SPACING_PROPORTIONAL)); |
95984 | 1454 #undef PROP_MATCH |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1455 } |
96049
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1456 else |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1457 { |
96049
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1458 /* KEY=VAL pairs */ |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1459 Lisp_Object key; |
96049
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1460 int prop; |
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1461 |
380525b11593
(font_parse_fcname): For known key symbols, intern using correct
Chong Yidong <cyd@stupidchicken.com>
parents:
96030
diff
changeset
|
1462 if (q - p == 10 && memcmp (p + 1, "pixelsize", 9) == 0) |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1463 prop = FONT_SIZE_INDEX; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1464 else |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1465 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1466 key = font_intern_prop (p, q - p, 1); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1467 prop = get_font_prop_index (key); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1468 } |
96016
c1105df0f9c8
(font_parse_fcname): Fix handling of unknown-spec string.
Chong Yidong <cyd@stupidchicken.com>
parents:
96014
diff
changeset
|
1469 |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1470 p = q + 1; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1471 for (q = p; *q && *q != ':'; q++); |
95983
104a55eb192a
(font_parse_fcname): Correctly parse KEY=VAL values.
Chong Yidong <cyd@stupidchicken.com>
parents:
95972
diff
changeset
|
1472 val = font_intern_prop (p, q - p, 0); |
96016
c1105df0f9c8
(font_parse_fcname): Fix handling of unknown-spec string.
Chong Yidong <cyd@stupidchicken.com>
parents:
96014
diff
changeset
|
1473 |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
1474 if (prop >= FONT_FOUNDRY_INDEX |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
1475 && prop < FONT_EXTRA_INDEX) |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1476 ASET (font, prop, font_prop_validate (prop, Qnil, val)); |
106433
7c2192f52cb6
Fix a comment and delete trailing whitespace.
Chong Yidong <cyd@stupidchicken.com>
parents:
106350
diff
changeset
|
1477 else |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1478 { |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1479 extra_props = nconc2 (extra_props, |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1480 Fcons (Fcons (key, val), Qnil)); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1481 } |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1482 } |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
1483 p = q; |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1484 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1485 } |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1486 |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1487 if (! NILP (extra_props)) |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1488 { |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1489 struct font_driver_list *driver_list = font_driver_list; |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1490 for ( ; driver_list; driver_list = driver_list->next) |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1491 if (driver_list->driver->filter_properties) |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1492 (*driver_list->driver->filter_properties) (font, extra_props); |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
1493 } |
106433
7c2192f52cb6
Fix a comment and delete trailing whitespace.
Chong Yidong <cyd@stupidchicken.com>
parents:
106350
diff
changeset
|
1494 |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1495 } |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1496 else |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1497 { |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1498 /* Either a fontconfig-style name with no size and property |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1499 data, or a GTK-style name. */ |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1500 Lisp_Object prop; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1501 int word_len, prop_found = 0; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1502 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1503 for (p = name; *p; p = *q ? q + 1 : q) |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1504 { |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1505 if (isdigit (*p)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1506 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1507 int size_found = 1; |
96262
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
1508 |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1509 for (q = p + 1; *q && *q != ' '; q++) |
109032
d8720405694a
* font.c (font_parse_fcname): Allow . for sizes like 7.5 (bug#6437).
Jan D. <jan.h.d@swipnet.se>
parents:
108813
diff
changeset
|
1510 if (! isdigit (*q) && *q != '.') |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1511 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1512 size_found = 0; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1513 break; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1514 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1515 if (size_found) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1516 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1517 double point_size = strtod (p, &q); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1518 ASET (font, FONT_SIZE_INDEX, make_float (point_size)); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1519 continue; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1520 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1521 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1522 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1523 for (q = p + 1; *q && *q != ' '; q++) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1524 if (*q == '\\' && q[1]) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1525 q++; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1526 word_len = q - p; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1527 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1528 #define PROP_MATCH(STR,N) ((word_len == N) && memcmp (p, STR, N) == 0) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1529 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1530 if (PROP_MATCH ("Ultra-Light", 11)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1531 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1532 prop_found = 1; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1533 prop = font_intern_prop ("ultra-light", 11, 1); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1534 FONT_SET_STYLE (font, FONT_WEIGHT_INDEX, prop); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1535 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1536 else if (PROP_MATCH ("Light", 5)) |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1537 { |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1538 prop_found = 1; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1539 prop = font_intern_prop ("light", 5, 1); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1540 FONT_SET_STYLE (font, FONT_WEIGHT_INDEX, prop); |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
1541 } |
107241
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1542 else if (PROP_MATCH ("Book", 4)) |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1543 { |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1544 prop_found = 1; |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1545 prop = font_intern_prop ("book", 4, 1); |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1546 FONT_SET_STYLE (font, FONT_WEIGHT_INDEX, prop); |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1547 } |
107242
26b234a2e901
Addendum to last patch: add "Medium" GTK font name keyword.
Chong Yidong <cyd@stupidchicken.com>
parents:
107241
diff
changeset
|
1548 else if (PROP_MATCH ("Medium", 6)) |
26b234a2e901
Addendum to last patch: add "Medium" GTK font name keyword.
Chong Yidong <cyd@stupidchicken.com>
parents:
107241
diff
changeset
|
1549 { |
26b234a2e901
Addendum to last patch: add "Medium" GTK font name keyword.
Chong Yidong <cyd@stupidchicken.com>
parents:
107241
diff
changeset
|
1550 prop_found = 1; |
26b234a2e901
Addendum to last patch: add "Medium" GTK font name keyword.
Chong Yidong <cyd@stupidchicken.com>
parents:
107241
diff
changeset
|
1551 prop = font_intern_prop ("medium", 6, 1); |
26b234a2e901
Addendum to last patch: add "Medium" GTK font name keyword.
Chong Yidong <cyd@stupidchicken.com>
parents:
107241
diff
changeset
|
1552 FONT_SET_STYLE (font, FONT_WEIGHT_INDEX, prop); |
26b234a2e901
Addendum to last patch: add "Medium" GTK font name keyword.
Chong Yidong <cyd@stupidchicken.com>
parents:
107241
diff
changeset
|
1553 } |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1554 else if (PROP_MATCH ("Semi-Bold", 9)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1555 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1556 prop_found = 1; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1557 prop = font_intern_prop ("semi-bold", 9, 1); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1558 FONT_SET_STYLE (font, FONT_WEIGHT_INDEX, prop); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1559 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1560 else if (PROP_MATCH ("Bold", 4)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1561 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1562 prop_found = 1; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1563 prop = font_intern_prop ("bold", 4, 1); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1564 FONT_SET_STYLE (font, FONT_WEIGHT_INDEX, prop); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1565 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1566 else if (PROP_MATCH ("Italic", 6)) |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1567 { |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1568 prop_found = 1; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1569 prop = font_intern_prop ("italic", 4, 1); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1570 FONT_SET_STYLE (font, FONT_SLANT_INDEX, prop); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1571 } |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1572 else if (PROP_MATCH ("Oblique", 7)) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1573 { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1574 prop_found = 1; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1575 prop = font_intern_prop ("oblique", 7, 1); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1576 FONT_SET_STYLE (font, FONT_SLANT_INDEX, prop); |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1577 } |
107241
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1578 else if (PROP_MATCH ("Semi-Condensed", 14)) |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1579 { |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1580 prop_found = 1; |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1581 prop = font_intern_prop ("semi-condensed", 14, 1); |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1582 FONT_SET_STYLE (font, FONT_WIDTH_INDEX, prop); |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1583 } |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1584 else if (PROP_MATCH ("Condensed", 9)) |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1585 { |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1586 prop_found = 1; |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1587 prop = font_intern_prop ("condensed", 9, 1); |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1588 FONT_SET_STYLE (font, FONT_WIDTH_INDEX, prop); |
c7ed9615fb56
Recognize more keywords in GTK font names (Bug#5646).
Chong Yidong <cyd@stupidchicken.com>
parents:
107061
diff
changeset
|
1589 } |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1590 else { |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1591 if (prop_found) |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1592 return -1; /* Unknown property in GTK-style font name. */ |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1593 family_end = q; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1594 } |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1595 } |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1596 #undef PROP_MATCH |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1597 |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1598 if (family_end) |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1599 { |
95790
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1600 Lisp_Object family; |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1601 family = font_intern_prop (name, family_end - name, 1); |
a486132d892c
(font_parse_fcname): Accept GTK-style font names too.
Chong Yidong <cyd@stupidchicken.com>
parents:
95746
diff
changeset
|
1602 ASET (font, FONT_FAMILY_INDEX, family); |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1603 } |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1604 } |
95886
c8bc52f94b6d
(syms_of_font) <font-weight-table, font-slant-table, font-width-table>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95875
diff
changeset
|
1605 |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
1606 return 0; |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1607 } |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1608 |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1609 /* Store fontconfig's font name of FONT (font-spec or font-entity) in |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1610 NAME (NBYTES length), and return the name length. If |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1611 FONT_SIZE_INDEX of FONT is 0, use PIXEL_SIZE instead. */ |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1612 |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1613 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1614 font_unparse_fcname (Lisp_Object font, int pixel_size, char *name, int nbytes) |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1615 { |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1616 Lisp_Object family, foundry; |
94926 | 1617 Lisp_Object tail, val; |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1618 int point_size; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1619 int i, len = 1; |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1620 char *p; |
90476
017a6aec5d77
(font_parse_fcname): Fix parsing of point-size.
Kenichi Handa <handa@m17n.org>
parents:
90468
diff
changeset
|
1621 Lisp_Object styles[3]; |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
1622 char *style_names[3] = { "weight", "slant", "width" }; |
94926 | 1623 char work[256]; |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1624 |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1625 family = AREF (font, FONT_FAMILY_INDEX); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1626 if (! NILP (family)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1627 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1628 if (SYMBOLP (family)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1629 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1630 family = SYMBOL_NAME (family); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1631 len += SBYTES (family); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1632 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1633 else |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1634 family = Qnil; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1635 } |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1636 |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1637 val = AREF (font, FONT_SIZE_INDEX); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1638 if (INTEGERP (val)) |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1639 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1640 if (XINT (val) != 0) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1641 pixel_size = XINT (val); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1642 point_size = -1; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1643 len += 21; /* for ":pixelsize=NUM" */ |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1644 } |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1645 else if (FLOATP (val)) |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1646 { |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1647 pixel_size = -1; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1648 point_size = (int) XFLOAT_DATA (val); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1649 len += 11; /* for "-NUM" */ |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1650 } |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1651 |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1652 foundry = AREF (font, FONT_FOUNDRY_INDEX); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1653 if (! NILP (foundry)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1654 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1655 if (SYMBOLP (foundry)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1656 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1657 foundry = SYMBOL_NAME (foundry); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1658 len += 9 + SBYTES (foundry); /* ":foundry=NAME" */ |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1659 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1660 else |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1661 foundry = Qnil; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1662 } |
94926 | 1663 |
1664 for (i = 0; i < 3; i++) | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1665 { |
94926 | 1666 styles[i] = font_style_symbolic (font, FONT_WEIGHT_INDEX + i, 0); |
1667 if (! NILP (styles[i])) | |
1668 len += sprintf (work, ":%s=%s", style_names[i], | |
1669 SDATA (SYMBOL_NAME (styles[i]))); | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1670 } |
94926 | 1671 |
1672 if (INTEGERP (AREF (font, FONT_DPI_INDEX))) | |
105576
9e1a1361da63
(font_unparse_xlfd, font_unparse_fcname): Use long format in printf, and cast argument.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
105155
diff
changeset
|
1673 len += sprintf (work, ":dpi=%ld", (long)XINT (AREF (font, FONT_DPI_INDEX))); |
94926 | 1674 if (INTEGERP (AREF (font, FONT_SPACING_INDEX))) |
1675 len += strlen (":spacing=100"); | |
1676 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX))) | |
1677 len += strlen (":scalable=false"); /* or ":scalable=true" */ | |
1678 for (tail = AREF (font, FONT_EXTRA_INDEX); CONSP (tail); tail = XCDR (tail)) | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1679 { |
94926 | 1680 Lisp_Object key = XCAR (XCAR (tail)), val = XCDR (XCAR (tail)); |
1681 | |
1682 len += SBYTES (SYMBOL_NAME (key)) + 1; /* for :KEY= */ | |
1683 if (STRINGP (val)) | |
1684 len += SBYTES (val); | |
1685 else if (INTEGERP (val)) | |
105576
9e1a1361da63
(font_unparse_xlfd, font_unparse_fcname): Use long format in printf, and cast argument.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
105155
diff
changeset
|
1686 len += sprintf (work, "%ld", (long) XINT (val)); |
94926 | 1687 else if (SYMBOLP (val)) |
1688 len += (NILP (val) ? 5 : 4); /* for "false" or "true" */ | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1689 } |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1690 |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1691 if (len > nbytes) |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1692 return -1; |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1693 p = name; |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1694 if (! NILP (family)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1695 p += sprintf (p, "%s", SDATA (family)); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1696 if (point_size > 0) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1697 { |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1698 if (p == name) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1699 p += sprintf (p, "%d", point_size); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1700 else |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1701 p += sprintf (p, "-%d", point_size); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1702 } |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1703 else if (pixel_size > 0) |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1704 p += sprintf (p, ":pixelsize=%d", pixel_size); |
94926 | 1705 if (! NILP (AREF (font, FONT_FOUNDRY_INDEX))) |
90476
017a6aec5d77
(font_parse_fcname): Fix parsing of point-size.
Kenichi Handa <handa@m17n.org>
parents:
90468
diff
changeset
|
1706 p += sprintf (p, ":foundry=%s", |
017a6aec5d77
(font_parse_fcname): Fix parsing of point-size.
Kenichi Handa <handa@m17n.org>
parents:
90468
diff
changeset
|
1707 SDATA (SYMBOL_NAME (AREF (font, FONT_FOUNDRY_INDEX)))); |
017a6aec5d77
(font_parse_fcname): Fix parsing of point-size.
Kenichi Handa <handa@m17n.org>
parents:
90468
diff
changeset
|
1708 for (i = 0; i < 3; i++) |
94926 | 1709 if (! NILP (styles[i])) |
90476
017a6aec5d77
(font_parse_fcname): Fix parsing of point-size.
Kenichi Handa <handa@m17n.org>
parents:
90468
diff
changeset
|
1710 p += sprintf (p, ":%s=%s", style_names[i], |
94926 | 1711 SDATA (SYMBOL_NAME (styles[i]))); |
1712 if (INTEGERP (AREF (font, FONT_DPI_INDEX))) | |
105576
9e1a1361da63
(font_unparse_xlfd, font_unparse_fcname): Use long format in printf, and cast argument.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
105155
diff
changeset
|
1713 p += sprintf (p, ":dpi=%ld", (long) XINT (AREF (font, FONT_DPI_INDEX))); |
94926 | 1714 if (INTEGERP (AREF (font, FONT_SPACING_INDEX))) |
105576
9e1a1361da63
(font_unparse_xlfd, font_unparse_fcname): Use long format in printf, and cast argument.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
105155
diff
changeset
|
1715 p += sprintf (p, ":spacing=%ld", |
9e1a1361da63
(font_unparse_xlfd, font_unparse_fcname): Use long format in printf, and cast argument.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
105155
diff
changeset
|
1716 (long) XINT (AREF (font, FONT_SPACING_INDEX))); |
94926 | 1717 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX))) |
1718 { | |
1719 if (XINT (AREF (font, FONT_AVGWIDTH_INDEX)) == 0) | |
1720 p += sprintf (p, ":scalable=true"); | |
1721 else | |
1722 p += sprintf (p, ":scalable=false"); | |
1723 } | |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1724 return (p - name); |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1725 } |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1726 |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1727 /* Store GTK-style font name of FONT (font-spec or font-entity) in |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1728 NAME (NBYTES length), and return the name length. F is the frame |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1729 on which the font is displayed; it is used to calculate the point |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1730 size. */ |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1731 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1732 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1733 font_unparse_gtkname (Lisp_Object font, struct frame *f, char *name, int nbytes) |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1734 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1735 char *p; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1736 int len = 1; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1737 Lisp_Object family, weight, slant, size; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1738 int point_size = -1; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1739 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1740 family = AREF (font, FONT_FAMILY_INDEX); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1741 if (! NILP (family)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1742 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1743 if (! SYMBOLP (family)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1744 return -1; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1745 family = SYMBOL_NAME (family); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1746 len += SBYTES (family); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1747 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1748 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1749 weight = font_style_symbolic (font, FONT_WEIGHT_INDEX, 0); |
96017
54d310663505
(font_unparse_gtkname): Use EQ to compare Lisp_Objects.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96016
diff
changeset
|
1750 if (EQ (weight, Qnormal)) |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1751 weight = Qnil; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1752 else if (! NILP (weight)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1753 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1754 weight = SYMBOL_NAME (weight); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1755 len += SBYTES (weight); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1756 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1757 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1758 slant = font_style_symbolic (font, FONT_SLANT_INDEX, 0); |
96017
54d310663505
(font_unparse_gtkname): Use EQ to compare Lisp_Objects.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96016
diff
changeset
|
1759 if (EQ (slant, Qnormal)) |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1760 slant = Qnil; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1761 else if (! NILP (slant)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1762 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1763 slant = SYMBOL_NAME (slant); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1764 len += SBYTES (slant); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1765 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1766 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1767 size = AREF (font, FONT_SIZE_INDEX); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1768 /* Convert pixel size to point size. */ |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1769 if (INTEGERP (size)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1770 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1771 Lisp_Object font_dpi = AREF (font, FONT_DPI_INDEX); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1772 int dpi = 75; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1773 if (INTEGERP (font_dpi)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1774 dpi = XINT (font_dpi); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1775 else if (f) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1776 dpi = f->resy; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1777 point_size = PIXEL_TO_POINT (XINT (size), dpi); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1778 len += 11; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1779 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1780 else if (FLOATP (size)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1781 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1782 point_size = (int) XFLOAT_DATA (size); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1783 len += 11; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1784 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1785 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1786 if (len > nbytes) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1787 return -1; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1788 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1789 p = name + sprintf (name, "%s", SDATA (family)); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1790 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1791 if (! NILP (weight)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1792 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1793 char *q = p; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1794 p += sprintf (p, " %s", SDATA (weight)); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1795 q[1] = toupper (q[1]); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1796 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1797 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1798 if (! NILP (slant)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1799 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1800 char *q = p; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1801 p += sprintf (p, " %s", SDATA (slant)); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1802 q[1] = toupper (q[1]); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1803 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1804 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1805 if (point_size > 0) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1806 p += sprintf (p, " %d", point_size); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1807 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1808 return (p - name); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1809 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
1810 |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1811 /* Parse NAME (null terminated) and store information in FONT |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1812 (font-spec or font-entity). If NAME is successfully parsed, return |
94926 | 1813 0. Otherwise return -1. */ |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1814 |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1815 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1816 font_parse_name (char *name, Lisp_Object font) |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1817 { |
101293
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
1818 if (name[0] == '-' || index (name, '*') || index (name, '?')) |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1819 return font_parse_xlfd (name, font); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
1820 return font_parse_fcname (name, font); |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1821 } |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
1822 |
94926 | 1823 |
1824 /* Merge FAMILY and REGISTRY into FONT_SPEC. FAMILY may have the form | |
1825 "FAMILY-FOUNDRY". REGISTRY may not contain charset-encoding | |
1826 part. */ | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
1827 |
90400 | 1828 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
1829 font_parse_family_registry (Lisp_Object family, Lisp_Object registry, Lisp_Object font_spec) |
90400 | 1830 { |
94926 | 1831 int len; |
1832 char *p0, *p1; | |
1833 | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
1834 if (! NILP (family) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
1835 && NILP (AREF (font_spec, FONT_FAMILY_INDEX))) |
90400 | 1836 { |
94926 | 1837 CHECK_STRING (family); |
1838 len = SBYTES (family); | |
1839 p0 = (char *) SDATA (family); | |
1840 p1 = index (p0, '-'); | |
1841 if (p1) | |
90400 | 1842 { |
103369
97cfffb6f666
(font_parse_family_registry): Fix for one-char foundry.
Kenichi Handa <handa@m17n.org>
parents:
103255
diff
changeset
|
1843 if ((*p0 != '*' && p1 - p0 > 0) |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
1844 && NILP (AREF (font_spec, FONT_FOUNDRY_INDEX))) |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1845 Ffont_put (font_spec, QCfoundry, font_intern_prop (p0, p1 - p0, 1)); |
94926 | 1846 p1++; |
1847 len -= p1 - p0; | |
95746
b490fda95b13
(font_intern_prop): New arg force_symbol.
Kenichi Handa <handa@m17n.org>
parents:
95699
diff
changeset
|
1848 Ffont_put (font_spec, QCfamily, font_intern_prop (p1, len, 1)); |
90400 | 1849 } |
94926 | 1850 else |
1851 ASET (font_spec, FONT_FAMILY_INDEX, Fintern (family, Qnil)); | |
1852 } | |
1853 if (! NILP (registry)) | |
1854 { | |
1855 /* Convert "XXX" and "XXX*" to "XXX*-*". */ | |
1856 CHECK_STRING (registry); | |
1857 len = SBYTES (registry); | |
1858 p0 = (char *) SDATA (registry); | |
1859 p1 = index (p0, '-'); | |
1860 if (! p1) | |
1861 { | |
1862 if (SDATA (registry)[len - 1] == '*') | |
1863 registry = concat2 (registry, build_string ("-*")); | |
1864 else | |
1865 registry = concat2 (registry, build_string ("*-*")); | |
1866 } | |
1867 registry = Fdowncase (registry); | |
1868 ASET (font_spec, FONT_REGISTRY_INDEX, Fintern (registry, Qnil)); | |
90400 | 1869 } |
1870 } | |
1871 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
1872 |
94926 | 1873 /* This part (through the next ^L) is still experimental and not |
1874 tested much. We may drastically change codes. */ | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
1875 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
1876 /* OTF handler */ |
90541 | 1877 |
95290
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
1878 #if 0 |
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
1879 |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1880 #define LGSTRING_HEADER_SIZE 6 |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1881 #define LGSTRING_GLYPH_SIZE 8 |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1882 |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1883 static int |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1884 check_gstring (gstring) |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1885 Lisp_Object gstring; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1886 { |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1887 Lisp_Object val; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1888 int i, j; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1889 |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1890 CHECK_VECTOR (gstring); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1891 val = AREF (gstring, 0); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1892 CHECK_VECTOR (val); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1893 if (ASIZE (val) < LGSTRING_HEADER_SIZE) |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1894 goto err; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1895 CHECK_FONT_OBJECT (LGSTRING_FONT (gstring)); |
91550
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1896 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_LBEARING))) |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1897 CHECK_NUMBER (LGSTRING_SLOT (gstring, LGSTRING_IX_LBEARING)); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1898 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_RBEARING))) |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1899 CHECK_NUMBER (LGSTRING_SLOT (gstring, LGSTRING_IX_RBEARING)); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1900 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_WIDTH))) |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1901 CHECK_NATNUM (LGSTRING_SLOT (gstring, LGSTRING_IX_WIDTH)); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1902 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_ASCENT))) |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1903 CHECK_NUMBER (LGSTRING_SLOT (gstring, LGSTRING_IX_ASCENT)); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1904 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_ASCENT))) |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1905 CHECK_NUMBER (LGSTRING_SLOT (gstring, LGSTRING_IX_ASCENT)); |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1906 |
97822 | 1907 for (i = 0; i < LGSTRING_GLYPH_LEN (gstring); i++) |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1908 { |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1909 val = LGSTRING_GLYPH (gstring, i); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1910 CHECK_VECTOR (val); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1911 if (ASIZE (val) < LGSTRING_GLYPH_SIZE) |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1912 goto err; |
91550
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1913 if (NILP (AREF (val, LGLYPH_IX_CHAR))) |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1914 break; |
91550
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1915 CHECK_NATNUM (AREF (val, LGLYPH_IX_FROM)); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1916 CHECK_NATNUM (AREF (val, LGLYPH_IX_TO)); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1917 CHECK_CHARACTER (AREF (val, LGLYPH_IX_CHAR)); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1918 if (!NILP (AREF (val, LGLYPH_IX_CODE))) |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1919 CHECK_NATNUM (AREF (val, LGLYPH_IX_CODE)); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1920 if (!NILP (AREF (val, LGLYPH_IX_WIDTH))) |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1921 CHECK_NATNUM (AREF (val, LGLYPH_IX_WIDTH)); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1922 if (!NILP (AREF (val, LGLYPH_IX_ADJUSTMENT))) |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1923 { |
91550
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
1924 val = AREF (val, LGLYPH_IX_ADJUSTMENT); |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1925 CHECK_VECTOR (val); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1926 if (ASIZE (val) < 3) |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1927 goto err; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1928 for (j = 0; j < 3; j++) |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1929 CHECK_NUMBER (AREF (val, j)); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1930 } |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1931 } |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1932 return i; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1933 err: |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1934 error ("Invalid glyph-string format"); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1935 return -1; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1936 } |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
1937 |
90823
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1938 static void |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1939 check_otf_features (otf_features) |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1940 Lisp_Object otf_features; |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1941 { |
94926 | 1942 Lisp_Object val; |
90823
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1943 |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1944 CHECK_CONS (otf_features); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1945 CHECK_SYMBOL (XCAR (otf_features)); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1946 otf_features = XCDR (otf_features); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1947 CHECK_CONS (otf_features); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1948 CHECK_SYMBOL (XCAR (otf_features)); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1949 otf_features = XCDR (otf_features); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1950 for (val = Fcar (otf_features); ! NILP (val); val = Fcdr (val)) |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1951 { |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1952 CHECK_SYMBOL (Fcar (val)); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1953 if (SBYTES (SYMBOL_NAME (XCAR (val))) > 4) |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1954 error ("Invalid OTF GSUB feature: %s", SYMBOL_NAME (XCAR (val))); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1955 } |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1956 otf_features = XCDR (otf_features); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1957 for (val = Fcar (otf_features); ! NILP (val); val = Fcdr (val)) |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1958 { |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1959 CHECK_SYMBOL (Fcar (val)); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1960 if (SBYTES (SYMBOL_NAME (XCAR (val))) > 4) |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1961 error ("Invalid OTF GPOS feature: %s", SYMBOL_NAME (XCAR (val))); |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1962 } |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1963 } |
b08ad368c328
(check_otf_features): Define it regardless of
Kenichi Handa <handa@m17n.org>
parents:
90817
diff
changeset
|
1964 |
90400 | 1965 #ifdef HAVE_LIBOTF |
1966 #include <otf.h> | |
1967 | |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
1968 Lisp_Object otf_list; |
90400 | 1969 |
1970 static Lisp_Object | |
1971 otf_tag_symbol (tag) | |
1972 OTF_Tag tag; | |
1973 { | |
1974 char name[5]; | |
1975 | |
1976 OTF_tag_name (tag, name); | |
1977 return Fintern (make_unibyte_string (name, 4), Qnil); | |
1978 } | |
1979 | |
1980 static OTF * | |
94926 | 1981 otf_open (file) |
1982 Lisp_Object file; | |
90400 | 1983 { |
94926 | 1984 Lisp_Object val = Fassoc (file, otf_list); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
1985 OTF *otf; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
1986 |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
1987 if (! NILP (val)) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
1988 otf = XSAVE_VALUE (XCDR (val))->pointer; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
1989 else |
90400 | 1990 { |
94926 | 1991 otf = STRINGP (file) ? OTF_open ((char *) SDATA (file)) : NULL; |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
1992 val = make_save_value (otf, 0); |
94926 | 1993 otf_list = Fcons (Fcons (file, val), otf_list); |
90400 | 1994 } |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
1995 return otf; |
90400 | 1996 } |
1997 | |
1998 | |
1999 /* Return a list describing which scripts/languages FONT supports by | |
2000 which GSUB/GPOS features of OpenType tables. See the comment of | |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
2001 (struct font_driver).otf_capability. */ |
90400 | 2002 |
2003 Lisp_Object | |
2004 font_otf_capability (font) | |
2005 struct font *font; | |
2006 { | |
2007 OTF *otf; | |
2008 Lisp_Object capability = Fcons (Qnil, Qnil); | |
2009 int i; | |
2010 | |
94926 | 2011 otf = otf_open (font->props[FONT_FILE_INDEX]); |
90400 | 2012 if (! otf) |
2013 return Qnil; | |
2014 for (i = 0; i < 2; i++) | |
2015 { | |
2016 OTF_GSUB_GPOS *gsub_gpos; | |
2017 Lisp_Object script_list = Qnil; | |
2018 int j; | |
2019 | |
2020 if (OTF_get_features (otf, i == 0) < 0) | |
2021 continue; | |
2022 gsub_gpos = i == 0 ? otf->gsub : otf->gpos; | |
2023 for (j = gsub_gpos->ScriptList.ScriptCount - 1; j >= 0; j--) | |
2024 { | |
2025 OTF_Script *script = gsub_gpos->ScriptList.Script + j; | |
2026 Lisp_Object langsys_list = Qnil; | |
2027 Lisp_Object script_tag = otf_tag_symbol (script->ScriptTag); | |
2028 int k; | |
2029 | |
2030 for (k = script->LangSysCount; k >= 0; k--) | |
2031 { | |
2032 OTF_LangSys *langsys; | |
2033 Lisp_Object feature_list = Qnil; | |
2034 Lisp_Object langsys_tag; | |
2035 int l; | |
2036 | |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2037 if (k == script->LangSysCount) |
90400 | 2038 { |
2039 langsys = &script->DefaultLangSys; | |
2040 langsys_tag = Qnil; | |
2041 } | |
2042 else | |
2043 { | |
2044 langsys = script->LangSys + k; | |
2045 langsys_tag | |
2046 = otf_tag_symbol (script->LangSysRecord[k].LangSysTag); | |
2047 } | |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2048 for (l = langsys->FeatureCount - 1; l >= 0; l--) |
90400 | 2049 { |
2050 OTF_Feature *feature | |
2051 = gsub_gpos->FeatureList.Feature + langsys->FeatureIndex[l]; | |
2052 Lisp_Object feature_tag | |
2053 = otf_tag_symbol (feature->FeatureTag); | |
2054 | |
2055 feature_list = Fcons (feature_tag, feature_list); | |
2056 } | |
2057 langsys_list = Fcons (Fcons (langsys_tag, feature_list), | |
2058 langsys_list); | |
2059 } | |
2060 script_list = Fcons (Fcons (script_tag, langsys_list), | |
2061 script_list); | |
2062 } | |
2063 | |
2064 if (i == 0) | |
2065 XSETCAR (capability, script_list); | |
2066 else | |
2067 XSETCDR (capability, script_list); | |
2068 } | |
2069 | |
2070 return capability; | |
2071 } | |
2072 | |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2073 /* Parse OTF features in SPEC and write a proper features spec string |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2074 in FEATURES for the call of OTF_drive_gsub/gpos (of libotf). It is |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2075 assured that the sufficient memory has already allocated for |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2076 FEATURES. */ |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2077 |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2078 static void |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2079 generate_otf_features (spec, features) |
90400 | 2080 Lisp_Object spec; |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2081 char *features; |
90400 | 2082 { |
2083 Lisp_Object val; | |
94926 | 2084 char *p; |
90400 | 2085 int asterisk; |
2086 | |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2087 p = features; |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2088 *p = '\0'; |
90400 | 2089 for (asterisk = 0; CONSP (spec); spec = XCDR (spec)) |
2090 { | |
2091 val = XCAR (spec); | |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2092 CHECK_SYMBOL (val); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2093 if (p > features) |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2094 *p++ = ','; |
90400 | 2095 if (SREF (SYMBOL_NAME (val), 0) == '*') |
2096 { | |
2097 asterisk = 1; | |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2098 *p++ = '*'; |
90400 | 2099 } |
2100 else if (! asterisk) | |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2101 { |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2102 val = SYMBOL_NAME (val); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2103 p += sprintf (p, "%s", SDATA (val)); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2104 } |
90400 | 2105 else |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2106 { |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2107 val = SYMBOL_NAME (val); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2108 p += sprintf (p, "~%s", SDATA (val)); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2109 } |
90400 | 2110 } |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2111 if (CONSP (spec)) |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2112 error ("OTF spec too long"); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2113 } |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
2114 |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2115 Lisp_Object |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2116 font_otf_DeviceTable (device_table) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2117 OTF_DeviceTable *device_table; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2118 { |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2119 int len = device_table->StartSize - device_table->EndSize + 1; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2120 |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2121 return Fcons (make_number (len), |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2122 make_unibyte_string (device_table->DeltaValue, len)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2123 } |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2124 |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2125 Lisp_Object |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2126 font_otf_ValueRecord (value_format, value_record) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2127 int value_format; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2128 OTF_ValueRecord *value_record; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2129 { |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2130 Lisp_Object val = Fmake_vector (make_number (8), Qnil); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2131 |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2132 if (value_format & OTF_XPlacement) |
91909 | 2133 ASET (val, 0, make_number (value_record->XPlacement)); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2134 if (value_format & OTF_YPlacement) |
91909 | 2135 ASET (val, 1, make_number (value_record->YPlacement)); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2136 if (value_format & OTF_XAdvance) |
91909 | 2137 ASET (val, 2, make_number (value_record->XAdvance)); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2138 if (value_format & OTF_YAdvance) |
91909 | 2139 ASET (val, 3, make_number (value_record->YAdvance)); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2140 if (value_format & OTF_XPlaDevice) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2141 ASET (val, 4, font_otf_DeviceTable (&value_record->XPlaDevice)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2142 if (value_format & OTF_YPlaDevice) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2143 ASET (val, 4, font_otf_DeviceTable (&value_record->YPlaDevice)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2144 if (value_format & OTF_XAdvDevice) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2145 ASET (val, 4, font_otf_DeviceTable (&value_record->XAdvDevice)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2146 if (value_format & OTF_YAdvDevice) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2147 ASET (val, 4, font_otf_DeviceTable (&value_record->YAdvDevice)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2148 return val; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2149 } |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2150 |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2151 Lisp_Object |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2152 font_otf_Anchor (anchor) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2153 OTF_Anchor *anchor; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2154 { |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2155 Lisp_Object val; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2156 |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2157 val = Fmake_vector (make_number (anchor->AnchorFormat + 1), Qnil); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2158 ASET (val, 0, make_number (anchor->XCoordinate)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2159 ASET (val, 1, make_number (anchor->YCoordinate)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2160 if (anchor->AnchorFormat == 2) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2161 ASET (val, 2, make_number (anchor->f.f1.AnchorPoint)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2162 else |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2163 { |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2164 ASET (val, 3, font_otf_DeviceTable (&anchor->f.f2.XDeviceTable)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2165 ASET (val, 4, font_otf_DeviceTable (&anchor->f.f2.YDeviceTable)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2166 } |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2167 return val; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
2168 } |
90400 | 2169 #endif /* HAVE_LIBOTF */ |
95290
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
2170 #endif /* 0 */ |
90400 | 2171 |
2172 | |
2173 /* Font sorting */ | |
2174 | |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
2175 static unsigned font_score (Lisp_Object, Lisp_Object *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
2176 static int font_compare (const void *, const void *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
2177 static Lisp_Object font_sort_entities (Lisp_Object, Lisp_Object, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
2178 Lisp_Object, int); |
90400 | 2179 |
100385
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2180 /* Return a rescaling ratio of FONT_ENTITY. */ |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2181 extern Lisp_Object Vface_font_rescale_alist; |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2182 |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2183 static double |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2184 font_rescale_ratio (Lisp_Object font_entity) |
100385
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2185 { |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2186 Lisp_Object tail, elt; |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2187 Lisp_Object name = Qnil; |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2188 |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2189 for (tail = Vface_font_rescale_alist; CONSP (tail); tail = XCDR (tail)) |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2190 { |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2191 elt = XCAR (tail); |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2192 if (FLOATP (XCDR (elt))) |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2193 { |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2194 if (STRINGP (XCAR (elt))) |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2195 { |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2196 if (NILP (name)) |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2197 name = Ffont_xlfd_name (font_entity, Qnil); |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2198 if (fast_string_match_ignore_case (XCAR (elt), name) >= 0) |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2199 return XFLOAT_DATA (XCDR (elt)); |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2200 } |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2201 else if (FONT_SPEC_P (XCAR (elt))) |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2202 { |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2203 if (font_match_p (XCAR (elt), font_entity)) |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2204 return XFLOAT_DATA (XCDR (elt)); |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2205 } |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2206 } |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2207 } |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2208 return 1.0; |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2209 } |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2210 |
90400 | 2211 /* We sort fonts by scoring each of them against a specified |
2212 font-spec. The score value is 32 bit (`unsigned'), and the smaller | |
2213 the value is, the closer the font is to the font-spec. | |
2214 | |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2215 The lowest 2 bits of the score is used for driver type. The font |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2216 available by the most preferred font driver is 0. |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2217 |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2218 Each 7-bit in the higher 28 bits are used for numeric properties |
90400 | 2219 WEIGHT, SLANT, WIDTH, and SIZE. */ |
2220 | |
2221 /* How many bits to shift to store the difference value of each font | |
94926 | 2222 property in a score. Note that flots for FONT_TYPE_INDEX and |
2223 FONT_REGISTRY_INDEX are not used. */ | |
90400 | 2224 static int sort_shift_bits[FONT_SIZE_INDEX + 1]; |
2225 | |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
2226 /* Score font-entity ENTITY against properties of font-spec SPEC_PROP. |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
2227 The return value indicates how different ENTITY is compared with |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2228 SPEC_PROP. */ |
90400 | 2229 |
2230 static unsigned | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2231 font_score (Lisp_Object entity, Lisp_Object *spec_prop) |
90400 | 2232 { |
2233 unsigned score = 0; | |
2234 int i; | |
94926 | 2235 |
2236 /* Score three style numeric fields. Maximum difference is 127. */ | |
2237 for (i = FONT_WEIGHT_INDEX; i <= FONT_WIDTH_INDEX; i++) | |
2238 if (! NILP (spec_prop[i]) && ! EQ (AREF (entity, i), spec_prop[i])) | |
2239 { | |
2240 int diff = (XINT (AREF (entity, i)) >> 8) - (XINT (spec_prop[i]) >> 8); | |
2241 | |
2242 if (diff < 0) | |
2243 diff = - diff; | |
95875
d56319d0f726
(font_score): Ignore the diffference of alias style symbols.
Kenichi Handa <handa@m17n.org>
parents:
95869
diff
changeset
|
2244 if (diff > 0) |
d56319d0f726
(font_score): Ignore the diffference of alias style symbols.
Kenichi Handa <handa@m17n.org>
parents:
95869
diff
changeset
|
2245 score |= min (diff, 127) << sort_shift_bits[i]; |
94926 | 2246 } |
2247 | |
2248 /* Score the size. Maximum difference is 127. */ | |
2249 i = FONT_SIZE_INDEX; | |
100385
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2250 if (! NILP (spec_prop[FONT_SIZE_INDEX]) |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2251 && XINT (AREF (entity, FONT_SIZE_INDEX)) > 0) |
90400 | 2252 { |
94926 | 2253 /* We use the higher 6-bit for the actual size difference. The |
2254 lowest bit is set if the DPI is different. */ | |
100385
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2255 int diff; |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2256 int pixel_size = XINT (spec_prop[FONT_SIZE_INDEX]); |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2257 |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2258 if (CONSP (Vface_font_rescale_alist)) |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2259 pixel_size *= font_rescale_ratio (entity); |
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2260 diff = pixel_size - XINT (AREF (entity, FONT_SIZE_INDEX)); |
94926 | 2261 if (diff < 0) |
2262 diff = - diff; | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
2263 diff <<= 1; |
94926 | 2264 if (! NILP (spec_prop[FONT_DPI_INDEX]) |
2265 && ! EQ (spec_prop[FONT_DPI_INDEX], AREF (entity, FONT_DPI_INDEX))) | |
2266 diff |= 1; | |
103041
3049105cf79e
(font_score): Check AVGWIDTH too.
Kenichi Handa <handa@m17n.org>
parents:
103037
diff
changeset
|
2267 if (! NILP (spec_prop[FONT_AVGWIDTH_INDEX]) |
3049105cf79e
(font_score): Check AVGWIDTH too.
Kenichi Handa <handa@m17n.org>
parents:
103037
diff
changeset
|
2268 && ! EQ (spec_prop[FONT_AVGWIDTH_INDEX], AREF (entity, FONT_AVGWIDTH_INDEX))) |
3049105cf79e
(font_score): Check AVGWIDTH too.
Kenichi Handa <handa@m17n.org>
parents:
103037
diff
changeset
|
2269 diff |= 1; |
94926 | 2270 score |= min (diff, 127) << sort_shift_bits[FONT_SIZE_INDEX]; |
90400 | 2271 } |
2272 | |
2273 return score; | |
2274 } | |
2275 | |
2276 | |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2277 /* Concatenate all elements of LIST into one vector. LIST is a list |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2278 of font-entity vectors. */ |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2279 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2280 static Lisp_Object |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2281 font_vconcat_entity_vectors (Lisp_Object list) |
90400 | 2282 { |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2283 int nargs = XINT (Flength (list)); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2284 Lisp_Object *args = alloca (sizeof (Lisp_Object) * nargs); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2285 int i; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2286 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2287 for (i = 0; i < nargs; i++, list = XCDR (list)) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2288 args[i] = XCAR (list); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2289 return Fvconcat (nargs, args); |
90400 | 2290 } |
2291 | |
2292 | |
2293 /* The structure for elements being sorted by qsort. */ | |
2294 struct font_sort_data | |
2295 { | |
2296 unsigned score; | |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2297 int font_driver_preference; |
90400 | 2298 Lisp_Object entity; |
2299 }; | |
2300 | |
2301 | |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2302 /* The comparison function for qsort. */ |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2303 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2304 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2305 font_compare (const void *d1, const void *d2) |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2306 { |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2307 const struct font_sort_data *data1 = d1; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2308 const struct font_sort_data *data2 = d2; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2309 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2310 if (data1->score < data2->score) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2311 return -1; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2312 else if (data1->score > data2->score) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2313 return 1; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2314 return (data1->font_driver_preference - data2->font_driver_preference); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2315 } |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2316 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2317 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2318 /* Sort each font-entity vector in LIST by closeness to font-spec PREFER. |
90400 | 2319 If PREFER specifies a point-size, calculate the corresponding |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
2320 pixel-size from QCdpi property of PREFER or from the Y-resolution |
96262
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2321 of FRAME before sorting. |
94926 | 2322 |
102990
a706504f064e
(font_sort_entites): Change the meaning of the arg
Kenichi Handa <handa@m17n.org>
parents:
102963
diff
changeset
|
2323 If BEST-ONLY is nonzero, return the best matching entity (that |
a706504f064e
(font_sort_entites): Change the meaning of the arg
Kenichi Handa <handa@m17n.org>
parents:
102963
diff
changeset
|
2324 supports the character BEST-ONLY if BEST-ONLY is positive, or any |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2325 if BEST-ONLY is negative). Otherwise, return the sorted result as |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2326 a single vector of font-entities. |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2327 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2328 This function does no optimization for the case that the total |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2329 number of elements is 1. The caller should avoid calling this in |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2330 such a case. */ |
90400 | 2331 |
2332 static Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2333 font_sort_entities (Lisp_Object list, Lisp_Object prefer, Lisp_Object frame, int best_only) |
90400 | 2334 { |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
2335 Lisp_Object prefer_prop[FONT_SPEC_MAX]; |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2336 int len, maxlen, i; |
90400 | 2337 struct font_sort_data *data; |
94926 | 2338 unsigned best_score; |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2339 Lisp_Object best_entity; |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2340 struct frame *f = XFRAME (frame); |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2341 Lisp_Object tail, vec; |
90400 | 2342 USE_SAFE_ALLOCA; |
2343 | |
103369
97cfffb6f666
(font_parse_family_registry): Fix for one-char foundry.
Kenichi Handa <handa@m17n.org>
parents:
103255
diff
changeset
|
2344 for (i = FONT_WEIGHT_INDEX; i <= FONT_AVGWIDTH_INDEX; i++) |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
2345 prefer_prop[i] = AREF (prefer, i); |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
2346 if (FLOATP (prefer_prop[FONT_SIZE_INDEX])) |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
2347 prefer_prop[FONT_SIZE_INDEX] |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
2348 = make_number (font_pixel_size (XFRAME (frame), prefer)); |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
2349 |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2350 if (NILP (XCDR (list))) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2351 { |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2352 /* What we have to take care of is this single vector. */ |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2353 vec = XCAR (list); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2354 maxlen = ASIZE (vec); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2355 } |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2356 else if (best_only) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2357 { |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2358 /* We don't have to perform sort, so there's no need of creating |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2359 a single vector. But, we must find the length of the longest |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2360 vector. */ |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2361 maxlen = 0; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2362 for (tail = list; CONSP (tail); tail = XCDR (tail)) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2363 if (maxlen < ASIZE (XCAR (tail))) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2364 maxlen = ASIZE (XCAR (tail)); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2365 } |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2366 else |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2367 { |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2368 /* We have to create a single vector to sort it. */ |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2369 vec = font_vconcat_entity_vectors (list); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2370 maxlen = ASIZE (vec); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2371 } |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2372 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2373 SAFE_ALLOCA (data, struct font_sort_data *, (sizeof *data) * maxlen); |
102990
a706504f064e
(font_sort_entites): Change the meaning of the arg
Kenichi Handa <handa@m17n.org>
parents:
102963
diff
changeset
|
2374 best_score = 0xFFFFFFFF; |
a706504f064e
(font_sort_entites): Change the meaning of the arg
Kenichi Handa <handa@m17n.org>
parents:
102963
diff
changeset
|
2375 best_entity = Qnil; |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2376 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2377 for (tail = list; CONSP (tail); tail = XCDR (tail)) |
90400 | 2378 { |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2379 int font_driver_preference = 0; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2380 Lisp_Object current_font_driver; |
106433
7c2192f52cb6
Fix a comment and delete trailing whitespace.
Chong Yidong <cyd@stupidchicken.com>
parents:
106350
diff
changeset
|
2381 |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2382 if (best_only) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2383 vec = XCAR (tail); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2384 len = ASIZE (vec); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2385 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2386 /* We are sure that the length of VEC > 0. */ |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2387 current_font_driver = AREF (AREF (vec, 0), FONT_TYPE_INDEX); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2388 /* Score the elements. */ |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2389 for (i = 0; i < len; i++) |
94926 | 2390 { |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2391 data[i].entity = AREF (vec, i); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2392 data[i].score |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2393 = ((best_only <= 0 || font_has_char (f, data[i].entity, best_only) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2394 > 0) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2395 ? font_score (data[i].entity, prefer_prop) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2396 : 0xFFFFFFFF); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2397 if (best_only && best_score > data[i].score) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2398 { |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2399 best_score = data[i].score; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2400 best_entity = data[i].entity; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2401 if (best_score == 0) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2402 break; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2403 } |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2404 if (! EQ (current_font_driver, AREF (AREF (vec, i), FONT_TYPE_INDEX))) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2405 { |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2406 current_font_driver = AREF (AREF (vec, i), FONT_TYPE_INDEX); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2407 font_driver_preference++; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2408 } |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2409 data[i].font_driver_preference = font_driver_preference; |
94926 | 2410 } |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2411 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2412 /* Sort if necessary. */ |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2413 if (! best_only) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2414 { |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2415 qsort (data, len, sizeof *data, font_compare); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2416 for (i = 0; i < len; i++) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2417 ASET (vec, i, data[i].entity); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2418 break; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2419 } |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2420 else |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2421 vec = best_entity; |
90400 | 2422 } |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2423 |
90400 | 2424 SAFE_FREE (); |
2425 | |
103548
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
2426 FONT_ADD_LOG ("sort-by", prefer, vec); |
90400 | 2427 return vec; |
2428 } | |
2429 | |
2430 | |
2431 /* API of Font Service Layer. */ | |
2432 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2433 /* Reflect ORDER (see the variable font_sort_order in xfaces.c) to |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2434 sort_shift_bits. Finternal_set_font_selection_order calls this |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2435 function with font_sort_order after setting up it. */ |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2436 |
90400 | 2437 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2438 font_update_sort_order (int *order) |
90400 | 2439 { |
94926 | 2440 int i, shift_bits; |
2441 | |
95869
14ab94c436d7
(font_update_sort_order): Setting of sort_shift_bits adjusted for the
Kenichi Handa <handa@m17n.org>
parents:
95867
diff
changeset
|
2442 for (i = 0, shift_bits = 23; i < 4; i++, shift_bits -= 7) |
90400 | 2443 { |
2444 int xlfd_idx = order[i]; | |
2445 | |
2446 if (xlfd_idx == XLFD_WEIGHT_INDEX) | |
2447 sort_shift_bits[FONT_WEIGHT_INDEX] = shift_bits; | |
2448 else if (xlfd_idx == XLFD_SLANT_INDEX) | |
2449 sort_shift_bits[FONT_SLANT_INDEX] = shift_bits; | |
2450 else if (xlfd_idx == XLFD_SWIDTH_INDEX) | |
2451 sort_shift_bits[FONT_WIDTH_INDEX] = shift_bits; | |
2452 else | |
2453 sort_shift_bits[FONT_SIZE_INDEX] = shift_bits; | |
2454 } | |
2455 } | |
2456 | |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2457 static int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2458 font_check_otf_features (Lisp_Object script, Lisp_Object langsys, Lisp_Object features, Lisp_Object table) |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2459 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2460 Lisp_Object val; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2461 int negative; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2462 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2463 table = assq_no_quit (script, table); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2464 if (NILP (table)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2465 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2466 table = XCDR (table); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2467 if (! NILP (langsys)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2468 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2469 table = assq_no_quit (langsys, table); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2470 if (NILP (table)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2471 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2472 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2473 else |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2474 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2475 val = assq_no_quit (Qnil, table); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2476 if (NILP (val)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2477 table = XCAR (table); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2478 else |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2479 table = val; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2480 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2481 table = XCDR (table); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2482 for (negative = 0; CONSP (features); features = XCDR (features)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2483 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2484 if (NILP (XCAR (features))) |
102082
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
2485 { |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
2486 negative = 1; |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
2487 continue; |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
2488 } |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2489 if (NILP (Fmemq (XCAR (features), table)) != negative) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2490 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2491 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2492 return 1; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2493 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2494 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2495 /* Check if OTF_CAPABILITY satisfies SPEC (otf-spec). */ |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2496 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2497 static int |
96573
3de01ebe30b7
* fontset.c (fontset_get_font_group):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
96565
diff
changeset
|
2498 font_check_otf (Lisp_Object spec, Lisp_Object otf_capability) |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2499 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2500 Lisp_Object script, langsys = Qnil, gsub = Qnil, gpos = Qnil; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2501 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2502 script = XCAR (spec); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2503 spec = XCDR (spec); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2504 if (! NILP (spec)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2505 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2506 langsys = XCAR (spec); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2507 spec = XCDR (spec); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2508 if (! NILP (spec)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2509 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2510 gsub = XCAR (spec); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2511 spec = XCDR (spec); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2512 if (! NILP (spec)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2513 gpos = XCAR (spec); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2514 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2515 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2516 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2517 if (! NILP (gsub) && ! font_check_otf_features (script, langsys, gsub, |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2518 XCAR (otf_capability))) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2519 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2520 if (! NILP (gpos) && ! font_check_otf_features (script, langsys, gpos, |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2521 XCDR (otf_capability))) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2522 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2523 return 1; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2524 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2525 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2526 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2527 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2528 /* Check if FONT (font-entity or font-object) matches with the font |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2529 specification SPEC. */ |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2530 |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
2531 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2532 font_match_p (Lisp_Object spec, Lisp_Object font) |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
2533 { |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2534 Lisp_Object prop[FONT_SPEC_MAX], *props; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2535 Lisp_Object extra, font_extra; |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
2536 int i; |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
2537 |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2538 for (i = FONT_FOUNDRY_INDEX; i <= FONT_REGISTRY_INDEX; i++) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2539 if (! NILP (AREF (spec, i)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2540 && ! NILP (AREF (font, i)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2541 && ! EQ (AREF (spec, i), AREF (font, i))) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2542 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2543 props = XFONT_SPEC (spec)->props; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2544 if (FLOATP (props[FONT_SIZE_INDEX])) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2545 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2546 for (i = FONT_FOUNDRY_INDEX; i < FONT_SIZE_INDEX; i++) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2547 prop[i] = AREF (spec, i); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2548 prop[FONT_SIZE_INDEX] |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2549 = make_number (font_pixel_size (XFRAME (selected_frame), spec)); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2550 props = prop; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2551 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2552 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2553 if (font_score (font, props) > 0) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2554 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2555 extra = AREF (spec, FONT_EXTRA_INDEX); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2556 font_extra = AREF (font, FONT_EXTRA_INDEX); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2557 for (; CONSP (extra); extra = XCDR (extra)) |
94926 | 2558 { |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2559 Lisp_Object key = XCAR (XCAR (extra)); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2560 Lisp_Object val = XCDR (XCAR (extra)), val2; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2561 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2562 if (EQ (key, QClang)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2563 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2564 val2 = assq_no_quit (key, font_extra); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2565 if (NILP (val2)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2566 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2567 val2 = XCDR (val2); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2568 if (CONSP (val)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2569 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2570 if (! CONSP (val2)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2571 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2572 while (CONSP (val)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2573 if (NILP (Fmemq (val, val2))) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2574 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2575 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2576 else |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2577 if (CONSP (val2) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2578 ? NILP (Fmemq (val, XCDR (val2))) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2579 : ! EQ (val, val2)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2580 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2581 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2582 else if (EQ (key, QCscript)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2583 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2584 val2 = assq_no_quit (val, Vscript_representative_chars); |
99075
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2585 if (CONSP (val2)) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2586 { |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2587 val2 = XCDR (val2); |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2588 if (CONSP (val2)) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2589 { |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2590 /* All characters in the list must be supported. */ |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2591 for (; CONSP (val2); val2 = XCDR (val2)) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2592 { |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2593 if (! NATNUMP (XCAR (val2))) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2594 continue; |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2595 if (font_encode_char (font, XFASTINT (XCAR (val2))) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2596 == FONT_INVALID_CODE) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2597 return 0; |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2598 } |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2599 } |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2600 else if (VECTORP (val2)) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2601 { |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2602 /* At most one character in the vector must be supported. */ |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2603 for (i = 0; i < ASIZE (val2); i++) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2604 { |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2605 if (! NATNUMP (AREF (val2, i))) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2606 continue; |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2607 if (font_encode_char (font, XFASTINT (AREF (val2, i))) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2608 != FONT_INVALID_CODE) |
99076
06c37ccf1b58
(font_match_p): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
99075
diff
changeset
|
2609 break; |
99075
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2610 } |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2611 if (i == ASIZE (val2)) |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2612 return 0; |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2613 } |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
2614 } |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2615 } |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2616 else if (EQ (key, QCotf)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2617 { |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2618 struct font *fontp; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2619 |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2620 if (! FONT_OBJECT_P (font)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2621 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2622 fontp = XFONT_OBJECT (font); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2623 if (! fontp->driver->otf_capability) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2624 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2625 val2 = fontp->driver->otf_capability (fontp); |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2626 if (NILP (val2) || ! font_check_otf (val, val2)) |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2627 return 0; |
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2628 } |
94926 | 2629 } |
2630 | |
96559
34bb8a9f2b7f
(font_make_object): New arg entity and pixelsize.
Kenichi Handa <handa@m17n.org>
parents:
96262
diff
changeset
|
2631 return 1; |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
2632 } |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2633 |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
2634 |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2635 /* Font cache |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2636 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2637 Each font backend has the callback function get_cache, and it |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2638 returns a cons cell of which cdr part can be freely used for |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2639 caching fonts. The cons cell may be shared by multiple frames |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2640 and/or multiple font drivers. So, we arrange the cdr part as this: |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2641 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2642 ((DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...) ...) |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2643 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2644 where DRIVER-TYPE is a symbol such as `x', `xft', etc., NUM-FRAMES |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2645 is a number frames sharing this cache, and FONT-CACHE-DATA is a |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2646 cons (FONT-SPEC FONT-ENTITY ...). */ |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2647 |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
2648 static void font_prepare_cache (FRAME_PTR, struct font_driver *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
2649 static void font_finish_cache (FRAME_PTR, struct font_driver *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
2650 static Lisp_Object font_get_cache (FRAME_PTR, struct font_driver *); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
2651 static void font_clear_cache (FRAME_PTR, Lisp_Object, |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
109032
diff
changeset
|
2652 struct font_driver *); |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2653 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2654 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2655 font_prepare_cache (FRAME_PTR f, struct font_driver *driver) |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2656 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2657 Lisp_Object cache, val; |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2658 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2659 cache = driver->get_cache (f); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2660 val = XCDR (cache); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2661 while (CONSP (val) && ! EQ (XCAR (XCAR (val)), driver->type)) |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2662 val = XCDR (val); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2663 if (NILP (val)) |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2664 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2665 val = Fcons (driver->type, Fcons (make_number (1), Qnil)); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2666 XSETCDR (cache, Fcons (val, XCDR (cache))); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2667 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2668 else |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2669 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2670 val = XCDR (XCAR (val)); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2671 XSETCAR (val, make_number (XINT (XCAR (val)) + 1)); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2672 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2673 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2674 |
91909 | 2675 |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2676 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2677 font_finish_cache (FRAME_PTR f, struct font_driver *driver) |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2678 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2679 Lisp_Object cache, val, tmp; |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2680 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2681 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2682 cache = driver->get_cache (f); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2683 val = XCDR (cache); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2684 while (CONSP (val) && ! EQ (XCAR (XCAR (val)), driver->type)) |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2685 cache = val, val = XCDR (val); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
2686 font_assert (! NILP (val)); |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2687 tmp = XCDR (XCAR (val)); |
91909 | 2688 XSETCAR (tmp, make_number (XINT (XCAR (tmp)) - 1)); |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2689 if (XINT (XCAR (tmp)) == 0) |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2690 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2691 font_clear_cache (f, XCAR (val), driver); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2692 XSETCDR (cache, XCDR (val)); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2693 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2694 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2695 |
91909 | 2696 |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2697 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2698 font_get_cache (FRAME_PTR f, struct font_driver *driver) |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2699 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2700 Lisp_Object val = driver->get_cache (f); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2701 Lisp_Object type = driver->type; |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2702 |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
2703 font_assert (CONSP (val)); |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2704 for (val = XCDR (val); ! EQ (XCAR (XCAR (val)), type); val = XCDR (val)); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
2705 font_assert (CONSP (val)); |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2706 /* VAL = ((DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...) ...) */ |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2707 val = XCDR (XCAR (val)); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2708 return val; |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2709 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2710 |
91909 | 2711 static int num_fonts; |
2712 | |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2713 static void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2714 font_clear_cache (FRAME_PTR f, Lisp_Object cache, struct font_driver *driver) |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2715 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2716 Lisp_Object tail, elt; |
100442
71dc8b382715
(font_update_drivers): Fix mistake in reconstructing the driver list.
Chong Yidong <cyd@stupidchicken.com>
parents:
100406
diff
changeset
|
2717 Lisp_Object tail2, entity; |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
2718 |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2719 /* CACHE = (DRIVER-TYPE NUM-FRAMES FONT-CACHE-DATA ...) */ |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2720 for (tail = XCDR (XCDR (cache)); CONSP (tail); tail = XCDR (tail)) |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2721 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2722 elt = XCAR (tail); |
100442
71dc8b382715
(font_update_drivers): Fix mistake in reconstructing the driver list.
Chong Yidong <cyd@stupidchicken.com>
parents:
100406
diff
changeset
|
2723 /* elt should have the form (FONT-SPEC FONT-ENTITY ...) */ |
71dc8b382715
(font_update_drivers): Fix mistake in reconstructing the driver list.
Chong Yidong <cyd@stupidchicken.com>
parents:
100406
diff
changeset
|
2724 if (CONSP (elt) && FONT_SPEC_P (XCAR (elt))) |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2725 { |
100442
71dc8b382715
(font_update_drivers): Fix mistake in reconstructing the driver list.
Chong Yidong <cyd@stupidchicken.com>
parents:
100406
diff
changeset
|
2726 for (tail2 = XCDR (elt); CONSP (tail2); tail2 = XCDR (tail2)) |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2727 { |
100442
71dc8b382715
(font_update_drivers): Fix mistake in reconstructing the driver list.
Chong Yidong <cyd@stupidchicken.com>
parents:
100406
diff
changeset
|
2728 entity = XCAR (tail2); |
71dc8b382715
(font_update_drivers): Fix mistake in reconstructing the driver list.
Chong Yidong <cyd@stupidchicken.com>
parents:
100406
diff
changeset
|
2729 |
71dc8b382715
(font_update_drivers): Fix mistake in reconstructing the driver list.
Chong Yidong <cyd@stupidchicken.com>
parents:
100406
diff
changeset
|
2730 if (FONT_ENTITY_P (entity) |
71dc8b382715
(font_update_drivers): Fix mistake in reconstructing the driver list.
Chong Yidong <cyd@stupidchicken.com>
parents:
100406
diff
changeset
|
2731 && EQ (driver->type, AREF (entity, FONT_TYPE_INDEX))) |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2732 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2733 Lisp_Object objlist = AREF (entity, FONT_OBJLIST_INDEX); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2734 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2735 for (; CONSP (objlist); objlist = XCDR (objlist)) |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2736 { |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2737 Lisp_Object val = XCAR (objlist); |
94926 | 2738 struct font *font = XFONT_OBJECT (val); |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2739 |
96000
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
2740 if (! NILP (AREF (val, FONT_TYPE_INDEX))) |
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
2741 { |
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
2742 font_assert (font && driver == font->driver); |
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
2743 driver->close (f, font); |
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
2744 num_fonts--; |
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
2745 } |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2746 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2747 if (driver->free_entity) |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2748 driver->free_entity (entity); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2749 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2750 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2751 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2752 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2753 XSETCDR (cache, Qnil); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2754 } |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2755 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2756 |
90400 | 2757 static Lisp_Object scratch_font_spec, scratch_font_prefer; |
2758 | |
108813 | 2759 /* Check each font-entity in VEC, and return a list of font-entities |
2760 that satisfy this condition: | |
2761 (1) matches with SPEC and SIZE if SPEC is not nil, and | |
2762 (2) doesn't match with any regexps in Vface_ignored_fonts (if non-nil). | |
2763 */ | |
2764 | |
2765 extern Lisp_Object Vface_ignored_fonts; | |
2766 | |
94926 | 2767 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2768 font_delete_unmatched (Lisp_Object vec, Lisp_Object spec, int size) |
94926 | 2769 { |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
2770 Lisp_Object entity, val; |
94926 | 2771 enum font_property_index prop; |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2772 int i; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2773 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2774 for (val = Qnil, i = ASIZE (vec) - 1; i >= 0; i--) |
94926 | 2775 { |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2776 entity = AREF (vec, i); |
108813 | 2777 if (! NILP (Vface_ignored_fonts)) |
2778 { | |
2779 char name[256]; | |
2780 Lisp_Object tail, regexp; | |
2781 | |
2782 if (font_unparse_xlfd (entity, 0, name, 256) >= 0) | |
2783 { | |
2784 for (tail = Vface_ignored_fonts; CONSP (tail); tail = XCDR (tail)) | |
2785 { | |
2786 regexp = XCAR (tail); | |
2787 if (STRINGP (regexp) | |
2788 && fast_c_string_match_ignore_case (regexp, name) >= 0) | |
2789 break; | |
2790 } | |
2791 if (CONSP (tail)) | |
2792 continue; | |
2793 } | |
2794 } | |
2795 if (NILP (spec)) | |
2796 { | |
2797 val = Fcons (entity, val); | |
2798 continue; | |
2799 } | |
94926 | 2800 for (prop = FONT_WEIGHT_INDEX; prop < FONT_SIZE_INDEX; prop++) |
2801 if (INTEGERP (AREF (spec, prop)) | |
2802 && ((XINT (AREF (spec, prop)) >> 8) | |
2803 != (XINT (AREF (entity, prop)) >> 8))) | |
2804 prop = FONT_SPEC_MAX; | |
96262
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2805 if (prop < FONT_SPEC_MAX |
94926 | 2806 && size |
2807 && XINT (AREF (entity, FONT_SIZE_INDEX)) > 0) | |
2808 { | |
2809 int diff = XINT (AREF (entity, FONT_SIZE_INDEX)) - size; | |
2810 | |
2811 if (diff != 0 | |
2812 && (diff < 0 ? -diff > FONT_PIXEL_SIZE_QUANTUM | |
2813 : diff > FONT_PIXEL_SIZE_QUANTUM)) | |
2814 prop = FONT_SPEC_MAX; | |
2815 } | |
96262
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2816 if (prop < FONT_SPEC_MAX |
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2817 && INTEGERP (AREF (spec, FONT_DPI_INDEX)) |
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2818 && INTEGERP (AREF (entity, FONT_DPI_INDEX)) |
98581
bd9b20fa24a6
(font_delete_unmatched): Fix previous change. Don't
Kenichi Handa <handa@m17n.org>
parents:
98451
diff
changeset
|
2819 && XINT (AREF (entity, FONT_DPI_INDEX)) != 0 |
96262
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2820 && ! EQ (AREF (spec, FONT_DPI_INDEX), AREF (entity, FONT_DPI_INDEX))) |
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2821 prop = FONT_SPEC_MAX; |
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2822 if (prop < FONT_SPEC_MAX |
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2823 && INTEGERP (AREF (spec, FONT_AVGWIDTH_INDEX)) |
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2824 && INTEGERP (AREF (entity, FONT_AVGWIDTH_INDEX)) |
98581
bd9b20fa24a6
(font_delete_unmatched): Fix previous change. Don't
Kenichi Handa <handa@m17n.org>
parents:
98451
diff
changeset
|
2825 && XINT (AREF (entity, FONT_AVGWIDTH_INDEX)) != 0 |
96262
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2826 && ! EQ (AREF (spec, FONT_AVGWIDTH_INDEX), |
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2827 AREF (entity, FONT_AVGWIDTH_INDEX))) |
31a398897576
(font_parse_fcname): Remove unused variables.
Kenichi Handa <handa@m17n.org>
parents:
96227
diff
changeset
|
2828 prop = FONT_SPEC_MAX; |
94926 | 2829 if (prop < FONT_SPEC_MAX) |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
2830 val = Fcons (entity, val); |
94926 | 2831 } |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2832 return (Fvconcat (1, &val)); |
94926 | 2833 } |
2834 | |
2835 | |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2836 /* Return a list of vectors of font-entities matching with SPEC on |
106433
7c2192f52cb6
Fix a comment and delete trailing whitespace.
Chong Yidong <cyd@stupidchicken.com>
parents:
106350
diff
changeset
|
2837 FRAME. Each elements in the list is a vector of entities from the |
7c2192f52cb6
Fix a comment and delete trailing whitespace.
Chong Yidong <cyd@stupidchicken.com>
parents:
106350
diff
changeset
|
2838 same font-driver. */ |
94926 | 2839 |
2840 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2841 font_list_entities (Lisp_Object frame, Lisp_Object spec) |
90400 | 2842 { |
2843 FRAME_PTR f = XFRAME (frame); | |
2844 struct font_driver_list *driver_list = f->font_driver_list; | |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2845 Lisp_Object ftype, val; |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2846 Lisp_Object list = Qnil; |
94926 | 2847 int size; |
2848 int need_filtering = 0; | |
90400 | 2849 int i; |
2850 | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
2851 font_assert (FONT_SPEC_P (spec)); |
90400 | 2852 |
94926 | 2853 if (INTEGERP (AREF (spec, FONT_SIZE_INDEX))) |
2854 size = XINT (AREF (spec, FONT_SIZE_INDEX)); | |
2855 else if (FLOATP (AREF (spec, FONT_SIZE_INDEX))) | |
2856 size = font_pixel_size (f, spec); | |
2857 else | |
2858 size = 0; | |
2859 | |
90400 | 2860 ftype = AREF (spec, FONT_TYPE_INDEX); |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2861 for (i = FONT_FOUNDRY_INDEX; i <= FONT_REGISTRY_INDEX; i++) |
94926 | 2862 ASET (scratch_font_spec, i, AREF (spec, i)); |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2863 for (i = FONT_WEIGHT_INDEX; i < FONT_EXTRA_INDEX; i++) |
94926 | 2864 { |
2865 ASET (scratch_font_spec, i, Qnil); | |
2866 if (! NILP (AREF (spec, i))) | |
2867 need_filtering = 1; | |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2868 if (i == FONT_DPI_INDEX) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2869 /* Skip FONT_SPACING_INDEX */ |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2870 i++; |
94926 | 2871 } |
95359
f6580a4c58da
(font_parse_family_registry): Use Ffont_put to validate
Kenichi Handa <handa@m17n.org>
parents:
95290
diff
changeset
|
2872 ASET (scratch_font_spec, FONT_SPACING_INDEX, AREF (spec, FONT_SPACING_INDEX)); |
94926 | 2873 ASET (scratch_font_spec, FONT_EXTRA_INDEX, AREF (spec, FONT_EXTRA_INDEX)); |
2874 | |
90400 | 2875 for (i = 0; driver_list; driver_list = driver_list->next) |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
2876 if (driver_list->on |
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
2877 && (NILP (ftype) || EQ (driver_list->driver->type, ftype))) |
90400 | 2878 { |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2879 Lisp_Object cache = font_get_cache (f, driver_list->driver); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2880 |
95437
6e6db01383e4
(font_list_entities): Fix the car part of data to be
Kenichi Handa <handa@m17n.org>
parents:
95421
diff
changeset
|
2881 ASET (scratch_font_spec, FONT_TYPE_INDEX, driver_list->driver->type); |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2882 val = assoc_no_quit (scratch_font_spec, XCDR (cache)); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2883 if (CONSP (val)) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2884 val = XCDR (val); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2885 else |
90400 | 2886 { |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2887 Lisp_Object copy; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2888 |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2889 val = driver_list->driver->list (frame, scratch_font_spec); |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2890 if (NILP (val)) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2891 val = null_vector; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2892 else |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2893 val = Fvconcat (1, &val); |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2894 copy = Fcopy_font_spec (scratch_font_spec); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2895 ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
2896 XSETCDR (cache, Fcons (Fcons (copy, val), XCDR (cache))); |
90400 | 2897 } |
108813 | 2898 if (ASIZE (val) > 0 |
2899 && (need_filtering | |
2900 || ! NILP (Vface_ignored_fonts))) | |
2901 val = font_delete_unmatched (val, need_filtering ? spec : Qnil, size); | |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2902 if (ASIZE (val) > 0) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2903 list = Fcons (val, list); |
90400 | 2904 } |
94926 | 2905 |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2906 list = Fnreverse (list); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2907 FONT_ADD_LOG ("list", spec, list); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
2908 return list; |
90400 | 2909 } |
2910 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2911 |
94926 | 2912 /* Return a font entity matching with SPEC on FRAME. ATTRS, if non |
2913 nil, is an array of face's attributes, which specifies preferred | |
2914 font-related attributes. */ | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2915 |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2916 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2917 font_matching_entity (FRAME_PTR f, Lisp_Object *attrs, Lisp_Object spec) |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2918 { |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2919 struct font_driver_list *driver_list = f->font_driver_list; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2920 Lisp_Object ftype, size, entity; |
94926 | 2921 Lisp_Object frame; |
98445
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
2922 Lisp_Object work = Fcopy_font_spec (spec); |
94926 | 2923 |
2924 XSETFRAME (frame, f); | |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2925 ftype = AREF (spec, FONT_TYPE_INDEX); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2926 size = AREF (spec, FONT_SIZE_INDEX); |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98445
diff
changeset
|
2927 |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2928 if (FLOATP (size)) |
98451
db015b441c0c
* nsfont.m (nsfont_spec_to_traits): Use UnXX masks only for non-normal styles. (nsfont_open): Reenable the cache.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
98445
diff
changeset
|
2929 ASET (work, FONT_SIZE_INDEX, make_number (font_pixel_size (f, spec))); |
98445
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
2930 FONT_SET_STYLE (work, FONT_WEIGHT_INDEX, attrs[LFACE_WEIGHT_INDEX]); |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
2931 FONT_SET_STYLE (work, FONT_SLANT_INDEX, attrs[LFACE_SLANT_INDEX]); |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
2932 FONT_SET_STYLE (work, FONT_WIDTH_INDEX, attrs[LFACE_SWIDTH_INDEX]); |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
2933 |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2934 entity = Qnil; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2935 for (; driver_list; driver_list = driver_list->next) |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2936 if (driver_list->on |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2937 && (NILP (ftype) || EQ (driver_list->driver->type, ftype))) |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2938 { |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
2939 Lisp_Object cache = font_get_cache (f, driver_list->driver); |
95104
ae4280e6a166
(font_list_entities): Fix handling of cache.
Kenichi Handa <handa@m17n.org>
parents:
95013
diff
changeset
|
2940 Lisp_Object copy; |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2941 |
98445
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
2942 ASET (work, FONT_TYPE_INDEX, driver_list->driver->type); |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
2943 entity = assoc_no_quit (work, XCDR (cache)); |
95104
ae4280e6a166
(font_list_entities): Fix handling of cache.
Kenichi Handa <handa@m17n.org>
parents:
95013
diff
changeset
|
2944 if (CONSP (entity)) |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2945 entity = XCDR (entity); |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2946 else |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2947 { |
98445
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
2948 entity = driver_list->driver->match (frame, work); |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
2949 copy = Fcopy_font_spec (work); |
95104
ae4280e6a166
(font_list_entities): Fix handling of cache.
Kenichi Handa <handa@m17n.org>
parents:
95013
diff
changeset
|
2950 ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); |
ae4280e6a166
(font_list_entities): Fix handling of cache.
Kenichi Handa <handa@m17n.org>
parents:
95013
diff
changeset
|
2951 XSETCDR (cache, Fcons (Fcons (copy, entity), XCDR (cache))); |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2952 } |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2953 if (! NILP (entity)) |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2954 break; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2955 } |
103548
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
2956 FONT_ADD_LOG ("match", work, entity); |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2957 return entity; |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2958 } |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
2959 |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2960 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2961 /* Open a font of ENTITY and PIXEL_SIZE on frame F, and return the |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2962 opened font object. */ |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
2963 |
90400 | 2964 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
2965 font_open_entity (FRAME_PTR f, Lisp_Object entity, int pixel_size) |
90400 | 2966 { |
2967 struct font_driver_list *driver_list; | |
91909 | 2968 Lisp_Object objlist, size, val, font_object; |
90400 | 2969 struct font *font; |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
2970 int min_width, height; |
100445
e412b5885b9d
(font_open_entity): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
100442
diff
changeset
|
2971 int scaled_pixel_size; |
94926 | 2972 |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
2973 font_assert (FONT_ENTITY_P (entity)); |
90400 | 2974 size = AREF (entity, FONT_SIZE_INDEX); |
2975 if (XINT (size) != 0) | |
100445
e412b5885b9d
(font_open_entity): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
100442
diff
changeset
|
2976 scaled_pixel_size = pixel_size = XINT (size); |
100385
4504aa7cb434
(font_rescale_ratio): Moved from xfaces.c. Argument
Kenichi Handa <handa@m17n.org>
parents:
100336
diff
changeset
|
2977 else if (CONSP (Vface_font_rescale_alist)) |
100445
e412b5885b9d
(font_open_entity): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
100442
diff
changeset
|
2978 scaled_pixel_size = pixel_size * font_rescale_ratio (entity); |
90400 | 2979 |
94926 | 2980 val = AREF (entity, FONT_TYPE_INDEX); |
2981 for (driver_list = f->font_driver_list; | |
2982 driver_list && ! EQ (driver_list->driver->type, val); | |
2983 driver_list = driver_list->next); | |
2984 if (! driver_list) | |
2985 return Qnil; | |
2986 | |
106755
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2987 for (objlist = AREF (entity, FONT_OBJLIST_INDEX); CONSP (objlist); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2988 objlist = XCDR (objlist)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2989 { |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2990 Lisp_Object fn = XCAR (objlist); |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2991 if (! NILP (AREF (fn, FONT_TYPE_INDEX)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2992 && XFONT_OBJECT (fn)->pixel_size == pixel_size) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2993 { |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2994 if (driver_list->driver->cached_font_ok == NULL |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2995 || driver_list->driver->cached_font_ok (f, fn, entity)) |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2996 return fn; |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2997 } |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2998 } |
574dd89b7759
Fix slowdown and wrong font choosed by XSETTINGS changes. bug #5157.
Jan D. <jan.h.d@swipnet.se>
parents:
106750
diff
changeset
|
2999 |
100445
e412b5885b9d
(font_open_entity): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
100442
diff
changeset
|
3000 font_object = driver_list->driver->open (f, entity, scaled_pixel_size); |
106215
da3ca3481c0b
(font_open_entity): Don't use ASET if font_object is Qnil.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
106201
diff
changeset
|
3001 if (!NILP (font_object)) |
da3ca3481c0b
(font_open_entity): Don't use ASET if font_object is Qnil.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
106201
diff
changeset
|
3002 ASET (font_object, FONT_SIZE_INDEX, make_number (pixel_size)); |
103548
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
3003 FONT_ADD_LOG ("open", entity, font_object); |
91909 | 3004 if (NILP (font_object)) |
94926 | 3005 return Qnil; |
3006 ASET (entity, FONT_OBJLIST_INDEX, | |
3007 Fcons (font_object, AREF (entity, FONT_OBJLIST_INDEX))); | |
96000
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
3008 ASET (font_object, FONT_OBJLIST_INDEX, Qnil); |
94926 | 3009 num_fonts++; |
3010 | |
3011 font = XFONT_OBJECT (font_object); | |
3012 min_width = (font->min_width ? font->min_width | |
3013 : font->average_width ? font->average_width | |
3014 : font->space_width ? font->space_width | |
3015 : 1); | |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
3016 height = (font->height ? font->height : 1); |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
3017 #ifdef HAVE_WINDOW_SYSTEM |
94926 | 3018 FRAME_X_DISPLAY_INFO (f)->n_fonts++; |
3019 if (FRAME_X_DISPLAY_INFO (f)->n_fonts == 1) | |
91909 | 3020 { |
94926 | 3021 FRAME_SMALLEST_CHAR_WIDTH (f) = min_width; |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
3022 FRAME_SMALLEST_FONT_HEIGHT (f) = height; |
94926 | 3023 fonts_changed_p = 1; |
91909 | 3024 } |
94926 | 3025 else |
3026 { | |
3027 if (FRAME_SMALLEST_CHAR_WIDTH (f) > min_width) | |
3028 FRAME_SMALLEST_CHAR_WIDTH (f) = min_width, fonts_changed_p = 1; | |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
3029 if (FRAME_SMALLEST_FONT_HEIGHT (f) > height) |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
3030 FRAME_SMALLEST_FONT_HEIGHT (f) = height, fonts_changed_p = 1; |
94926 | 3031 } |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
3032 #endif |
91909 | 3033 |
3034 return font_object; | |
90400 | 3035 } |
3036 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3037 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3038 /* Close FONT_OBJECT that is opened on frame F. */ |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3039 |
90400 | 3040 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3041 font_close_object (FRAME_PTR f, Lisp_Object font_object) |
90400 | 3042 { |
94926 | 3043 struct font *font = XFONT_OBJECT (font_object); |
96000
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
3044 |
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
3045 if (NILP (AREF (font_object, FONT_TYPE_INDEX))) |
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
3046 /* Already closed. */ |
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
3047 return; |
103548
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
3048 FONT_ADD_LOG ("close", font_object, Qnil); |
96000
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
3049 font->driver->close (f, font); |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
3050 #ifdef HAVE_WINDOW_SYSTEM |
96000
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
3051 font_assert (FRAME_X_DISPLAY_INFO (f)->n_fonts); |
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
3052 FRAME_X_DISPLAY_INFO (f)->n_fonts--; |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
3053 #endif |
96000
f2d08191aec7
(font_check_object): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
95984
diff
changeset
|
3054 num_fonts--; |
90400 | 3055 } |
3056 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3057 |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
3058 /* Return 1 if FONT on F has a glyph for character C, 0 if not, -1 if |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
3059 FONT is a font-entity and it must be opened to check. */ |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3060 |
90400 | 3061 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3062 font_has_char (FRAME_PTR f, Lisp_Object font, int c) |
90400 | 3063 { |
90490
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3064 struct font *fontp; |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3065 |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3066 if (FONT_ENTITY_P (font)) |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3067 { |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3068 Lisp_Object type = AREF (font, FONT_TYPE_INDEX); |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3069 struct font_driver_list *driver_list; |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3070 |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3071 for (driver_list = f->font_driver_list; |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3072 driver_list && ! EQ (driver_list->driver->type, type); |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3073 driver_list = driver_list->next); |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3074 if (! driver_list) |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3075 return 0; |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3076 if (! driver_list->driver->has_char) |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3077 return -1; |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3078 return driver_list->driver->has_char (font, c); |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3079 } |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3080 |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
3081 font_assert (FONT_OBJECT_P (font)); |
94926 | 3082 fontp = XFONT_OBJECT (font); |
90490
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3083 if (fontp->driver->has_char) |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3084 { |
94926 | 3085 int result = fontp->driver->has_char (font, c); |
90490
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3086 |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3087 if (result >= 0) |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3088 return result; |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3089 } |
8ef2cbaf626a
(font_parse_xlfd): Fix generating of CHARSET_REGISTRY field.
Kenichi Handa <handa@m17n.org>
parents:
90483
diff
changeset
|
3090 return (fontp->driver->encode_char (fontp, c) != FONT_INVALID_CODE); |
90400 | 3091 } |
3092 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3093 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3094 /* Return the glyph ID of FONT_OBJECT for character C. */ |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3095 |
90400 | 3096 unsigned |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3097 font_encode_char (Lisp_Object font_object, int c) |
90400 | 3098 { |
94926 | 3099 struct font *font; |
3100 | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
3101 font_assert (FONT_OBJECT_P (font_object)); |
94926 | 3102 font = XFONT_OBJECT (font_object); |
90400 | 3103 return font->driver->encode_char (font, c); |
3104 } | |
3105 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3106 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3107 /* Return the name of FONT_OBJECT. */ |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3108 |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
3109 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3110 font_get_name (Lisp_Object font_object) |
90400 | 3111 { |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
3112 font_assert (FONT_OBJECT_P (font_object)); |
94926 | 3113 return AREF (font_object, FONT_NAME_INDEX); |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
3114 } |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
3115 |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3116 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3117 /* Return the specification of FONT_OBJECT. */ |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3118 |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
3119 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3120 font_get_spec (Lisp_Object font_object) |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
3121 { |
94926 | 3122 Lisp_Object spec = font_make_spec (); |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
3123 int i; |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
3124 |
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
3125 for (i = 0; i < FONT_SIZE_INDEX; i++) |
94926 | 3126 ASET (spec, i, AREF (font_object, i)); |
3127 ASET (spec, FONT_SIZE_INDEX, | |
3128 make_number (XFONT_OBJECT (font_object)->pixel_size)); | |
90468
5424215feef6
(XLFD_SMALLNUM_MASK): Delete this macro.
Kenichi Handa <handa@m17n.org>
parents:
90451
diff
changeset
|
3129 return spec; |
90400 | 3130 } |
3131 | |
101293
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3132 |
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3133 /* Create a new font spec from FONT_NAME, and return it. If FONT_NAME |
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3134 could not be parsed by font_parse_name, return Qnil. */ |
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3135 |
90400 | 3136 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3137 font_spec_from_name (Lisp_Object font_name) |
94926 | 3138 { |
101293
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3139 Lisp_Object spec = Ffont_spec (0, NULL); |
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3140 |
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3141 CHECK_STRING (font_name); |
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3142 if (font_parse_name ((char *) SDATA (font_name), spec) == -1) |
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3143 return Qnil; |
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3144 font_put_extra (spec, QCname, font_name); |
106750
10b9609fb6b7
Fixing user-spec for fonts instead of using name.
Jan D. <jan.h.d@swipnet.se>
parents:
106618
diff
changeset
|
3145 font_put_extra (spec, QCuser_spec, font_name); |
101293
558e0d4ded9a
(font_spec_from_name): Return Qnil if font name could not be parsed.
Chong Yidong <cyd@stupidchicken.com>
parents:
101226
diff
changeset
|
3146 return spec; |
94926 | 3147 } |
3148 | |
3149 | |
3150 void | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3151 font_clear_prop (Lisp_Object *attrs, enum font_property_index prop) |
94926 | 3152 { |
3153 Lisp_Object font = attrs[LFACE_FONT_INDEX]; | |
3154 | |
3155 if (! FONTP (font)) | |
3156 return; | |
106750
10b9609fb6b7
Fixing user-spec for fonts instead of using name.
Jan D. <jan.h.d@swipnet.se>
parents:
106618
diff
changeset
|
3157 |
102897
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
3158 if (! NILP (Ffont_get (font, QCname))) |
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
3159 { |
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
3160 font = Fcopy_font_spec (font); |
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
3161 font_put_extra (font, QCname, Qnil); |
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
3162 } |
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
3163 |
94926 | 3164 if (NILP (AREF (font, prop)) |
98717
507c5c477e60
(font_clear_prop): When clearing font width, clear the average width
Chong Yidong <cyd@stupidchicken.com>
parents:
98655
diff
changeset
|
3165 && prop != FONT_FAMILY_INDEX |
507c5c477e60
(font_clear_prop): When clearing font width, clear the average width
Chong Yidong <cyd@stupidchicken.com>
parents:
98655
diff
changeset
|
3166 && prop != FONT_FOUNDRY_INDEX |
507c5c477e60
(font_clear_prop): When clearing font width, clear the average width
Chong Yidong <cyd@stupidchicken.com>
parents:
98655
diff
changeset
|
3167 && prop != FONT_WIDTH_INDEX |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3168 && prop != FONT_SIZE_INDEX) |
94926 | 3169 return; |
102897
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
3170 if (EQ (font, attrs[LFACE_FONT_INDEX])) |
9a6e5b1105a6
(font_put_extra): If VAL is nil, delete the slot for PROP
Kenichi Handa <handa@m17n.org>
parents:
102708
diff
changeset
|
3171 font = Fcopy_font_spec (font); |
94926 | 3172 ASET (font, prop, Qnil); |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3173 if (prop == FONT_FAMILY_INDEX || prop == FONT_FOUNDRY_INDEX) |
94926 | 3174 { |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3175 if (prop == FONT_FAMILY_INDEX) |
101156
fe4728c4a48b
(font_clear_prop): If clearing the family, clear the font width index
Chong Yidong <cyd@stupidchicken.com>
parents:
101028
diff
changeset
|
3176 { |
fe4728c4a48b
(font_clear_prop): If clearing the family, clear the font width index
Chong Yidong <cyd@stupidchicken.com>
parents:
101028
diff
changeset
|
3177 ASET (font, FONT_FOUNDRY_INDEX, Qnil); |
fe4728c4a48b
(font_clear_prop): If clearing the family, clear the font width index
Chong Yidong <cyd@stupidchicken.com>
parents:
101028
diff
changeset
|
3178 /* If we are setting the font family, we must also clear |
fe4728c4a48b
(font_clear_prop): If clearing the family, clear the font width index
Chong Yidong <cyd@stupidchicken.com>
parents:
101028
diff
changeset
|
3179 FONT_WIDTH_INDEX to avoid rejecting families that lack |
fe4728c4a48b
(font_clear_prop): If clearing the family, clear the font width index
Chong Yidong <cyd@stupidchicken.com>
parents:
101028
diff
changeset
|
3180 support for some widths. */ |
fe4728c4a48b
(font_clear_prop): If clearing the family, clear the font width index
Chong Yidong <cyd@stupidchicken.com>
parents:
101028
diff
changeset
|
3181 ASET (font, FONT_WIDTH_INDEX, Qnil); |
fe4728c4a48b
(font_clear_prop): If clearing the family, clear the font width index
Chong Yidong <cyd@stupidchicken.com>
parents:
101028
diff
changeset
|
3182 } |
94926 | 3183 ASET (font, FONT_ADSTYLE_INDEX, Qnil); |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3184 ASET (font, FONT_REGISTRY_INDEX, Qnil); |
94926 | 3185 ASET (font, FONT_SIZE_INDEX, Qnil); |
3186 ASET (font, FONT_DPI_INDEX, Qnil); | |
3187 ASET (font, FONT_SPACING_INDEX, Qnil); | |
3188 ASET (font, FONT_AVGWIDTH_INDEX, Qnil); | |
3189 } | |
3190 else if (prop == FONT_SIZE_INDEX) | |
3191 { | |
3192 ASET (font, FONT_DPI_INDEX, Qnil); | |
3193 ASET (font, FONT_SPACING_INDEX, Qnil); | |
3194 ASET (font, FONT_AVGWIDTH_INDEX, Qnil); | |
3195 } | |
98717
507c5c477e60
(font_clear_prop): When clearing font width, clear the average width
Chong Yidong <cyd@stupidchicken.com>
parents:
98655
diff
changeset
|
3196 else if (prop == FONT_WIDTH_INDEX) |
507c5c477e60
(font_clear_prop): When clearing font width, clear the average width
Chong Yidong <cyd@stupidchicken.com>
parents:
98655
diff
changeset
|
3197 ASET (font, FONT_AVGWIDTH_INDEX, Qnil); |
94926 | 3198 attrs[LFACE_FONT_INDEX] = font; |
3199 } | |
3200 | |
3201 void | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3202 font_update_lface (FRAME_PTR f, Lisp_Object *attrs) |
90400 | 3203 { |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
3204 Lisp_Object spec; |
94926 | 3205 |
3206 spec = attrs[LFACE_FONT_INDEX]; | |
3207 if (! FONT_SPEC_P (spec)) | |
3208 return; | |
3209 | |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3210 if (! NILP (AREF (spec, FONT_FOUNDRY_INDEX))) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3211 attrs[LFACE_FOUNDRY_INDEX] = SYMBOL_NAME (AREF (spec, FONT_FOUNDRY_INDEX)); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3212 if (! NILP (AREF (spec, FONT_FAMILY_INDEX))) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3213 attrs[LFACE_FAMILY_INDEX] = SYMBOL_NAME (AREF (spec, FONT_FAMILY_INDEX)); |
94926 | 3214 if (! NILP (AREF (spec, FONT_WEIGHT_INDEX))) |
3215 attrs[LFACE_WEIGHT_INDEX] = FONT_WEIGHT_FOR_FACE (spec); | |
3216 if (! NILP (AREF (spec, FONT_SLANT_INDEX))) | |
101943
97c9e9322753
Remove spurious semicolons.
Juanma Barranquero <lekktu@gmail.com>
parents:
101806
diff
changeset
|
3217 attrs[LFACE_SLANT_INDEX] = FONT_SLANT_FOR_FACE (spec); |
94926 | 3218 if (! NILP (AREF (spec, FONT_WIDTH_INDEX))) |
3219 attrs[LFACE_SWIDTH_INDEX] = FONT_WIDTH_FOR_FACE (spec); | |
3220 if (! NILP (AREF (spec, FONT_SIZE_INDEX))) | |
3221 { | |
3222 int point; | |
3223 | |
3224 if (INTEGERP (AREF (spec, FONT_SIZE_INDEX))) | |
3225 { | |
3226 Lisp_Object val; | |
3227 int dpi = f->resy; | |
3228 | |
3229 val = Ffont_get (spec, QCdpi); | |
3230 if (! NILP (val)) | |
3231 dpi = XINT (val); | |
3232 point = PIXEL_TO_POINT (XINT (AREF (spec, FONT_SIZE_INDEX)) * 10, | |
3233 dpi); | |
100167
b80052504b85
Handle fonts with corrupted size specs, i.e. non-int and non-float.
Chong Yidong <cyd@stupidchicken.com>
parents:
100165
diff
changeset
|
3234 attrs[LFACE_HEIGHT_INDEX] = make_number (point); |
94926 | 3235 } |
3236 else if (FLOATP (AREF (spec, FONT_SIZE_INDEX))) | |
100167
b80052504b85
Handle fonts with corrupted size specs, i.e. non-int and non-float.
Chong Yidong <cyd@stupidchicken.com>
parents:
100165
diff
changeset
|
3237 { |
b80052504b85
Handle fonts with corrupted size specs, i.e. non-int and non-float.
Chong Yidong <cyd@stupidchicken.com>
parents:
100165
diff
changeset
|
3238 point = XFLOAT_DATA (AREF (spec, FONT_SIZE_INDEX)) * 10; |
b80052504b85
Handle fonts with corrupted size specs, i.e. non-int and non-float.
Chong Yidong <cyd@stupidchicken.com>
parents:
100165
diff
changeset
|
3239 attrs[LFACE_HEIGHT_INDEX] = make_number (point); |
b80052504b85
Handle fonts with corrupted size specs, i.e. non-int and non-float.
Chong Yidong <cyd@stupidchicken.com>
parents:
100165
diff
changeset
|
3240 } |
94926 | 3241 } |
90400 | 3242 } |
3243 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3244 |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3245 /* Selecte a font from ENTITIES (list of font-entity vectors) that |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3246 supports C and matches best with ATTRS and PIXEL_SIZE. */ |
102415
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3247 |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3248 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3249 font_select_entity (Lisp_Object frame, Lisp_Object entities, Lisp_Object *attrs, int pixel_size, int c) |
102415
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3250 { |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3251 Lisp_Object font_entity; |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3252 Lisp_Object prefer; |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3253 int result, i; |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3254 FRAME_PTR f = XFRAME (frame); |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3255 |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3256 if (NILP (XCDR (entities)) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3257 && ASIZE (XCAR (entities)) == 1) |
102415
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3258 { |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3259 font_entity = AREF (XCAR (entities), 0); |
102415
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3260 if (c < 0 |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3261 || (result = font_has_char (f, font_entity, c)) > 0) |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3262 return font_entity; |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3263 return Qnil; |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3264 } |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3265 |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3266 /* Sort fonts by properties specified in ATTRS. */ |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3267 prefer = scratch_font_prefer; |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3268 |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3269 for (i = FONT_WEIGHT_INDEX; i <= FONT_SIZE_INDEX; i++) |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3270 ASET (prefer, i, Qnil); |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3271 if (FONTP (attrs[LFACE_FONT_INDEX])) |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3272 { |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3273 Lisp_Object face_font = attrs[LFACE_FONT_INDEX]; |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3274 |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3275 for (i = FONT_WEIGHT_INDEX; i <= FONT_SIZE_INDEX; i++) |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3276 ASET (prefer, i, AREF (face_font, i)); |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3277 } |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3278 if (NILP (AREF (prefer, FONT_WEIGHT_INDEX))) |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3279 FONT_SET_STYLE (prefer, FONT_WEIGHT_INDEX, attrs[LFACE_WEIGHT_INDEX]); |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3280 if (NILP (AREF (prefer, FONT_SLANT_INDEX))) |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3281 FONT_SET_STYLE (prefer, FONT_SLANT_INDEX, attrs[LFACE_SLANT_INDEX]); |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3282 if (NILP (AREF (prefer, FONT_WIDTH_INDEX))) |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3283 FONT_SET_STYLE (prefer, FONT_WIDTH_INDEX, attrs[LFACE_SWIDTH_INDEX]); |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3284 ASET (prefer, FONT_SIZE_INDEX, make_number (pixel_size)); |
102990
a706504f064e
(font_sort_entites): Change the meaning of the arg
Kenichi Handa <handa@m17n.org>
parents:
102963
diff
changeset
|
3285 |
103255
a8e08bcfc3ad
(font_sort_entities): Renamed from font_sort_entites.
Kenichi Handa <handa@m17n.org>
parents:
103246
diff
changeset
|
3286 return font_sort_entities (entities, prefer, frame, c); |
102415
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3287 } |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3288 |
94926 | 3289 /* Return a font-entity satisfying SPEC and best matching with face's |
3290 font related attributes in ATTRS. C, if not negative, is a | |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
3291 character that the entity must support. */ |
90400 | 3292 |
3293 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3294 font_find_for_lface (FRAME_PTR f, Lisp_Object *attrs, Lisp_Object spec, int c) |
90400 | 3295 { |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3296 Lisp_Object work; |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3297 Lisp_Object frame, entities, val; |
96200
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3298 Lisp_Object size, foundry[3], *family, registry[3], adstyle[3]; |
95475
e1e8d6b9d465
(font_find_for_lface): Handle float font size.
Kenichi Handa <handa@m17n.org>
parents:
95437
diff
changeset
|
3299 int pixel_size; |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3300 int i, j, k, l; |
95888
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3301 |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3302 registry[0] = AREF (spec, FONT_REGISTRY_INDEX); |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3303 if (NILP (registry[0])) |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3304 { |
96675
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
3305 registry[0] = DEFAULT_ENCODING; |
95888
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3306 registry[1] = Qascii_0; |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3307 registry[2] = null_vector; |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3308 } |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3309 else |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3310 registry[1] = null_vector; |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3311 |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3312 if (c >= 0 && ! NILP (AREF (spec, FONT_REGISTRY_INDEX))) |
94926 | 3313 { |
3314 struct charset *encoding, *repertory; | |
3315 | |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3316 if (font_registry_charsets (AREF (spec, FONT_REGISTRY_INDEX), |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3317 &encoding, &repertory) < 0) |
94926 | 3318 return Qnil; |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3319 if (repertory |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3320 && ENCODE_CHAR (repertory, c) == CHARSET_INVALID_CODE (repertory)) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3321 return Qnil; |
94926 | 3322 else if (c > encoding->max_char) |
3323 return Qnil; | |
3324 } | |
3325 | |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3326 work = Fcopy_font_spec (spec); |
103246
94e71fa6e9ac
(font_find_for_lface): Copy SPEC's FONT_TYPE too.
Kenichi Handa <handa@m17n.org>
parents:
103229
diff
changeset
|
3327 ASET (work, FONT_TYPE_INDEX, AREF (spec, FONT_TYPE_INDEX)); |
90507
4a6034a7c870
(font_find_for_lface): Code optimized.
Kenichi Handa <handa@m17n.org>
parents:
90503
diff
changeset
|
3328 XSETFRAME (frame, f); |
94926 | 3329 size = AREF (spec, FONT_SIZE_INDEX); |
95475
e1e8d6b9d465
(font_find_for_lface): Handle float font size.
Kenichi Handa <handa@m17n.org>
parents:
95437
diff
changeset
|
3330 pixel_size = font_pixel_size (f, spec); |
e1e8d6b9d465
(font_find_for_lface): Handle float font size.
Kenichi Handa <handa@m17n.org>
parents:
95437
diff
changeset
|
3331 if (pixel_size == 0) |
e1e8d6b9d465
(font_find_for_lface): Handle float font size.
Kenichi Handa <handa@m17n.org>
parents:
95437
diff
changeset
|
3332 { |
e1e8d6b9d465
(font_find_for_lface): Handle float font size.
Kenichi Handa <handa@m17n.org>
parents:
95437
diff
changeset
|
3333 double pt = XINT (attrs[LFACE_HEIGHT_INDEX]); |
e1e8d6b9d465
(font_find_for_lface): Handle float font size.
Kenichi Handa <handa@m17n.org>
parents:
95437
diff
changeset
|
3334 |
e1e8d6b9d465
(font_find_for_lface): Handle float font size.
Kenichi Handa <handa@m17n.org>
parents:
95437
diff
changeset
|
3335 pixel_size = POINT_TO_PIXEL (pt / 10, f->resy); |
e1e8d6b9d465
(font_find_for_lface): Handle float font size.
Kenichi Handa <handa@m17n.org>
parents:
95437
diff
changeset
|
3336 } |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3337 ASET (work, FONT_SIZE_INDEX, Qnil); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3338 foundry[0] = AREF (work, FONT_FOUNDRY_INDEX); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3339 if (! NILP (foundry[0])) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3340 foundry[1] = null_vector; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3341 else if (STRINGP (attrs[LFACE_FOUNDRY_INDEX])) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3342 { |
97822 | 3343 val = attrs[LFACE_FOUNDRY_INDEX]; |
3344 foundry[0] = font_intern_prop ((char *) SDATA (val), SBYTES (val), 1); | |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3345 foundry[1] = Qnil; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3346 foundry[2] = null_vector; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3347 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3348 else |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3349 foundry[0] = Qnil, foundry[1] = null_vector; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3350 |
96200
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3351 adstyle[0] = AREF (work, FONT_ADSTYLE_INDEX); |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3352 if (! NILP (adstyle[0])) |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3353 adstyle[1] = null_vector; |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3354 else if (FONTP (attrs[LFACE_FONT_INDEX])) |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3355 { |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3356 Lisp_Object face_font = attrs[LFACE_FONT_INDEX]; |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3357 |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3358 if (! NILP (AREF (face_font, FONT_ADSTYLE_INDEX))) |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3359 { |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3360 adstyle[0] = AREF (face_font, FONT_ADSTYLE_INDEX); |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3361 adstyle[1] = Qnil; |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3362 adstyle[2] = null_vector; |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3363 } |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3364 else |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3365 adstyle[0] = Qnil, adstyle[1] = null_vector; |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3366 } |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3367 else |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3368 adstyle[0] = Qnil, adstyle[1] = null_vector; |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3369 |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3370 |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3371 val = AREF (work, FONT_FAMILY_INDEX); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3372 if (NILP (val) && STRINGP (attrs[LFACE_FAMILY_INDEX])) |
97822 | 3373 { |
3374 val = attrs[LFACE_FAMILY_INDEX]; | |
3375 val = font_intern_prop ((char *) SDATA (val), SBYTES (val), 1); | |
3376 } | |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3377 if (NILP (val)) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3378 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3379 family = alloca ((sizeof family[0]) * 2); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3380 family[0] = Qnil; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3381 family[1] = null_vector; /* terminator. */ |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3382 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3383 else |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3384 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3385 Lisp_Object alters |
98445
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
3386 = Fassoc_string (val, Vface_alternative_font_family_alist, |
105095
4adac4895f0f
Update comment for HAVE_NS code in font_find_for_lface().
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
104091
diff
changeset
|
3387 /* Font family names are case-sensitive under NS. */ |
98445
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
3388 #ifndef HAVE_NS |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
3389 Qt |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
3390 #else |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
3391 Qnil |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
3392 #endif |
5d2542d6df18
(font_matching_entity): Reflect ATTRS in font selection.
Kenichi Handa <handa@m17n.org>
parents:
98124
diff
changeset
|
3393 ); |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3394 |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3395 if (! NILP (alters)) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3396 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3397 family = alloca ((sizeof family[0]) * (XINT (Flength (alters)) + 2)); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3398 for (i = 0; CONSP (alters); i++, alters = XCDR (alters)) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3399 family[i] = XCAR (alters); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3400 if (NILP (AREF (spec, FONT_FAMILY_INDEX))) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3401 family[i++] = Qnil; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3402 family[i] = null_vector; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3403 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3404 else |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3405 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3406 family = alloca ((sizeof family[0]) * 3); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3407 i = 0; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3408 family[i++] = val; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3409 if (NILP (AREF (spec, FONT_FAMILY_INDEX))) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3410 family[i++] = Qnil; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3411 family[i] = null_vector; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3412 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3413 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3414 |
95888
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3415 for (i = 0; SYMBOLP (family[i]); i++) |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3416 { |
95888
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3417 ASET (work, FONT_FAMILY_INDEX, family[i]); |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3418 for (j = 0; SYMBOLP (foundry[j]); j++) |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3419 { |
95888
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3420 ASET (work, FONT_FOUNDRY_INDEX, foundry[j]); |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3421 for (k = 0; SYMBOLP (registry[k]); k++) |
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3422 { |
95890
e6e6c351339d
(font_find_for_lface): Fix typo of the previous change.
Kenichi Handa <handa@m17n.org>
parents:
95888
diff
changeset
|
3423 ASET (work, FONT_REGISTRY_INDEX, registry[k]); |
96200
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3424 for (l = 0; SYMBOLP (adstyle[l]); l++) |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3425 { |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3426 ASET (work, FONT_ADSTYLE_INDEX, adstyle[l]); |
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3427 entities = font_list_entities (frame, work); |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
3428 if (! NILP (entities)) |
102415
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3429 { |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3430 val = font_select_entity (frame, entities, |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3431 attrs, pixel_size, c); |
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3432 if (! NILP (val)) |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
3433 return val; |
102415
ccbe1c8ab377
(font_select_entity): New function.
Kenichi Handa <handa@m17n.org>
parents:
102298
diff
changeset
|
3434 } |
96200
5f7a1e1f15c4
(font_find_for_lface): Try the adstyle specified in the property of
Kenichi Handa <handa@m17n.org>
parents:
96136
diff
changeset
|
3435 } |
95888
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3436 } |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3437 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3438 } |
95888
ff04c95494e4
(font_find_for_lface): If registry is NULL, try iso8859-1 and ascii-0.
Kenichi Handa <handa@m17n.org>
parents:
95886
diff
changeset
|
3439 return Qnil; |
90400 | 3440 } |
3441 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3442 |
90400 | 3443 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3444 font_open_for_lface (FRAME_PTR f, Lisp_Object entity, Lisp_Object *attrs, Lisp_Object spec) |
90400 | 3445 { |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
3446 int size; |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
3447 |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3448 if (INTEGERP (AREF (entity, FONT_SIZE_INDEX)) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3449 && XINT (AREF (entity, FONT_SIZE_INDEX)) > 0) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3450 size = XINT (AREF (entity, FONT_SIZE_INDEX)); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3451 else if (FONT_SPEC_P (spec) && ! NILP (AREF (spec, FONT_SIZE_INDEX))) |
95475
e1e8d6b9d465
(font_find_for_lface): Handle float font size.
Kenichi Handa <handa@m17n.org>
parents:
95437
diff
changeset
|
3452 size = font_pixel_size (f, spec); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
3453 else |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
3454 { |
100985
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3455 double pt; |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3456 if (INTEGERP (attrs[LFACE_HEIGHT_INDEX])) |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3457 pt = XINT (attrs[LFACE_HEIGHT_INDEX]); |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3458 else |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3459 { |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3460 struct face *def = FACE_FROM_ID (f, DEFAULT_FACE_ID); |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3461 Lisp_Object height = def->lface[LFACE_HEIGHT_INDEX]; |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3462 if (INTEGERP (height)) |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3463 pt = XINT (height); |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3464 else |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3465 abort(); /* We should never end up here. */ |
f82bae05534c
(font_open_for_lface): Handle unspecified height attribute.
Chong Yidong <cyd@stupidchicken.com>
parents:
100951
diff
changeset
|
3466 } |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
3467 |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
3468 pt /= 10; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
3469 size = POINT_TO_PIXEL (pt, f->resy); |
96831
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3470 #ifdef HAVE_NS |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3471 if (size == 0) |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3472 { |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3473 Lisp_Object ffsize = get_frame_param(f, Qfontsize); |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3474 size = NUMBERP (ffsize) ? POINT_TO_PIXEL (XINT (ffsize), f->resy) : 0; |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3475 } |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3476 #endif |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
3477 } |
90400 | 3478 return font_open_entity (f, entity, size); |
3479 } | |
3480 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3481 |
94926 | 3482 /* Find a font satisfying SPEC and best matching with face's |
3483 attributes in ATTRS on FRAME, and return the opened | |
3484 font-object. */ | |
3485 | |
3486 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3487 font_load_for_lface (FRAME_PTR f, Lisp_Object *attrs, Lisp_Object spec) |
90400 | 3488 { |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
3489 Lisp_Object entity, name; |
94926 | 3490 |
103037
e04bcedc08be
(font_load_for_lface): Cancel previous change.
Kenichi Handa <handa@m17n.org>
parents:
103019
diff
changeset
|
3491 entity = font_find_for_lface (f, attrs, spec, -1); |
94926 | 3492 if (NILP (entity)) |
91350
9673276f310c
(font_load_for_face): Handle the case that the font in
Kenichi Handa <handa@m17n.org>
parents:
91337
diff
changeset
|
3493 { |
94926 | 3494 /* No font is listed for SPEC, but each font-backend may have |
3495 the different criteria about "font matching". So, try | |
3496 it. */ | |
3497 entity = font_matching_entity (f, attrs, spec); | |
3498 if (NILP (entity)) | |
3499 return Qnil; | |
91350
9673276f310c
(font_load_for_face): Handle the case that the font in
Kenichi Handa <handa@m17n.org>
parents:
91337
diff
changeset
|
3500 } |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
3501 /* Don't loose the original name that was put in initially. We need |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
3502 it to re-apply the font when font parameters (like hinting or dpi) have |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
3503 changed. */ |
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
3504 entity = font_open_for_lface (f, entity, attrs, spec); |
106350
08b3f5b6e96d
(font_load_for_lface, font_open_by_name): Don't store name
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
106215
diff
changeset
|
3505 if (!NILP (entity)) |
08b3f5b6e96d
(font_load_for_lface, font_open_by_name): Don't store name
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
106215
diff
changeset
|
3506 { |
106750
10b9609fb6b7
Fixing user-spec for fonts instead of using name.
Jan D. <jan.h.d@swipnet.se>
parents:
106618
diff
changeset
|
3507 name = Ffont_get (spec, QCuser_spec); |
10b9609fb6b7
Fixing user-spec for fonts instead of using name.
Jan D. <jan.h.d@swipnet.se>
parents:
106618
diff
changeset
|
3508 if (STRINGP (name)) font_put_extra (entity, QCuser_spec, name); |
106350
08b3f5b6e96d
(font_load_for_lface, font_open_by_name): Don't store name
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
106215
diff
changeset
|
3509 } |
106085
cd4cbab8bb21
Handle system default font and changing font parameters.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105877
diff
changeset
|
3510 return entity; |
90400 | 3511 } |
3512 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3513 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3514 /* Make FACE on frame F ready to use the font opened for FACE. */ |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3515 |
90400 | 3516 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3517 font_prepare_for_face (FRAME_PTR f, struct face *face) |
90400 | 3518 { |
94926 | 3519 if (face->font->driver->prepare_face) |
3520 face->font->driver->prepare_face (f, face); | |
90400 | 3521 } |
3522 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3523 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3524 /* Make FACE on frame F stop using the font opened for FACE. */ |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3525 |
90400 | 3526 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3527 font_done_for_face (FRAME_PTR f, struct face *face) |
90400 | 3528 { |
94926 | 3529 if (face->font->driver->done_face) |
3530 face->font->driver->done_face (f, face); | |
90400 | 3531 face->extra = NULL; |
3532 } | |
3533 | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3534 |
102483
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3535 /* Open a font matching with font-spec SPEC on frame F. If no proper |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3536 font is found, return Qnil. */ |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3537 |
90400 | 3538 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3539 font_open_by_spec (FRAME_PTR f, Lisp_Object spec) |
90400 | 3540 { |
102483
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3541 Lisp_Object attrs[LFACE_VECTOR_SIZE]; |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3542 |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3543 /* We set up the default font-related attributes of a face to prefer |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3544 a moderate font. */ |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3545 attrs[LFACE_FAMILY_INDEX] = attrs[LFACE_FOUNDRY_INDEX] = Qnil; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3546 attrs[LFACE_SWIDTH_INDEX] = attrs[LFACE_WEIGHT_INDEX] |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3547 = attrs[LFACE_SLANT_INDEX] = Qnormal; |
96831
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3548 #ifndef HAVE_NS |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3549 attrs[LFACE_HEIGHT_INDEX] = make_number (120); |
96831
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3550 #else |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3551 attrs[LFACE_HEIGHT_INDEX] = make_number (0); |
47bb47a5494d
restore ability under NS to change font size from font panel (lost during some recent font backend refactoring)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96675
diff
changeset
|
3552 #endif |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3553 attrs[LFACE_FONT_INDEX] = Qnil; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3554 |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3555 return font_load_for_lface (f, attrs, spec); |
90400 | 3556 } |
3557 | |
3558 | |
102483
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3559 /* Open a font matching with NAME on frame F. If no proper font is |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3560 found, return Qnil. */ |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3561 |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3562 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3563 font_open_by_name (FRAME_PTR f, char *name) |
102483
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3564 { |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3565 Lisp_Object args[2]; |
106201
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
3566 Lisp_Object spec, ret; |
102483
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3567 |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3568 args[0] = QCname; |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3569 args[1] = make_unibyte_string (name, strlen (name)); |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3570 spec = Ffont_spec (2, args); |
106201
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
3571 ret = font_open_by_spec (f, spec); |
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
3572 /* Do not loose name originally put in. */ |
106350
08b3f5b6e96d
(font_load_for_lface, font_open_by_name): Don't store name
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
106215
diff
changeset
|
3573 if (!NILP (ret)) |
106750
10b9609fb6b7
Fixing user-spec for fonts instead of using name.
Jan D. <jan.h.d@swipnet.se>
parents:
106618
diff
changeset
|
3574 font_put_extra (ret, QCuser_spec, args[1]); |
106201
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
3575 |
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
3576 return ret; |
102483
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3577 } |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3578 |
d25713758c3e
(font_open_by_spec): New function.
Kenichi Handa <handa@m17n.org>
parents:
102415
diff
changeset
|
3579 |
90400 | 3580 /* Register font-driver DRIVER. This function is used in two ways. |
3581 | |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3582 The first is with frame F non-NULL. In this case, make DRIVER |
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3583 available (but not yet activated) on F. All frame creaters |
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3584 (e.g. Fx_create_frame) must call this function at least once with |
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3585 an available font-driver. |
90400 | 3586 |
3587 The second is with frame F NULL. In this case, DRIVER is globally | |
3588 registered in the variable `font_driver_list'. All font-driver | |
3589 implementations must call this function in its syms_of_XXXX | |
3590 (e.g. syms_of_xfont). */ | |
3591 | |
3592 void | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3593 register_font_driver (struct font_driver *driver, FRAME_PTR f) |
90400 | 3594 { |
3595 struct font_driver_list *root = f ? f->font_driver_list : font_driver_list; | |
3596 struct font_driver_list *prev, *list; | |
3597 | |
3598 if (f && ! driver->draw) | |
92113
2a9ed1c080b4
(font_match_xlfd, font_check_xlfd_parse): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91943
diff
changeset
|
3599 error ("Unusable font driver for a frame: %s", |
90400 | 3600 SDATA (SYMBOL_NAME (driver->type))); |
3601 | |
3602 for (prev = NULL, list = root; list; prev = list, list = list->next) | |
90695
a1cd7344d6a2
(font_parse_xlfd): Fix the array size of `f'.
Kenichi Handa <handa@m17n.org>
parents:
90677
diff
changeset
|
3603 if (EQ (list->driver->type, driver->type)) |
90400 | 3604 error ("Duplicated font driver: %s", SDATA (SYMBOL_NAME (driver->type))); |
3605 | |
100103
c2ef1c8b2d64
(register_font_driver): Use xmalloc.
Andreas Schwab <schwab@suse.de>
parents:
99076
diff
changeset
|
3606 list = xmalloc (sizeof (struct font_driver_list)); |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3607 list->on = 0; |
90400 | 3608 list->driver = driver; |
3609 list->next = NULL; | |
3610 if (prev) | |
3611 prev->next = list; | |
3612 else if (f) | |
3613 f->font_driver_list = list; | |
3614 else | |
3615 font_driver_list = list; | |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
3616 if (! f) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
3617 num_font_drivers++; |
90400 | 3618 } |
3619 | |
100406
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3620 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3621 free_font_driver_list (FRAME_PTR f) |
100406
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3622 { |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3623 struct font_driver_list *list, *next; |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3624 |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3625 for (list = f->font_driver_list; list; list = next) |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3626 { |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3627 next = list->next; |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3628 xfree (list); |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3629 } |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3630 f->font_driver_list = NULL; |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3631 } |
b8012399df73
(free_font_driver_list): Implement missing function.
Chong Yidong <cyd@stupidchicken.com>
parents:
100385
diff
changeset
|
3632 |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3633 |
91112
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3634 /* Make the frame F use font backends listed in NEW_DRIVERS (list of |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
3635 symbols, e.g. xft, x). If NEW_DRIVERS is t, make F use all |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
3636 available font drivers. If NEW_DRIVERS is nil, finalize all drivers. |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
3637 |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
3638 A caller must free all realized faces if any in advance. The |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
3639 return value is a list of font backends actually made used on |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
3640 F. */ |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
3641 |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
3642 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3643 font_update_drivers (FRAME_PTR f, Lisp_Object new_drivers) |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3644 { |
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3645 Lisp_Object active_drivers = Qnil; |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3646 struct font_driver *driver; |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3647 struct font_driver_list *list; |
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3648 |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3649 /* At first, turn off non-requested drivers, and turn on requested |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3650 drivers. */ |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3651 for (list = f->font_driver_list; list; list = list->next) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3652 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3653 driver = list->driver; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3654 if ((EQ (new_drivers, Qt) || ! NILP (Fmemq (driver->type, new_drivers))) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3655 != list->on) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3656 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3657 if (list->on) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3658 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3659 if (driver->end_for_frame) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3660 driver->end_for_frame (f); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3661 font_finish_cache (f, driver); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3662 list->on = 0; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3663 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3664 else |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3665 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3666 if (! driver->start_for_frame |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3667 || driver->start_for_frame (f) == 0) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3668 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3669 font_prepare_cache (f, driver); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3670 list->on = 1; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3671 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3672 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3673 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3674 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3675 |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3676 if (NILP (new_drivers)) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3677 return Qnil; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3678 |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3679 if (! EQ (new_drivers, Qt)) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3680 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3681 /* Re-order the driver list according to new_drivers. */ |
95958
fbdde312e09d
(font_update_drivers): Fix crash when no drivers match.
Andreas Schwab <schwab@suse.de>
parents:
95894
diff
changeset
|
3682 struct font_driver_list **list_table, **next; |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3683 Lisp_Object tail; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3684 int i; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3685 |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3686 list_table = alloca (sizeof list_table[0] * (num_font_drivers + 1)); |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3687 for (i = 0, tail = new_drivers; ! NILP (tail); tail = XCDR (tail)) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3688 { |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3689 for (list = f->font_driver_list; list; list = list->next) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3690 if (list->on && EQ (list->driver->type, XCAR (tail))) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3691 break; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3692 if (list) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3693 list_table[i++] = list; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3694 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3695 for (list = f->font_driver_list; list; list = list->next) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3696 if (! list->on) |
100442
71dc8b382715
(font_update_drivers): Fix mistake in reconstructing the driver list.
Chong Yidong <cyd@stupidchicken.com>
parents:
100406
diff
changeset
|
3697 list_table[i++] = list; |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3698 list_table[i] = NULL; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3699 |
95958
fbdde312e09d
(font_update_drivers): Fix crash when no drivers match.
Andreas Schwab <schwab@suse.de>
parents:
95894
diff
changeset
|
3700 next = &f->font_driver_list; |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3701 for (i = 0; list_table[i]; i++) |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3702 { |
95958
fbdde312e09d
(font_update_drivers): Fix crash when no drivers match.
Andreas Schwab <schwab@suse.de>
parents:
95894
diff
changeset
|
3703 *next = list_table[i]; |
fbdde312e09d
(font_update_drivers): Fix crash when no drivers match.
Andreas Schwab <schwab@suse.de>
parents:
95894
diff
changeset
|
3704 next = &(*next)->next; |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3705 } |
95958
fbdde312e09d
(font_update_drivers): Fix crash when no drivers match.
Andreas Schwab <schwab@suse.de>
parents:
95894
diff
changeset
|
3706 *next = NULL; |
103162
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3707 |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3708 if (! f->font_driver_list->on) |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3709 { /* None of the drivers is enabled: enable them all. |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3710 Happens if you set the list of drivers to (xft x) in your .emacs |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3711 and then use it under w32 or ns. */ |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3712 for (list = f->font_driver_list; list; list = list->next) |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3713 { |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3714 struct font_driver *driver = list->driver; |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3715 eassert (! list->on); |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3716 if (! driver->start_for_frame |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3717 || driver->start_for_frame (f) == 0) |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3718 { |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3719 font_prepare_cache (f, driver); |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3720 list->on = 1; |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3721 } |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3722 } |
cb1886d1427b
(font_update_drivers): Sanity fallback to avoid disabling all drivers.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103114
diff
changeset
|
3723 } |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3724 } |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3725 |
91112
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3726 for (list = f->font_driver_list; list; list = list->next) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3727 if (list->on) |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3728 active_drivers = nconc2 (active_drivers, |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
3729 Fcons (list->driver->type, Qnil)); |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
3730 return active_drivers; |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3731 } |
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3732 |
91112
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3733 int |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3734 font_put_frame_data (FRAME_PTR f, struct font_driver *driver, void *data) |
91112
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3735 { |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3736 struct font_data_list *list, *prev; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3737 |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3738 for (prev = NULL, list = f->font_data_list; list; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3739 prev = list, list = list->next) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3740 if (list->driver == driver) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3741 break; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3742 if (! data) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3743 { |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3744 if (list) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3745 { |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3746 if (prev) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3747 prev->next = list->next; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3748 else |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3749 f->font_data_list = list->next; |
103019
413229f94ec7
(font_put_frame_data): Use xfree instead of free.
Andreas Schwab <schwab@linux-m68k.org>
parents:
103011
diff
changeset
|
3750 xfree (list); |
91112
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3751 } |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3752 return 0; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3753 } |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3754 |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3755 if (! list) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3756 { |
100103
c2ef1c8b2d64
(register_font_driver): Use xmalloc.
Andreas Schwab <schwab@suse.de>
parents:
99076
diff
changeset
|
3757 list = xmalloc (sizeof (struct font_data_list)); |
91112
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3758 list->driver = driver; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3759 list->next = f->font_data_list; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3760 f->font_data_list = list; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3761 } |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3762 list->data = data; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3763 return 0; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3764 } |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3765 |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3766 |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3767 void * |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3768 font_get_frame_data (FRAME_PTR f, struct font_driver *driver) |
91112
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3769 { |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3770 struct font_data_list *list; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3771 |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3772 for (list = f->font_data_list; list; list = list->next) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3773 if (list->driver == driver) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3774 break; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3775 if (! list) |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3776 return NULL; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3777 return list->data; |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3778 } |
8042dbbb0419
(font_update_drivers): Call driver->start_for_frame and
Kenichi Handa <handa@m17n.org>
parents:
91081
diff
changeset
|
3779 |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
3780 |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3781 /* Return the font used to draw character C by FACE at buffer position |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3782 POS in window W. If STRING is non-nil, it is a string containing C |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3783 at index POS. If C is negative, get C from the current buffer or |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3784 STRING. */ |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3785 |
90541 | 3786 Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3787 font_at (int c, EMACS_INT pos, struct face *face, struct window *w, Lisp_Object string) |
90541 | 3788 { |
3789 FRAME_PTR f; | |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3790 int multibyte; |
94926 | 3791 Lisp_Object font_object; |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3792 |
100173
d704965776e6
(font_at): Set `multibyte' at first.
Kenichi Handa <handa@m17n.org>
parents:
100167
diff
changeset
|
3793 multibyte = (NILP (string) |
d704965776e6
(font_at): Set `multibyte' at first.
Kenichi Handa <handa@m17n.org>
parents:
100167
diff
changeset
|
3794 ? ! NILP (current_buffer->enable_multibyte_characters) |
d704965776e6
(font_at): Set `multibyte' at first.
Kenichi Handa <handa@m17n.org>
parents:
100167
diff
changeset
|
3795 : STRING_MULTIBYTE (string)); |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3796 if (c < 0) |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3797 { |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3798 if (NILP (string)) |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3799 { |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3800 if (multibyte) |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3801 { |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3802 EMACS_INT pos_byte = CHAR_TO_BYTE (pos); |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3803 |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3804 c = FETCH_CHAR (pos_byte); |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3805 } |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3806 else |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3807 c = FETCH_BYTE (pos); |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3808 } |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3809 else |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3810 { |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3811 unsigned char *str; |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3812 |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3813 multibyte = STRING_MULTIBYTE (string); |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3814 if (multibyte) |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3815 { |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3816 EMACS_INT pos_byte = string_char_to_byte (string, pos); |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3817 |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3818 str = SDATA (string) + pos_byte; |
106185
f2cea199b0c4
* character.h (STRING_CHAR, STRING_CHAR_AND_LENGTH): Remove
Andreas Schwab <schwab@linux-m68k.org>
parents:
106085
diff
changeset
|
3819 c = STRING_CHAR (str); |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3820 } |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3821 else |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3822 c = SDATA (string)[pos]; |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3823 } |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3824 } |
90541 | 3825 |
3826 f = XFRAME (w->frame); | |
90811
c1ed0fd37416
(font_at): If the window W is not on a window system,
Kenichi Handa <handa@m17n.org>
parents:
90695
diff
changeset
|
3827 if (! FRAME_WINDOW_P (f)) |
c1ed0fd37416
(font_at): If the window W is not on a window system,
Kenichi Handa <handa@m17n.org>
parents:
90695
diff
changeset
|
3828 return Qnil; |
90541 | 3829 if (! face) |
3830 { | |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3831 int face_id; |
92237
ce06567a933d
* dispextern.h (face_at_buffer_position, face_for_overlay_string)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92233
diff
changeset
|
3832 EMACS_INT endptr; |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3833 |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3834 if (STRINGP (string)) |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3835 face_id = face_at_string_position (w, string, pos, 0, -1, -1, &endptr, |
90541 | 3836 DEFAULT_FACE_ID, 0); |
3837 else | |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3838 face_id = face_at_buffer_position (w, pos, -1, -1, &endptr, |
103114
fa8e2c663118
* xfaces.c (face_at_buffer_position): New arg base_face_id.
Chong Yidong <cyd@stupidchicken.com>
parents:
103041
diff
changeset
|
3839 pos + 100, 0, -1); |
90541 | 3840 face = FACE_FROM_ID (f, face_id); |
3841 } | |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3842 if (multibyte) |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3843 { |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3844 int face_id = FACE_FOR_CHAR (f, face, c, pos, string); |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3845 face = FACE_FROM_ID (f, face_id); |
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
3846 } |
94926 | 3847 if (! face->font) |
90541 | 3848 return Qnil; |
94926 | 3849 |
3850 XSETFONT (font_object, face->font); | |
3851 return font_object; | |
3852 } | |
3853 | |
3854 | |
97822 | 3855 #ifdef HAVE_WINDOW_SYSTEM |
3856 | |
3857 /* Check how many characters after POS (at most to *LIMIT) can be | |
3858 displayed by the same font on the window W. FACE, if non-NULL, is | |
3859 the face selected for the character at POS. If STRING is not nil, | |
3860 it is the string to check instead of the current buffer. In that | |
3861 case, FACE must be not NULL. | |
3862 | |
3863 The return value is the font-object for the character at POS. | |
3864 *LIMIT is set to the position where that font can't be used. | |
3865 | |
3866 It is assured that the current buffer (or STRING) is multibyte. */ | |
3867 | |
3868 Lisp_Object | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
3869 font_range (EMACS_INT pos, EMACS_INT *limit, struct window *w, struct face *face, Lisp_Object string) |
94926 | 3870 { |
108548
c34421dab75e
font.c (font_range): Return the range for the font found at first.
Kenichi Handa <handa@etlken>
parents:
108004
diff
changeset
|
3871 EMACS_INT pos_byte, ignore; |
94926 | 3872 int c; |
97822 | 3873 Lisp_Object font_object = Qnil; |
94926 | 3874 |
3875 if (NILP (string)) | |
3876 { | |
3877 pos_byte = CHAR_TO_BYTE (pos); | |
97822 | 3878 if (! face) |
3879 { | |
3880 int face_id; | |
3881 | |
103114
fa8e2c663118
* xfaces.c (face_at_buffer_position): New arg base_face_id.
Chong Yidong <cyd@stupidchicken.com>
parents:
103041
diff
changeset
|
3882 face_id = face_at_buffer_position (w, pos, 0, 0, &ignore, |
fa8e2c663118
* xfaces.c (face_at_buffer_position): New arg base_face_id.
Chong Yidong <cyd@stupidchicken.com>
parents:
103041
diff
changeset
|
3883 *limit, 0, -1); |
97822 | 3884 face = FACE_FROM_ID (XFRAME (w->frame), face_id); |
3885 } | |
94926 | 3886 } |
3887 else | |
3888 { | |
97822 | 3889 font_assert (face); |
94926 | 3890 pos_byte = string_char_to_byte (string, pos); |
3891 } | |
3892 | |
97822 | 3893 while (pos < *limit) |
94926 | 3894 { |
97822 | 3895 Lisp_Object category; |
94926 | 3896 |
3897 if (NILP (string)) | |
3898 FETCH_CHAR_ADVANCE_NO_CHECK (c, pos, pos_byte); | |
3899 else | |
3900 FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, string, pos, pos_byte); | |
108548
c34421dab75e
font.c (font_range): Return the range for the font found at first.
Kenichi Handa <handa@etlken>
parents:
108004
diff
changeset
|
3901 category = CHAR_TABLE_REF (Vunicode_category_table, c); |
c34421dab75e
font.c (font_range): Return the range for the font found at first.
Kenichi Handa <handa@etlken>
parents:
108004
diff
changeset
|
3902 if (EQ (category, QCf) |
c34421dab75e
font.c (font_range): Return the range for the font found at first.
Kenichi Handa <handa@etlken>
parents:
108004
diff
changeset
|
3903 || CHAR_VARIATION_SELECTOR_P (c)) |
c34421dab75e
font.c (font_range): Return the range for the font found at first.
Kenichi Handa <handa@etlken>
parents:
108004
diff
changeset
|
3904 continue; |
97822 | 3905 if (NILP (font_object)) |
94926 | 3906 { |
97822 | 3907 font_object = font_for_char (face, c, pos - 1, string); |
3908 if (NILP (font_object)) | |
3909 return Qnil; | |
94926 | 3910 continue; |
3911 } | |
108548
c34421dab75e
font.c (font_range): Return the range for the font found at first.
Kenichi Handa <handa@etlken>
parents:
108004
diff
changeset
|
3912 if (font_encode_char (font_object, c) == FONT_INVALID_CODE) |
c34421dab75e
font.c (font_range): Return the range for the font found at first.
Kenichi Handa <handa@etlken>
parents:
108004
diff
changeset
|
3913 *limit = pos - 1; |
94926 | 3914 } |
97822 | 3915 return font_object; |
90541 | 3916 } |
97822 | 3917 #endif |
90541 | 3918 |
90400 | 3919 |
3920 /* Lisp API */ | |
3921 | |
94926 | 3922 DEFUN ("fontp", Ffontp, Sfontp, 1, 2, 0, |
91353
b93ade1a3602
(font_find_for_lface): Check if the character C is
Kenichi Handa <handa@m17n.org>
parents:
91350
diff
changeset
|
3923 doc: /* Return t if OBJECT is a font-spec, font-entity, or font-object. |
94926 | 3924 Return nil otherwise. |
3925 Optional 2nd argument EXTRA-TYPE, if non-nil, specifies to check | |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
3926 which kind of font it is. It must be one of `font-spec', `font-entity', |
94926 | 3927 `font-object'. */) |
3928 (object, extra_type) | |
3929 Lisp_Object object, extra_type; | |
90400 | 3930 { |
94926 | 3931 if (NILP (extra_type)) |
3932 return (FONTP (object) ? Qt : Qnil); | |
3933 if (EQ (extra_type, Qfont_spec)) | |
3934 return (FONT_SPEC_P (object) ? Qt : Qnil); | |
3935 if (EQ (extra_type, Qfont_entity)) | |
3936 return (FONT_ENTITY_P (object) ? Qt : Qnil); | |
3937 if (EQ (extra_type, Qfont_object)) | |
3938 return (FONT_OBJECT_P (object) ? Qt : Qnil); | |
3939 wrong_type_argument (intern ("font-extra-type"), extra_type); | |
90400 | 3940 } |
3941 | |
3942 DEFUN ("font-spec", Ffont_spec, Sfont_spec, 0, MANY, 0, | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3943 doc: /* Return a newly created font-spec with arguments as properties. |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3944 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3945 ARGS must come in pairs KEY VALUE of font properties. KEY must be a |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3946 valid font property name listed below: |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3947 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3948 `:family', `:weight', `:slant', `:width' |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3949 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3950 They are the same as face attributes of the same name. See |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
3951 `set-face-attribute'. |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3952 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3953 `:foundry' |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3954 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3955 VALUE must be a string or a symbol specifying the font foundry, e.g. ``misc''. |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3956 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3957 `:adstyle' |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3958 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3959 VALUE must be a string or a symbol specifying the additional |
94926 | 3960 typographic style information of a font, e.g. ``sans''. |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3961 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3962 `:registry' |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3963 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3964 VALUE must be a string or a symbol specifying the charset registry and |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3965 encoding of a font, e.g. ``iso8859-1''. |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3966 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3967 `:size' |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3968 |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
3969 VALUE must be a non-negative integer or a floating point number |
102082
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3970 specifying the font size. It specifies the font size in pixels (if |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3971 VALUE is an integer), or in points (if VALUE is a float). |
96010
c0401e586ca3
(Ffont_get): Return a symbol for :weight, :slant, and :width.
Kenichi Handa <handa@m17n.org>
parents:
96005
diff
changeset
|
3972 |
c0401e586ca3
(Ffont_get): Return a symbol for :weight, :slant, and :width.
Kenichi Handa <handa@m17n.org>
parents:
96005
diff
changeset
|
3973 `:name' |
c0401e586ca3
(Ffont_get): Return a symbol for :weight, :slant, and :width.
Kenichi Handa <handa@m17n.org>
parents:
96005
diff
changeset
|
3974 |
96013
04be82e0cbd3
(Ffont_spec): Fix usage in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
96012
diff
changeset
|
3975 VALUE must be a string of XLFD-style or fontconfig-style font name. |
99075
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
3976 |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
3977 `:script' |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
3978 |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
3979 VALUE must be a symbol representing a script that the font must |
101806
73703b41e43a
(Ffont_spec): Docstring modified.
Kenichi Handa <handa@m17n.org>
parents:
101422
diff
changeset
|
3980 support. It may be a symbol representing a subgroup of a script |
73703b41e43a
(Ffont_spec): Docstring modified.
Kenichi Handa <handa@m17n.org>
parents:
101422
diff
changeset
|
3981 listed in the variable `script-representative-chars'. |
102082
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3982 |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3983 `:lang' |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3984 |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3985 VALUE must be a symbol of two-letter ISO-639 language names, |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3986 e.g. `ja'. |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3987 |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3988 `:otf' |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3989 |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3990 VALUE must be a list (SCRIPT-TAG LANGSYS-TAG GSUB [ GPOS ]) to specify |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3991 required OpenType features. |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3992 |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3993 SCRIPT-TAG: OpenType script tag symbol (e.g. `deva'). |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3994 LANGSYS-TAG: OpenType language system tag symbol, |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3995 or nil for the default language system. |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3996 GSUB: List of OpenType GSUB feature tag symbols, or nil if none required. |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3997 GPOS: List of OpenType GPOS feature tag symbols, or nil if none required. |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3998 |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
3999 GSUB and GPOS may contain `nil' element. In such a case, the font |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
4000 must not have any of the remaining elements. |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
4001 |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
4002 For instance, if the VALUE is `(thai nil nil (mark))', the font must |
102085 | 4003 be an OpenType font, and whose GPOS table of `thai' script's default |
102082
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
4004 language system must contain `mark' feature. |
6bd3d2a26db9
(font_check_otf_features): Fix handling of `nil' element.
Kenichi Handa <handa@m17n.org>
parents:
101943
diff
changeset
|
4005 |
100336
d53183123ad7
* font.c (Ffont_spec): Move usage to end of docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
100173
diff
changeset
|
4006 usage: (font-spec ARGS...) */) |
90400 | 4007 (nargs, args) |
4008 int nargs; | |
4009 Lisp_Object *args; | |
4010 { | |
94926 | 4011 Lisp_Object spec = font_make_spec (); |
90400 | 4012 int i; |
4013 | |
4014 for (i = 0; i < nargs; i += 2) | |
4015 { | |
103229
499a2bc2b600
(Ffont_spec): Check arguments.
Kenichi Handa <handa@m17n.org>
parents:
103162
diff
changeset
|
4016 Lisp_Object key = args[i], val; |
499a2bc2b600
(Ffont_spec): Check arguments.
Kenichi Handa <handa@m17n.org>
parents:
103162
diff
changeset
|
4017 |
499a2bc2b600
(Ffont_spec): Check arguments.
Kenichi Handa <handa@m17n.org>
parents:
103162
diff
changeset
|
4018 CHECK_SYMBOL (key); |
499a2bc2b600
(Ffont_spec): Check arguments.
Kenichi Handa <handa@m17n.org>
parents:
103162
diff
changeset
|
4019 if (i + 1 >= nargs) |
499a2bc2b600
(Ffont_spec): Check arguments.
Kenichi Handa <handa@m17n.org>
parents:
103162
diff
changeset
|
4020 error ("No value for key `%s'", SDATA (SYMBOL_NAME (key))); |
499a2bc2b600
(Ffont_spec): Check arguments.
Kenichi Handa <handa@m17n.org>
parents:
103162
diff
changeset
|
4021 val = args[i + 1]; |
90400 | 4022 |
94926 | 4023 if (EQ (key, QCname)) |
4024 { | |
4025 CHECK_STRING (val); | |
4026 font_parse_name ((char *) SDATA (val), spec); | |
4027 font_put_extra (spec, key, val); | |
4028 } | |
90400 | 4029 else |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
4030 { |
94926 | 4031 int idx = get_font_prop_index (key); |
4032 | |
4033 if (idx >= 0) | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4034 { |
94926 | 4035 val = font_prop_validate (idx, Qnil, val); |
4036 if (idx < FONT_EXTRA_INDEX) | |
4037 ASET (spec, idx, val); | |
4038 else | |
4039 font_put_extra (spec, key, val); | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4040 } |
94926 | 4041 else |
4042 font_put_extra (spec, key, font_prop_validate (0, key, val)); | |
90451
6ffc9b378367
(enum xlfd_field_index): Rename XLFD_XXX_SIZE_INDEX to
Kenichi Handa <handa@m17n.org>
parents:
90448
diff
changeset
|
4043 } |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
4044 } |
90400 | 4045 return spec; |
4046 } | |
4047 | |
94926 | 4048 DEFUN ("copy-font-spec", Fcopy_font_spec, Scopy_font_spec, 1, 1, 0, |
4049 doc: /* Return a copy of FONT as a font-spec. */) | |
4050 (font) | |
4051 Lisp_Object font; | |
4052 { | |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4053 Lisp_Object new_spec, tail, prev, extra; |
94926 | 4054 int i; |
4055 | |
4056 CHECK_FONT (font); | |
4057 new_spec = font_make_spec (); | |
4058 for (i = 1; i < FONT_EXTRA_INDEX; i++) | |
4059 ASET (new_spec, i, AREF (font, i)); | |
106201
01190029e5d3
Set Xft defaults if no XSETTING is found, better default for Gtk+ font dialog.
Jan Djärv <jan.h.d@swipnet.se>
parents:
106185
diff
changeset
|
4060 extra = Fcopy_alist (AREF (font, FONT_EXTRA_INDEX)); |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4061 /* We must remove :font-entity property. */ |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4062 for (prev = Qnil, tail = extra; CONSP (tail); prev = tail, tail = XCDR (tail)) |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4063 if (EQ (XCAR (XCAR (tail)), QCfont_entity)) |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4064 { |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4065 if (NILP (prev)) |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4066 extra = XCDR (extra); |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4067 else |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4068 XSETCDR (prev, XCDR (tail)); |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4069 break; |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
4070 } |
94926 | 4071 ASET (new_spec, FONT_EXTRA_INDEX, extra); |
4072 return new_spec; | |
4073 } | |
4074 | |
4075 DEFUN ("merge-font-spec", Fmerge_font_spec, Smerge_font_spec, 2, 2, 0, | |
4076 doc: /* Merge font-specs FROM and TO, and return a new font-spec. | |
4077 Every specified properties in FROM override the corresponding | |
4078 properties in TO. */) | |
4079 (from, to) | |
4080 Lisp_Object from, to; | |
4081 { | |
4082 Lisp_Object extra, tail; | |
4083 int i; | |
4084 | |
4085 CHECK_FONT (from); | |
4086 CHECK_FONT (to); | |
4087 to = Fcopy_font_spec (to); | |
4088 for (i = 0; i < FONT_EXTRA_INDEX; i++) | |
4089 ASET (to, i, AREF (from, i)); | |
4090 extra = AREF (to, FONT_EXTRA_INDEX); | |
4091 for (tail = AREF (from, FONT_EXTRA_INDEX); CONSP (tail); tail = XCDR (tail)) | |
4092 if (! EQ (XCAR (XCAR (tail)), Qfont_entity)) | |
4093 { | |
4094 Lisp_Object slot = assq_no_quit (XCAR (XCAR (tail)), extra); | |
4095 | |
4096 if (! NILP (slot)) | |
4097 XSETCDR (slot, XCDR (XCAR (tail))); | |
4098 else | |
4099 extra = Fcons (Fcons (XCAR (XCAR (tail)), XCDR (XCAR (tail))), extra); | |
4100 } | |
4101 ASET (to, FONT_EXTRA_INDEX, extra); | |
4102 return to; | |
4103 } | |
90400 | 4104 |
4105 DEFUN ("font-get", Ffont_get, Sfont_get, 2, 2, 0, | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
4106 doc: /* Return the value of FONT's property KEY. |
99075
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
4107 FONT is a font-spec, a font-entity, or a font-object. |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
4108 KEY must be one of these symbols: |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
4109 :family, :weight, :slant, :width, :foundry, :adstyle, :registry, |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
4110 :size, :name, :script |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
4111 See the documentation of `font-spec' for their meanings. |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
4112 If FONT is a font-entity or font-object, the value of :script may be |
3172ff476053
(font_match_p): Fix for the case that a vector of
Kenichi Handa <handa@m17n.org>
parents:
99072
diff
changeset
|
4113 a list of scripts that are supported by the font. */) |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
4114 (font, key) |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
4115 Lisp_Object font, key; |
90400 | 4116 { |
94926 | 4117 int idx; |
4118 | |
4119 CHECK_FONT (font); | |
4120 CHECK_SYMBOL (key); | |
4121 | |
4122 idx = get_font_prop_index (key); | |
96010
c0401e586ca3
(Ffont_get): Return a symbol for :weight, :slant, and :width.
Kenichi Handa <handa@m17n.org>
parents:
96005
diff
changeset
|
4123 if (idx >= FONT_WEIGHT_INDEX && idx <= FONT_WIDTH_INDEX) |
c0401e586ca3
(Ffont_get): Return a symbol for :weight, :slant, and :width.
Kenichi Handa <handa@m17n.org>
parents:
96005
diff
changeset
|
4124 return font_style_symbolic (font, idx, 0); |
94926 | 4125 if (idx >= 0 && idx < FONT_EXTRA_INDEX) |
90400 | 4126 return AREF (font, idx); |
94926 | 4127 return Fcdr (Fassq (key, AREF (font, FONT_EXTRA_INDEX))); |
90400 | 4128 } |
4129 | |
96073
4af4f5a1eb34
(Ffont_face_attributes): Only define if
Andreas Schwab <schwab@suse.de>
parents:
96049
diff
changeset
|
4130 #ifdef HAVE_WINDOW_SYSTEM |
4af4f5a1eb34
(Ffont_face_attributes): Only define if
Andreas Schwab <schwab@suse.de>
parents:
96049
diff
changeset
|
4131 |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4132 DEFUN ("font-face-attributes", Ffont_face_attributes, Sfont_face_attributes, 1, 2, 0, |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4133 doc: /* Return a plist of face attributes generated by FONT. |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4134 FONT is a font name, a font-spec, a font-entity, or a font-object. |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4135 The return value is a list of the form |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4136 |
96012
c04088bb7b0d
(Ffont_face_attributes): Fix definition.
Andreas Schwab <schwab@suse.de>
parents:
96010
diff
changeset
|
4137 \(:family FAMILY :height HEIGHT :weight WEIGHT :slant SLANT :width WIDTH) |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4138 |
96014
f4a50aac009c
(Ffont_face_attributes): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
96013
diff
changeset
|
4139 where FAMILY, HEIGHT, WEIGHT, SLANT, and WIDTH are face attribute values |
96136
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4140 compatible with `set-face-attribute'. Some of these key-attribute pairs |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4141 may be omitted from the list if they are not specified by FONT. |
96014
f4a50aac009c
(Ffont_face_attributes): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
96013
diff
changeset
|
4142 |
f4a50aac009c
(Ffont_face_attributes): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
96013
diff
changeset
|
4143 The optional argument FRAME specifies the frame that the face attributes |
f4a50aac009c
(Ffont_face_attributes): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
96013
diff
changeset
|
4144 are to be displayed on. If omitted, the selected frame is used. */) |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4145 (font, frame) |
96012
c04088bb7b0d
(Ffont_face_attributes): Fix definition.
Andreas Schwab <schwab@suse.de>
parents:
96010
diff
changeset
|
4146 Lisp_Object font, frame; |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4147 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4148 struct frame *f; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4149 Lisp_Object plist[10]; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4150 Lisp_Object val; |
96136
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4151 int n = 0; |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4152 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4153 if (NILP (frame)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4154 frame = selected_frame; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4155 CHECK_LIVE_FRAME (frame); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4156 f = XFRAME (frame); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4157 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4158 if (STRINGP (font)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4159 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4160 int fontset = fs_query_fontset (font, 0); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4161 Lisp_Object name = font; |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4162 if (fontset >= 0) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4163 font = fontset_ascii (fontset); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4164 font = font_spec_from_name (name); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4165 if (! FONTP (font)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4166 signal_error ("Invalid font name", name); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4167 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4168 else if (! FONTP (font)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4169 signal_error ("Invalid font object", font); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4170 |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4171 val = AREF (font, FONT_FAMILY_INDEX); |
96136
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4172 if (! NILP (val)) |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4173 { |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4174 plist[n++] = QCfamily; |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4175 plist[n++] = SYMBOL_NAME (val); |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4176 } |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4177 |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4178 val = AREF (font, FONT_SIZE_INDEX); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4179 if (INTEGERP (val)) |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4180 { |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4181 Lisp_Object font_dpi = AREF (font, FONT_DPI_INDEX); |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4182 int dpi = INTEGERP (font_dpi) ? XINT (font_dpi) : f->resy; |
96136
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4183 plist[n++] = QCheight; |
96227
f9eb9f0d6678
(Ffont_face_attributes): Multiply pixel size before point
Jason Rumney <jasonr@gnu.org>
parents:
96224
diff
changeset
|
4184 plist[n++] = make_number (PIXEL_TO_POINT (XINT (val) * 10, dpi)); |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4185 } |
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4186 else if (FLOATP (val)) |
96136
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4187 { |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4188 plist[n++] = QCheight; |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4189 plist[n++] = make_number (10 * (int) XFLOAT_DATA (val)); |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4190 } |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4191 |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4192 val = FONT_WEIGHT_FOR_FACE (font); |
96136
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4193 if (! NILP (val)) |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4194 { |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4195 plist[n++] = QCweight; |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4196 plist[n++] = val; |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4197 } |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4198 |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4199 val = FONT_SLANT_FOR_FACE (font); |
96136
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4200 if (! NILP (val)) |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4201 { |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4202 plist[n++] = QCslant; |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4203 plist[n++] = val; |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4204 } |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4205 |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4206 val = FONT_WIDTH_FOR_FACE (font); |
96136
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4207 if (! NILP (val)) |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4208 { |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4209 plist[n++] = QCwidth; |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4210 plist[n++] = val; |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4211 } |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4212 |
73e422173a87
(Ffont_face_attributes): Omit key-attribute pairs not defined by the
Chong Yidong <cyd@stupidchicken.com>
parents:
96077
diff
changeset
|
4213 return Flist (n, plist); |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
4214 } |
90400 | 4215 |
96073
4af4f5a1eb34
(Ffont_face_attributes): Only define if
Andreas Schwab <schwab@suse.de>
parents:
96049
diff
changeset
|
4216 #endif |
4af4f5a1eb34
(Ffont_face_attributes): Only define if
Andreas Schwab <schwab@suse.de>
parents:
96049
diff
changeset
|
4217 |
90400 | 4218 DEFUN ("font-put", Ffont_put, Sfont_put, 3, 3, 0, |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4219 doc: /* Set one property of FONT-SPEC: give property PROP value VAL. */) |
90400 | 4220 (font_spec, prop, val) |
4221 Lisp_Object font_spec, prop, val; | |
4222 { | |
94926 | 4223 int idx; |
90400 | 4224 |
4225 CHECK_FONT_SPEC (font_spec); | |
94926 | 4226 idx = get_font_prop_index (prop); |
4227 if (idx >= 0 && idx < FONT_EXTRA_INDEX) | |
95573
0da1a8e03099
(Ffont_put): Don't use font_parse_family_registry for
Kenichi Handa <handa@m17n.org>
parents:
95572
diff
changeset
|
4228 ASET (font_spec, idx, font_prop_validate (idx, Qnil, val)); |
90400 | 4229 else |
94926 | 4230 font_put_extra (font_spec, prop, font_prop_validate (0, prop, val)); |
90400 | 4231 return val; |
4232 } | |
4233 | |
4234 DEFUN ("list-fonts", Flist_fonts, Slist_fonts, 1, 4, 0, | |
4235 doc: /* List available fonts matching FONT-SPEC on the current frame. | |
4236 Optional 2nd argument FRAME specifies the target frame. | |
4237 Optional 3rd argument NUM, if non-nil, limits the number of returned fonts. | |
91081
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
4238 Optional 4th argument PREFER, if non-nil, is a font-spec to |
2c767d9f0bb1
(font_prop_validate_symbol): The argument prop_index is
Kenichi Handa <handa@m17n.org>
parents:
90993
diff
changeset
|
4239 control the order of the returned list. Fonts are sorted by |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
4240 how close they are to PREFER. */) |
90400 | 4241 (font_spec, frame, num, prefer) |
4242 Lisp_Object font_spec, frame, num, prefer; | |
4243 { | |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4244 Lisp_Object vec, list; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4245 int n = 0; |
90400 | 4246 |
4247 if (NILP (frame)) | |
4248 frame = selected_frame; | |
4249 CHECK_LIVE_FRAME (frame); | |
94926 | 4250 CHECK_FONT_SPEC (font_spec); |
90400 | 4251 if (! NILP (num)) |
4252 { | |
4253 CHECK_NUMBER (num); | |
4254 n = XINT (num); | |
4255 if (n <= 0) | |
4256 return Qnil; | |
4257 } | |
4258 if (! NILP (prefer)) | |
94926 | 4259 CHECK_FONT_SPEC (prefer); |
90400 | 4260 |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4261 list = font_list_entities (frame, font_spec); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4262 if (NILP (list)) |
90400 | 4263 return Qnil; |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4264 if (NILP (XCDR (list)) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4265 && ASIZE (XCAR (list)) == 1) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4266 return Fcons (AREF (XCAR (list), 0), Qnil); |
90400 | 4267 |
4268 if (! NILP (prefer)) | |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4269 vec = font_sort_entities (list, prefer, frame, 0); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4270 else |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4271 vec = font_vconcat_entity_vectors (list); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4272 if (n == 0 || n >= ASIZE (vec)) |
90400 | 4273 { |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4274 Lisp_Object args[2]; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4275 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4276 args[0] = vec; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4277 args[1] = Qnil; |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4278 list = Fappend (2, args); |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4279 } |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4280 else |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4281 { |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4282 for (list = Qnil, n--; n >= 0; n--) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
4283 list = Fcons (AREF (vec, n), list); |
90400 | 4284 } |
4285 return list; | |
4286 } | |
4287 | |
94926 | 4288 DEFUN ("font-family-list", Ffont_family_list, Sfont_family_list, 0, 1, 0, |
90400 | 4289 doc: /* List available font families on the current frame. |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
4290 Optional argument FRAME, if non-nil, specifies the target frame. */) |
90400 | 4291 (frame) |
4292 Lisp_Object frame; | |
4293 { | |
4294 FRAME_PTR f; | |
4295 struct font_driver_list *driver_list; | |
4296 Lisp_Object list; | |
4297 | |
4298 if (NILP (frame)) | |
4299 frame = selected_frame; | |
4300 CHECK_LIVE_FRAME (frame); | |
4301 f = XFRAME (frame); | |
4302 list = Qnil; | |
4303 for (driver_list = f->font_driver_list; driver_list; | |
4304 driver_list = driver_list->next) | |
4305 if (driver_list->driver->list_family) | |
4306 { | |
4307 Lisp_Object val = driver_list->driver->list_family (frame); | |
101028
d3a67a9e7177
(Ffont_family_list): Return a list of strings, not symbols.
Chong Yidong <cyd@stupidchicken.com>
parents:
100985
diff
changeset
|
4308 Lisp_Object tail = list; |
d3a67a9e7177
(Ffont_family_list): Return a list of strings, not symbols.
Chong Yidong <cyd@stupidchicken.com>
parents:
100985
diff
changeset
|
4309 |
d3a67a9e7177
(Ffont_family_list): Return a list of strings, not symbols.
Chong Yidong <cyd@stupidchicken.com>
parents:
100985
diff
changeset
|
4310 for (; CONSP (val); val = XCDR (val)) |
d3a67a9e7177
(Ffont_family_list): Return a list of strings, not symbols.
Chong Yidong <cyd@stupidchicken.com>
parents:
100985
diff
changeset
|
4311 if (NILP (Fmemq (XCAR (val), tail)) |
d3a67a9e7177
(Ffont_family_list): Return a list of strings, not symbols.
Chong Yidong <cyd@stupidchicken.com>
parents:
100985
diff
changeset
|
4312 && SYMBOLP (XCAR (val))) |
d3a67a9e7177
(Ffont_family_list): Return a list of strings, not symbols.
Chong Yidong <cyd@stupidchicken.com>
parents:
100985
diff
changeset
|
4313 list = Fcons (SYMBOL_NAME (XCAR (val)), list); |
90400 | 4314 } |
4315 return list; | |
4316 } | |
4317 | |
4318 DEFUN ("find-font", Ffind_font, Sfind_font, 1, 2, 0, | |
4319 doc: /* Return a font-entity matching with FONT-SPEC on the current frame. | |
4320 Optional 2nd argument FRAME, if non-nil, specifies the target frame. */) | |
4321 (font_spec, frame) | |
4322 Lisp_Object font_spec, frame; | |
4323 { | |
4324 Lisp_Object val = Flist_fonts (font_spec, frame, make_number (1), Qnil); | |
4325 | |
4326 if (CONSP (val)) | |
4327 val = XCAR (val); | |
4328 return val; | |
4329 } | |
4330 | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4331 DEFUN ("font-xlfd-name", Ffont_xlfd_name, Sfont_xlfd_name, 1, 2, 0, |
90400 | 4332 doc: /* Return XLFD name of FONT. |
4333 FONT is a font-spec, font-entity, or font-object. | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4334 If the name is too long for XLFD (maximum 255 chars), return nil. |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4335 If the 2nd optional arg FOLD-WILDCARDS is non-nil, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4336 the consecutive wildcards are folded to one. */) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4337 (font, fold_wildcards) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4338 Lisp_Object font, fold_wildcards; |
90400 | 4339 { |
4340 char name[256]; | |
4341 int pixel_size = 0; | |
4342 | |
94926 | 4343 CHECK_FONT (font); |
4344 | |
4345 if (FONT_OBJECT_P (font)) | |
90400 | 4346 { |
94926 | 4347 Lisp_Object font_name = AREF (font, FONT_NAME_INDEX); |
4348 | |
4349 if (STRINGP (font_name) | |
4350 && SDATA (font_name)[0] == '-') | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4351 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4352 if (NILP (fold_wildcards)) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4353 return font_name; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4354 strcpy (name, (char *) SDATA (font_name)); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4355 goto done; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4356 } |
94926 | 4357 pixel_size = XFONT_OBJECT (font)->pixel_size; |
90400 | 4358 } |
4359 if (font_unparse_xlfd (font, pixel_size, name, 256) < 0) | |
4360 return Qnil; | |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4361 done: |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4362 if (! NILP (fold_wildcards)) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4363 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4364 char *p0 = name, *p1; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4365 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4366 while ((p1 = strstr (p0, "-*-*"))) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4367 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4368 strcpy (p1, p1 + 2); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4369 p0 = p1; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4370 } |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4371 } |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4372 |
90400 | 4373 return build_string (name); |
4374 } | |
4375 | |
4376 DEFUN ("clear-font-cache", Fclear_font_cache, Sclear_font_cache, 0, 0, 0, | |
4377 doc: /* Clear font cache. */) | |
4378 () | |
4379 { | |
4380 Lisp_Object list, frame; | |
4381 | |
4382 FOR_EACH_FRAME (list, frame) | |
4383 { | |
4384 FRAME_PTR f = XFRAME (frame); | |
4385 struct font_driver_list *driver_list = f->font_driver_list; | |
4386 | |
4387 for (; driver_list; driver_list = driver_list->next) | |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
4388 if (driver_list->on) |
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
4389 { |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
4390 Lisp_Object cache = driver_list->driver->get_cache (f); |
106618
431b202f351d
(Fclear_font_cache): Pass correct cache argument to
Andreas Schwab <schwab@linux-m68k.org>
parents:
106433
diff
changeset
|
4391 Lisp_Object val, tmp; |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4392 |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
4393 val = XCDR (cache); |
91909 | 4394 while (! NILP (val) |
4395 && ! EQ (XCAR (XCAR (val)), driver_list->driver->type)) | |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
4396 val = XCDR (val); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4397 font_assert (! NILP (val)); |
106618
431b202f351d
(Fclear_font_cache): Pass correct cache argument to
Andreas Schwab <schwab@linux-m68k.org>
parents:
106433
diff
changeset
|
4398 tmp = XCDR (XCAR (val)); |
431b202f351d
(Fclear_font_cache): Pass correct cache argument to
Andreas Schwab <schwab@linux-m68k.org>
parents:
106433
diff
changeset
|
4399 if (XINT (XCAR (tmp)) == 0) |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
4400 { |
91247
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
4401 font_clear_cache (f, XCAR (val), driver_list->driver); |
217eabc2db11
(font_prepare_cache, font_finish_cache, font_get_cache): New
Kenichi Handa <handa@m17n.org>
parents:
91240
diff
changeset
|
4402 XSETCDR (cache, XCDR (val)); |
90549
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
4403 } |
5dab62a4573c
(font_unparse_fcname): Fix typo (swidth->width).
Kenichi Handa <handa@m17n.org>
parents:
90541
diff
changeset
|
4404 } |
90400 | 4405 } |
4406 | |
4407 return Qnil; | |
4408 } | |
4409 | |
97822 | 4410 |
4411 void | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
4412 font_fill_lglyph_metrics (Lisp_Object glyph, Lisp_Object font_object) |
90400 | 4413 { |
97822 | 4414 struct font *font = XFONT_OBJECT (font_object); |
97853
fa1023e4960c
(font_fill_lglyph_metrics): Use EMACS_INT in LGLYPH_SET_CODE to avoid
Eli Zaretskii <eliz@gnu.org>
parents:
97822
diff
changeset
|
4415 unsigned code; |
fa1023e4960c
(font_fill_lglyph_metrics): Use EMACS_INT in LGLYPH_SET_CODE to avoid
Eli Zaretskii <eliz@gnu.org>
parents:
97822
diff
changeset
|
4416 /* ecode used in LGLYPH_SET_CODE to avoid compiler warnings. */ |
fa1023e4960c
(font_fill_lglyph_metrics): Use EMACS_INT in LGLYPH_SET_CODE to avoid
Eli Zaretskii <eliz@gnu.org>
parents:
97822
diff
changeset
|
4417 EMACS_INT ecode = font->driver->encode_char (font, LGLYPH_CHAR (glyph)); |
97822 | 4418 struct font_metrics metrics; |
4419 | |
97853
fa1023e4960c
(font_fill_lglyph_metrics): Use EMACS_INT in LGLYPH_SET_CODE to avoid
Eli Zaretskii <eliz@gnu.org>
parents:
97822
diff
changeset
|
4420 LGLYPH_SET_CODE (glyph, ecode); |
fa1023e4960c
(font_fill_lglyph_metrics): Use EMACS_INT in LGLYPH_SET_CODE to avoid
Eli Zaretskii <eliz@gnu.org>
parents:
97822
diff
changeset
|
4421 code = ecode; |
97822 | 4422 font->driver->text_extents (font, &code, 1, &metrics); |
4423 LGLYPH_SET_LBEARING (glyph, metrics.lbearing); | |
4424 LGLYPH_SET_RBEARING (glyph, metrics.rbearing); | |
4425 LGLYPH_SET_WIDTH (glyph, metrics.width); | |
4426 LGLYPH_SET_ASCENT (glyph, metrics.ascent); | |
4427 LGLYPH_SET_DESCENT (glyph, metrics.descent); | |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4428 } |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4429 |
97822 | 4430 |
4431 DEFUN ("font-shape-gstring", Ffont_shape_gstring, Sfont_shape_gstring, 1, 1, 0, | |
4432 doc: /* Shape the glyph-string GSTRING. | |
4433 Shaping means substituting glyphs and/or adjusting positions of glyphs | |
4434 to get the correct visual image of character sequences set in the | |
4435 header of the glyph-string. | |
4436 | |
4437 If the shaping was successful, the value is GSTRING itself or a newly | |
4438 created glyph-string. Otherwise, the value is nil. */) | |
4439 (gstring) | |
4440 Lisp_Object gstring; | |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4441 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4442 struct font *font; |
97822 | 4443 Lisp_Object font_object, n, glyph; |
98124
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4444 int i, j, from, to; |
100336
d53183123ad7
* font.c (Ffont_spec): Move usage to end of docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
100173
diff
changeset
|
4445 |
97822 | 4446 if (! composition_gstring_p (gstring)) |
4447 signal_error ("Invalid glyph-string: ", gstring); | |
4448 if (! NILP (LGSTRING_ID (gstring))) | |
4449 return gstring; | |
4450 font_object = LGSTRING_FONT (gstring); | |
4451 CHECK_FONT_OBJECT (font_object); | |
94926 | 4452 font = XFONT_OBJECT (font_object); |
92183
275e5e980fc4
If the font driver doesn't have `shape' function, return Qnil.
Kenichi Handa <handa@m17n.org>
parents:
92113
diff
changeset
|
4453 if (! font->driver->shape) |
275e5e980fc4
If the font driver doesn't have `shape' function, return Qnil.
Kenichi Handa <handa@m17n.org>
parents:
92113
diff
changeset
|
4454 return Qnil; |
275e5e980fc4
If the font driver doesn't have `shape' function, return Qnil.
Kenichi Handa <handa@m17n.org>
parents:
92113
diff
changeset
|
4455 |
91273
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4456 /* Try at most three times with larger gstring each time. */ |
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4457 for (i = 0; i < 3; i++) |
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4458 { |
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4459 n = font->driver->shape (gstring); |
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4460 if (INTEGERP (n)) |
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4461 break; |
97822 | 4462 gstring = larger_vector (gstring, |
4463 ASIZE (gstring) + LGSTRING_GLYPH_LEN (gstring), | |
4464 Qnil); | |
91273
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4465 } |
97822 | 4466 if (i == 3 || XINT (n) == 0) |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4467 return Qnil; |
100336
d53183123ad7
* font.c (Ffont_spec): Move usage to end of docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
100173
diff
changeset
|
4468 |
97822 | 4469 glyph = LGSTRING_GLYPH (gstring, 0); |
98124
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4470 from = LGLYPH_FROM (glyph); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4471 to = LGLYPH_TO (glyph); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4472 for (i = 1, j = 0; i < LGSTRING_GLYPH_LEN (gstring); i++) |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4473 { |
97822 | 4474 Lisp_Object this = LGSTRING_GLYPH (gstring, i); |
4475 | |
4476 if (NILP (this)) | |
4477 break; | |
4478 if (NILP (LGLYPH_ADJUSTMENT (this))) | |
98124
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4479 { |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4480 if (j < i - 1) |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4481 for (; j < i; j++) |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4482 { |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4483 glyph = LGSTRING_GLYPH (gstring, j); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4484 LGLYPH_SET_FROM (glyph, from); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4485 LGLYPH_SET_TO (glyph, to); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4486 } |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4487 from = LGLYPH_FROM (this); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4488 to = LGLYPH_TO (this); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4489 j = i; |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4490 } |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4491 else |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4492 { |
98124
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4493 if (from > LGLYPH_FROM (this)) |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4494 from = LGLYPH_FROM (this); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4495 if (to < LGLYPH_TO (this)) |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4496 to = LGLYPH_TO (this); |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4497 } |
90541 | 4498 } |
98124
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4499 if (j < i - 1) |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4500 for (; j < i; j++) |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4501 { |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4502 glyph = LGSTRING_GLYPH (gstring, j); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4503 LGLYPH_SET_FROM (glyph, from); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4504 LGLYPH_SET_TO (glyph, to); |
629cccd78d85
(Ffont_shape_gstring): Make glyphs of non-nil adjustment
Kenichi Handa <handa@m17n.org>
parents:
97853
diff
changeset
|
4505 } |
97822 | 4506 return composition_gstring_put_cache (gstring, XINT (n)); |
90400 | 4507 } |
4508 | |
100793
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4509 DEFUN ("font-variation-glyphs", Ffont_variation_glyphs, Sfont_variation_glyphs, |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4510 2, 2, 0, |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4511 doc: /* Return a list of variation glyphs for CHAR in FONT-OBJECT. |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4512 Each element of the value is a cons (VARIATION-SELECTOR . GLYPH-ID), |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4513 where |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4514 VARIATION-SELECTOR is a chracter code of variation selection |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4515 (#xFE00..#xFE0F or #xE0100..#xE01EF) |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4516 GLYPH-ID is a glyph code of the corresponding variation glyph. */) |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4517 (font_object, character) |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4518 Lisp_Object font_object, character; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4519 { |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4520 unsigned variations[256]; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4521 struct font *font; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4522 int i, n; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4523 Lisp_Object val; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4524 |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4525 CHECK_FONT_OBJECT (font_object); |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4526 CHECK_CHARACTER (character); |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4527 font = XFONT_OBJECT (font_object); |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4528 if (! font->driver->get_variation_glyphs) |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4529 return Qnil; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4530 n = font->driver->get_variation_glyphs (font, XINT (character), variations); |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4531 if (! n) |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4532 return Qnil; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4533 val = Qnil; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4534 for (i = 0; i < 255; i++) |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4535 if (variations[i]) |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4536 { |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4537 Lisp_Object code; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4538 int vs = (i < 16 ? 0xFE00 + i : 0xE0100 + (i - 16)); |
101226
63d9f73bf9d9
(Ffont_variation_glyphs): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents:
101156
diff
changeset
|
4539 /* Stops GCC whining about limited range of data type. */ |
63d9f73bf9d9
(Ffont_variation_glyphs): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents:
101156
diff
changeset
|
4540 EMACS_INT var = variations[i]; |
63d9f73bf9d9
(Ffont_variation_glyphs): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents:
101156
diff
changeset
|
4541 |
63d9f73bf9d9
(Ffont_variation_glyphs): Silence compiler.
Glenn Morris <rgm@gnu.org>
parents:
101156
diff
changeset
|
4542 if (var > MOST_POSITIVE_FIXNUM) |
100793
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4543 code = Fcons (make_number ((variations[i]) >> 16), |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4544 make_number ((variations[i]) & 0xFFFF)); |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4545 else |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4546 code = make_number (variations[i]); |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4547 val = Fcons (Fcons (make_number (vs), code), val); |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4548 } |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4549 return val; |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4550 } |
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
4551 |
95290
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
4552 #if 0 |
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
4553 |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4554 DEFUN ("font-drive-otf", Ffont_drive_otf, Sfont_drive_otf, 6, 6, 0, |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4555 doc: /* Apply OpenType features on glyph-string GSTRING-IN. |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4556 OTF-FEATURES specifies which features to apply in this format: |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4557 (SCRIPT LANGSYS GSUB GPOS) |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4558 where |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4559 SCRIPT is a symbol specifying a script tag of OpenType, |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4560 LANGSYS is a symbol specifying a langsys tag of OpenType, |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4561 GSUB and GPOS, if non-nil, are lists of symbols specifying feature tags. |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4562 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4563 If LANGYS is nil, the default langsys is selected. |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4564 |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4565 The features are applied in the order they appear in the list. The |
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4566 symbol `*' means to apply all available features not present in this |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4567 list, and the remaining features are ignored. For instance, (vatu |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4568 pstf * haln) is to apply vatu and pstf in this order, then to apply |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4569 all available features other than vatu, pstf, and haln. |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4570 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4571 The features are applied to the glyphs in the range FROM and TO of |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4572 the glyph-string GSTRING-IN. |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4573 |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4574 If some feature is actually applicable, the resulting glyphs are |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4575 produced in the glyph-string GSTRING-OUT from the index INDEX. In |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4576 this case, the value is the number of produced glyphs. |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4577 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4578 If no feature is applicable, no glyph is produced in GSTRING-OUT, and |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4579 the value is 0. |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4580 |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4581 If GSTRING-OUT is too short to hold produced glyphs, no glyphs are |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4582 produced in GSTRING-OUT, and the value is nil. |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4583 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4584 See the documentation of `font-make-gstring' for the format of |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4585 glyph-string. */) |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4586 (otf_features, gstring_in, from, to, gstring_out, index) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4587 Lisp_Object otf_features, gstring_in, from, to, gstring_out, index; |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4588 { |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4589 Lisp_Object font_object = LGSTRING_FONT (gstring_in); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4590 Lisp_Object val; |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4591 struct font *font; |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4592 int len, num; |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4593 |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4594 check_otf_features (otf_features); |
94926 | 4595 CHECK_FONT_OBJECT (font_object); |
4596 font = XFONT_OBJECT (font_object); | |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4597 if (! font->driver->otf_drive) |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4598 error ("Font backend %s can't drive OpenType GSUB table", |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4599 SDATA (SYMBOL_NAME (font->driver->type))); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4600 CHECK_CONS (otf_features); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4601 CHECK_SYMBOL (XCAR (otf_features)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4602 val = XCDR (otf_features); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4603 CHECK_SYMBOL (XCAR (val)); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4604 val = XCDR (otf_features); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4605 if (! NILP (val)) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4606 CHECK_CONS (val); |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4607 len = check_gstring (gstring_in); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4608 CHECK_VECTOR (gstring_out); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4609 CHECK_NATNUM (from); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4610 CHECK_NATNUM (to); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4611 CHECK_NATNUM (index); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4612 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4613 if (XINT (from) >= XINT (to) || XINT (to) > len) |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4614 args_out_of_range_3 (from, to, make_number (len)); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4615 if (XINT (index) >= ASIZE (gstring_out)) |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4616 args_out_of_range (index, make_number (ASIZE (gstring_out))); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4617 num = font->driver->otf_drive (font, otf_features, |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4618 gstring_in, XINT (from), XINT (to), |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4619 gstring_out, XINT (index), 0); |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4620 if (num < 0) |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4621 return Qnil; |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4622 return make_number (num); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4623 } |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4624 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4625 DEFUN ("font-otf-alternates", Ffont_otf_alternates, Sfont_otf_alternates, |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4626 3, 3, 0, |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4627 doc: /* Return a list of alternate glyphs of CHARACTER in FONT-OBJECT. |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4628 OTF-FEATURES specifies which features of the font FONT-OBJECT to apply |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4629 in this format: |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4630 (SCRIPT LANGSYS FEATURE ...) |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
4631 See the documentation of `font-drive-otf' for more detail. |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4632 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4633 The value is a list of cons cells of the format (GLYPH-ID . CHARACTER), |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4634 where GLYPH-ID is a glyph index of the font, and CHARACTER is a |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4635 character code corresponding to the glyph or nil if there's no |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4636 corresponding character. */) |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4637 (font_object, character, otf_features) |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4638 Lisp_Object font_object, character, otf_features; |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4639 { |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4640 struct font *font; |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4641 Lisp_Object gstring_in, gstring_out, g; |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4642 Lisp_Object alternates; |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4643 int i, num; |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4644 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4645 CHECK_FONT_GET_OBJECT (font_object, font); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4646 if (! font->driver->otf_drive) |
90563
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
4647 error ("Font backend %s can't drive OpenType GSUB table", |
7c29515f7c2a
(font_parse_fcname): Don't change :name property of FONT.
Kenichi Handa <handa@m17n.org>
parents:
90556
diff
changeset
|
4648 SDATA (SYMBOL_NAME (font->driver->type))); |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4649 CHECK_CHARACTER (character); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4650 CHECK_CONS (otf_features); |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4651 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4652 gstring_in = Ffont_make_gstring (font_object, make_number (1)); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4653 g = LGSTRING_GLYPH (gstring_in, 0); |
91550
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
4654 LGLYPH_SET_CHAR (g, XINT (character)); |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4655 gstring_out = Ffont_make_gstring (font_object, make_number (10)); |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4656 while ((num = font->driver->otf_drive (font, otf_features, gstring_in, 0, 1, |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
4657 gstring_out, 0, 1)) < 0) |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4658 gstring_out = Ffont_make_gstring (font_object, |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4659 make_number (ASIZE (gstring_out) * 2)); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4660 alternates = Qnil; |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4661 for (i = 0; i < num; i++) |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4662 { |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4663 Lisp_Object g = LGSTRING_GLYPH (gstring_out, i); |
91550
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
4664 int c = LGLYPH_CHAR (g); |
83267bc0360a
(check_gstring): Use them and AREF to access the vector before
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91360
diff
changeset
|
4665 unsigned code = LGLYPH_CODE (g); |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4666 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4667 alternates = Fcons (Fcons (make_number (code), |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4668 c > 0 ? make_number (c) : Qnil), |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4669 alternates); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4670 } |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4671 return Fnreverse (alternates); |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4672 } |
95290
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
4673 #endif /* 0 */ |
90400 | 4674 |
4675 #ifdef FONT_DEBUG | |
4676 | |
4677 DEFUN ("open-font", Fopen_font, Sopen_font, 1, 3, 0, | |
4678 doc: /* Open FONT-ENTITY. */) | |
4679 (font_entity, size, frame) | |
4680 Lisp_Object font_entity; | |
4681 Lisp_Object size; | |
4682 Lisp_Object frame; | |
4683 { | |
4684 int isize; | |
4685 | |
4686 CHECK_FONT_ENTITY (font_entity); | |
4687 if (NILP (frame)) | |
4688 frame = selected_frame; | |
4689 CHECK_LIVE_FRAME (frame); | |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4690 |
94926 | 4691 if (NILP (size)) |
4692 isize = XINT (AREF (font_entity, FONT_SIZE_INDEX)); | |
4693 else | |
4694 { | |
4695 CHECK_NUMBER_OR_FLOAT (size); | |
4696 if (FLOATP (size)) | |
100165
7add351b47c9
(Fopen_font): Compute pixel size correctly.
Chong Yidong <cyd@stupidchicken.com>
parents:
100126
diff
changeset
|
4697 isize = POINT_TO_PIXEL (XFLOAT_DATA (size), XFRAME (frame)->resy); |
94926 | 4698 else |
4699 isize = XINT (size); | |
4700 if (isize == 0) | |
4701 isize = 120; | |
4702 } | |
90400 | 4703 return font_open_entity (XFRAME (frame), font_entity, isize); |
4704 } | |
4705 | |
4706 DEFUN ("close-font", Fclose_font, Sclose_font, 1, 2, 0, | |
4707 doc: /* Close FONT-OBJECT. */) | |
4708 (font_object, frame) | |
4709 Lisp_Object font_object, frame; | |
4710 { | |
4711 CHECK_FONT_OBJECT (font_object); | |
4712 if (NILP (frame)) | |
4713 frame = selected_frame; | |
4714 CHECK_LIVE_FRAME (frame); | |
4715 font_close_object (XFRAME (frame), font_object); | |
4716 return Qnil; | |
4717 } | |
4718 | |
4719 DEFUN ("query-font", Fquery_font, Squery_font, 1, 1, 0, | |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4720 doc: /* Return information about FONT-OBJECT. |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4721 The value is a vector: |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4722 [ NAME FILENAME PIXEL-SIZE SIZE ASCENT DESCENT SPACE-WIDTH AVERAGE-WIDTH |
90677
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4723 CAPABILITY ] |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4724 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4725 NAME is a string of the font name (or nil if the font backend doesn't |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4726 provide a name). |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4727 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4728 FILENAME is a string of the font file (or nil if the font backend |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4729 doesn't provide a file name). |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4730 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4731 PIXEL-SIZE is a pixel size by which the font is opened. |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4732 |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
4733 SIZE is a maximum advance width of the font in pixels. |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4734 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4735 ASCENT, DESCENT, SPACE-WIDTH, AVERAGE-WIDTH are metrics of the font in |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
4736 pixels. |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4737 |
90677
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4738 CAPABILITY is a list whose first element is a symbol representing the |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4739 font format \(x, opentype, truetype, type1, pcf, or bdf) and the |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
4740 remaining elements describe the details of the font capability. |
90677
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4741 |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4742 If the font is OpenType font, the form of the list is |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4743 \(opentype GSUB GPOS) |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4744 where GSUB shows which "GSUB" features the font supports, and GPOS |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4745 shows which "GPOS" features the font supports. Both GSUB and GPOS are |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4746 lists of the format: |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4747 \((SCRIPT (LANGSYS FEATURE ...) ...) ...) |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4748 |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4749 If the font is not OpenType font, currently the length of the form is |
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4750 one. |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4751 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4752 SCRIPT is a symbol representing OpenType script tag. |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4753 |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4754 LANGSYS is a symbol representing OpenType langsys tag, or nil |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4755 representing the default langsys. |
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
4756 |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4757 FEATURE is a symbol representing OpenType feature tag. |
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4758 |
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4759 If the font is not OpenType font, CAPABILITY is nil. */) |
90400 | 4760 (font_object) |
4761 Lisp_Object font_object; | |
4762 { | |
4763 struct font *font; | |
4764 Lisp_Object val; | |
4765 | |
4766 CHECK_FONT_GET_OBJECT (font_object, font); | |
4767 | |
4768 val = Fmake_vector (make_number (9), Qnil); | |
94926 | 4769 ASET (val, 0, AREF (font_object, FONT_NAME_INDEX)); |
4770 ASET (val, 1, AREF (font_object, FONT_FILE_INDEX)); | |
90400 | 4771 ASET (val, 2, make_number (font->pixel_size)); |
94926 | 4772 ASET (val, 3, make_number (font->max_width)); |
90400 | 4773 ASET (val, 4, make_number (font->ascent)); |
4774 ASET (val, 5, make_number (font->descent)); | |
94926 | 4775 ASET (val, 6, make_number (font->space_width)); |
4776 ASET (val, 7, make_number (font->average_width)); | |
90400 | 4777 if (font->driver->otf_capability) |
90677
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
4778 ASET (val, 8, Fcons (Qopentype, font->driver->otf_capability (font))); |
90400 | 4779 return val; |
4780 } | |
4781 | |
4782 DEFUN ("get-font-glyphs", Fget_font_glyphs, Sget_font_glyphs, 2, 2, 0, | |
4783 doc: /* Return a vector of glyphs of FONT-OBJECT for drawing STRING. | |
4784 Each element is a vector [GLYPH-CODE LBEARING RBEARING WIDTH ASCENT DESCENT]. */) | |
4785 (font_object, string) | |
4786 Lisp_Object font_object, string; | |
4787 { | |
4788 struct font *font; | |
4789 int i, len; | |
4790 Lisp_Object vec; | |
4791 | |
4792 CHECK_FONT_GET_OBJECT (font_object, font); | |
4793 CHECK_STRING (string); | |
4794 len = SCHARS (string); | |
4795 vec = Fmake_vector (make_number (len), Qnil); | |
4796 for (i = 0; i < len; i++) | |
4797 { | |
4798 Lisp_Object ch = Faref (string, make_number (i)); | |
4799 Lisp_Object val; | |
4800 int c = XINT (ch); | |
4801 unsigned code; | |
91871
436548f01688
(Ffont_fill_gstring, Fget_font_glyphs): Fix compilation warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
91553
diff
changeset
|
4802 EMACS_INT cod; |
90400 | 4803 struct font_metrics metrics; |
4804 | |
91871
436548f01688
(Ffont_fill_gstring, Fget_font_glyphs): Fix compilation warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
91553
diff
changeset
|
4805 cod = code = font->driver->encode_char (font, c); |
90400 | 4806 if (code == FONT_INVALID_CODE) |
4807 continue; | |
4808 val = Fmake_vector (make_number (6), Qnil); | |
91871
436548f01688
(Ffont_fill_gstring, Fget_font_glyphs): Fix compilation warnings.
Eli Zaretskii <eliz@gnu.org>
parents:
91553
diff
changeset
|
4809 if (cod <= MOST_POSITIVE_FIXNUM) |
90400 | 4810 ASET (val, 0, make_number (code)); |
4811 else | |
4812 ASET (val, 0, Fcons (make_number (code >> 16), | |
4813 make_number (code & 0xFFFF))); | |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4814 font->driver->text_extents (font, &code, 1, &metrics); |
90400 | 4815 ASET (val, 1, make_number (metrics.lbearing)); |
4816 ASET (val, 2, make_number (metrics.rbearing)); | |
4817 ASET (val, 3, make_number (metrics.width)); | |
4818 ASET (val, 4, make_number (metrics.ascent)); | |
4819 ASET (val, 5, make_number (metrics.descent)); | |
4820 ASET (vec, i, val); | |
4821 } | |
4822 return vec; | |
4823 } | |
4824 | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4825 DEFUN ("font-match-p", Ffont_match_p, Sfont_match_p, 2, 2, 0, |
94745
a995b289585f
(Ffont_match_p): Don't use `iff' in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
94394
diff
changeset
|
4826 doc: /* Return t if and only if font-spec SPEC matches with FONT. |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4827 FONT is a font-spec, font-entity, or font-object. */) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4828 (spec, font) |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4829 Lisp_Object spec, font; |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4830 { |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4831 CHECK_FONT_SPEC (spec); |
94926 | 4832 CHECK_FONT (font); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4833 |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4834 return (font_match_p (spec, font) ? Qt : Qnil); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4835 } |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
4836 |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4837 DEFUN ("font-at", Ffont_at, Sfont_at, 1, 3, 0, |
92233
3642a8778bbf
(Ffont_spec, Ffont_at): Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
92183
diff
changeset
|
4838 doc: /* Return a font-object for displaying a character at POSITION. |
90541 | 4839 Optional second arg WINDOW, if non-nil, is a window displaying |
4840 the current buffer. It defaults to the currently selected window. */) | |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4841 (position, window, string) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4842 Lisp_Object position, window, string; |
90541 | 4843 { |
4844 struct window *w; | |
91236
e3ba579aab1f
(font_at): Handle the case that the arg C is negative.
Kenichi Handa <handa@m17n.org>
parents:
91192
diff
changeset
|
4845 EMACS_INT pos; |
90541 | 4846 |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4847 if (NILP (string)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4848 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4849 CHECK_NUMBER_COERCE_MARKER (position); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4850 pos = XINT (position); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4851 if (pos < BEGV || pos >= ZV) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4852 args_out_of_range_3 (position, make_number (BEGV), make_number (ZV)); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4853 } |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4854 else |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4855 { |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4856 CHECK_NUMBER (position); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4857 CHECK_STRING (string); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4858 pos = XINT (position); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4859 if (pos < 0 || pos >= SCHARS (string)) |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4860 args_out_of_range (string, position); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
4861 } |
90541 | 4862 if (NILP (window)) |
4863 window = selected_window; | |
4864 CHECK_LIVE_WINDOW (window); | |
91273
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4865 w = XWINDOW (window); |
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4866 |
f19e3a3100e2
(Ffont_fill_gstring): Stop filling when a character not
Kenichi Handa <handa@m17n.org>
parents:
91267
diff
changeset
|
4867 return font_at (-1, pos, NULL, w, string); |
90541 | 4868 } |
4869 | |
90400 | 4870 #if 0 |
4871 DEFUN ("draw-string", Fdraw_string, Sdraw_string, 2, 2, 0, | |
4872 doc: /* Draw STRING by FONT-OBJECT on the top left corner of the current frame. | |
4873 The value is a number of glyphs drawn. | |
4874 Type C-l to recover what previously shown. */) | |
4875 (font_object, string) | |
4876 Lisp_Object font_object, string; | |
4877 { | |
4878 Lisp_Object frame = selected_frame; | |
4879 FRAME_PTR f = XFRAME (frame); | |
4880 struct font *font; | |
4881 struct face *face; | |
4882 int i, len, width; | |
4883 unsigned *code; | |
4884 | |
4885 CHECK_FONT_GET_OBJECT (font_object, font); | |
4886 CHECK_STRING (string); | |
4887 len = SCHARS (string); | |
4888 code = alloca (sizeof (unsigned) * len); | |
4889 for (i = 0; i < len; i++) | |
4890 { | |
4891 Lisp_Object ch = Faref (string, make_number (i)); | |
4892 Lisp_Object val; | |
4893 int c = XINT (ch); | |
4894 | |
4895 code[i] = font->driver->encode_char (font, c); | |
4896 if (code[i] == FONT_INVALID_CODE) | |
4897 break; | |
4898 } | |
4899 face = FACE_FROM_ID (f, DEFAULT_FACE_ID); | |
4900 face->fontp = font; | |
4901 if (font->driver->prepare_face) | |
4902 font->driver->prepare_face (f, face); | |
4903 width = font->driver->text_extents (font, code, i, NULL); | |
4904 len = font->driver->draw_text (f, face, 0, font->ascent, code, i, width); | |
4905 if (font->driver->done_face) | |
4906 font->driver->done_face (f, face); | |
4907 face->fontp = NULL; | |
4908 return make_number (len); | |
4909 } | |
4910 #endif | |
4911 | |
4912 #endif /* FONT_DEBUG */ | |
4913 | |
95421
3350c9ac1f37
(Ffont_info): Define only if HAVE_WINDOW_SYSTEM is
Kenichi Handa <handa@m17n.org>
parents:
95403
diff
changeset
|
4914 #ifdef HAVE_WINDOW_SYSTEM |
3350c9ac1f37
(Ffont_info): Define only if HAVE_WINDOW_SYSTEM is
Kenichi Handa <handa@m17n.org>
parents:
95403
diff
changeset
|
4915 |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4916 DEFUN ("font-info", Ffont_info, Sfont_info, 1, 2, 0, |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4917 doc: /* Return information about a font named NAME on frame FRAME. |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4918 If FRAME is omitted or nil, use the selected frame. |
102963
b6011e455600
(Ffont_info): Fix docstring. Fix the second element of
Kenichi Handa <handa@m17n.org>
parents:
102943
diff
changeset
|
4919 The returned value is a vector of OPENED-NAME, FULL-NAME, SIZE, |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4920 HEIGHT, BASELINE-OFFSET, RELATIVE-COMPOSE, and DEFAULT-ASCENT, |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4921 where |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4922 OPENED-NAME is the name used for opening the font, |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4923 FULL-NAME is the full name of the font, |
102963
b6011e455600
(Ffont_info): Fix docstring. Fix the second element of
Kenichi Handa <handa@m17n.org>
parents:
102943
diff
changeset
|
4924 SIZE is the pixelsize of the font, |
b6011e455600
(Ffont_info): Fix docstring. Fix the second element of
Kenichi Handa <handa@m17n.org>
parents:
102943
diff
changeset
|
4925 HEIGHT is the pixel-height of the font (i.e ascent + descent), |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4926 BASELINE-OFFSET is the upward offset pixels from ASCII baseline, |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4927 RELATIVE-COMPOSE and DEFAULT-ASCENT are the numbers controlling |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4928 how to compose characters. |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4929 If the named font is not yet loaded, return nil. */) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4930 (name, frame) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4931 Lisp_Object name, frame; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4932 { |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4933 FRAME_PTR f; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4934 struct font *font; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4935 Lisp_Object info; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4936 Lisp_Object font_object; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4937 |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4938 (*check_window_system_func) (); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4939 |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4940 if (! FONTP (name)) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4941 CHECK_STRING (name); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4942 if (NILP (frame)) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4943 frame = selected_frame; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4944 CHECK_LIVE_FRAME (frame); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4945 f = XFRAME (frame); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4946 |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4947 if (STRINGP (name)) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4948 { |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4949 int fontset = fs_query_fontset (name, 0); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4950 |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4951 if (fontset >= 0) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4952 name = fontset_ascii (fontset); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4953 font_object = font_open_by_name (f, (char *) SDATA (name)); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4954 } |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4955 else if (FONT_OBJECT_P (name)) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4956 font_object = name; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4957 else if (FONT_ENTITY_P (name)) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4958 font_object = font_open_entity (f, name, 0); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4959 else |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4960 { |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4961 struct face *face = FACE_FROM_ID (f, DEFAULT_FACE_ID); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4962 Lisp_Object entity = font_matching_entity (f, face->lface, name); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4963 |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4964 font_object = ! NILP (entity) ? font_open_entity (f, entity, 0) : Qnil; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4965 } |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4966 if (NILP (font_object)) |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4967 return Qnil; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4968 font = XFONT_OBJECT (font_object); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4969 |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4970 info = Fmake_vector (make_number (7), Qnil); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4971 XVECTOR (info)->contents[0] = AREF (font_object, FONT_NAME_INDEX); |
102963
b6011e455600
(Ffont_info): Fix docstring. Fix the second element of
Kenichi Handa <handa@m17n.org>
parents:
102943
diff
changeset
|
4972 XVECTOR (info)->contents[1] = AREF (font_object, FONT_FULLNAME_INDEX); |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4973 XVECTOR (info)->contents[2] = make_number (font->pixel_size); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4974 XVECTOR (info)->contents[3] = make_number (font->height); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4975 XVECTOR (info)->contents[4] = make_number (font->baseline_offset); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4976 XVECTOR (info)->contents[5] = make_number (font->relative_compose); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4977 XVECTOR (info)->contents[6] = make_number (font->default_ascent); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4978 |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4979 #if 0 |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4980 /* As font_object is still in FONT_OBJLIST of the entity, we can't |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4981 close it now. Perhaps, we should manage font-objects |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4982 by `reference-count'. */ |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4983 font_close_object (f, font_object); |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4984 #endif |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4985 return info; |
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4986 } |
95421
3350c9ac1f37
(Ffont_info): Define only if HAVE_WINDOW_SYSTEM is
Kenichi Handa <handa@m17n.org>
parents:
95403
diff
changeset
|
4987 #endif |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
4988 |
90400 | 4989 |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4990 #define BUILD_STYLE_TABLE(TBL) \ |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4991 build_style_table ((TBL), sizeof TBL / sizeof (struct table_entry)) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4992 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4993 static Lisp_Object |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
4994 build_style_table (const struct table_entry *entry, int nelement) |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4995 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4996 int i, j; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4997 Lisp_Object table, elt; |
95886
c8bc52f94b6d
(syms_of_font) <font-weight-table, font-slant-table, font-width-table>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95875
diff
changeset
|
4998 |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
4999 table = Fmake_vector (make_number (nelement), Qnil); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5000 for (i = 0; i < nelement; i++) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5001 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5002 for (j = 0; entry[i].names[j]; j++); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5003 elt = Fmake_vector (make_number (j + 1), Qnil); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5004 ASET (elt, 0, make_number (entry[i].numeric)); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5005 for (j = 0; entry[i].names[j]; j++) |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105872
diff
changeset
|
5006 ASET (elt, j + 1, intern_c_string (entry[i].names[j])); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5007 ASET (table, i, elt); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5008 } |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5009 return table; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5010 } |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5011 |
103548
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
5012 Lisp_Object Vfont_log; |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5013 |
97558
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5014 /* The deferred font-log data of the form [ACTION ARG RESULT]. |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5015 If ACTION is not nil, that is added to the log when font_add_log is |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5016 called next time. At that time, ACTION is set back to nil. */ |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5017 static Lisp_Object Vfont_log_deferred; |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5018 |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5019 /* Prepend the font-related logging data in Vfont_log if it is not |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5020 `t'. ACTION describes a kind of font-related action (e.g. listing, |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5021 opening), ARG is the argument for the action, and RESULT is the |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5022 result of the action. */ |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5023 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5024 font_add_log (char *action, Lisp_Object arg, Lisp_Object result) |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5025 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5026 Lisp_Object tail, val; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5027 int i; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5028 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5029 if (EQ (Vfont_log, Qt)) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5030 return; |
97558
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5031 if (STRINGP (AREF (Vfont_log_deferred, 0))) |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5032 { |
97822 | 5033 char *str = (char *) SDATA (AREF (Vfont_log_deferred, 0)); |
97558
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5034 |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5035 ASET (Vfont_log_deferred, 0, Qnil); |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5036 font_add_log (str, AREF (Vfont_log_deferred, 1), |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5037 AREF (Vfont_log_deferred, 2)); |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5038 } |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5039 |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5040 if (FONTP (arg)) |
97538
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5041 { |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5042 Lisp_Object tail, elt; |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5043 Lisp_Object equalstr = build_string ("="); |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5044 |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5045 val = Ffont_xlfd_name (arg, Qt); |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5046 for (tail = AREF (arg, FONT_EXTRA_INDEX); CONSP (tail); |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5047 tail = XCDR (tail)) |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5048 { |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5049 elt = XCAR (tail); |
99072
741755a52dcf
(font_add_log): Check the values of extra properties.
Kenichi Handa <handa@m17n.org>
parents:
98717
diff
changeset
|
5050 if (EQ (XCAR (elt), QCscript) |
741755a52dcf
(font_add_log): Check the values of extra properties.
Kenichi Handa <handa@m17n.org>
parents:
98717
diff
changeset
|
5051 && SYMBOLP (XCDR (elt))) |
97538
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5052 val = concat3 (val, SYMBOL_NAME (QCscript), |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5053 concat2 (equalstr, SYMBOL_NAME (XCDR (elt)))); |
99072
741755a52dcf
(font_add_log): Check the values of extra properties.
Kenichi Handa <handa@m17n.org>
parents:
98717
diff
changeset
|
5054 else if (EQ (XCAR (elt), QClang) |
741755a52dcf
(font_add_log): Check the values of extra properties.
Kenichi Handa <handa@m17n.org>
parents:
98717
diff
changeset
|
5055 && SYMBOLP (XCDR (elt))) |
97538
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5056 val = concat3 (val, SYMBOL_NAME (QClang), |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5057 concat2 (equalstr, SYMBOL_NAME (XCDR (elt)))); |
99072
741755a52dcf
(font_add_log): Check the values of extra properties.
Kenichi Handa <handa@m17n.org>
parents:
98717
diff
changeset
|
5058 else if (EQ (XCAR (elt), QCotf) |
741755a52dcf
(font_add_log): Check the values of extra properties.
Kenichi Handa <handa@m17n.org>
parents:
98717
diff
changeset
|
5059 && CONSP (XCDR (elt)) && SYMBOLP (XCAR (XCDR (elt)))) |
97538
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5060 val = concat3 (val, SYMBOL_NAME (QCotf), |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5061 concat2 (equalstr, |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5062 SYMBOL_NAME (XCAR (XCDR (elt))))); |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5063 } |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5064 arg = val; |
1a792d38ec5a
(font_add_log): Add the font properties :script, :lang,
Kenichi Handa <handa@m17n.org>
parents:
97043
diff
changeset
|
5065 } |
103889
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
5066 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
5067 if (CONSP (result) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
5068 && VECTORP (XCAR (result)) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
5069 && ASIZE (XCAR (result)) > 0 |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
5070 && FONTP (AREF (XCAR (result), 0))) |
82ad563e96ed
(font_vconcat_entity_vectors): New function.
Kenichi Handa <handa@m17n.org>
parents:
103548
diff
changeset
|
5071 result = font_vconcat_entity_vectors (result); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5072 if (FONTP (result)) |
96077
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
5073 { |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
5074 val = Ffont_xlfd_name (result, Qt); |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
5075 if (! FONT_SPEC_P (result)) |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
5076 val = concat3 (SYMBOL_NAME (AREF (result, FONT_TYPE_INDEX)), |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
5077 build_string (":"), val); |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
5078 result = val; |
86e3f462b0c2
(font_parse_xlfd): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
96073
diff
changeset
|
5079 } |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5080 else if (CONSP (result)) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5081 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5082 result = Fcopy_sequence (result); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5083 for (tail = result; CONSP (tail); tail = XCDR (tail)) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5084 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5085 val = XCAR (tail); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5086 if (FONTP (val)) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5087 val = Ffont_xlfd_name (val, Qt); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5088 XSETCAR (tail, val); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5089 } |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5090 } |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5091 else if (VECTORP (result)) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5092 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5093 result = Fcopy_sequence (result); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5094 for (i = 0; i < ASIZE (result); i++) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5095 { |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5096 val = AREF (result, i); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5097 if (FONTP (val)) |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5098 val = Ffont_xlfd_name (val, Qt); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5099 ASET (result, i, val); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5100 } |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5101 } |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5102 Vfont_log = Fcons (list3 (intern (action), arg, result), Vfont_log); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5103 } |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5104 |
97558
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5105 /* Record a font-related logging data to be added to Vfont_log when |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5106 font_add_log is called next time. ACTION, ARG, RESULT are the same |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5107 as font_add_log. */ |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5108 |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5109 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5110 font_deferred_log (char *action, Lisp_Object arg, Lisp_Object result) |
97558
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5111 { |
103548
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
5112 if (EQ (Vfont_log, Qt)) |
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
5113 return; |
97558
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5114 ASET (Vfont_log_deferred, 0, build_string (action)); |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5115 ASET (Vfont_log_deferred, 1, arg); |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5116 ASET (Vfont_log_deferred, 2, result); |
100336
d53183123ad7
* font.c (Ffont_spec): Move usage to end of docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
100173
diff
changeset
|
5117 } |
97558
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5118 |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5119 extern void syms_of_ftfont (void); |
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5120 extern void syms_of_xfont (void); |
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5121 extern void syms_of_xftfont (void); |
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5122 extern void syms_of_ftxfont (void); |
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5123 extern void syms_of_bdffont (void); |
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5124 extern void syms_of_w32font (void); |
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5125 extern void syms_of_atmfont (void); |
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5126 extern void syms_of_nsfont (void); |
90400 | 5127 |
5128 void | |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5129 syms_of_font (void) |
90400 | 5130 { |
95867
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
5131 sort_shift_bits[FONT_TYPE_INDEX] = 0; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
5132 sort_shift_bits[FONT_SLANT_INDEX] = 2; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
5133 sort_shift_bits[FONT_WEIGHT_INDEX] = 9; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
5134 sort_shift_bits[FONT_SIZE_INDEX] = 16; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
5135 sort_shift_bits[FONT_WIDTH_INDEX] = 23; |
2a64ffbf0ec3
(font_score): Delete arg alternate_families. Check only
Kenichi Handa <handa@m17n.org>
parents:
95824
diff
changeset
|
5136 /* Note that the other elements in sort_shift_bits are not used. */ |
90400 | 5137 |
91135
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
5138 staticpro (&font_charset_alist); |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
5139 font_charset_alist = Qnil; |
49dbc35e3f99
* font.c [HAVE_M17N_FLT]: Include <m17n-flt.h>.
Kenichi Handa <handa@m17n.org>
parents:
91125
diff
changeset
|
5140 |
90677
424dec0c7b5d
(Qopentype): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90640
diff
changeset
|
5141 DEFSYM (Qopentype, "opentype"); |
90400 | 5142 |
95699 | 5143 DEFSYM (Qascii_0, "ascii-0"); |
90439
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
5144 DEFSYM (Qiso8859_1, "iso8859-1"); |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
5145 DEFSYM (Qiso10646_1, "iso10646-1"); |
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
5146 DEFSYM (Qunicode_bmp, "unicode-bmp"); |
90622
bb9362e3a03b
(Qunicode_sip): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90590
diff
changeset
|
5147 DEFSYM (Qunicode_sip, "unicode-sip"); |
90439
fb253905e9c3
* font.c (Qiso8859_1, Qiso10646_1, Qunicode_bmp): Moved from
Kenichi Handa <handa@m17n.org>
parents:
90427
diff
changeset
|
5148 |
97822 | 5149 DEFSYM (QCf, "Cf"); |
5150 | |
90400 | 5151 DEFSYM (QCotf, ":otf"); |
94926 | 5152 DEFSYM (QClang, ":lang"); |
90400 | 5153 DEFSYM (QCscript, ":script"); |
91125
6c9a19ff6c55
(Qfontp): Remove unused symbol.
Jason Rumney <jasonr@gnu.org>
parents:
91112
diff
changeset
|
5154 DEFSYM (QCantialias, ":antialias"); |
90400 | 5155 |
5156 DEFSYM (QCfoundry, ":foundry"); | |
5157 DEFSYM (QCadstyle, ":adstyle"); | |
5158 DEFSYM (QCregistry, ":registry"); | |
90481
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
5159 DEFSYM (QCspacing, ":spacing"); |
93690200f520
(POINT_TO_PIXEL): Don't divice POINT by 10.
Kenichi Handa <handa@m17n.org>
parents:
90476
diff
changeset
|
5160 DEFSYM (QCdpi, ":dpi"); |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
5161 DEFSYM (QCscalable, ":scalable"); |
94926 | 5162 DEFSYM (QCavgwidth, ":avgwidth"); |
5163 DEFSYM (QCfont_entity, ":font-entity"); | |
5164 DEFSYM (QCfc_unknown_spec, ":fc-unknown-spec"); | |
90400 | 5165 |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
5166 DEFSYM (Qc, "c"); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
5167 DEFSYM (Qm, "m"); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
5168 DEFSYM (Qp, "p"); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
5169 DEFSYM (Qd, "d"); |
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
5170 |
103011
8f0fbb48af5a
* font.c (Qja, Qko): Move definitions here from ftfont.c.
Chong Yidong <cyd@stupidchicken.com>
parents:
102990
diff
changeset
|
5171 DEFSYM (Qja, "ja"); |
8f0fbb48af5a
* font.c (Qja, Qko): Move definitions here from ftfont.c.
Chong Yidong <cyd@stupidchicken.com>
parents:
102990
diff
changeset
|
5172 DEFSYM (Qko, "ko"); |
8f0fbb48af5a
* font.c (Qja, Qko): Move definitions here from ftfont.c.
Chong Yidong <cyd@stupidchicken.com>
parents:
102990
diff
changeset
|
5173 |
106750
10b9609fb6b7
Fixing user-spec for fonts instead of using name.
Jan D. <jan.h.d@swipnet.se>
parents:
106618
diff
changeset
|
5174 DEFSYM (QCuser_spec, "user-spec"); |
10b9609fb6b7
Fixing user-spec for fonts instead of using name.
Jan D. <jan.h.d@swipnet.se>
parents:
106618
diff
changeset
|
5175 |
90400 | 5176 staticpro (&null_vector); |
5177 null_vector = Fmake_vector (make_number (0), Qnil); | |
5178 | |
5179 staticpro (&scratch_font_spec); | |
5180 scratch_font_spec = Ffont_spec (0, NULL); | |
5181 staticpro (&scratch_font_prefer); | |
5182 scratch_font_prefer = Ffont_spec (0, NULL); | |
5183 | |
97558
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5184 staticpro (&Vfont_log_deferred); |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5185 Vfont_log_deferred = Fmake_vector (make_number (3), Qnil); |
ec399baa25dd
(Vfont_log_deferred): New variable.
Kenichi Handa <handa@m17n.org>
parents:
97538
diff
changeset
|
5186 |
95290
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
5187 #if 0 |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
5188 #ifdef HAVE_LIBOTF |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
5189 staticpro (&otf_list); |
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
5190 otf_list = Qnil; |
95290
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
5191 #endif /* HAVE_LIBOTF */ |
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
5192 #endif /* 0 */ |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
5193 |
90400 | 5194 defsubr (&Sfontp); |
5195 defsubr (&Sfont_spec); | |
5196 defsubr (&Sfont_get); | |
96073
4af4f5a1eb34
(Ffont_face_attributes): Only define if
Andreas Schwab <schwab@suse.de>
parents:
96049
diff
changeset
|
5197 #ifdef HAVE_WINDOW_SYSTEM |
95972
e427600f176b
(font_parse_fcname): Only only one decimal point.
Chong Yidong <cyd@stupidchicken.com>
parents:
95958
diff
changeset
|
5198 defsubr (&Sfont_face_attributes); |
96073
4af4f5a1eb34
(Ffont_face_attributes): Only define if
Andreas Schwab <schwab@suse.de>
parents:
96049
diff
changeset
|
5199 #endif |
90400 | 5200 defsubr (&Sfont_put); |
5201 defsubr (&Slist_fonts); | |
94926 | 5202 defsubr (&Sfont_family_list); |
90400 | 5203 defsubr (&Sfind_font); |
5204 defsubr (&Sfont_xlfd_name); | |
5205 defsubr (&Sclear_font_cache); | |
97822 | 5206 defsubr (&Sfont_shape_gstring); |
100793
04bd84418dd7
(font_range): Don't require a font for a variation
Kenichi Handa <handa@m17n.org>
parents:
100759
diff
changeset
|
5207 defsubr (&Sfont_variation_glyphs); |
95290
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
5208 #if 0 |
90817
d2c230a67741
(struct otf_list): Delete it.
Kenichi Handa <handa@m17n.org>
parents:
90811
diff
changeset
|
5209 defsubr (&Sfont_drive_otf); |
90556
e56a86aa94cc
(font_otf_capability): Fix handling of the default
Kenichi Handa <handa@m17n.org>
parents:
90549
diff
changeset
|
5210 defsubr (&Sfont_otf_alternates); |
95290
e3e5f8759ca5
(LGSTRING_HEADER_SIZE, LGSTRING_GLYPH_SIZE)
Kenichi Handa <handa@m17n.org>
parents:
95225
diff
changeset
|
5211 #endif /* 0 */ |
90400 | 5212 |
5213 #ifdef FONT_DEBUG | |
5214 defsubr (&Sopen_font); | |
5215 defsubr (&Sclose_font); | |
5216 defsubr (&Squery_font); | |
5217 defsubr (&Sget_font_glyphs); | |
90503
8e3ffc0a529f
(QCscalable, Qc, Qm, Qp, Qd): New variables.
Kenichi Handa <handa@m17n.org>
parents:
90490
diff
changeset
|
5218 defsubr (&Sfont_match_p); |
90541 | 5219 defsubr (&Sfont_at); |
90400 | 5220 #if 0 |
5221 defsubr (&Sdraw_string); | |
5222 #endif | |
5223 #endif /* FONT_DEBUG */ | |
95421
3350c9ac1f37
(Ffont_info): Define only if HAVE_WINDOW_SYSTEM is
Kenichi Handa <handa@m17n.org>
parents:
95403
diff
changeset
|
5224 #ifdef HAVE_WINDOW_SYSTEM |
95403
26df7325a6ff
(font_style_to_value, font_score): Delete casting of the
Kenichi Handa <handa@m17n.org>
parents:
95359
diff
changeset
|
5225 defsubr (&Sfont_info); |
95421
3350c9ac1f37
(Ffont_info): Define only if HAVE_WINDOW_SYSTEM is
Kenichi Handa <handa@m17n.org>
parents:
95403
diff
changeset
|
5226 #endif |
90400 | 5227 |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5228 DEFVAR_LISP ("font-encoding-alist", &Vfont_encoding_alist, |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5229 doc: /* |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5230 Alist of fontname patterns vs the corresponding encoding and repertory info. |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5231 Each element looks like (REGEXP . (ENCODING . REPERTORY)), |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5232 where ENCODING is a charset or a char-table, |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5233 and REPERTORY is a charset, a char-table, or nil. |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5234 |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
5235 If ENCODING and REPERTORY are the same, the element can have the form |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5236 \(REGEXP . ENCODING). |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5237 |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5238 ENCODING is for converting a character to a glyph code of the font. |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5239 If ENCODING is a charset, encoding a character by the charset gives |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5240 the corresponding glyph code. If ENCODING is a char-table, looking up |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5241 the table by a character gives the corresponding glyph code. |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5242 |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5243 REPERTORY specifies a repertory of characters supported by the font. |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5244 If REPERTORY is a charset, all characters beloging to the charset are |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5245 supported. If REPERTORY is a char-table, all characters who have a |
95142
f64ddc606a66
(syms-of-font) <font-encoding-alist>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95126
diff
changeset
|
5246 non-nil value in the table are supported. If REPERTORY is nil, Emacs |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5247 gets the repertory information by an opened font and ENCODING. */); |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5248 Vfont_encoding_alist = Qnil; |
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5249 |
108004
9d210d83ed69
* font.c (syms_of_font): Make the style table vars read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107242
diff
changeset
|
5250 /* FIXME: These 3 vars are not quite what they appear: setq on them |
9d210d83ed69
* font.c (syms_of_font): Make the style table vars read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107242
diff
changeset
|
5251 won't have any effect other than disconnect them from the style |
9d210d83ed69
* font.c (syms_of_font): Make the style table vars read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107242
diff
changeset
|
5252 table used by the font display code. So we make them read-only, |
9d210d83ed69
* font.c (syms_of_font): Make the style table vars read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107242
diff
changeset
|
5253 to avoid this confusing situation. */ |
9d210d83ed69
* font.c (syms_of_font): Make the style table vars read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107242
diff
changeset
|
5254 |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5255 DEFVAR_LISP_NOPRO ("font-weight-table", &Vfont_weight_table, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5256 doc: /* Vector of valid font weight values. |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5257 Each element has the form: |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5258 [NUMERIC-VALUE SYMBOLIC-NAME ALIAS-NAME ...] |
95886
c8bc52f94b6d
(syms_of_font) <font-weight-table, font-slant-table, font-width-table>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95875
diff
changeset
|
5259 NUMERIC-VALUE is an integer, and SYMBOLIC-NAME and ALIAS-NAME are symbols. */); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5260 Vfont_weight_table = BUILD_STYLE_TABLE (weight_table); |
108004
9d210d83ed69
* font.c (syms_of_font): Make the style table vars read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107242
diff
changeset
|
5261 XSYMBOL (intern_c_string ("font-weight-table"))->constant = 1; |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5262 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5263 DEFVAR_LISP_NOPRO ("font-slant-table", &Vfont_slant_table, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5264 doc: /* Vector of font slant symbols vs the corresponding numeric values. |
95886
c8bc52f94b6d
(syms_of_font) <font-weight-table, font-slant-table, font-width-table>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95875
diff
changeset
|
5265 See `font-weight-table' for the format of the vector. */); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5266 Vfont_slant_table = BUILD_STYLE_TABLE (slant_table); |
108004
9d210d83ed69
* font.c (syms_of_font): Make the style table vars read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107242
diff
changeset
|
5267 XSYMBOL (intern_c_string ("font-slant-table"))->constant = 1; |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5268 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5269 DEFVAR_LISP_NOPRO ("font-width-table", &Vfont_width_table, |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5270 doc: /* Alist of font width symbols vs the corresponding numeric values. |
95886
c8bc52f94b6d
(syms_of_font) <font-weight-table, font-slant-table, font-width-table>:
Juanma Barranquero <lekktu@gmail.com>
parents:
95875
diff
changeset
|
5271 See `font-weight-table' for the format of the vector. */); |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5272 Vfont_width_table = BUILD_STYLE_TABLE (width_table); |
108004
9d210d83ed69
* font.c (syms_of_font): Make the style table vars read-only.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107242
diff
changeset
|
5273 XSYMBOL (intern_c_string ("font-width-table"))->constant = 1; |
95176
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5274 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5275 staticpro (&font_style_table); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5276 font_style_table = Fmake_vector (make_number (3), Qnil); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5277 ASET (font_style_table, 0, Vfont_weight_table); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5278 ASET (font_style_table, 1, Vfont_slant_table); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5279 ASET (font_style_table, 2, Vfont_width_table); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5280 |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5281 DEFVAR_LISP ("font-log", &Vfont_log, doc: /* |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5282 *Logging list of font related actions and results. |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5283 The value t means to suppress the logging. |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5284 The initial value is set to nil if the environment variable |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5285 EMACS_FONT_LOG is set. Otherwise, it is set to t. */); |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5286 Vfont_log = Qnil; |
686d116f748d
Checking of FONT_DEBUG is moved to font.h. All calls of
Kenichi Handa <handa@m17n.org>
parents:
95142
diff
changeset
|
5287 |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5288 #ifdef HAVE_WINDOW_SYSTEM |
90400 | 5289 #ifdef HAVE_FREETYPE |
94926 | 5290 syms_of_ftfont (); |
90400 | 5291 #ifdef HAVE_X_WINDOWS |
94926 | 5292 syms_of_xfont (); |
5293 syms_of_ftxfont (); | |
90400 | 5294 #ifdef HAVE_XFT |
94926 | 5295 syms_of_xftfont (); |
90400 | 5296 #endif /* HAVE_XFT */ |
5297 #endif /* HAVE_X_WINDOWS */ | |
5298 #else /* not HAVE_FREETYPE */ | |
5299 #ifdef HAVE_X_WINDOWS | |
94926 | 5300 syms_of_xfont (); |
90400 | 5301 #endif /* HAVE_X_WINDOWS */ |
5302 #endif /* not HAVE_FREETYPE */ | |
5303 #ifdef HAVE_BDFFONT | |
94926 | 5304 syms_of_bdffont (); |
90400 | 5305 #endif /* HAVE_BDFFONT */ |
5306 #ifdef WINDOWSNT | |
94926 | 5307 syms_of_w32font (); |
90400 | 5308 #endif /* WINDOWSNT */ |
96675
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
5309 #ifdef HAVE_NS |
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
5310 syms_of_nsfont (); |
d45acf0c8d23
merging Emacs.app (NeXTstep port)
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
96573
diff
changeset
|
5311 #endif /* HAVE_NS */ |
95126
b7cee987e982
(Vfont_encoding_alist, find_font_encoding): Moved from
Kenichi Handa <handa@m17n.org>
parents:
95104
diff
changeset
|
5312 #endif /* HAVE_WINDOW_SYSTEM */ |
90400 | 5313 } |
90427 | 5314 |
103548
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
5315 void |
109126
aec1143e8d85
Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109100
diff
changeset
|
5316 init_font (void) |
103548
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
5317 { |
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
5318 Vfont_log = egetenv ("EMACS_FONT_LOG") ? Qnil : Qt; |
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
5319 } |
1a45bb782f72
(font_sort_entities, font_list_entities)
Kenichi Handa <handa@m17n.org>
parents:
103369
diff
changeset
|
5320 |
90427 | 5321 /* arch-tag: 74c9475d-5976-4c93-a327-942ae3072846 |
5322 (do not change this comment) */ |