Mercurial > emacs
annotate src/fontset.c @ 91241:6133244f82b7
(fontset_find_font): Fix previous change.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Tue, 18 Dec 2007 02:29:25 +0000 |
parents | 29d8135e8f58 |
children | 2de541db2c82 |
rev | line source |
---|---|
17052 | 1 /* Fontset handler. |
75227
e90d04cd455a
Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents:
74605
diff
changeset
|
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 |
e90d04cd455a
Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents:
74605
diff
changeset
|
3 Free Software Foundation, Inc. |
74605
6ee41fdd69ff
Update AIST copyright years.
Kenichi Handa <handa@m17n.org>
parents:
71605
diff
changeset
|
4 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, |
75364 | 5 2005, 2006, 2007 |
67658 | 6 National Institute of Advanced Industrial Science and Technology (AIST) |
7 Registration Number H14PRO021 | |
90410 | 8 Copyright (C) 2003, 2006 |
88405 | 9 National Institute of Advanced Industrial Science and Technology (AIST) |
10 Registration Number H13PRO009 | |
90261
7beb78bc1f8e
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-97
Miles Bader <miles@gnu.org>
diff
changeset
|
11 |
17071 | 12 This file is part of GNU Emacs. |
13 | |
14 GNU Emacs is free software; you can redistribute it and/or modify | |
15 it under the terms of the GNU General Public License as published by | |
78313
2b9404c2f01f
Remove license from trivial file.
Glenn Morris <rgm@gnu.org>
parents:
75364
diff
changeset
|
16 the Free Software Foundation; either version 3, or (at your option) |
17071 | 17 any later version. |
17052 | 18 |
17071 | 19 GNU Emacs is distributed in the hope that it will be useful, |
20 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
22 GNU General Public License for more details. | |
17052 | 23 |
17071 | 24 You should have received a copy of the GNU General Public License |
25 along with GNU Emacs; see the file COPYING. If not, write to | |
64084 | 26 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
27 Boston, MA 02110-1301, USA. */ | |
17052 | 28 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
29 /* #define FONTSET_DEBUG */ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
30 |
17052 | 31 #include <config.h> |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
32 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
33 #ifdef FONTSET_DEBUG |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
34 #include <stdio.h> |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
35 #endif |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
36 |
17052 | 37 #include "lisp.h" |
88405 | 38 #include "blockinput.h" |
28963 | 39 #include "buffer.h" |
88405 | 40 #include "character.h" |
17052 | 41 #include "charset.h" |
42 #include "ccl.h" | |
31102
6a0caa788013
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
30941
diff
changeset
|
43 #include "keyboard.h" |
23517
73f09e7bc96e
Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents:
22719
diff
changeset
|
44 #include "frame.h" |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
45 #include "dispextern.h" |
89865 | 46 #include "intervals.h" |
17052 | 47 #include "fontset.h" |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
48 #include "window.h" |
52654
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
49 #ifdef HAVE_X_WINDOWS |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
50 #include "xterm.h" |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
51 #endif |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
52 #ifdef WINDOWSNT |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
53 #include "w32term.h" |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
54 #endif |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
55 #ifdef MAC_OS |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
56 #include "macterm.h" |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
57 #endif |
82992
5de4189e659d
Got rid of the rif (window-based redisplay interface) global variable.
Karoly Lorentey <lorentey@elte.hu>
parents:
53353
diff
changeset
|
58 #include "termhooks.h" |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
59 |
90410 | 60 #include "font.h" |
61 | |
89483 | 62 #undef xassert |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
63 #ifdef FONTSET_DEBUG |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
64 #define xassert(X) do {if (!(X)) abort ();} while (0) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
65 #undef INLINE |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
66 #define INLINE |
89483 | 67 #else /* not FONTSET_DEBUG */ |
68 #define xassert(X) (void) 0 | |
69 #endif /* not FONTSET_DEBUG */ | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
70 |
88546 | 71 EXFUN (Fclear_face_cache, 1); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
72 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
73 /* FONTSET |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
74 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
75 A fontset is a collection of font related information to give |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
76 similar appearance (style, etc) of characters. A fontset has two |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
77 roles. One is to use for the frame parameter `font' as if it is an |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
78 ASCII font. In that case, Emacs uses the font specified for |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
79 `ascii' script for the frame's default font. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
80 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
81 Another role, the more important one, is to provide information |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
82 about which font to use for each non-ASCII character. |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
83 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
84 There are two kinds of fontsets; base and realized. A base fontset |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
85 is created by `new-fontset' from Emacs Lisp explicitly. A realized |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
86 fontset is created implicitly when a face is realized for ASCII |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
87 characters. A face is also realized for non-ASCII characters based |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
88 on an ASCII face. All of non-ASCII faces based on the same ASCII |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
89 face share the same realized fontset. |
89483 | 90 |
88405 | 91 A fontset object is implemented by a char-table whose default value |
92 and parent are always nil. | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
93 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
94 An element of a base fontset is a vector of FONT-DEFs which itself |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
95 is a vector [ FONT-SPEC ENCODING REPERTORY ]. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
96 |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
97 FONT-SPEC is a font-spec created by `font-spec' or |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
98 ( FAMILY . REGISTRY ) |
88405 | 99 or |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
100 FONT-NAME |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
101 where FAMILY, REGISTRY, and FONT-NAME are strings. |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
102 |
89826
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
103 ENCODING is a charset ID that can convert characters to glyph codes |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
104 of the corresponding font. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
105 |
89826
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
106 REPERTORY is a charset ID, a char-table, or nil. If REPERTORY is a |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
107 charset ID, the repertory of the charset exactly matches with that |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
108 of the font. If REPERTORY is a char-table, all characters who have |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
109 a non-nil value in the table are supported. If REPERTORY is nil, |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
110 we consult with the font itself to get the repertory. |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
111 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
112 ENCODING and REPERTORY are extracted from the variable |
89826
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
113 Vfont_encoding_alist by using a font name generated from FONT-SPEC |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
114 (if it is a vector) or FONT-NAME as a matching target. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
115 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
116 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
117 An element of a realized fontset is nil or t, or has this form: |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
118 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
119 [CHARSET-ORDERED-LIST-TICK PREFERRED-CHARSET-ID PREFERRED-FAMILY |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
120 RFONT-DEF0 RFONT-DEF1 ...]. |
17052 | 121 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
122 RFONT-DEFn (i.e. Realized FONT-DEF) has this form: |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
123 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
124 [ FACE-ID FONT-INDEX FONT-DEF OPENED-FONT-NAME ] |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
125 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
126 RFONT-DEFn is automatically reordered by the current charset |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
127 priority list. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
128 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
129 The value nil means that we have not yet generated the above vector |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
130 from the base of the fontset. |
88405 | 131 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
132 The value t means that no font is available for the corresponding |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
133 range of characters. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
134 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
135 |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
136 A fontset has 9 extra slots. |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
137 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
138 The 1st slot: the ID number of the fontset |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
139 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
140 The 2nd slot: |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
141 base: the name of the fontset |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
142 realized: nil |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
143 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
144 The 3rd slot: |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
145 base: nil |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
146 realized: the base fontset |
17052 | 147 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
148 The 4th slot: |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
149 base: nil |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
150 realized: the frame that the fontset belongs to |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
151 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
152 The 5th slot: |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
153 base: the font name for ASCII characters |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
154 realized: nil |
88405 | 155 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
156 The 6th slot: |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
157 base: nil |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
158 realized: the ID number of a face to use for characters that |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
159 has no font in a realized fontset. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
160 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
161 The 7th slot: |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
162 base: nil |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
163 realized: Alist of font index vs the corresponding repertory |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
164 char-table. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
165 |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
166 The 8th slot: |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
167 base: nil |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
168 realized: If the base is not the default fontset, a fontset |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
169 realized from the default fontset, else nil. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
170 |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
171 The 9th slot: |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
172 base: Same as element value (but for fallback fonts). |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
173 realized: Likewise. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
174 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
175 All fontsets are recorded in the vector Vfontset_table. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
176 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
177 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
178 DEFAULT FONTSET |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
179 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
180 There's a special base fontset named `default fontset' which |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
181 defines the default font specifications. When a base fontset |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
182 doesn't specify a font for a specific character, the corresponding |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
183 value in the default fontset is used. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
184 |
30398
dde5ab185aad
(fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents:
30172
diff
changeset
|
185 The parent of a realized fontset created for such a face that has |
dde5ab185aad
(fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents:
30172
diff
changeset
|
186 no fontset is the default fontset. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
187 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
188 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
189 These structures are hidden from the other codes than this file. |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
190 The other codes handle fontsets only by their ID numbers. They |
88405 | 191 usually use the variable name `fontset' for IDs. But, in this |
192 file, we always use varialbe name `id' for IDs, and name `fontset' | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
193 for an actual fontset object, i.e., char-table. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
194 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
195 */ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
196 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
197 /********** VARIABLES and FUNCTION PROTOTYPES **********/ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
198 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
199 extern Lisp_Object Qfont; |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
200 static Lisp_Object Qfontset; |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
201 static Lisp_Object Qfontset_info; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
202 static Lisp_Object Qprepend, Qappend; |
90642 | 203 static Lisp_Object Qlatin; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
204 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
205 /* Vector containing all fontsets. */ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
206 static Lisp_Object Vfontset_table; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
207 |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
208 /* Next possibly free fontset ID. Usually this keeps the minimum |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
209 fontset ID not yet used. */ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
210 static int next_fontset_id; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
211 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
212 /* The default fontset. This gives default FAMILY and REGISTRY of |
88405 | 213 font for each character. */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
214 static Lisp_Object Vdefault_fontset; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
215 |
17052 | 216 Lisp_Object Vfont_encoding_alist; |
17112
5c48ff325655
(syms_of_fontset): Intern Qfontset. Declare new lisp
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
217 Lisp_Object Vuse_default_ascent; |
19282
09a1536debb4
(Vignore_relative_composition): New variable.
Kenichi Handa <handa@m17n.org>
parents:
19172
diff
changeset
|
218 Lisp_Object Vignore_relative_composition; |
19450
895dc2520755
(Valternate_fontname_alist): Name changed from
Kenichi Handa <handa@m17n.org>
parents:
19282
diff
changeset
|
219 Lisp_Object Valternate_fontname_alist; |
17730
4bbcc6804b5d
(Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17331
diff
changeset
|
220 Lisp_Object Vfontset_alias_alist; |
26858
7cc081b4e084
(Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents:
26164
diff
changeset
|
221 Lisp_Object Vvertical_centering_font_regexp; |
90509
c1ec6b950928
(Votf_script_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90475
diff
changeset
|
222 Lisp_Object Votf_script_alist; |
17052 | 223 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
224 /* The following six are declarations of callback functions depending |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
225 on window system. See the comments in src/fontset.h for more |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
226 detail. */ |
17052 | 227 |
228 /* Return a pointer to struct font_info of font FONT_IDX of frame F. */ | |
20315
931b4ddf7966
Protoize functions declarations.
Andreas Schwab <schwab@suse.de>
parents:
19450
diff
changeset
|
229 struct font_info *(*get_font_info_func) P_ ((FRAME_PTR f, int font_idx)); |
17052 | 230 |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
231 /* Return a list of font names which matches PATTERN. See the documentation |
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
232 of `x-list-fonts' for more details. */ |
23517
73f09e7bc96e
Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents:
22719
diff
changeset
|
233 Lisp_Object (*list_fonts_func) P_ ((struct frame *f, |
73f09e7bc96e
Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents:
22719
diff
changeset
|
234 Lisp_Object pattern, |
73f09e7bc96e
Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents:
22719
diff
changeset
|
235 int size, |
73f09e7bc96e
Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents:
22719
diff
changeset
|
236 int maxnames)); |
17052 | 237 |
238 /* Load a font named NAME for frame F and return a pointer to the | |
239 information of the loaded font. If loading is failed, return 0. */ | |
20315
931b4ddf7966
Protoize functions declarations.
Andreas Schwab <schwab@suse.de>
parents:
19450
diff
changeset
|
240 struct font_info *(*load_font_func) P_ ((FRAME_PTR f, char *name, int)); |
17052 | 241 |
242 /* Return a pointer to struct font_info of a font named NAME for frame F. */ | |
20315
931b4ddf7966
Protoize functions declarations.
Andreas Schwab <schwab@suse.de>
parents:
19450
diff
changeset
|
243 struct font_info *(*query_font_func) P_ ((FRAME_PTR f, char *name)); |
17052 | 244 |
245 /* Additional function for setting fontset or changing fontset | |
246 contents of frame F. */ | |
20315
931b4ddf7966
Protoize functions declarations.
Andreas Schwab <schwab@suse.de>
parents:
19450
diff
changeset
|
247 void (*set_frame_fontset_func) P_ ((FRAME_PTR f, Lisp_Object arg, |
931b4ddf7966
Protoize functions declarations.
Andreas Schwab <schwab@suse.de>
parents:
19450
diff
changeset
|
248 Lisp_Object oldval)); |
17052 | 249 |
21553
2d7afcd11b72
(find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
250 /* To find a CCL program, fs_load_font calls this function. |
2d7afcd11b72
(find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
251 The argument is a pointer to the struct font_info. |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
252 This function set the member `encoder' of the structure. */ |
21553
2d7afcd11b72
(find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
253 void (*find_ccl_program_func) P_ ((struct font_info *)); |
2d7afcd11b72
(find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
254 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
255 Lisp_Object (*get_font_repertory_func) P_ ((struct frame *, |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
256 struct font_info *)); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
257 |
17052 | 258 /* Check if any window system is used now. */ |
20315
931b4ddf7966
Protoize functions declarations.
Andreas Schwab <schwab@suse.de>
parents:
19450
diff
changeset
|
259 void (*check_window_system_func) P_ ((void)); |
17052 | 260 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
261 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
262 /* Prototype declarations for static functions. */ |
89069
c2201502f37e
(fontset_add): Return Lisp_Object.
Dave Love <fx@gnu.org>
parents:
89006
diff
changeset
|
263 static Lisp_Object fontset_add P_ ((Lisp_Object, Lisp_Object, Lisp_Object, |
c2201502f37e
(fontset_add): Return Lisp_Object.
Dave Love <fx@gnu.org>
parents:
89006
diff
changeset
|
264 Lisp_Object)); |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
265 static void reorder_font_vector P_ ((Lisp_Object, int, Lisp_Object)); |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
266 static Lisp_Object fontset_font P_ ((Lisp_Object, int, struct face *, int)); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
267 static Lisp_Object make_fontset P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
268 static Lisp_Object fontset_pattern_regexp P_ ((Lisp_Object)); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
269 static void accumulate_script_ranges P_ ((Lisp_Object, Lisp_Object, |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
270 Lisp_Object)); |
90410 | 271 Lisp_Object find_font_encoding P_ ((Lisp_Object)); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
272 |
89614
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
273 static void set_fontset_font P_ ((Lisp_Object, Lisp_Object)); |
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
274 |
88982
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
275 #ifdef FONTSET_DEBUG |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
276 |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
277 /* Return 1 if ID is a valid fontset id, else return 0. */ |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
278 |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
279 static int |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
280 fontset_id_valid_p (id) |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
281 int id; |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
282 { |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
283 return (id >= 0 && id < ASIZE (Vfontset_table) - 1); |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
284 } |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
285 |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
286 #endif |
d50b0a9ea97a
(fontset_add): Make the type `int'.
Kenichi Handa <handa@m17n.org>
parents:
88968
diff
changeset
|
287 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
288 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
289 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
290 /********** MACROS AND FUNCTIONS TO HANDLE FONTSET **********/ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
291 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
292 /* Return the fontset with ID. No check of ID's validness. */ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
293 #define FONTSET_FROM_ID(id) AREF (Vfontset_table, id) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
294 |
30398
dde5ab185aad
(fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents:
30172
diff
changeset
|
295 /* Macros to access special values of FONTSET. */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
296 #define FONTSET_ID(fontset) XCHAR_TABLE (fontset)->extras[0] |
88405 | 297 |
298 /* Macros to access special values of (base) FONTSET. */ | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
299 #define FONTSET_NAME(fontset) XCHAR_TABLE (fontset)->extras[1] |
88405 | 300 #define FONTSET_ASCII(fontset) XCHAR_TABLE (fontset)->extras[4] |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
301 |
88405 | 302 /* Macros to access special values of (realized) FONTSET. */ |
303 #define FONTSET_BASE(fontset) XCHAR_TABLE (fontset)->extras[2] | |
304 #define FONTSET_FRAME(fontset) XCHAR_TABLE (fontset)->extras[3] | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
305 #define FONTSET_NOFONT_FACE(fontset) XCHAR_TABLE (fontset)->extras[5] |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
306 #define FONTSET_REPERTORY(fontset) XCHAR_TABLE (fontset)->extras[6] |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
307 #define FONTSET_DEFAULT(fontset) XCHAR_TABLE (fontset)->extras[7] |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
308 |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
309 /* For both base and realized fontset. */ |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
310 #define FONTSET_FALLBACK(fontset) XCHAR_TABLE (fontset)->extras[8] |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
311 |
89428
eed327e0bad3
(BASE_FONTSET_P): Check FONTSET_BASE, not
Kenichi Handa <handa@m17n.org>
parents:
89349
diff
changeset
|
312 #define BASE_FONTSET_P(fontset) (NILP (FONTSET_BASE (fontset))) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
313 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
314 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
315 /* Return the element of FONTSET for the character C. If FONTSET is a |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
316 base fontset other then the default fontset and FONTSET doesn't |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
317 contain information for C, return the information in the default |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
318 fontset. */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
319 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
320 #define FONTSET_REF(fontset, c) \ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
321 (EQ (fontset, Vdefault_fontset) \ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
322 ? CHAR_TABLE_REF (fontset, c) \ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
323 : fontset_ref ((fontset), (c))) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
324 |
30398
dde5ab185aad
(fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents:
30172
diff
changeset
|
325 static Lisp_Object |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
326 fontset_ref (fontset, c) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
327 Lisp_Object fontset; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
328 int c; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
329 { |
88405 | 330 Lisp_Object elt; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
331 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
332 elt = CHAR_TABLE_REF (fontset, c); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
333 if (NILP (elt) && ! EQ (fontset, Vdefault_fontset) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
334 /* Don't check Vdefault_fontset for a realized fontset. */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
335 && NILP (FONTSET_BASE (fontset))) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
336 elt = CHAR_TABLE_REF (Vdefault_fontset, c); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
337 return elt; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
338 } |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
339 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
340 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
341 /* Return the element of FONTSET for the character C, set FROM and TO |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
342 to the range of characters around C that have the same value as C. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
343 If FONTSET is a base fontset other then the default fontset and |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
344 FONTSET doesn't contain information for C, return the information |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
345 in the default fontset. */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
346 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
347 #define FONTSET_REF_AND_RANGE(fontset, c, form, to) \ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
348 (EQ (fontset, Vdefault_fontset) \ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
349 ? char_table_ref_and_range (fontset, c, &from, &to) \ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
350 : fontset_ref_and_range (fontset, c, &from, &to)) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
351 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
352 static Lisp_Object |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
353 fontset_ref_and_range (fontset, c, from, to) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
354 Lisp_Object fontset; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
355 int c; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
356 int *from, *to; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
357 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
358 Lisp_Object elt; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
359 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
360 elt = char_table_ref_and_range (fontset, c, from, to); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
361 if (NILP (elt) && ! EQ (fontset, Vdefault_fontset) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
362 /* Don't check Vdefault_fontset for a realized fontset. */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
363 && NILP (FONTSET_BASE (fontset))) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
364 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
365 int from1, to1; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
366 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
367 elt = char_table_ref_and_range (Vdefault_fontset, c, &from1, &to1); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
368 if (*from < from1) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
369 *from = from1; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
370 if (*to > to1) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
371 *to = to1; |
88405 | 372 } |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
373 return elt; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
374 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
375 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
376 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
377 /* Set elements of FONTSET for characters in RANGE to the value ELT. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
378 RANGE is a cons (FROM . TO), where FROM and TO are character codes |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
379 specifying a range. */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
380 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
381 #define FONTSET_SET(fontset, range, elt) \ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
382 Fset_char_table_range ((fontset), (range), (elt)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
383 |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
384 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
385 /* Modify the elements of FONTSET for characters in RANGE by replacing |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
386 with ELT or adding ELT. RANGE is a cons (FROM . TO), where FROM |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
387 and TO are character codes specifying a range. If ADD is nil, |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
388 replace with ELT, if ADD is `prepend', prepend ELT, otherwise, |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
389 append ELT. */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
390 |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
391 #define FONTSET_ADD(fontset, range, elt, add) \ |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
392 (NILP (add) \ |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
393 ? (NILP (range) \ |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
394 ? (FONTSET_FALLBACK (fontset) = Fmake_vector (make_number (1), (elt))) \ |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
395 : Fset_char_table_range ((fontset), (range), \ |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
396 Fmake_vector (make_number (1), (elt)))) \ |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
397 : fontset_add ((fontset), (range), (elt), (add))) |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
398 |
89069
c2201502f37e
(fontset_add): Return Lisp_Object.
Dave Love <fx@gnu.org>
parents:
89006
diff
changeset
|
399 static Lisp_Object |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
400 fontset_add (fontset, range, elt, add) |
88931
74d18470865c
(fontset_add): Declare args. Call make_number
Dave Love <fx@gnu.org>
parents:
88903
diff
changeset
|
401 Lisp_Object fontset, range, elt, add; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
402 { |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
403 Lisp_Object args[2]; |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
404 int idx = (EQ (add, Qappend) ? 0 : 1); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
405 |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
406 args[1 - idx] = Fmake_vector (make_number (1), elt); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
407 |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
408 if (CONSP (range)) |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
409 { |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
410 int from = XINT (XCAR (range)); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
411 int to = XINT (XCDR (range)); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
412 int from1, to1; |
89483 | 413 |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
414 do { |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
415 args[idx] = char_table_ref_and_range (fontset, from, &from1, &to1); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
416 if (to < to1) |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
417 to1 = to; |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
418 char_table_set_range (fontset, from, to1, |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
419 NILP (args[idx]) ? args[1 - idx] |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
420 : Fvconcat (2, args)); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
421 from = to1 + 1; |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
422 } while (from < to); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
423 } |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
424 else |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
425 { |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
426 args[idx] = FONTSET_FALLBACK (fontset); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
427 FONTSET_FALLBACK (fontset) |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
428 = NILP (args[idx]) ? args[1 - idx] : Fvconcat (2, args); |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
429 } |
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
430 return Qnil; |
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
431 } |
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
432 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
433 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
434 /* Update FONT-GROUP which has this form: |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
435 [CHARSET-ORDERED-LIST-TICK PREFERRED-CHARSET-ID PREFERRED-FAMILY |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
436 RFONT-DEF0 RFONT-DEF1 ...]. |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
437 Reorder RFONT-DEFs according to the current order of charset |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
438 (Vcharset_ordered_list), and update CHARSET-ORDERED-LIST-TICK to |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
439 the latest value. */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
440 |
88405 | 441 static void |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
442 reorder_font_vector (font_group, charset_id, family) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
443 Lisp_Object font_group; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
444 int charset_id; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
445 Lisp_Object family; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
446 { |
89940
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
447 Lisp_Object list, *new_vec; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
448 int size; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
449 int *charset_id_table; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
450 int i, idx; |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
451 Lisp_Object preferred_by_charset, preferred_by_family; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
452 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
453 ASET (font_group, 0, make_number (charset_ordered_list_tick)); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
454 ASET (font_group, 1, make_number (charset_id)); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
455 ASET (font_group, 2, family); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
456 size = ASIZE (font_group) - 3; |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
457 if (size <= 1) |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
458 /* No need to reorder VEC. */ |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
459 return; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
460 charset_id_table = (int *) alloca (sizeof (int) * size); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
461 new_vec = (Lisp_Object *) alloca (sizeof (Lisp_Object) * size); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
462 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
463 /* At first, extract ENCODING (a chaset ID) from RFONT_DEF which |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
464 has this form: |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
465 [FACE-ID FONT-INDEX [ FONT-SPEC ENCODING REPERTORY ]] |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
466 In addtion, if RFONT_DEF is preferred by family or charset, store |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
467 it from the start of new_vec. */ |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
468 for (i = 0, idx = 0; i < size; i++) |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
469 { |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
470 Lisp_Object rfont_def = AREF (font_group, i + 3); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
471 Lisp_Object font_spec = AREF (AREF (rfont_def, 2), 0); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
472 Lisp_Object this_family = AREF (font_spec, FONT_FAMILY_INDEX); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
473 int id = XINT (AREF (AREF (rfont_def, 2), 1)); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
474 struct charset *charset = CHARSET_FROM_ID (id); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
475 |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
476 charset_id_table[i] = -1; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
477 if (! NILP (this_family) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
478 && (fast_string_match_ignore_case (family, SYMBOL_NAME (this_family)) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
479 >= 0)) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
480 { |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
481 if (idx > 0) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
482 memmove (new_vec + 1, new_vec, sizeof (Lisp_Object) * idx); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
483 new_vec[0] = rfont_def; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
484 idx++; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
485 ASET (font_group, i + 3, Qnil); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
486 } |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
487 else if (id == charset_id) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
488 { |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
489 new_vec[idx++] = rfont_def; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
490 ASET (font_group, i + 3, Qnil); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
491 } |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
492 else if (! charset->supplementary_p) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
493 charset_id_table[i] = id; |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
494 } |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
495 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
496 /* Then, store the remaining RFONT-DEFs in NEW_VEC in the correct |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
497 order. */ |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
498 for (list = Vcharset_ordered_list; idx < size; list = XCDR (list)) |
88405 | 499 { |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
500 int id = XINT (XCAR (list)); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
501 struct charset *charset = CHARSET_FROM_ID (id); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
502 |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
503 if (charset->supplementary_p) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
504 break; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
505 for (i = 0; i < size; i++) |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
506 if (charset_id_table[i] == XINT (XCAR (list)) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
507 && ! NILP (AREF (font_group, i + 2))) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
508 { |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
509 new_vec[idx++] = AREF (font_group, i + 3); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
510 ASET (font_group, i + 3, Qnil); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
511 } |
88405 | 512 } |
90440
33277d7748f3
(reorder_font_vector): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents:
90410
diff
changeset
|
513 for (i = 0; i < size; i++) |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
514 if (! NILP (AREF (font_group, i + 3))) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
515 new_vec[idx++] = AREF (font_group, i + 3); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
516 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
517 /* At last, update elements of FONT-GROUP. */ |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
518 for (i = 0; i < size; i++) |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
519 ASET (font_group, i + 3, new_vec[i]); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
520 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
521 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
522 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
523 /* Load a font matching the font related attributes in FACE->lface and |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
524 font pattern in FONT_DEF of FONTSET, and return an index of the |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
525 font. FONT_DEF has this form: |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
526 [ FONT-SPEC ENCODING REPERTORY ] |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
527 If REPERTORY is nil, generate a char-table representing the font |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
528 repertory by looking into the font itself. */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
529 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
530 extern Lisp_Object QCname; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
531 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
532 static int |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
533 load_font_get_repertory (f, face, font_def, fontset) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
534 FRAME_PTR f; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
535 struct face *face; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
536 Lisp_Object font_def; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
537 Lisp_Object fontset; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
538 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
539 char *font_name; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
540 struct font_info *font_info; |
89572
971778c2578c
(load_font_get_repertory): Pay attention to the case
Kenichi Handa <handa@m17n.org>
parents:
89483
diff
changeset
|
541 int charset; |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
542 Lisp_Object font_spec, name; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
543 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
544 font_spec = AREF (font_def, 0); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
545 name = Ffont_get (font_spec, QCname); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
546 if (! NILP (name)) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
547 font_name = choose_face_font (f, face->lface, name, NULL); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
548 else |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
549 font_name = choose_face_font (f, face->lface, font_spec, NULL); |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
550 charset = XINT (AREF (font_def, 1)); |
89572
971778c2578c
(load_font_get_repertory): Pay attention to the case
Kenichi Handa <handa@m17n.org>
parents:
89483
diff
changeset
|
551 if (! (font_info = fs_load_font (f, font_name, charset))) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
552 return -1; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
553 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
554 if (NILP (AREF (font_def, 2)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
555 && NILP (Fassq (make_number (font_info->font_idx), |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
556 FONTSET_REPERTORY (fontset)))) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
557 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
558 /* We must look into the font to get the correct repertory as a |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
559 char-table. */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
560 Lisp_Object repertory; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
561 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
562 repertory = (*get_font_repertory_func) (f, font_info); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
563 FONTSET_REPERTORY (fontset) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
564 = Fcons (Fcons (make_number (font_info->font_idx), repertory), |
89483 | 565 FONTSET_REPERTORY (fontset)); |
88405 | 566 } |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
567 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
568 return font_info->font_idx; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
569 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
570 |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
571 static Lisp_Object fontset_find_font P_ ((Lisp_Object, int, struct face *, |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
572 int, int)); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
573 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
574 /* Return RFONT-DEF (vector) in the realized fontset FONTSET for the |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
575 character C. If the corresponding font is not yet opened, open it |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
576 (if FACE is not NULL) or return Qnil (if FACE is NULL). |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
577 If no proper font is found for C, return Qnil. |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
578 ID is a charset-id that must be preferred, or -1 meaning no |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
579 preference. |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
580 If FALLBACK is nonzero, search only fallback fonts. */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
581 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
582 static Lisp_Object |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
583 fontset_find_font (fontset, c, face, id, fallback) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
584 Lisp_Object fontset; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
585 int c; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
586 struct face *face; |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
587 int id, fallback; |
17052 | 588 { |
90821
5346cefbb15b
(reorder_font_vector): Check contents of font_def.
Kenichi Handa <handa@m17n.org>
parents:
90818
diff
changeset
|
589 Lisp_Object base_fontset, elt, vec, font_def; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
590 int i, from, to; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
591 int font_idx; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
592 FRAME_PTR f = XFRAME (FONTSET_FRAME (fontset)); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
593 |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
594 base_fontset = FONTSET_BASE (fontset); |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
595 if (! fallback) |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
596 vec = CHAR_TABLE_REF (fontset, c); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
597 else |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
598 vec = FONTSET_FALLBACK (fontset); |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
599 if (NILP (vec)) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
600 { |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
601 Lisp_Object range; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
602 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
603 /* We have not yet decided a font for C. */ |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
604 if (! face) |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
605 return Qnil; |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
606 if (! fallback) |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
607 { |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
608 elt = FONTSET_REF_AND_RANGE (base_fontset, c, from, to); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
609 range = Fcons (make_number (from), make_number (to)); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
610 if (EQ (base_fontset, Vdefault_fontset)) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
611 { |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
612 Lisp_Object script = CHAR_TABLE_REF (Vchar_script_table, c); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
613 |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
614 if (! NILP (script)) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
615 { |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
616 Lisp_Object font_spec = Ffont_spec (0, NULL); |
91241
6133244f82b7
(fontset_find_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
91231
diff
changeset
|
617 Lisp_Object args[2], tmp; |
6133244f82b7
(fontset_find_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
91231
diff
changeset
|
618 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
619 ASET (font_spec, FONT_REGISTRY_INDEX, Qiso10646_1); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
620 ASET (font_spec, FONT_EXTRA_INDEX, |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
621 Fcons (Fcons (QCscript, script), Qnil)); |
91241
6133244f82b7
(fontset_find_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
91231
diff
changeset
|
622 args[0] = elt; |
6133244f82b7
(fontset_find_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
91231
diff
changeset
|
623 tmp = Fmake_vector (make_number (3), Qnil); |
6133244f82b7
(fontset_find_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
91231
diff
changeset
|
624 ASET (tmp, 0, font_spec); |
6133244f82b7
(fontset_find_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
91231
diff
changeset
|
625 ASET (tmp, 1, CHARSET_SYMBOL_ID (Qunicode_bmp)); |
6133244f82b7
(fontset_find_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
91231
diff
changeset
|
626 args[1] = Fvector (1, &tmp); |
6133244f82b7
(fontset_find_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
91231
diff
changeset
|
627 elt = Fvconcat (2, args); |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
628 } |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
629 } |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
630 } |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
631 else |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
632 { |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
633 elt = FONTSET_FALLBACK (base_fontset); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
634 } |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
635 if (NILP (elt)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
636 { |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
637 /* Qt means we have no font for characters of this range. */ |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
638 vec = Qt; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
639 } |
90440
33277d7748f3
(reorder_font_vector): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents:
90410
diff
changeset
|
640 else |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
641 { |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
642 /* Build a vector [ -1 -1 nil NEW-ELT0 NEW-ELT1 NEW-ELT2 ... ], |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
643 where the first -1 is to force reordering of NEW-ELTn, |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
644 NEW-ELTn is [nil nil AREF (elt, n) nil]. */ |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
645 vec = Fmake_vector (make_number (ASIZE (elt) + 3), Qnil); |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
646 ASET (vec, 0, make_number (-1)); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
647 ASET (vec, 1, make_number (-1)); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
648 for (i = 0; i < ASIZE (elt); i++) |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
649 { |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
650 Lisp_Object tmp; |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
651 tmp = Fmake_vector (make_number (5), Qnil); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
652 ASET (tmp, 2, AREF (elt, i)); |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
653 ASET (vec, i + 3, tmp); |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
654 } |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
655 } |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
656 /* Then store it in the fontset. */ |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
657 if (! fallback) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
658 FONTSET_SET (fontset, range, vec); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
659 else |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
660 FONTSET_FALLBACK (fontset) = vec; |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
661 } |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
662 if (EQ (vec, Qt)) |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
663 return Qnil; |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
664 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
665 if (XINT (AREF (vec, 0)) != charset_ordered_list_tick |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
666 || XINT (AREF (vec, 1)) != id |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
667 || NILP (Fequal (AREF (vec, 2), face->lface[LFACE_FAMILY_INDEX]))) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
668 /* We have just created VEC, |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
669 or the charset priorities were changed, |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
670 or the preferred charset was changed, |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
671 or the preferred family was changed. */ |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
672 reorder_font_vector (vec, id, face->lface[LFACE_FAMILY_INDEX]); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
673 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
674 /* Find the first available font in the vector of RFONT-DEF. */ |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
675 for (i = 3; i < ASIZE (vec); i++) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
676 { |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
677 elt = AREF (vec, i); |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
678 if (NILP (elt)) |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
679 continue; |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
680 /* ELT == [ FACE-ID FONT-INDEX FONT-DEF ... ] */ |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
681 if (INTEGERP (AREF (elt, 1)) && XINT (AREF (elt, 1)) < 0) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
682 /* We couldn't open this font last time. */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
683 continue; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
684 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
685 if (!face && NILP (AREF (elt, 1))) |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
686 /* We have not yet opened the font. */ |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
687 return Qnil; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
688 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
689 font_def = AREF (elt, 2); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
690 /* FONT_DEF == [ FONT-SPEC ENCODING REPERTORY ] */ |
90410 | 691 |
692 #ifdef USE_FONT_BACKEND | |
693 if (enable_font_backend) | |
61736 | 694 { |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
695 /* ELT == [ FACE-ID FONT-INDEX FONT-DEF FONT-LIST ] |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
696 where FONT-LIST is a list of font-entity or font-object. */ |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
697 Lisp_Object font_list = AREF (elt, 3), prev = Qnil; |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
698 Lisp_Object font_object; |
90410 | 699 int has_char; |
700 | |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
701 for (; CONSP (font_list); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
702 prev = font_list, font_list = XCDR (font_list)) |
90410 | 703 { |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
704 font_object = XCAR (font_list); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
705 if (! (FONT_ENTITY_P (font_object) |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
706 && FONT_ENTITY_NOT_LOADABLE (font_object)) |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
707 && (has_char = font_has_char (f, font_object, c)) != 0) |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
708 { |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
709 if (has_char < 0) |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
710 { |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
711 Lisp_Object obj = font_open_for_lface (f, font_object, |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
712 face->lface, Qnil); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
713 if (NILP (obj)) |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
714 { |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
715 FONT_ENTITY_SET_NOT_LOADABLE (font_object); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
716 continue; |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
717 } |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
718 font_object = obj; |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
719 XSETCAR (font_list, font_object); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
720 if (! font_has_char (f, font_object, c)) |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
721 continue; |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
722 } |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
723 if (! NILP (prev)) |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
724 { |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
725 /* Move this element to the head. */ |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
726 XSETCDR (prev, XCDR (font_list)); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
727 ASET (elt, 3, Fcons (XCAR (font_list), AREF (elt, 3))); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
728 } |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
729 break; |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
730 } |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
731 } |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
732 if (NILP (font_list)) |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
733 { |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
734 Lisp_Object font_spec = AREF (font_def, 0); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
735 Lisp_Object font_entity; |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
736 |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
737 font_entity = font_find_for_lface (f, face->lface, font_spec, c); |
90818
c307aa794b2d
(fontset_find_font): Pay attention to font size
Kenichi Handa <handa@m17n.org>
parents:
90806
diff
changeset
|
738 if (NILP (font_entity)) |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
739 continue; |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
740 font_list = Fcons (font_entity, AREF (elt, 3)); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
741 ASET (elt, 3, font_list); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
742 } |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
743 font_object = XCAR (font_list); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
744 if (FONT_ENTITY_P (font_object)) |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
745 { |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
746 font_object = font_open_for_lface (f, font_object, |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
747 face->lface, Qnil); |
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
748 if (NILP (font_object)) |
90818
c307aa794b2d
(fontset_find_font): Pay attention to font size
Kenichi Handa <handa@m17n.org>
parents:
90806
diff
changeset
|
749 { |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
750 FONT_ENTITY_SET_NOT_LOADABLE (XCAR (font_list)); |
90818
c307aa794b2d
(fontset_find_font): Pay attention to font size
Kenichi Handa <handa@m17n.org>
parents:
90806
diff
changeset
|
751 continue; |
c307aa794b2d
(fontset_find_font): Pay attention to font size
Kenichi Handa <handa@m17n.org>
parents:
90806
diff
changeset
|
752 } |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
753 XSETCAR (font_list, font_object); |
90410 | 754 } |
755 ASET (elt, 1, make_number (0)); | |
61736 | 756 } |
90410 | 757 else |
758 #endif /* USE_FONT_BACKEND */ | |
759 | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
760 if (INTEGERP (AREF (font_def, 2))) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
761 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
762 /* The repertory is specified by charset ID. */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
763 struct charset *charset |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
764 = CHARSET_FROM_ID (XINT (AREF (font_def, 2))); |
88405 | 765 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
766 if (! CHAR_CHARSET_P (c, charset)) |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
767 /* This font can't display C. */ |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
768 continue; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
769 } |
89826
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
770 else if (CHAR_TABLE_P (AREF (font_def, 2))) |
61736 | 771 { |
89826
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
772 /* The repertory is specified by a char table. */ |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
773 if (NILP (CHAR_TABLE_REF (AREF (font_def, 2), c))) |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
774 /* This font can't display C. */ |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
775 continue; |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
776 } |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
777 else |
61736 | 778 { |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
779 Lisp_Object slot; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
780 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
781 if (! INTEGERP (AREF (elt, 1))) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
782 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
783 /* We have not yet opened a font matching this spec. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
784 Open the best matching font now and register the |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
785 repertory. */ |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
786 struct font_info *font_info; |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
787 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
788 font_idx = load_font_get_repertory (f, face, font_def, fontset); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
789 ASET (elt, 1, make_number (font_idx)); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
790 if (font_idx < 0) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
791 /* This means that we couldn't find a font matching |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
792 FONT_DEF. */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
793 continue; |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
794 font_info = (*get_font_info_func) (f, font_idx); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
795 ASET (elt, 3, build_string (font_info->full_name)); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
796 } |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
797 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
798 slot = Fassq (AREF (elt, 1), FONTSET_REPERTORY (fontset)); |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
799 xassert (CONSP (slot)); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
800 if (NILP (CHAR_TABLE_REF (XCDR (slot), c))) |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
801 /* This font can't display C. */ |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
802 continue; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
803 } |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
804 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
805 /* Now we have decided to use this font spec to display C. */ |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
806 if (! INTEGERP (AREF (elt, 1))) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
807 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
808 /* But not yet opened the best matching font. */ |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
809 struct font_info *font_info; |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
810 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
811 font_idx = load_font_get_repertory (f, face, font_def, fontset); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
812 ASET (elt, 1, make_number (font_idx)); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
813 if (font_idx < 0) |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
814 /* Can't open it. Try the other one. */ |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
815 continue; |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
816 font_info = (*get_font_info_func) (f, font_idx); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
817 ASET (elt, 3, build_string (font_info->full_name)); |
61736 | 818 } |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
819 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
820 /* Now we have the opened font. */ |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
821 return elt; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
822 } |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
823 return Qnil; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
824 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
825 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
826 |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
827 static Lisp_Object |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
828 fontset_font (fontset, c, face, id) |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
829 Lisp_Object fontset; |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
830 int c; |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
831 struct face *face; |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
832 int id; |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
833 { |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
834 Lisp_Object rfont_def; |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
835 Lisp_Object base_fontset; |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
836 |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
837 /* Try a font-group for C. */ |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
838 rfont_def = fontset_find_font (fontset, c, face, id, 0); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
839 if (! NILP (rfont_def)) |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
840 return rfont_def; |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
841 base_fontset = FONTSET_BASE (fontset); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
842 /* Try a font-group for C of the default fontset. */ |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
843 if (! EQ (base_fontset, Vdefault_fontset)) |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
844 { |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
845 if (NILP (FONTSET_DEFAULT (fontset))) |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
846 FONTSET_DEFAULT (fontset) |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
847 = make_fontset (FONTSET_FRAME (fontset), Qnil, Vdefault_fontset); |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
848 rfont_def = fontset_find_font (FONTSET_DEFAULT (fontset), c, face, id, 0); |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
849 } |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
850 if (! NILP (rfont_def)) |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
851 return rfont_def; |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
852 /* Try a fallback font-group. */ |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
853 rfont_def = fontset_find_font (fontset, c, face, id, 1); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
854 if (! NILP (rfont_def)) |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
855 return rfont_def; |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
856 /* Try a fallback font-group of the default fontset . */ |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
857 if (! EQ (base_fontset, Vdefault_fontset)) |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
858 rfont_def = fontset_find_font (FONTSET_DEFAULT (fontset), c, face, id, 1); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
859 return rfont_def; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
860 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
861 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
862 /* Return a newly created fontset with NAME. If BASE is nil, make a |
88405 | 863 base fontset. Otherwise make a realized fontset whose base is |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
864 BASE. */ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
865 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
866 static Lisp_Object |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
867 make_fontset (frame, name, base) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
868 Lisp_Object frame, name, base; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
869 { |
34975
0d69e2d2724e
(fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents:
32978
diff
changeset
|
870 Lisp_Object fontset; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
871 int size = ASIZE (Vfontset_table); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
872 int id = next_fontset_id; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
873 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
874 /* Find a free slot in Vfontset_table. Usually, next_fontset_id is |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
875 the next available fontset ID. So it is expected that this loop |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
876 terminates quickly. In addition, as the last element of |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
877 Vfontset_table is always nil, we don't have to check the range of |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
878 id. */ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
879 while (!NILP (AREF (Vfontset_table, id))) id++; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
880 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
881 if (id + 1 == size) |
91053 | 882 Vfontset_table = larger_vector (Vfontset_table, size + 32, Qnil); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
883 |
29767
c8e5453dc85d
(FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents:
29501
diff
changeset
|
884 fontset = Fmake_char_table (Qfontset, Qnil); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
885 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
886 FONTSET_ID (fontset) = make_number (id); |
88405 | 887 if (NILP (base)) |
888 { | |
889 FONTSET_NAME (fontset) = name; | |
890 } | |
891 else | |
892 { | |
893 FONTSET_NAME (fontset) = Qnil; | |
894 FONTSET_FRAME (fontset) = frame; | |
895 FONTSET_BASE (fontset) = base; | |
896 } | |
17052 | 897 |
88405 | 898 ASET (Vfontset_table, id, fontset); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
899 next_fontset_id = id + 1; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
900 return fontset; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
901 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
902 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
903 |
60511
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
904 /* Set the ASCII font of the default fontset to FONTNAME if that is |
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
905 not yet set. */ |
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
906 void |
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
907 set_default_ascii_font (fontname) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
908 Lisp_Object fontname; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
909 { |
90121
4465a2011c2d
(set_default_ascii_font): Fix the change for syncing with CVS head.
Kenichi Handa <handa@m17n.org>
parents:
90116
diff
changeset
|
910 if (! STRINGP (FONTSET_ASCII (Vdefault_fontset))) |
60511
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
911 { |
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
912 int id = fs_query_fontset (fontname, 2); |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
913 |
60511
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
914 if (id >= 0) |
90121
4465a2011c2d
(set_default_ascii_font): Fix the change for syncing with CVS head.
Kenichi Handa <handa@m17n.org>
parents:
90116
diff
changeset
|
915 fontname = FONTSET_ASCII (FONTSET_FROM_ID (id)); |
4465a2011c2d
(set_default_ascii_font): Fix the change for syncing with CVS head.
Kenichi Handa <handa@m17n.org>
parents:
90116
diff
changeset
|
916 FONTSET_ASCII (Vdefault_fontset)= fontname; |
60511
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
917 } |
17052 | 918 } |
919 | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
920 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
921 /********** INTERFACES TO xfaces.c, xfns.c, and dispextern.h **********/ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
922 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
923 /* Return the name of the fontset who has ID. */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
924 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
925 Lisp_Object |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
926 fontset_name (id) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
927 int id; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
928 { |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
929 Lisp_Object fontset; |
88405 | 930 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
931 fontset = FONTSET_FROM_ID (id); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
932 return FONTSET_NAME (fontset); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
933 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
934 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
935 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
936 /* Return the ASCII font name of the fontset who has ID. */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
937 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
938 Lisp_Object |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
939 fontset_ascii (id) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
940 int id; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
941 { |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
942 Lisp_Object fontset, elt; |
88405 | 943 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
944 fontset= FONTSET_FROM_ID (id); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
945 elt = FONTSET_ASCII (fontset); |
90410 | 946 #ifdef USE_FONT_BACKEND |
947 if (CONSP (elt)) | |
948 elt = XCAR (elt); | |
949 #endif /* USE_FONT_BACKEND */ | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
950 /* It is assured that ELT is always a string (i.e. fontname |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
951 pattern). */ |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
952 return elt; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
953 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
954 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
955 |
88405 | 956 /* Free fontset of FACE defined on frame F. Called from |
957 free_realized_face. */ | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
958 |
17052 | 959 void |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
960 free_face_fontset (f, face) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
961 FRAME_PTR f; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
962 struct face *face; |
17052 | 963 { |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
964 Lisp_Object fontset; |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
965 |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
966 fontset = AREF (Vfontset_table, face->fontset); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
967 xassert (!NILP (fontset) && ! BASE_FONTSET_P (fontset)); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
968 xassert (f == XFRAME (FONTSET_FRAME (fontset))); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
969 ASET (Vfontset_table, face->fontset, Qnil); |
88405 | 970 if (face->fontset < next_fontset_id) |
971 next_fontset_id = face->fontset; | |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
972 if (! NILP (FONTSET_DEFAULT (fontset))) |
17052 | 973 { |
89865 | 974 int id = XINT (FONTSET_ID (FONTSET_DEFAULT (fontset))); |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
975 |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
976 fontset = AREF (Vfontset_table, id); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
977 xassert (!NILP (fontset) && ! BASE_FONTSET_P (fontset)); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
978 xassert (f == XFRAME (FONTSET_FRAME (fontset))); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
979 ASET (Vfontset_table, id, Qnil); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
980 if (id < next_fontset_id) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
981 next_fontset_id = face->fontset; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
982 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
983 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
984 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
985 |
78501 | 986 /* Return 1 if FACE is suitable for displaying character C. |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
987 Otherwise return 0. Called from the macro FACE_SUITABLE_FOR_CHAR_P |
88405 | 988 when C is not an ASCII character. */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
989 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
990 int |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
991 face_suitable_for_char_p (face, c) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
992 struct face *face; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
993 int c; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
994 { |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
995 Lisp_Object fontset, rfont_def; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
996 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
997 fontset = FONTSET_FROM_ID (face->fontset); |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
998 rfont_def = fontset_font (fontset, c, NULL, -1); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
999 return (VECTORP (rfont_def) |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1000 && INTEGERP (AREF (rfont_def, 0)) |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1001 && face->id == XINT (AREF (rfont_def, 0))); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1002 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1003 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1004 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1005 /* Return ID of face suitable for displaying character C on frame F. |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1006 FACE must be reazlied for ASCII characters in advance. Called from |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1007 the macro FACE_FOR_CHAR. */ |
17052 | 1008 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1009 int |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1010 face_for_char (f, face, c, pos, object) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1011 FRAME_PTR f; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1012 struct face *face; |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1013 int c, pos; |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1014 Lisp_Object object; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1015 { |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1016 Lisp_Object fontset, charset, rfont_def; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1017 int face_id; |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1018 int id; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1019 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1020 if (ASCII_CHAR_P (c)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1021 return face->ascii_face->id; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1022 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1023 xassert (fontset_id_valid_p (face->fontset)); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1024 fontset = FONTSET_FROM_ID (face->fontset); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1025 xassert (!BASE_FONTSET_P (fontset)); |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1026 if (pos < 0) |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1027 id = -1; |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1028 else |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1029 { |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1030 charset = Fget_char_property (make_number (pos), Qcharset, object); |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1031 if (NILP (charset)) |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1032 id = -1; |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1033 else if (CHARSETP (charset)) |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1034 id = XINT (CHARSET_SYMBOL_ID (charset)); |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1035 } |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1036 rfont_def = fontset_font (fontset, c, face, id); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1037 if (VECTORP (rfont_def)) |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1038 { |
90410 | 1039 #ifdef USE_FONT_BACKEND |
1040 if (enable_font_backend | |
1041 && NILP (AREF (rfont_def, 0))) | |
1042 { | |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
1043 struct font *font = XSAVE_VALUE (XCAR (AREF (rfont_def, 3)))->pointer; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1044 |
90410 | 1045 face_id = face_for_font (f, font, face); |
1046 ASET (rfont_def, 0, make_number (face_id)); | |
1047 } | |
1048 else | |
1049 #endif /* USE_FONT_BACKEND */ | |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1050 if (NILP (AREF (rfont_def, 0))) |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1051 { |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1052 /* We have not yet made a realized face that uses this font. */ |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1053 int font_idx = XINT (AREF (rfont_def, 1)); |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
1054 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1055 face_id = lookup_non_ascii_face (f, font_idx, face); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1056 ASET (rfont_def, 0, make_number (face_id)); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1057 } |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1058 return XINT (AREF (rfont_def, 0)); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1059 } |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
1060 |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1061 if (NILP (FONTSET_NOFONT_FACE (fontset))) |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1062 { |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1063 face_id = lookup_non_ascii_face (f, -1, face); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1064 FONTSET_NOFONT_FACE (fontset) = make_number (face_id); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1065 } |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1066 return XINT (FONTSET_NOFONT_FACE (fontset)); |
17052 | 1067 } |
1068 | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1069 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1070 /* Make a realized fontset for ASCII face FACE on frame F from the |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1071 base fontset BASE_FONTSET_ID. If BASE_FONTSET_ID is -1, use the |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1072 default fontset as the base. Value is the id of the new fontset. |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1073 Called from realize_x_face. */ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1074 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1075 int |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1076 make_fontset_for_ascii_face (f, base_fontset_id, face) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1077 FRAME_PTR f; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1078 int base_fontset_id; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1079 struct face *face; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1080 { |
34975
0d69e2d2724e
(fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents:
32978
diff
changeset
|
1081 Lisp_Object base_fontset, fontset, frame; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1082 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1083 XSETFRAME (frame, f); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1084 if (base_fontset_id >= 0) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1085 { |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1086 base_fontset = FONTSET_FROM_ID (base_fontset_id); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1087 if (!BASE_FONTSET_P (base_fontset)) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1088 base_fontset = FONTSET_BASE (base_fontset); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1089 xassert (BASE_FONTSET_P (base_fontset)); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1090 if (! BASE_FONTSET_P (base_fontset)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1091 abort (); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1092 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1093 else |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1094 base_fontset = Vdefault_fontset; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1095 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1096 fontset = make_fontset (frame, Qnil, base_fontset); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1097 { |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1098 Lisp_Object elt, rfont_def, val; |
18346
c46e9f750033
(font_idx_temp): New temprary variable used in FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18341
diff
changeset
|
1099 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1100 elt = FONTSET_REF (base_fontset, 0); |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1101 xassert (VECTORP (elt) && ASIZE (elt) > 0); |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
1102 rfont_def = Fmake_vector (make_number (4), Qnil); |
90410 | 1103 #ifdef USE_FONT_BACKEND |
1104 if (enable_font_backend && face->font_info) | |
1105 { | |
1106 struct font *font = (struct font *) face->font_info; | |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
1107 |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
1108 ASET (rfont_def, 3, Fcons (font->entity, Qnil)); |
90410 | 1109 } |
90449
5956a1352bc4
(make_fontset_for_ascii_face): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
90440
diff
changeset
|
1110 else |
5956a1352bc4
(make_fontset_for_ascii_face): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
90440
diff
changeset
|
1111 #endif /* USE_FONT_BACKEND */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1112 { |
90410 | 1113 ASET (rfont_def, 3, build_string (face->font_name)); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1114 } |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1115 ASET (rfont_def, 1, make_number (face->font_info_id)); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1116 ASET (rfont_def, 2, AREF (elt, 0)); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1117 elt = Fmake_vector (make_number (4), Qnil); |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1118 ASET (elt, 0, make_number (charset_ordered_list_tick)); |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1119 ASET (elt, 1, make_number (charset_ascii)); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1120 ASET (elt, 2, rfont_def); |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
1121 ASET (elt, 3, rfont_def); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1122 |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1123 val = Fcons (Qlatin, Qnil); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1124 map_char_table (accumulate_script_ranges, Qnil, Vchar_script_table, val); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1125 for (val = XCDR (val); CONSP (val); val = XCDR (val)) |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1126 char_table_set_range (fontset, XINT (XCAR (XCAR (val))), |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1127 XINT (XCDR (XCAR (val))), elt); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1128 FONTSET_FALLBACK (fontset) = elt; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1129 } |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1130 return XINT (FONTSET_ID (fontset)); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1131 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1132 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1133 |
40028
392c2fe9edd7
(fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
1134 #if defined(WINDOWSNT) && defined (_MSC_VER) |
392c2fe9edd7
(fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
1135 #pragma optimize("", off) |
392c2fe9edd7
(fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
1136 #endif |
392c2fe9edd7
(fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
1137 |
88405 | 1138 /* Load a font named FONTNAME on frame F. Return a pointer to the |
1139 struct font_info of the loaded font. If loading fails, return | |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1140 NULL. CHARSET is an ID of charset to encode characters for this |
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1141 font. If it is -1, find one from Vfont_encoding_alist. */ |
17052 | 1142 |
1143 struct font_info * | |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1144 fs_load_font (f, fontname, charset) |
17052 | 1145 FRAME_PTR f; |
1146 char *fontname; | |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1147 int charset; |
17052 | 1148 { |
1149 struct font_info *fontp; | |
90034
dbbe513cabef
(fs_load_font): Use fast_string_match_ignore_case
Kenichi Handa <handa@m17n.org>
parents:
90033
diff
changeset
|
1150 Lisp_Object fullname; |
17052 | 1151 |
1152 if (!fontname) | |
1153 /* No way to get fontname. */ | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1154 return NULL; |
17052 | 1155 |
88405 | 1156 fontp = (*load_font_func) (f, fontname, 0); |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1157 if (! fontp || fontp->charset >= 0) |
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1158 return fontp; |
17052 | 1159 |
88500
3d67875ee2b1
(fs_load_font): Check fontp->full_name (not fontname)
Kenichi Handa <handa@m17n.org>
parents:
88482
diff
changeset
|
1160 fontname = fontp->full_name; |
57573
43067aee2f3e
(fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents:
56293
diff
changeset
|
1161 fullname = build_string (fontp->full_name); |
26858
7cc081b4e084
(Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents:
26164
diff
changeset
|
1162 |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1163 if (charset < 0) |
17052 | 1164 { |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1165 Lisp_Object charset_symbol; |
17052 | 1166 |
90034
dbbe513cabef
(fs_load_font): Use fast_string_match_ignore_case
Kenichi Handa <handa@m17n.org>
parents:
90033
diff
changeset
|
1167 charset_symbol = find_font_encoding (fullname); |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1168 if (CONSP (charset_symbol)) |
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1169 charset_symbol = XCAR (charset_symbol); |
90410 | 1170 if (NILP (charset_symbol)) |
1171 charset_symbol = Qascii; | |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1172 charset = XINT (CHARSET_SYMBOL_ID (charset_symbol)); |
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1173 } |
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1174 fontp->charset = charset; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1175 fontp->vertical_centering = 0; |
88405 | 1176 fontp->font_encoder = NULL; |
17052 | 1177 |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1178 if (charset != charset_ascii) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1179 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1180 fontp->vertical_centering |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1181 = (STRINGP (Vvertical_centering_font_regexp) |
90034
dbbe513cabef
(fs_load_font): Use fast_string_match_ignore_case
Kenichi Handa <handa@m17n.org>
parents:
90033
diff
changeset
|
1182 && (fast_string_match_ignore_case |
dbbe513cabef
(fs_load_font): Use fast_string_match_ignore_case
Kenichi Handa <handa@m17n.org>
parents:
90033
diff
changeset
|
1183 (Vvertical_centering_font_regexp, fullname) >= 0)); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1184 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1185 if (find_ccl_program_func) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1186 (*find_ccl_program_func) (fontp); |
17052 | 1187 } |
1188 | |
1189 return fontp; | |
1190 } | |
1191 | |
40028
392c2fe9edd7
(fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
1192 #if defined(WINDOWSNT) && defined (_MSC_VER) |
392c2fe9edd7
(fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
1193 #pragma optimize("", on) |
392c2fe9edd7
(fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
1194 #endif |
392c2fe9edd7
(fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
1195 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1196 |
88968
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1197 /* Return ENCODING or a cons of ENCODING and REPERTORY of the font |
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1198 FONTNAME. ENCODING is a charset symbol that specifies the encoding |
a35b7b45baa3
(fs_load_font): If fontp->charset is not negative,
Kenichi Handa <handa@m17n.org>
parents:
88931
diff
changeset
|
1199 of the font. REPERTORY is a charset symbol or nil. */ |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1200 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1201 |
90410 | 1202 Lisp_Object |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1203 find_font_encoding (fontname) |
60511
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
1204 Lisp_Object fontname; |
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
1205 { |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1206 Lisp_Object tail, elt; |
60511
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
1207 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1208 for (tail = Vfont_encoding_alist; CONSP (tail); tail = XCDR (tail)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1209 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1210 elt = XCAR (tail); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1211 if (CONSP (elt) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1212 && STRINGP (XCAR (elt)) |
90034
dbbe513cabef
(fs_load_font): Use fast_string_match_ignore_case
Kenichi Handa <handa@m17n.org>
parents:
90033
diff
changeset
|
1213 && fast_string_match_ignore_case (XCAR (elt), fontname) >= 0 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1214 && (SYMBOLP (XCDR (elt)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1215 ? CHARSETP (XCDR (elt)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1216 : CONSP (XCDR (elt)) && CHARSETP (XCAR (XCDR (elt))))) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1217 return (XCDR (elt)); |
60511
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
1218 } |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1219 /* We don't know the encoding of this font. Let's assume `ascii'. */ |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1220 return Qascii; |
60511
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
1221 } |
7ee9d8cb89cb
(set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
58025
diff
changeset
|
1222 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1223 |
17052 | 1224 /* Cache data used by fontset_pattern_regexp. The car part is a |
1225 pattern string containing at least one wild card, the cdr part is | |
1226 the corresponding regular expression. */ | |
1227 static Lisp_Object Vcached_fontset_data; | |
1228 | |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45848
diff
changeset
|
1229 #define CACHED_FONTSET_NAME (SDATA (XCAR (Vcached_fontset_data))) |
26164
d39ec0a27081
more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents:
25668
diff
changeset
|
1230 #define CACHED_FONTSET_REGEX (XCDR (Vcached_fontset_data)) |
17052 | 1231 |
1232 /* If fontset name PATTERN contains any wild card, return regular | |
1233 expression corresponding to PATTERN. */ | |
1234 | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1235 static Lisp_Object |
17052 | 1236 fontset_pattern_regexp (pattern) |
1237 Lisp_Object pattern; | |
1238 { | |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45848
diff
changeset
|
1239 if (!index (SDATA (pattern), '*') |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45848
diff
changeset
|
1240 && !index (SDATA (pattern), '?')) |
17052 | 1241 /* PATTERN does not contain any wild cards. */ |
17730
4bbcc6804b5d
(Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17331
diff
changeset
|
1242 return Qnil; |
17052 | 1243 |
1244 if (!CONSP (Vcached_fontset_data) | |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45848
diff
changeset
|
1245 || strcmp (SDATA (pattern), CACHED_FONTSET_NAME)) |
17052 | 1246 { |
1247 /* We must at first update the cached data. */ | |
57947
678d2c0d522e
(fontset_pattern_regexp): Use unsigned char.
Kim F. Storm <storm@cua.dk>
parents:
57921
diff
changeset
|
1248 unsigned char *regex, *p0, *p1; |
57685
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1249 int ndashes = 0, nstars = 0; |
57947
678d2c0d522e
(fontset_pattern_regexp): Use unsigned char.
Kim F. Storm <storm@cua.dk>
parents:
57921
diff
changeset
|
1250 |
57685
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1251 for (p0 = SDATA (pattern); *p0; p0++) |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1252 { |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1253 if (*p0 == '-') |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1254 ndashes++; |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1255 else if (*p0 == '*') |
57685
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1256 nstars++; |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1257 } |
17052 | 1258 |
57685
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1259 /* If PATTERN is not full XLFD we conert "*" to ".*". Otherwise |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1260 we convert "*" to "[^-]*" which is much faster in regular |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1261 expression matching. */ |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1262 if (ndashes < 14) |
57947
678d2c0d522e
(fontset_pattern_regexp): Use unsigned char.
Kim F. Storm <storm@cua.dk>
parents:
57921
diff
changeset
|
1263 p1 = regex = (unsigned char *) alloca (SBYTES (pattern) + 2 * nstars + 1); |
57685
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1264 else |
57947
678d2c0d522e
(fontset_pattern_regexp): Use unsigned char.
Kim F. Storm <storm@cua.dk>
parents:
57921
diff
changeset
|
1265 p1 = regex = (unsigned char *) alloca (SBYTES (pattern) + 5 * nstars + 1); |
57685
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1266 |
17730
4bbcc6804b5d
(Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17331
diff
changeset
|
1267 *p1++ = '^'; |
57947
678d2c0d522e
(fontset_pattern_regexp): Use unsigned char.
Kim F. Storm <storm@cua.dk>
parents:
57921
diff
changeset
|
1268 for (p0 = SDATA (pattern); *p0; p0++) |
17052 | 1269 { |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1270 if (*p0 == '*') |
17052 | 1271 { |
57685
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1272 if (ndashes < 14) |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1273 *p1++ = '.'; |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1274 else |
b935fc1cb542
(fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents:
57573
diff
changeset
|
1275 *p1++ = '[', *p1++ = '^', *p1++ = '-', *p1++ = ']'; |
17730
4bbcc6804b5d
(Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17331
diff
changeset
|
1276 *p1++ = '*'; |
17052 | 1277 } |
17730
4bbcc6804b5d
(Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17331
diff
changeset
|
1278 else if (*p0 == '?') |
21127
577865651099
(fontset_pattern_regexp): `==' was used instead of `='.
Richard M. Stallman <rms@gnu.org>
parents:
20346
diff
changeset
|
1279 *p1++ = '.'; |
17730
4bbcc6804b5d
(Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17331
diff
changeset
|
1280 else |
4bbcc6804b5d
(Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17331
diff
changeset
|
1281 *p1++ = *p0; |
17052 | 1282 } |
1283 *p1++ = '$'; | |
1284 *p1++ = 0; | |
1285 | |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45848
diff
changeset
|
1286 Vcached_fontset_data = Fcons (build_string (SDATA (pattern)), |
17052 | 1287 build_string (regex)); |
1288 } | |
1289 | |
1290 return CACHED_FONTSET_REGEX; | |
1291 } | |
1292 | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1293 /* Return ID of the base fontset named NAME. If there's no such |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1294 fontset, return -1. NAME_PATTERN specifies how to treat NAME as this: |
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1295 0: pattern containing '*' and '?' as wildcards |
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1296 1: regular expression |
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1297 2: literal fontset name |
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1298 */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1299 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1300 int |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1301 fs_query_fontset (name, name_pattern) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1302 Lisp_Object name; |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1303 int name_pattern; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1304 { |
34975
0d69e2d2724e
(fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents:
32978
diff
changeset
|
1305 Lisp_Object tem; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1306 int i; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1307 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1308 name = Fdowncase (name); |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1309 if (name_pattern != 1) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1310 { |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1311 tem = Frassoc (name, Vfontset_alias_alist); |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1312 if (NILP (tem)) |
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
1313 tem = Fassoc (name, Vfontset_alias_alist); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1314 if (CONSP (tem) && STRINGP (XCAR (tem))) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1315 name = XCAR (tem); |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1316 else if (name_pattern == 0) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1317 { |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1318 tem = fontset_pattern_regexp (name); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1319 if (STRINGP (tem)) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1320 { |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1321 name = tem; |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1322 name_pattern = 1; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1323 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1324 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1325 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1326 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1327 for (i = 0; i < ASIZE (Vfontset_table); i++) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1328 { |
57573
43067aee2f3e
(fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents:
56293
diff
changeset
|
1329 Lisp_Object fontset, this_name; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1330 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1331 fontset = FONTSET_FROM_ID (i); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1332 if (NILP (fontset) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1333 || !BASE_FONTSET_P (fontset)) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1334 continue; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1335 |
57573
43067aee2f3e
(fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents:
56293
diff
changeset
|
1336 this_name = FONTSET_NAME (fontset); |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1337 if (name_pattern == 1 |
57573
43067aee2f3e
(fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents:
56293
diff
changeset
|
1338 ? fast_string_match (name, this_name) >= 0 |
43067aee2f3e
(fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents:
56293
diff
changeset
|
1339 : !strcmp (SDATA (name), SDATA (this_name))) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1340 return i; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1341 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1342 return -1; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1343 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1344 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1345 |
21553
2d7afcd11b72
(find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
1346 DEFUN ("query-fontset", Fquery_fontset, Squery_fontset, 1, 2, 0, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1347 doc: /* Return the name of a fontset that matches PATTERN. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1348 The value is nil if there is no matching fontset. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1349 PATTERN can contain `*' or `?' as a wildcard |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1350 just as X font name matching algorithm allows. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1351 If REGEXPP is non-nil, PATTERN is a regular expression. */) |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1352 (pattern, regexpp) |
21553
2d7afcd11b72
(find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
1353 Lisp_Object pattern, regexpp; |
17052 | 1354 { |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1355 Lisp_Object fontset; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1356 int id; |
17052 | 1357 |
1358 (*check_window_system_func) (); | |
1359 | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40028
diff
changeset
|
1360 CHECK_STRING (pattern); |
17052 | 1361 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45848
diff
changeset
|
1362 if (SCHARS (pattern) == 0) |
17052 | 1363 return Qnil; |
1364 | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1365 id = fs_query_fontset (pattern, !NILP (regexpp)); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1366 if (id < 0) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1367 return Qnil; |
17052 | 1368 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1369 fontset = FONTSET_FROM_ID (id); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1370 return FONTSET_NAME (fontset); |
17052 | 1371 } |
1372 | |
88405 | 1373 /* Return a list of base fontset names matching PATTERN on frame F. */ |
17052 | 1374 |
1375 Lisp_Object | |
1376 list_fontsets (f, pattern, size) | |
1377 FRAME_PTR f; | |
1378 Lisp_Object pattern; | |
1379 int size; | |
1380 { | |
34975
0d69e2d2724e
(fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents:
32978
diff
changeset
|
1381 Lisp_Object frame, regexp, val; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1382 int id; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1383 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1384 XSETFRAME (frame, f); |
17052 | 1385 |
1386 regexp = fontset_pattern_regexp (pattern); | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1387 val = Qnil; |
17052 | 1388 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1389 for (id = 0; id < ASIZE (Vfontset_table); id++) |
17052 | 1390 { |
57573
43067aee2f3e
(fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents:
56293
diff
changeset
|
1391 Lisp_Object fontset, name; |
17052 | 1392 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1393 fontset = FONTSET_FROM_ID (id); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1394 if (NILP (fontset) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1395 || !BASE_FONTSET_P (fontset) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1396 || !EQ (frame, FONTSET_FRAME (fontset))) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1397 continue; |
57573
43067aee2f3e
(fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents:
56293
diff
changeset
|
1398 name = FONTSET_NAME (fontset); |
17052 | 1399 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1400 if (STRINGP (regexp) |
57573
43067aee2f3e
(fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents:
56293
diff
changeset
|
1401 ? (fast_string_match (regexp, name) < 0) |
43067aee2f3e
(fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents:
56293
diff
changeset
|
1402 : strcmp (SDATA (pattern), SDATA (name))) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1403 continue; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1404 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1405 val = Fcons (Fcopy_sequence (FONTSET_NAME (fontset)), val); |
17052 | 1406 } |
1407 | |
1408 return val; | |
1409 } | |
1410 | |
88405 | 1411 |
89483 | 1412 /* Free all realized fontsets whose base fontset is BASE. */ |
17052 | 1413 |
88405 | 1414 static void |
1415 free_realized_fontsets (base) | |
1416 Lisp_Object base; | |
17052 | 1417 { |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1418 int id; |
17052 | 1419 |
90806
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1420 #if 0 |
88482
effba1417b74
(free_realized_fontsets): Call Fclear_face_cache instead
Kenichi Handa <handa@m17n.org>
parents:
88405
diff
changeset
|
1421 /* For the moment, this doesn't work because free_realized_face |
effba1417b74
(free_realized_fontsets): Call Fclear_face_cache instead
Kenichi Handa <handa@m17n.org>
parents:
88405
diff
changeset
|
1422 doesn't remove FACE from a cache. Until we find a solution, we |
effba1417b74
(free_realized_fontsets): Call Fclear_face_cache instead
Kenichi Handa <handa@m17n.org>
parents:
88405
diff
changeset
|
1423 suppress this code, and simply use Fclear_face_cache even though |
effba1417b74
(free_realized_fontsets): Call Fclear_face_cache instead
Kenichi Handa <handa@m17n.org>
parents:
88405
diff
changeset
|
1424 that is not efficient. */ |
88405 | 1425 BLOCK_INPUT; |
1426 for (id = 0; id < ASIZE (Vfontset_table); id++) | |
17052 | 1427 { |
88405 | 1428 Lisp_Object this = AREF (Vfontset_table, id); |
17052 | 1429 |
88405 | 1430 if (EQ (FONTSET_BASE (this), base)) |
1431 { | |
1432 Lisp_Object tail; | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1433 |
88405 | 1434 for (tail = FONTSET_FACE_ALIST (this); CONSP (tail); |
1435 tail = XCDR (tail)) | |
1436 { | |
1437 FRAME_PTR f = XFRAME (FONTSET_FRAME (this)); | |
1438 int face_id = XINT (XCDR (XCAR (tail))); | |
1439 struct face *face = FACE_FROM_ID (f, face_id); | |
89483 | 1440 |
88405 | 1441 /* Face THIS itself is also freed by the following call. */ |
1442 free_realized_face (f, face); | |
1443 } | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1444 } |
17052 | 1445 } |
88405 | 1446 UNBLOCK_INPUT; |
88482
effba1417b74
(free_realized_fontsets): Call Fclear_face_cache instead
Kenichi Handa <handa@m17n.org>
parents:
88405
diff
changeset
|
1447 #else /* not 0 */ |
90806
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1448 /* But, we don't have to call Fclear_face_cache if no fontset has |
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1449 been realized from BASE. */ |
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1450 for (id = 0; id < ASIZE (Vfontset_table); id++) |
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1451 { |
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1452 Lisp_Object this = AREF (Vfontset_table, id); |
17052 | 1453 |
91046 | 1454 if (CHAR_TABLE_P (this) && EQ (FONTSET_BASE (this), base)) |
90806
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1455 { |
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1456 Fclear_face_cache (Qt); |
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1457 break; |
1ae136ad0ba0
(free_realized_fontsets): Avoid unnecessary call of
Kenichi Handa <handa@m17n.org>
parents:
90802
diff
changeset
|
1458 } |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1459 } |
88482
effba1417b74
(free_realized_fontsets): Call Fclear_face_cache instead
Kenichi Handa <handa@m17n.org>
parents:
88405
diff
changeset
|
1460 #endif /* not 0 */ |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1461 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1462 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1463 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1464 /* Check validity of NAME as a fontset name and return the |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1465 corresponding fontset. If not valid, signal an error. |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1466 If NAME is t, return Vdefault_fontset. */ |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1467 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1468 static Lisp_Object |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1469 check_fontset_name (name) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1470 Lisp_Object name; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1471 { |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1472 int id; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1473 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1474 if (EQ (name, Qt)) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1475 return Vdefault_fontset; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1476 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40028
diff
changeset
|
1477 CHECK_STRING (name); |
58025
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1478 /* First try NAME as literal. */ |
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1479 id = fs_query_fontset (name, 2); |
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1480 if (id < 0) |
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1481 /* For backward compatibility, try again NAME as pattern. */ |
bcd053632eb2
(fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents:
57947
diff
changeset
|
1482 id = fs_query_fontset (name, 0); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1483 if (id < 0) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45848
diff
changeset
|
1484 error ("Fontset `%s' does not exist", SDATA (name)); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1485 return FONTSET_FROM_ID (id); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1486 } |
17052 | 1487 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1488 static void |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1489 accumulate_script_ranges (arg, range, val) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1490 Lisp_Object arg, range, val; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1491 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1492 if (EQ (XCAR (arg), val)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1493 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1494 if (CONSP (range)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1495 XSETCDR (arg, Fcons (Fcons (XCAR (range), XCDR (range)), XCDR (arg))); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1496 else |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1497 XSETCDR (arg, Fcons (Fcons (range, range), XCDR (arg))); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1498 } |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1499 } |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
1500 |
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
1501 |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1502 /* Return an ASCII font name generated from fontset name NAME and |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1503 font-spec ASCII_SPEC. NAME is a string conforming to XLFD. */ |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1504 |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1505 static INLINE Lisp_Object |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1506 generate_ascii_font_name (name, ascii_spec) |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1507 Lisp_Object name, ascii_spec; |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1508 { |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1509 Lisp_Object font_spec = Ffont_spec (0, NULL); |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1510 Lisp_Object vec; |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1511 int i; |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1512 char xlfd[256]; |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1513 |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1514 if (font_parse_xlfd (SDATA (name), font_spec) < 0) |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1515 error ("Not an XLFD font name: %s", SDATA (name)); |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1516 for (i = FONT_FOUNDRY_INDEX; i <= FONT_WIDTH_INDEX; i++) |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1517 if (! NILP (AREF (ascii_spec, i))) |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1518 ASET (font_spec, i, AREF (ascii_spec, i)); |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1519 i = font_unparse_xlfd (font_spec, 0, xlfd, 256); |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1520 if (i < 0) |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1521 error ("Not an XLFD font name: %s", SDATA (name)); |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1522 return make_unibyte_string (xlfd, i); |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
1523 } |
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
1524 |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1525 /* Variables referred in set_fontset_font. They are set before |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1526 map_charset_chars is called in Fset_fontset_font. */ |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1527 static Lisp_Object font_def_arg, add_arg; |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1528 static int from_arg, to_arg; |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1529 |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1530 /* Callback function for map_charset_chars in Fset_fontset_font. In |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1531 FONTSET, set font_def_arg in a fashion specified by add_arg for |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1532 characters in RANGE while ignoring the range between from_arg and |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1533 to_arg. */ |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1534 |
89614
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1535 static void |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1536 set_fontset_font (fontset, range) |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1537 Lisp_Object fontset, range; |
89614
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1538 { |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1539 if (from_arg < to_arg) |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1540 { |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1541 int from = XINT (XCAR (range)), to = XINT (XCDR (range)); |
89614
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1542 |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1543 if (from < from_arg) |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1544 { |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1545 if (to > to_arg) |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1546 { |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1547 Lisp_Object range2; |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1548 |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1549 range2 = Fcons (make_number (to_arg), XCDR (range)); |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1550 FONTSET_ADD (fontset, range, font_def_arg, add_arg); |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1551 to = to_arg; |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1552 } |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1553 if (to > from_arg) |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1554 range = Fcons (XCAR (range), make_number (from_arg)); |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1555 } |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1556 else if (to <= to_arg) |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1557 return; |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1558 else |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1559 { |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1560 if (from < to_arg) |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1561 range = Fcons (make_number (to_arg), XCDR (range)); |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1562 } |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1563 } |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1564 FONTSET_ADD (fontset, range, font_def_arg, add_arg); |
89614
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1565 } |
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1566 |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
1567 extern Lisp_Object QCfamily, QCregistry; |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1568 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1569 DEFUN ("set-fontset-font", Fset_fontset_font, Sset_fontset_font, 3, 5, 0, |
89483 | 1570 doc: /* |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1571 Modify fontset NAME to use FONT-SPEC for TARGET characters. |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1572 |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1573 TARGET may be a cons; (FROM . TO), where FROM and TO are characters. |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1574 In that case, use FONT-SPEC for all characters in the range FROM and |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1575 TO (inclusive). |
88405 | 1576 |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1577 TARGET may be a script name symbol. In that case, use FONT-SPEC for |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1578 all characters that belong to the script. |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1579 |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1580 TARGET may be a charset. In that case, use FONT-SPEC for all |
89669
6871c119b186
(Fset_fontset_font): Fix docstring.
Kenichi Handa <handa@m17n.org>
parents:
89614
diff
changeset
|
1581 characters in the charset. |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1582 |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1583 TARGET may be nil. In that case, use FONT-SPEC for any characters for |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1584 that no FONT-SPEC is specified. |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1585 |
89940
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
1586 FONT-SPEC may one of these: |
89337
6026c8e5664f
(Fset_fontset_font): Fix indentation of docstring.
Kenichi Handa <handa@m17n.org>
parents:
89069
diff
changeset
|
1587 * A cons (FAMILY . REGISTRY), where FAMILY is a font family name and |
89940
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
1588 REGISTRY is a font registry name. FAMILY may contains foundry |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
1589 name, and REGISTRY may contains encoding name. |
88931
74d18470865c
(fontset_add): Declare args. Call make_number
Dave Love <fx@gnu.org>
parents:
88903
diff
changeset
|
1590 * A font name string. |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1591 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1592 Optional 4th argument FRAME, if non-nil, is a frame. This argument is |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1593 kept for backward compatibility and has no meaning. |
88405 | 1594 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1595 Optional 5th argument ADD, if non-nil, specifies how to add FONT-SPEC |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1596 to the font specifications for TARGET previously set. If it is |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1597 `prepend', FONT-SPEC is prepended. If it is `append', FONT-SPEC is |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1598 appended. By default, FONT-SPEC overrides the previous settings. */) |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1599 (name, target, font_spec, frame, add) |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1600 Lisp_Object name, target, font_spec, frame, add; |
17052 | 1601 { |
88405 | 1602 Lisp_Object fontset; |
90056
b0c203a8776d
(Fset_fontset_font): Call find_font_encoding with
Kenichi Handa <handa@m17n.org>
parents:
90044
diff
changeset
|
1603 Lisp_Object font_def, registry, family; |
88931
74d18470865c
(fontset_add): Declare args. Call make_number
Dave Love <fx@gnu.org>
parents:
88903
diff
changeset
|
1604 Lisp_Object encoding, repertory; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1605 Lisp_Object range_list; |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1606 struct charset *charset = NULL; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1607 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1608 fontset = check_fontset_name (name); |
17052 | 1609 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1610 /* The arg FRAME is kept for backward compatibility. We only check |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1611 the validity. */ |
17052 | 1612 if (!NILP (frame)) |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40028
diff
changeset
|
1613 CHECK_LIVE_FRAME (frame); |
17052 | 1614 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1615 if (VECTORP (font_spec)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1616 { |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1617 if (! FONT_SPEC_P (font_spec)) |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1618 Fsignal (Qfont, list2 (build_string ("invalid font-spec"), font_spec)); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1619 } |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1620 else if (CONSP (font_spec)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1621 { |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1622 Lisp_Object args[4]; |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1623 int i= 0; |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1624 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1625 family = XCAR (font_spec); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1626 registry = XCDR (font_spec); |
17052 | 1627 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1628 if (! NILP (family)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1629 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1630 CHECK_STRING (family); |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1631 args[i++] = QCfamily; |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1632 args[i++] = family; |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1633 } |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1634 CHECK_STRING (registry); |
91169
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1635 args[i++] = QCregistry; |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1636 args[i++] = registry; |
8eb408860621
Include "font.h" unconditionally.
Kenichi Handa <handa@m17n.org>
parents:
91136
diff
changeset
|
1637 font_spec = Ffont_spec (i, args); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1638 } |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1639 else |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1640 { |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1641 Lisp_Object args[2]; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1642 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1643 CHECK_STRING (font_spec); |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1644 args[0] = QCname; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1645 args[1] = font_spec; |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1646 font_spec = Ffont_spec (2, args); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1647 } |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1648 |
91231
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1649 family = AREF (font_spec, FONT_FAMILY_INDEX); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1650 if (! NILP (family) && SYMBOLP (family)) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1651 family = SYMBOL_NAME (family); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1652 registry = AREF (font_spec, FONT_REGISTRY_INDEX); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1653 if (! NILP (registry) && SYMBOLP (registry)) |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1654 registry = SYMBOL_NAME (registry); |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1655 |
29d8135e8f58
(fontset_add): New args charset_id and famliy. Caller
Kenichi Handa <handa@m17n.org>
parents:
91224
diff
changeset
|
1656 encoding = find_font_encoding (concat2 (family, registry)); |
90410 | 1657 if (NILP (encoding)) |
1658 encoding = Qascii; | |
1659 | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1660 if (SYMBOLP (encoding)) |
89826
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1661 { |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1662 CHECK_CHARSET (encoding); |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1663 encoding = repertory = CHARSET_SYMBOL_ID (encoding); |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1664 } |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1665 else |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1666 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1667 repertory = XCDR (encoding); |
89826
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1668 encoding = XCAR (encoding); |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1669 CHECK_CHARSET (encoding); |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1670 encoding = CHARSET_SYMBOL_ID (encoding); |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1671 if (! NILP (repertory) && SYMBOLP (repertory)) |
17052 | 1672 { |
89826
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1673 CHECK_CHARSET (repertory); |
b17725d55ba2
(Fset_fontset_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
89811
diff
changeset
|
1674 repertory = CHARSET_SYMBOL_ID (repertory); |
17052 | 1675 } |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1676 } |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1677 font_def = Fmake_vector (make_number (3), font_spec); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1678 ASET (font_def, 1, encoding); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1679 ASET (font_def, 2, repertory); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1680 |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1681 if (CHARACTERP (target)) |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1682 range_list = Fcons (Fcons (target, target), Qnil); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1683 else if (CONSP (target)) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1684 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1685 Lisp_Object from, to; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1686 |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1687 from = Fcar (target); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1688 to = Fcdr (target); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1689 CHECK_CHARACTER (from); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1690 CHECK_CHARACTER (to); |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1691 range_list = Fcons (target, Qnil); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1692 } |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1693 else if (SYMBOLP (target) && !NILP (target)) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1694 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1695 Lisp_Object script_list; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1696 Lisp_Object val; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1697 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1698 range_list = Qnil; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1699 script_list = XCHAR_TABLE (Vchar_script_table)->extras[0]; |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1700 if (! NILP (Fmemq (target, script_list))) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1701 { |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1702 val = Fcons (target, Qnil); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1703 map_char_table (accumulate_script_ranges, Qnil, Vchar_script_table, |
89483 | 1704 val); |
1705 range_list = XCDR (val); | |
90642 | 1706 if (EQ (target, Qlatin)) |
1707 { | |
1708 if (VECTORP (font_spec)) | |
1709 val = generate_ascii_font_name (FONTSET_NAME (fontset), | |
1710 font_spec); | |
1711 else | |
1712 val = font_spec; | |
1713 FONTSET_ASCII (fontset) = val; | |
1714 } | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1715 } |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1716 if (CHARSETP (target)) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1717 { |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1718 if (EQ (target, Qascii)) |
89006
faa38aebf129
(Fset_fontset_font): Treate `ascii' as charset, not script.
Kenichi Handa <handa@m17n.org>
parents:
88982
diff
changeset
|
1719 { |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1720 if (VECTORP (font_spec)) |
89006
faa38aebf129
(Fset_fontset_font): Treate `ascii' as charset, not script.
Kenichi Handa <handa@m17n.org>
parents:
88982
diff
changeset
|
1721 font_spec = generate_ascii_font_name (FONTSET_NAME (fontset), |
faa38aebf129
(Fset_fontset_font): Treate `ascii' as charset, not script.
Kenichi Handa <handa@m17n.org>
parents:
88982
diff
changeset
|
1722 font_spec); |
faa38aebf129
(Fset_fontset_font): Treate `ascii' as charset, not script.
Kenichi Handa <handa@m17n.org>
parents:
88982
diff
changeset
|
1723 FONTSET_ASCII (fontset) = font_spec; |
89614
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1724 range_list = Fcons (Fcons (make_number (0), make_number (127)), |
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1725 Qnil); |
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1726 } |
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1727 else |
355fc0282e50
(set_fontset_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
89610
diff
changeset
|
1728 { |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1729 CHECK_CHARSET_GET_CHARSET (target, charset); |
89006
faa38aebf129
(Fset_fontset_font): Treate `ascii' as charset, not script.
Kenichi Handa <handa@m17n.org>
parents:
88982
diff
changeset
|
1730 } |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1731 } |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1732 else if (NILP (range_list)) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1733 error ("Invalid script or charset name: %s", |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1734 SDATA (SYMBOL_NAME (target))); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1735 } |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1736 else if (NILP (target)) |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1737 range_list = Fcons (Qnil, Qnil); |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1738 else |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
1739 error ("Invalid target for setting a font"); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1740 |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1741 |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1742 if (charset) |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1743 { |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1744 font_def_arg = font_def; |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1745 add_arg = add; |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1746 if (NILP (range_list)) |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1747 from_arg = to_arg = 0; |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1748 else |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1749 from_arg = XINT (XCAR (XCAR (range_list))), |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1750 to_arg = XINT (XCDR (XCAR (range_list))); |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1751 |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1752 map_charset_chars (set_fontset_font, Qnil, fontset, charset, |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1753 CHARSET_MIN_CODE (charset), |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1754 CHARSET_MAX_CODE (charset)); |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1755 } |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1756 for (; CONSP (range_list); range_list = XCDR (range_list)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1757 FONTSET_ADD (fontset, XCAR (range_list), font_def, add); |
17052 | 1758 |
88405 | 1759 /* Free all realized fontsets whose base is FONTSET. This way, the |
1760 specified character(s) are surely redisplayed by a correct | |
1761 font. */ | |
1762 free_realized_fontsets (fontset); | |
17052 | 1763 |
1764 return Qnil; | |
1765 } | |
1766 | |
88405 | 1767 |
1768 DEFUN ("new-fontset", Fnew_fontset, Snew_fontset, 2, 2, 0, | |
1769 doc: /* Create a new fontset NAME from font information in FONTLIST. | |
1770 | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1771 FONTLIST is an alist of scripts vs the corresponding font specification list. |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1772 Each element of FONTLIST has the form (SCRIPT FONT-SPEC ...), where a |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1773 character of SCRIPT is displayed by a font that matches one of |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1774 FONT-SPEC. |
88405 | 1775 |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1776 SCRIPT is a symbol that appears in the first extra slot of the |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1777 char-table `char-script-table'. |
88405 | 1778 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1779 FONT-SPEC is a vector, a cons, or a string. See the documentation of |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1780 `set-fontset-font' for the meaning. */) |
88405 | 1781 (name, fontlist) |
1782 Lisp_Object name, fontlist; | |
1783 { | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1784 Lisp_Object fontset; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1785 Lisp_Object val; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1786 int id; |
88405 | 1787 |
1788 CHECK_STRING (name); | |
1789 CHECK_LIST (fontlist); | |
1790 | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1791 id = fs_query_fontset (name, 0); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1792 if (id < 0) |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1793 { |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1794 name = Fdowncase (name); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1795 val = split_font_name_into_vector (name); |
89603
7f9f2d025eee
(Fnew_fontset): Check NAME more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
89572
diff
changeset
|
1796 if (NILP (val) || NILP (AREF (val, 12)) || NILP (AREF (val, 13))) |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1797 error ("Fontset name must be in XLFD format"); |
89483 | 1798 if (strcmp (SDATA (AREF (val, 12)), "fontset")) |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1799 error ("Registry field of fontset name must be \"fontset\""); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1800 Vfontset_alias_alist |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1801 = Fcons (Fcons (name, |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1802 concat2 (concat2 (AREF (val, 12), build_string ("-")), |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1803 AREF (val, 13))), |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1804 Vfontset_alias_alist); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1805 ASET (val, 12, build_string ("iso8859-1")); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1806 fontset = make_fontset (Qnil, name, Qnil); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1807 FONTSET_ASCII (fontset) = build_font_name_from_vector (val); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1808 } |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1809 else |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1810 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1811 fontset = FONTSET_FROM_ID (id);; |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1812 free_realized_fontsets (fontset); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1813 Fset_char_table_range (fontset, Qt, Qnil); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1814 } |
88405 | 1815 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1816 for (; ! NILP (fontlist); fontlist = Fcdr (fontlist)) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1817 { |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1818 Lisp_Object elt, script; |
88405 | 1819 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1820 elt = Fcar (fontlist); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1821 script = Fcar (elt); |
89607
9090f7eba02c
(Fnew_fontset): Check NAME more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
89603
diff
changeset
|
1822 elt = Fcdr (elt); |
9090f7eba02c
(Fnew_fontset): Check NAME more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
89603
diff
changeset
|
1823 if (CONSP (elt) && (NILP (XCDR (elt)) || CONSP (XCDR (elt)))) |
9090f7eba02c
(Fnew_fontset): Check NAME more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
89603
diff
changeset
|
1824 for (; CONSP (elt); elt = XCDR (elt)) |
9090f7eba02c
(Fnew_fontset): Check NAME more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
89603
diff
changeset
|
1825 Fset_fontset_font (name, script, XCAR (elt), Qnil, Qappend); |
9090f7eba02c
(Fnew_fontset): Check NAME more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
89603
diff
changeset
|
1826 else |
9090f7eba02c
(Fnew_fontset): Check NAME more rigidly.
Kenichi Handa <handa@m17n.org>
parents:
89603
diff
changeset
|
1827 Fset_fontset_font (name, script, elt, Qnil, Qappend); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
1828 } |
88405 | 1829 return name; |
1830 } | |
1831 | |
1832 | |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1833 /* Alist of automatically created fontsets. Each element is a cons |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1834 (FONTNAME . FONTSET-ID). */ |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1835 static Lisp_Object auto_fontset_alist; |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1836 |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1837 int |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1838 new_fontset_from_font_name (Lisp_Object fontname) |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1839 { |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1840 Lisp_Object val; |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1841 Lisp_Object name; |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1842 Lisp_Object vec; |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1843 int id; |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1844 |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1845 fontname = Fdowncase (fontname); |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1846 val = Fassoc (fontname, auto_fontset_alist); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1847 if (CONSP (val)) |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1848 return XINT (XCDR (val)); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1849 |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1850 vec = split_font_name_into_vector (fontname); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1851 if ( NILP (vec)) |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1852 vec = Fmake_vector (make_number (14), build_string ("")); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1853 ASET (vec, 12, build_string ("fontset")); |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1854 if (NILP (auto_fontset_alist)) |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1855 { |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1856 ASET (vec, 13, build_string ("startup")); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1857 name = build_font_name_from_vector (vec); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1858 } |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1859 else |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1860 { |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1861 char temp[20]; |
89865 | 1862 int len = XINT (Flength (auto_fontset_alist)); |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1863 |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1864 sprintf (temp, "auto%d", len); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1865 ASET (vec, 13, build_string (temp)); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1866 name = build_font_name_from_vector (vec); |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1867 } |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1868 name = Fnew_fontset (name, list2 (list2 (Qascii, fontname), |
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1869 list2 (Fcons (make_number (0), |
89711
fca3686ff6bb
(new_fontset_from_font_name): Use the specified font
Kenichi Handa <handa@m17n.org>
parents:
89699
diff
changeset
|
1870 make_number (MAX_CHAR)), |
89901
d1a1970e3dd1
(find_font_encoding): Return `ascii' for unknown
Kenichi Handa <handa@m17n.org>
parents:
89898
diff
changeset
|
1871 fontname))); |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1872 id = fs_query_fontset (name, 0); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1873 auto_fontset_alist |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1874 = Fcons (Fcons (fontname, make_number (id)), auto_fontset_alist); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
1875 return id; |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1876 } |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1877 |
90410 | 1878 #ifdef USE_FONT_BACKEND |
1879 int | |
90466
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1880 new_fontset_from_font (font_object) |
90410 | 1881 Lisp_Object font_object; |
1882 { | |
90466
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1883 Lisp_Object font_name = font_get_name (font_object); |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1884 Lisp_Object font_spec = font_get_spec (font_object); |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1885 Lisp_Object fontset_spec, short_name, name, fontset; |
90466
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1886 |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1887 if (NILP (auto_fontset_alist)) |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1888 short_name = build_string ("fontset-startup"); |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1889 else |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1890 { |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1891 char temp[32]; |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1892 int len = XINT (Flength (auto_fontset_alist)); |
90410 | 1893 |
90466
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1894 sprintf (temp, "fontset-auto%d", len); |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1895 short_name = build_string (temp); |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1896 } |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1897 fontset_spec = Fcopy_sequence (font_spec); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1898 ASET (fontset_spec, FONT_REGISTRY_INDEX, short_name); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1899 name = Ffont_xlfd_name (fontset_spec); |
90466
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1900 if (NILP (name)) |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1901 { |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1902 int i; |
90410 | 1903 |
90466
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1904 for (i = 0; i < FONT_SIZE_INDEX; i++) |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1905 if ((i != FONT_FAMILY_INDEX) && (i != FONT_REGISTRY_INDEX)) |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1906 ASET (fontset_spec, i, Qnil); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1907 name = Ffont_xlfd_name (fontset_spec); |
90466
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1908 if (NILP (name)) |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1909 abort (); |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1910 } |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1911 fontset = make_fontset (Qnil, name, Qnil); |
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1912 FONTSET_ASCII (fontset) = font_name; |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1913 font_spec = Fcons (SYMBOL_NAME (AREF (font_spec, FONT_FAMILY_INDEX)), |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1914 SYMBOL_NAME (AREF (font_spec, FONT_REGISTRY_INDEX))); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1915 Fset_fontset_font (name, Qlatin, font_spec, Qnil, Qnil); |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
1916 Fset_fontset_font (name, Qnil, font_spec, Qnil, Qnil); |
90466
4c9461c6aef4
(new_fontset_from_font) [USE_FONT_BACKEND]: Argument F
Kenichi Handa <handa@m17n.org>
parents:
90449
diff
changeset
|
1917 return XINT (FONTSET_ID (fontset)); |
90410 | 1918 } |
1919 | |
1920 struct font * | |
1921 fontset_ascii_font (f, id) | |
1922 FRAME_PTR f; | |
1923 int id; | |
1924 { | |
1925 Lisp_Object fontset = FONTSET_FROM_ID (id); | |
1926 Lisp_Object ascii_slot = FONTSET_ASCII (fontset); | |
1927 Lisp_Object val, font_object; | |
1928 | |
1929 if (CONSP (ascii_slot)) | |
1930 { | |
1931 Lisp_Object ascii_font_name = XCAR (ascii_slot); | |
1932 | |
1933 font_object = Qnil; | |
1934 for (val = XCDR (ascii_slot); ! NILP (val); val = XCDR (val)) | |
1935 { | |
1936 Lisp_Object frame = font_get_frame (XCAR (val)); | |
1937 | |
1938 if (NILP (frame) || XFRAME (frame) == f) | |
1939 { | |
1940 font_object = XCAR (val); | |
1941 if (XSAVE_VALUE (font_object)->integer == 0) | |
1942 { | |
1943 font_object = font_open_by_name (f, SDATA (ascii_font_name)); | |
1944 XSETCAR (val, font_object); | |
1945 } | |
1946 break; | |
1947 } | |
1948 } | |
1949 if (NILP (font_object)) | |
1950 { | |
1951 font_object = font_open_by_name (f, SDATA (ascii_font_name)); | |
1952 XSETCDR (ascii_slot, Fcons (font_object, XCDR (ascii_slot))); | |
1953 } | |
1954 } | |
1955 else | |
1956 { | |
1957 font_object = font_open_by_name (f, SDATA (ascii_slot)); | |
1958 FONTSET_ASCII (fontset) = Fcons (ascii_slot, Fcons (font_object, Qnil)); | |
1959 } | |
90440
33277d7748f3
(reorder_font_vector): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents:
90410
diff
changeset
|
1960 if (NILP (font_object)) |
33277d7748f3
(reorder_font_vector): Pay attention to the case that
Kenichi Handa <handa@m17n.org>
parents:
90410
diff
changeset
|
1961 return NULL; |
90410 | 1962 return XSAVE_VALUE (font_object)->pointer; |
1963 } | |
1964 | |
1965 #endif /* USE_FONT_BACKEND */ | |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
1966 |
17052 | 1967 DEFUN ("font-info", Ffont_info, Sfont_info, 1, 2, 0, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1968 doc: /* Return information about a font named NAME on frame FRAME. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1969 If FRAME is omitted or nil, use the selected frame. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1970 The returned value is a vector of OPENED-NAME, FULL-NAME, CHARSET, SIZE, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1971 HEIGHT, BASELINE-OFFSET, RELATIVE-COMPOSE, and DEFAULT-ASCENT, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1972 where |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1973 OPENED-NAME is the name used for opening the font, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1974 FULL-NAME is the full name of the font, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1975 SIZE is the maximum bound width of the font, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1976 HEIGHT is the height of the font, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1977 BASELINE-OFFSET is the upward offset pixels from ASCII baseline, |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1978 RELATIVE-COMPOSE and DEFAULT-ASCENT are the numbers controlling |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1979 how to compose characters. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1980 If the named font is not yet loaded, return nil. */) |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
1981 (name, frame) |
17052 | 1982 Lisp_Object name, frame; |
1983 { | |
1984 FRAME_PTR f; | |
1985 struct font_info *fontp; | |
1986 Lisp_Object info; | |
90410 | 1987 Lisp_Object font_object; |
17052 | 1988 |
1989 (*check_window_system_func) (); | |
1990 | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40028
diff
changeset
|
1991 CHECK_STRING (name); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
1992 name = Fdowncase (name); |
17052 | 1993 if (NILP (frame)) |
25668
99290b59352d
(Ffont_info): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
24611
diff
changeset
|
1994 frame = selected_frame; |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40028
diff
changeset
|
1995 CHECK_LIVE_FRAME (frame); |
25668
99290b59352d
(Ffont_info): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
24611
diff
changeset
|
1996 f = XFRAME (frame); |
17052 | 1997 |
1998 if (!query_font_func) | |
1999 error ("Font query function is not supported"); | |
2000 | |
90410 | 2001 #ifdef USE_FONT_BACKEND |
2002 if (enable_font_backend) | |
2003 { | |
2004 font_object = font_open_by_name (f, SDATA (name)); | |
2005 if (NILP (font_object)) | |
2006 fontp = NULL; | |
2007 else | |
2008 fontp = (struct font_info *) XSAVE_VALUE (font_object)->pointer; | |
2009 } | |
2010 else | |
2011 #endif /* USE_FONT_BACKEND */ | |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45848
diff
changeset
|
2012 fontp = (*query_font_func) (f, SDATA (name)); |
17052 | 2013 if (!fontp) |
2014 return Qnil; | |
2015 | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2016 info = Fmake_vector (make_number (7), Qnil); |
17052 | 2017 |
2018 XVECTOR (info)->contents[0] = build_string (fontp->name); | |
2019 XVECTOR (info)->contents[1] = build_string (fontp->full_name); | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2020 XVECTOR (info)->contents[2] = make_number (fontp->size); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2021 XVECTOR (info)->contents[3] = make_number (fontp->height); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2022 XVECTOR (info)->contents[4] = make_number (fontp->baseline_offset); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2023 XVECTOR (info)->contents[5] = make_number (fontp->relative_compose); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2024 XVECTOR (info)->contents[6] = make_number (fontp->default_ascent); |
17052 | 2025 |
90410 | 2026 #ifdef USE_FONT_BACKEND |
2027 if (! NILP (font_object)) | |
2028 font_close_object (f, font_object); | |
2029 #endif /* USE_FONT_BACKEND */ | |
17052 | 2030 return info; |
2031 } | |
2032 | |
28963 | 2033 |
52654
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2034 /* Return a cons (FONT-NAME . GLYPH-CODE). |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2035 FONT-NAME is the font name for the character at POSITION in the current |
28963 | 2036 buffer. This is computed from all the text properties and overlays |
55094
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2037 that apply to POSITION. POSTION may be nil, in which case, |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2038 FONT-NAME is the font name for display the character CH with the |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2039 default face. |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2040 |
52654
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2041 GLYPH-CODE is the glyph code in the font to use for the character. |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2042 |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2043 If the 2nd optional arg CH is non-nil, it is a character to check |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2044 the font instead of the character at POSITION. |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2045 |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2046 It returns nil in the following cases: |
28963 | 2047 |
2048 (1) The window system doesn't have a font for the character (thus | |
2049 it is displayed by an empty box). | |
2050 | |
2051 (2) The character code is invalid. | |
2052 | |
55094
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2053 (3) If POSITION is not nil, and the current buffer is not displayed |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2054 in any window. |
28963 | 2055 |
2056 In addition, the returned font name may not take into account of | |
2057 such redisplay engine hooks as what used in jit-lock-mode if | |
2058 POSITION is currently not visible. */ | |
2059 | |
2060 | |
52654
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2061 DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2062 doc: /* For internal use only. */) |
52654
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2063 (position, ch) |
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2064 Lisp_Object position, ch; |
28963 | 2065 { |
2066 int pos, pos_byte, dummy; | |
2067 int face_id; | |
2068 int c; | |
2069 struct frame *f; | |
2070 struct face *face; | |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
2071 Lisp_Object charset, rfont_def; |
90725
6d8c81691fc8
(Finternal_char_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
90716
diff
changeset
|
2072 int cs_id; |
28963 | 2073 |
55094
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2074 if (NILP (position)) |
52654
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2075 { |
89904 | 2076 CHECK_CHARACTER (ch); |
52654
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2077 c = XINT (ch); |
55094
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2078 f = XFRAME (selected_frame); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2079 face_id = DEFAULT_FACE_ID; |
89943
4c90ffeb71c5
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15
Miles Bader <miles@gnu.org>
diff
changeset
|
2080 pos = -1; |
90725
6d8c81691fc8
(Finternal_char_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
90716
diff
changeset
|
2081 cs_id = -1; |
55094
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2082 } |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2083 else |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2084 { |
90716
f5dc0b9a442c
(Finternal_char_font): Fix for the case of POSITION
Kenichi Handa <handa@m17n.org>
parents:
90642
diff
changeset
|
2085 Lisp_Object window, charset; |
55094
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2086 struct window *w; |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2087 |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2088 CHECK_NUMBER_COERCE_MARKER (position); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2089 pos = XINT (position); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2090 if (pos < BEGV || pos >= ZV) |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2091 args_out_of_range_3 (position, make_number (BEGV), make_number (ZV)); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2092 pos_byte = CHAR_TO_BYTE (pos); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2093 if (NILP (ch)) |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2094 c = FETCH_CHAR (pos_byte); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2095 else |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2096 { |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2097 CHECK_NATNUM (ch); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2098 c = XINT (ch); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2099 } |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2100 window = Fget_buffer_window (Fcurrent_buffer (), Qnil); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2101 if (NILP (window)) |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2102 return Qnil; |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2103 w = XWINDOW (window); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2104 f = XFRAME (w->frame); |
450b41d3c078
(Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents:
54995
diff
changeset
|
2105 face_id = face_at_buffer_position (w, pos, -1, -1, &dummy, pos + 100, 0); |
90716
f5dc0b9a442c
(Finternal_char_font): Fix for the case of POSITION
Kenichi Handa <handa@m17n.org>
parents:
90642
diff
changeset
|
2106 charset = Fget_char_property (position, Qcharset, Qnil); |
f5dc0b9a442c
(Finternal_char_font): Fix for the case of POSITION
Kenichi Handa <handa@m17n.org>
parents:
90642
diff
changeset
|
2107 if (CHARSETP (charset)) |
90725
6d8c81691fc8
(Finternal_char_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
90716
diff
changeset
|
2108 cs_id = XINT (CHARSET_SYMBOL_ID (charset)); |
90716
f5dc0b9a442c
(Finternal_char_font): Fix for the case of POSITION
Kenichi Handa <handa@m17n.org>
parents:
90642
diff
changeset
|
2109 else |
90725
6d8c81691fc8
(Finternal_char_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
90716
diff
changeset
|
2110 cs_id = -1; |
52654
2e5944e29aa0
(Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents:
52401
diff
changeset
|
2111 } |
28963 | 2112 if (! CHAR_VALID_P (c, 0)) |
2113 return Qnil; | |
89943
4c90ffeb71c5
Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15
Miles Bader <miles@gnu.org>
diff
changeset
|
2114 face_id = FACE_FOR_CHAR (f, FACE_FROM_ID (f, face_id), c, pos, Qnil); |
28963 | 2115 face = FACE_FROM_ID (f, face_id); |
90725
6d8c81691fc8
(Finternal_char_font): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
90716
diff
changeset
|
2116 rfont_def = fontset_font (FONTSET_FROM_ID (face->fontset), c, face, cs_id); |
90410 | 2117 #ifdef USE_FONT_BACKEND |
2118 if (enable_font_backend) | |
2119 { | |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
2120 if (VECTORP (rfont_def) && ! NILP (AREF (rfont_def, 3))) |
90410 | 2121 { |
91136
d54684fee154
(fontset_find_font) [USE_FONT_BACKEND]: Try multiple
Kenichi Handa <handa@m17n.org>
parents:
91053
diff
changeset
|
2122 Lisp_Object font_object = XCAR (AREF (rfont_def, 3)); |
90410 | 2123 struct font *font = XSAVE_VALUE (font_object)->pointer; |
2124 unsigned code = font->driver->encode_char (font, c); | |
90475
b19205fb08bd
(Finternal_char_font): Use font_get_name, not
Kenichi Handa <handa@m17n.org>
parents:
90466
diff
changeset
|
2125 Lisp_Object fontname = font_get_name (font_object); |
49874
3bdee1887901
(check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents:
49286
diff
changeset
|
2126 |
90410 | 2127 if (code == FONT_INVALID_CODE) |
2128 return Fcons (fontname, Qnil); | |
2129 if (code <= MOST_POSITIVE_FIXNUM) | |
2130 return Fcons (fontname, make_number (code)); | |
2131 return Fcons (fontname, Fcons (make_number (code >> 16), | |
2132 make_number (code & 0xFFFF))); | |
2133 } | |
2134 return Qnil; | |
2135 } | |
2136 #endif /* USE_FONT_BACKEND */ | |
89904 | 2137 if (VECTORP (rfont_def) && STRINGP (AREF (rfont_def, 3))) |
2138 { | |
2139 Lisp_Object font_def; | |
2140 struct font_info *fontp; | |
2141 struct charset *charset; | |
2142 XChar2b char2b; | |
2143 int code; | |
28963 | 2144 |
89904 | 2145 font_def = AREF (rfont_def, 2); |
2146 charset = CHARSET_FROM_ID (XINT (AREF (font_def, 1))); | |
2147 code = ENCODE_CHAR (charset, c); | |
2148 if (code == CHARSET_INVALID_CODE (charset)) | |
2149 return (Fcons (AREF (rfont_def, 3), Qnil)); | |
2150 STORE_XCHAR2B (&char2b, ((code >> 8) & 0xFF), (code & 0xFF)); | |
2151 fontp = (*get_font_info_func) (f, XINT (AREF (rfont_def, 1))); | |
91041 | 2152 FRAME_RIF (f)->encode_char (c, &char2b, fontp, charset, NULL); |
89904 | 2153 code = (XCHAR2B_BYTE1 (&char2b) << 8) | XCHAR2B_BYTE2 (&char2b); |
2154 return (Fcons (AREF (rfont_def, 3), make_number (code))); | |
28963 | 2155 } |
89904 | 2156 return Qnil; |
28963 | 2157 } |
2158 | |
2159 | |
17052 | 2160 DEFUN ("fontset-info", Ffontset_info, Sfontset_info, 1, 2, 0, |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2161 doc: /* Return information about a fontset FONTSET on frame FRAME. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2162 The value is a char-table of which elements has this form. |
28963 | 2163 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2164 ((FONT-PATTERN OPENED-FONT ...) ...) |
28963 | 2165 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2166 FONT-PATTERN is a vector: |
28963 | 2167 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2168 [ FAMILY WEIGHT SLANT SWIDTH ADSTYLE REGISTRY ] |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2169 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2170 or a string of font name pattern. |
28963 | 2171 |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2172 OPENED-FONT is a name of a font actually opened. |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2173 |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2174 The char-table has one extra slot. The value is a char-table |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2175 containing the information about the derived fonts from the default |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2176 fontset. The format is the same as abobe. */) |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2177 (fontset, frame) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2178 Lisp_Object fontset, frame; |
17052 | 2179 { |
2180 FRAME_PTR f; | |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2181 Lisp_Object *realized[2], fontsets[2], tables[2]; |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2182 Lisp_Object val, elt; |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2183 int c, i, j, k; |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
2184 |
17052 | 2185 (*check_window_system_func) (); |
2186 | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2187 fontset = check_fontset_name (fontset); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2188 |
17052 | 2189 if (NILP (frame)) |
25668
99290b59352d
(Ffont_info): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
24611
diff
changeset
|
2190 frame = selected_frame; |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40028
diff
changeset
|
2191 CHECK_LIVE_FRAME (frame); |
25668
99290b59352d
(Ffont_info): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
24611
diff
changeset
|
2192 f = XFRAME (frame); |
17052 | 2193 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2194 /* Recode fontsets realized on FRAME from the base fontset FONTSET |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2195 in the table `realized'. */ |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2196 realized[0] = (Lisp_Object *) alloca (sizeof (Lisp_Object) |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2197 * ASIZE (Vfontset_table)); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2198 for (i = j = 0; i < ASIZE (Vfontset_table); i++) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2199 { |
28963 | 2200 elt = FONTSET_FROM_ID (i); |
2201 if (!NILP (elt) | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2202 && EQ (FONTSET_BASE (elt), fontset) |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2203 && EQ (FONTSET_FRAME (elt), frame)) |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2204 realized[0][j++] = elt; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2205 } |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2206 realized[0][j] = Qnil; |
49874
3bdee1887901
(check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents:
49286
diff
changeset
|
2207 |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2208 realized[1] = (Lisp_Object *) alloca (sizeof (Lisp_Object) |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2209 * ASIZE (Vfontset_table)); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2210 for (i = j = 0; ! NILP (realized[0][i]); i++) |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2211 { |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2212 elt = FONTSET_DEFAULT (realized[0][i]); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2213 if (! NILP (elt)) |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2214 realized[1][j++] = elt; |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2215 } |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2216 realized[1][j] = Qnil; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2217 |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2218 tables[0] = Fmake_char_table (Qfontset_info, Qnil); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2219 tables[1] = Fmake_char_table (Qnil, Qnil); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2220 XCHAR_TABLE (tables[0])->extras[0] = tables[1]; |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2221 fontsets[0] = fontset; |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2222 fontsets[1] = Vdefault_fontset; |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2223 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2224 /* Accumulate information of the fontset in TABLE. The format of |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2225 each element is ((FONT-SPEC OPENED-FONT ...) ...). */ |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2226 for (k = 0; k <= 1; k++) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2227 { |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2228 for (c = 0; c <= MAX_CHAR; ) |
28963 | 2229 { |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2230 int from, to; |
17052 | 2231 |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2232 if (c <= MAX_5_BYTE_CHAR) |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2233 { |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2234 val = char_table_ref_and_range (fontsets[k], c, &from, &to); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2235 if (to > MAX_5_BYTE_CHAR) |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2236 to = MAX_5_BYTE_CHAR; |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2237 } |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2238 else |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2239 { |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2240 val = FONTSET_FALLBACK (fontsets[k]); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2241 to = MAX_CHAR; |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2242 } |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2243 if (VECTORP (val)) |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2244 { |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2245 Lisp_Object alist; |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2246 |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2247 /* At first, set ALIST to ((FONT-SPEC) ...). */ |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2248 for (alist = Qnil, i = 0; i < ASIZE (val); i++) |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2249 alist = Fcons (Fcons (AREF (AREF (val, i), 0), Qnil), alist); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2250 alist = Fnreverse (alist); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2251 |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2252 /* Then store opend font names to cdr of each elements. */ |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2253 for (i = 0; ! NILP (realized[k][i]); i++) |
28963 | 2254 { |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2255 if (c <= MAX_5_BYTE_CHAR) |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2256 val = FONTSET_REF (realized[k][i], c); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2257 else |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2258 val = FONTSET_FALLBACK (realized[k][i]); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2259 if (! VECTORP (val)) |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2260 continue; |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
2261 /* VAL is [int int ? |
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
2262 [FACE-ID FONT-INDEX FONT-DEF FONT-NAME] ...]. |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2263 If a font of an element is already opened, |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
2264 FONT-NAME is the name of a opened font. */ |
89699
cda6f41a592e
(reorder_font_vector): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
89687
diff
changeset
|
2265 for (j = 3; j < ASIZE (val); j++) |
89898
0167306cb580
(fontset_font): Renamed from fontset_face. Return
Kenichi Handa <handa@m17n.org>
parents:
89865
diff
changeset
|
2266 if (STRINGP (AREF (AREF (val, j), 3))) |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2267 { |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2268 Lisp_Object font_idx; |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2269 |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2270 font_idx = AREF (AREF (val, j), 1); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2271 elt = Fassq (AREF (AREF (AREF (val, j), 2), 0), alist); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2272 if (CONSP (elt) |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2273 && NILP (Fmemq (font_idx, XCDR(elt)))) |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2274 nconc2 (elt, Fcons (font_idx, Qnil)); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2275 } |
28963 | 2276 } |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2277 for (val = alist; CONSP (val); val = XCDR (val)) |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2278 for (elt = XCDR (XCAR (val)); CONSP (elt); elt = XCDR (elt)) |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2279 { |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2280 struct font_info *font_info |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2281 = (*get_font_info_func) (f, XINT (XCAR (elt))); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2282 XSETCAR (elt, build_string (font_info->full_name)); |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2283 } |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2284 |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2285 /* Store ALIST in TBL for characters C..TO. */ |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2286 if (c <= MAX_5_BYTE_CHAR) |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2287 char_table_set_range (tables[k], c, to, alist); |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2288 else |
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2289 XCHAR_TABLE (tables[k])->defalt = alist; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2290 } |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2291 c = to + 1; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2292 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2293 } |
30124
26076259e03f
(Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents:
29767
diff
changeset
|
2294 |
89811
d13626b05df3
(fontset_face): Handle fallback fonts correctly.
Kenichi Handa <handa@m17n.org>
parents:
89805
diff
changeset
|
2295 return tables[0]; |
17052 | 2296 } |
2297 | |
2298 | |
89940
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2299 DEFUN ("fontset-font", Ffontset_font, Sfontset_font, 2, 3, 0, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2300 doc: /* Return a font name pattern for character CH in fontset NAME. |
89940
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2301 If NAME is t, find a pattern in the default fontset. |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2302 |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2303 The value has the form (FAMILY . REGISTRY), where FAMILY is a font |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2304 family name and REGISTRY is a font registry name. This is actually |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2305 the first font name pattern for CH in the fontset or in the default |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2306 fontset. |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2307 |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2308 If the 2nd optional arg ALL is non-nil, return a list of all font name |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2309 patterns. */) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2310 (name, ch, all) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2311 Lisp_Object name, ch, all; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2312 { |
34975
0d69e2d2724e
(fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents:
32978
diff
changeset
|
2313 int c; |
89940
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2314 Lisp_Object fontset, elt, list, repertory, val; |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2315 int i, j; |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2316 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2317 fontset = check_fontset_name (name); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2318 |
88405 | 2319 CHECK_CHARACTER (ch); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2320 c = XINT (ch); |
89940
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2321 list = Qnil; |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2322 while (1) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2323 { |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2324 for (i = 0, elt = FONTSET_REF (fontset, c); i < 2; |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2325 i++, elt = FONTSET_FALLBACK (fontset)) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2326 if (VECTORP (elt)) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2327 for (j = 0; j < ASIZE (elt); j++) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2328 { |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2329 val = AREF (elt, j); |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2330 repertory = AREF (val, 1); |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2331 if (INTEGERP (repertory)) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2332 { |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2333 struct charset *charset = CHARSET_FROM_ID (XINT (repertory)); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2334 |
89940
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2335 if (! CHAR_CHARSET_P (c, charset)) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2336 continue; |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2337 } |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2338 else if (CHAR_TABLE_P (repertory)) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2339 { |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2340 if (NILP (CHAR_TABLE_REF (repertory, c))) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2341 continue; |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2342 } |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2343 val = AREF (val, 0); |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2344 val = Fcons (AREF (val, 0), AREF (val, 5)); |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2345 if (NILP (all)) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2346 return val; |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2347 list = Fcons (val, list); |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2348 } |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2349 if (EQ (fontset, Vdefault_fontset)) |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2350 break; |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2351 fontset = Vdefault_fontset; |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2352 } |
713a4f4140ca
(Fset_fontset_font): Docstring fixed.
Kenichi Handa <handa@m17n.org>
parents:
89904
diff
changeset
|
2353 return (Fnreverse (list)); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2354 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2355 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2356 DEFUN ("fontset-list", Ffontset_list, Sfontset_list, 0, 0, 0, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2357 doc: /* Return a list of all defined fontset names. */) |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2358 () |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2359 { |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2360 Lisp_Object fontset, list; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2361 int i; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2362 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2363 list = Qnil; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2364 for (i = 0; i < ASIZE (Vfontset_table); i++) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2365 { |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2366 fontset = FONTSET_FROM_ID (i); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2367 if (!NILP (fontset) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2368 && BASE_FONTSET_P (fontset)) |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2369 list = Fcons (FONTSET_NAME (fontset), list); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2370 } |
28963 | 2371 |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2372 return list; |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2373 } |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2374 |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2375 |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2376 #ifdef FONTSET_DEBUG |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2377 |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2378 Lisp_Object |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2379 dump_fontset (fontset) |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2380 Lisp_Object fontset; |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2381 { |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2382 Lisp_Object vec; |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2383 |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2384 vec = Fmake_vector (make_number (3), Qnil); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2385 ASET (vec, 0, FONTSET_ID (fontset)); |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2386 |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2387 if (BASE_FONTSET_P (fontset)) |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2388 { |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2389 ASET (vec, 1, FONTSET_NAME (fontset)); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2390 } |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2391 else |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2392 { |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2393 Lisp_Object frame; |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2394 |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2395 frame = FONTSET_FRAME (fontset); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2396 if (FRAMEP (frame)) |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2397 { |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2398 FRAME_PTR f = XFRAME (frame); |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2399 |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2400 if (FRAME_LIVE_P (f)) |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
2401 ASET (vec, 1, |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
2402 Fcons (FONTSET_NAME (FONTSET_BASE (fontset)), f->name)); |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2403 else |
90802
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
2404 ASET (vec, 1, |
bfafc889caa9
(fontset_find_font): New function.
Kenichi Handa <handa@m17n.org>
parents:
90737
diff
changeset
|
2405 Fcons (FONTSET_NAME (FONTSET_BASE (fontset)), Qnil)); |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2406 } |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
2407 if (!NILP (FONTSET_DEFAULT (fontset))) |
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
2408 ASET (vec, 2, FONTSET_ID (FONTSET_DEFAULT (fontset))); |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2409 } |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2410 return vec; |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2411 } |
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2412 |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2413 DEFUN ("fontset-list-all", Ffontset_list_all, Sfontset_list_all, 0, 0, 0, |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2414 doc: /* Return a brief summary of all fontsets for debug use. */) |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2415 () |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2416 { |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2417 Lisp_Object val; |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2418 int i; |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2419 |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2420 for (i = 0, val = Qnil; i < ASIZE (Vfontset_table); i++) |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2421 if (! NILP (AREF (Vfontset_table, i))) |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2422 val = Fcons (dump_fontset (AREF (Vfontset_table, i)), val); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2423 return (Fnreverse (val)); |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2424 } |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2425 #endif /* FONTSET_DEBUG */ |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2426 |
21514 | 2427 void |
17052 | 2428 syms_of_fontset () |
2429 { | |
2430 if (!load_font_func) | |
2431 /* Window system initializer should have set proper functions. */ | |
2432 abort (); | |
2433 | |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2434 DEFSYM (Qfontset, "fontset"); |
89805
35a0a24752d3
(FONTSET_DEFAULT): New macro.
Kenichi Handa <handa@m17n.org>
parents:
89711
diff
changeset
|
2435 Fput (Qfontset, Qchar_table_extra_slots, make_number (9)); |
89349
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2436 DEFSYM (Qfontset_info, "fontset-info"); |
9a305cf42688
Give 8 extra slots to fontset objects.
Kenichi Handa <handa@m17n.org>
parents:
89337
diff
changeset
|
2437 Fput (Qfontset_info, Qchar_table_extra_slots, make_number (1)); |
17052 | 2438 |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2439 DEFSYM (Qprepend, "prepend"); |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2440 DEFSYM (Qappend, "append"); |
90642 | 2441 DEFSYM (Qlatin, "latin"); |
17052 | 2442 |
2443 Vcached_fontset_data = Qnil; | |
2444 staticpro (&Vcached_fontset_data); | |
2445 | |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2446 Vfontset_table = Fmake_vector (make_number (32), Qnil); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2447 staticpro (&Vfontset_table); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2448 |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2449 Vdefault_fontset = Fmake_char_table (Qfontset, Qnil); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2450 staticpro (&Vdefault_fontset); |
28963 | 2451 FONTSET_ID (Vdefault_fontset) = make_number (0); |
2452 FONTSET_NAME (Vdefault_fontset) | |
2453 = build_string ("-*-*-*-*-*-*-*-*-*-*-*-*-fontset-default"); | |
2454 AREF (Vfontset_table, 0) = Vdefault_fontset; | |
2455 next_fontset_id = 1; | |
17052 | 2456 |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2457 auto_fontset_alist = Qnil; |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2458 staticpro (&auto_fontset_alist); |
53353
b085f18ebcf0
(Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
53072
diff
changeset
|
2459 |
17052 | 2460 DEFVAR_LISP ("font-encoding-alist", &Vfont_encoding_alist, |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2461 doc: /* |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2462 Alist of fontname patterns vs the corresponding encoding and repertory info. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2463 Each element looks like (REGEXP . (ENCODING . REPERTORY)), |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2464 where ENCODING is a charset or a char-table, |
89483 | 2465 and REPERTORY is a charset, a char-table, or nil. |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2466 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2467 ENCODING is for converting a character to a glyph code of the font. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2468 If ENCODING is a charset, encoding a character by the charset gives |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2469 the corresponding glyph code. If ENCODING is a char-table, looking up |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2470 the table by a character gives the corresponding glyph code. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2471 |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2472 REPERTORY specifies a repertory of characters supported by the font. |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2473 If REPERTORY is a charset, all characters beloging to the charset are |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2474 supported. If REPERTORY is a char-table, all characters who have a |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2475 non-nil value in the table are supported. It REPERTORY is nil, Emacs |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2476 gets the repertory information by an opened font and ENCODING. */); |
17052 | 2477 Vfont_encoding_alist = Qnil; |
2478 | |
17112
5c48ff325655
(syms_of_fontset): Intern Qfontset. Declare new lisp
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
2479 DEFVAR_LISP ("use-default-ascent", &Vuse_default_ascent, |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2480 doc: /* |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2481 Char table of characters whose ascent values should be ignored. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2482 If an entry for a character is non-nil, the ascent value of the glyph |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2483 is assumed to be what specified by _MULE_DEFAULT_ASCENT property of a font. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2484 |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2485 This affects how a composite character which contains |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2486 such a character is displayed on screen. */); |
19282
09a1536debb4
(Vignore_relative_composition): New variable.
Kenichi Handa <handa@m17n.org>
parents:
19172
diff
changeset
|
2487 Vuse_default_ascent = Qnil; |
09a1536debb4
(Vignore_relative_composition): New variable.
Kenichi Handa <handa@m17n.org>
parents:
19172
diff
changeset
|
2488 |
09a1536debb4
(Vignore_relative_composition): New variable.
Kenichi Handa <handa@m17n.org>
parents:
19172
diff
changeset
|
2489 DEFVAR_LISP ("ignore-relative-composition", &Vignore_relative_composition, |
88903
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2490 doc: /* |
d32a3736c4fe
(Qprepend, Qappend): New variables.
Kenichi Handa <handa@m17n.org>
parents:
88857
diff
changeset
|
2491 Char table of characters which is not composed relatively. |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2492 If an entry for a character is non-nil, a composition sequence |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2493 which contains that character is displayed so that |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2494 the glyph of that character is put without considering |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2495 an ascent and descent value of a previous character. */); |
26858
7cc081b4e084
(Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents:
26164
diff
changeset
|
2496 Vignore_relative_composition = Qnil; |
17112
5c48ff325655
(syms_of_fontset): Intern Qfontset. Declare new lisp
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
2497 |
19450
895dc2520755
(Valternate_fontname_alist): Name changed from
Kenichi Handa <handa@m17n.org>
parents:
19282
diff
changeset
|
2498 DEFVAR_LISP ("alternate-fontname-alist", &Valternate_fontname_alist, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2499 doc: /* Alist of fontname vs list of the alternate fontnames. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2500 When a specified font name is not found, the corresponding |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2501 alternate fontnames (if any) are tried instead. */); |
19450
895dc2520755
(Valternate_fontname_alist): Name changed from
Kenichi Handa <handa@m17n.org>
parents:
19282
diff
changeset
|
2502 Valternate_fontname_alist = Qnil; |
17193
dc4562b0152a
(Valternative_fontname_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17190
diff
changeset
|
2503 |
17730
4bbcc6804b5d
(Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17331
diff
changeset
|
2504 DEFVAR_LISP ("fontset-alias-alist", &Vfontset_alias_alist, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2505 doc: /* Alist of fontset names vs the aliases. */); |
28963 | 2506 Vfontset_alias_alist = Fcons (Fcons (FONTSET_NAME (Vdefault_fontset), |
2507 build_string ("fontset-default")), | |
2508 Qnil); | |
17730
4bbcc6804b5d
(Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
17331
diff
changeset
|
2509 |
26858
7cc081b4e084
(Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents:
26164
diff
changeset
|
2510 DEFVAR_LISP ("vertical-centering-font-regexp", |
7cc081b4e084
(Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents:
26164
diff
changeset
|
2511 &Vvertical_centering_font_regexp, |
41001
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2512 doc: /* *Regexp matching font names that require vertical centering on display. |
a17c8b15ef1b
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
40771
diff
changeset
|
2513 When a character is displayed with such fonts, the character is displayed |
41987
34952771ae85
Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents:
41052
diff
changeset
|
2514 at the vertical center of lines. */); |
26858
7cc081b4e084
(Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents:
26164
diff
changeset
|
2515 Vvertical_centering_font_regexp = Qnil; |
7cc081b4e084
(Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents:
26164
diff
changeset
|
2516 |
90509
c1ec6b950928
(Votf_script_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90475
diff
changeset
|
2517 DEFVAR_LISP ("otf-script-alist", &Votf_script_alist, |
c1ec6b950928
(Votf_script_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90475
diff
changeset
|
2518 doc: /* Alist of OpenType script tags vs the corresponding script names. */); |
c1ec6b950928
(Votf_script_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90475
diff
changeset
|
2519 Votf_script_alist = Qnil; |
c1ec6b950928
(Votf_script_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents:
90475
diff
changeset
|
2520 |
17052 | 2521 defsubr (&Squery_fontset); |
2522 defsubr (&Snew_fontset); | |
2523 defsubr (&Sset_fontset_font); | |
2524 defsubr (&Sfont_info); | |
28963 | 2525 defsubr (&Sinternal_char_font); |
17052 | 2526 defsubr (&Sfontset_info); |
28223
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2527 defsubr (&Sfontset_font); |
b888c69e8bf0
All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents:
26858
diff
changeset
|
2528 defsubr (&Sfontset_list); |
89610
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2529 #ifdef FONTSET_DEBUG |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2530 defsubr (&Sfontset_list_all); |
3aa74296be55
(fontset_face): Create a fallback fontset on demand
Kenichi Handa <handa@m17n.org>
parents:
89607
diff
changeset
|
2531 #endif |
17052 | 2532 } |
52401 | 2533 |
2534 /* arch-tag: ea861585-2f5f-4e5b-9849-d04a9c3a3537 | |
2535 (do not change this comment) */ |