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