annotate src/fontset.c @ 87392:cbfdfafa4e9d

*** empty log message ***
author Richard M. Stallman <rms@gnu.org>
date Tue, 25 Dec 2007 20:19:13 +0000
parents 8a6c1b0352a2
children 107ccd98fa12 a0e466c4d599
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1 /* Fontset handler.
75227
e90d04cd455a Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 74605
diff changeset
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
e90d04cd455a Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents: 74605
diff changeset
3 Free Software Foundation, Inc.
74605
6ee41fdd69ff Update AIST copyright years.
Kenichi Handa <handa@m17n.org>
parents: 71605
diff changeset
4 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
75364
a0b90c38e931 Add 2007 to copyright.
Glenn Morris <rgm@gnu.org>
parents: 75227
diff changeset
5 2005, 2006, 2007
67658
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 64770
diff changeset
6 National Institute of Advanced Industrial Science and Technology (AIST)
547f2b420666 Copyright fixed
Kenichi Handa <handa@m17n.org>
parents: 64770
diff changeset
7 Registration Number H14PRO021
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
9 This file is part of GNU Emacs.
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
10
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
11 GNU Emacs is free software; you can redistribute it and/or modify
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
12 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
13 the Free Software Foundation; either version 3, or (at your option)
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
14 any later version.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
15
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
16 GNU Emacs is distributed in the hope that it will be useful,
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
19 GNU General Public License for more details.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
20
17071
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
21 You should have received a copy of the GNU General Public License
70194012fb3a Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 17052
diff changeset
22 along with GNU Emacs; see the file COPYING. If not, write to
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 61823
diff changeset
23 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 61823
diff changeset
24 Boston, MA 02110-1301, USA. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
25
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
26 /* #define FONTSET_DEBUG */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
27
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
28 #include <config.h>
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
29
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
30 #ifdef FONTSET_DEBUG
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
31 #include <stdio.h>
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
32 #endif
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
33
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
34 #include "lisp.h"
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
35 #include "buffer.h"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
36 #include "charset.h"
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
37 #include "ccl.h"
31102
6a0caa788013 Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents: 30941
diff changeset
38 #include "keyboard.h"
23517
73f09e7bc96e Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents: 22719
diff changeset
39 #include "frame.h"
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
40 #include "dispextern.h"
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
41 #include "fontset.h"
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
42 #include "window.h"
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
43 #ifdef HAVE_X_WINDOWS
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
44 #include "xterm.h"
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
45 #endif
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
46 #ifdef WINDOWSNT
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
47 #include "w32term.h"
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
48 #endif
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
49 #ifdef MAC_OS
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
50 #include "macterm.h"
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
51 #endif
82992
5de4189e659d Got rid of the rif (window-based redisplay interface) global variable.
Karoly Lorentey <lorentey@elte.hu>
parents: 53353
diff changeset
52 #include "termhooks.h"
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
53
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
54 #ifdef FONTSET_DEBUG
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
55 #undef xassert
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
56 #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
57 #undef INLINE
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
58 #define INLINE
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
59 #endif
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
60
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
61
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
62 /* FONTSET
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
63
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
64 A fontset is a collection of font related information to give
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
65 similar appearance (style, size, etc) of characters. There are two
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
66 kinds of fontsets; base and realized. A base fontset is created by
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
67 new-fontset from Emacs Lisp explicitly. A realized fontset is
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
68 created implicitly when a face is realized for ASCII characters. A
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
69 face is also realized for multibyte characters based on an ASCII
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
70 face. All of the multibyte faces based on the same ASCII face
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
71 share the same realized fontset.
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
72
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
73 A fontset object is implemented by a char-table.
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 An element of a base fontset is:
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
76 (INDEX . FONTNAME) or
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
77 (INDEX . (FOUNDRY . REGISTRY ))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
78 FONTNAME is a font name pattern for the corresponding character.
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
79 FOUNDRY and REGISTRY are respectively foundry and registry fields of
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
80 a font name for the corresponding character. INDEX specifies for
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
81 which character (or generic character) the element is defined. It
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
82 may be different from an index to access this element. For
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
83 instance, if a fontset defines some font for all characters of
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
84 charset `japanese-jisx0208', INDEX is the generic character of this
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
85 charset. REGISTRY is the
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
86
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
87 An element of a realized fontset is FACE-ID which is a face to use
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
88 for displaying the corresponding character.
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
89
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
90 All single byte characters (ASCII and 8bit-unibyte) share the same
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
91 element in a fontset. The element is stored in the first element
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
92 of the fontset.
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
93
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
94 To access or set each element, use macros FONTSET_REF and
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
95 FONTSET_SET respectively for efficiency.
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
96
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
97 A fontset has 3 extra slots.
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
98
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
99 The 1st slot is an ID number of the fontset.
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
100
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
101 The 2nd slot is a name of the fontset. This is nil for a realized
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
102 face.
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
103
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
104 The 3rd slot is a frame that the fontset belongs to. This is nil
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
105 for a default face.
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
106
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
107 A parent of a base fontset is nil. A parent of a realized fontset
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
108 is a base fontset.
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
109
30398
dde5ab185aad (fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents: 30172
diff changeset
110 All fontsets are recorded in Vfontset_table.
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
111
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
112
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
113 DEFAULT FONTSET
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
114
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
115 There's a special fontset named `default fontset' which defines a
30398
dde5ab185aad (fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents: 30172
diff changeset
116 default fontname pattern. When a base fontset doesn't specify a
dde5ab185aad (fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents: 30172
diff changeset
117 font for a specific character, the corresponding value in the
dde5ab185aad (fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents: 30172
diff changeset
118 default fontset is used. The format is the same as a base fontset.
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
119
30398
dde5ab185aad (fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents: 30172
diff changeset
120 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
121 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
122
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
123
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
124 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
125 The other codes handle fontsets only by their ID numbers. They
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
126 usually use variable name `fontset' for IDs. But, in this file, we
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
127 always use variable name `id' for IDs, and name `fontset' for the
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
128 actual fontset objects.
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
129
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
130 */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
131
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
132 /********** VARIABLES and FUNCTION PROTOTYPES **********/
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
133
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
134 extern Lisp_Object Qfont;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
135 Lisp_Object Qfontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
136
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
137 /* Vector containing all fontsets. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
138 static Lisp_Object Vfontset_table;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
139
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
140 /* 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
141 fontset ID not yet used. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
142 static int next_fontset_id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
143
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
144 /* The default fontset. This gives default FAMILY and REGISTRY of
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
145 font for each characters. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
146 static Lisp_Object Vdefault_fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
147
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
148 /* Alist of font specifications. It override the font specification
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
149 in the default fontset. */
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
150 static Lisp_Object Voverriding_fontspec_alist;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
151
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
152 Lisp_Object Vfont_encoding_alist;
17112
5c48ff325655 (syms_of_fontset): Intern Qfontset. Declare new lisp
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
153 Lisp_Object Vuse_default_ascent;
19282
09a1536debb4 (Vignore_relative_composition): New variable.
Kenichi Handa <handa@m17n.org>
parents: 19172
diff changeset
154 Lisp_Object Vignore_relative_composition;
19450
895dc2520755 (Valternate_fontname_alist): Name changed from
Kenichi Handa <handa@m17n.org>
parents: 19282
diff changeset
155 Lisp_Object Valternate_fontname_alist;
17730
4bbcc6804b5d (Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17331
diff changeset
156 Lisp_Object Vfontset_alias_alist;
26858
7cc081b4e084 (Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents: 26164
diff changeset
157 Lisp_Object Vvertical_centering_font_regexp;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
158
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
159 /* 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
160 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
161 detail. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
162
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
163 /* 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
164 struct font_info *(*get_font_info_func) P_ ((FRAME_PTR f, int font_idx));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
165
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
166 /* 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
167 of `x-list-fonts' for more details. */
23517
73f09e7bc96e Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents: 22719
diff changeset
168 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
169 Lisp_Object pattern,
73f09e7bc96e Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents: 22719
diff changeset
170 int size,
73f09e7bc96e Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents: 22719
diff changeset
171 int maxnames));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
172
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
173 /* Load a font named NAME for frame F and return a pointer to the
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
174 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
175 struct font_info *(*load_font_func) P_ ((FRAME_PTR f, char *name, int));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
176
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
177 /* 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
178 struct font_info *(*query_font_func) P_ ((FRAME_PTR f, char *name));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
179
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
180 /* Additional function for setting fontset or changing fontset
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
181 contents of frame F. */
20315
931b4ddf7966 Protoize functions declarations.
Andreas Schwab <schwab@suse.de>
parents: 19450
diff changeset
182 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
183 Lisp_Object oldval));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
184
21553
2d7afcd11b72 (find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
185 /* 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
186 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
187 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
188 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
189
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
190 /* Check if any window system is used now. */
20315
931b4ddf7966 Protoize functions declarations.
Andreas Schwab <schwab@suse.de>
parents: 19450
diff changeset
191 void (*check_window_system_func) P_ ((void));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
192
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
193
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
194 /* Prototype declarations for static functions. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
195 static Lisp_Object fontset_ref P_ ((Lisp_Object, int));
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
196 static Lisp_Object lookup_overriding_fontspec P_ ((Lisp_Object, int));
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
197 static void fontset_set P_ ((Lisp_Object, int, Lisp_Object));
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
198 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
199 static int fontset_id_valid_p P_ ((int));
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
200 static Lisp_Object fontset_pattern_regexp P_ ((Lisp_Object));
35658
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
201 static Lisp_Object font_family_registry P_ ((Lisp_Object, int));
54995
df451d79772b (regularize_fontname): Renamed from regulalize_fontname.
John Paul Wallington <jpw@pobox.com>
parents: 53622
diff changeset
202 static Lisp_Object regularize_fontname P_ ((Lisp_Object));
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
203
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 /********** 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
206
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
207 /* 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
208 #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
209
30398
dde5ab185aad (fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents: 30172
diff changeset
210 /* 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
211 #define FONTSET_ID(fontset) XCHAR_TABLE (fontset)->extras[0]
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
212 #define FONTSET_NAME(fontset) XCHAR_TABLE (fontset)->extras[1]
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
213 #define FONTSET_FRAME(fontset) XCHAR_TABLE (fontset)->extras[2]
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
214 #define FONTSET_ASCII(fontset) XCHAR_TABLE (fontset)->contents[0]
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
215 #define FONTSET_BASE(fontset) XCHAR_TABLE (fontset)->parent
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
216
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
217 #define BASE_FONTSET_P(fontset) NILP (FONTSET_BASE(fontset))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
218
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
219
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
220 /* Return the element of FONTSET (char-table) at index C (character). */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
221
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
222 #define FONTSET_REF(fontset, c) fontset_ref (fontset, c)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
223
30398
dde5ab185aad (fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents: 30172
diff changeset
224 static Lisp_Object
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
225 fontset_ref (fontset, c)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
226 Lisp_Object fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
227 int c;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
228 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
229 int charset, c1, c2;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
230 Lisp_Object elt, defalt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
231
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
232 if (SINGLE_BYTE_CHAR_P (c))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
233 return FONTSET_ASCII (fontset);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
234
29011
b60861d6c1e0 (fontset_ref): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 28971
diff changeset
235 SPLIT_CHAR (c, charset, c1, c2);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
236 elt = XCHAR_TABLE (fontset)->contents[charset + 128];
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
237 if (!SUB_CHAR_TABLE_P (elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
238 return elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
239 defalt = XCHAR_TABLE (elt)->defalt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
240 if (c1 < 32
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
241 || (elt = XCHAR_TABLE (elt)->contents[c1],
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
242 NILP (elt)))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
243 return defalt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
244 if (!SUB_CHAR_TABLE_P (elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
245 return elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
246 defalt = XCHAR_TABLE (elt)->defalt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
247 if (c2 < 32
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
248 || (elt = XCHAR_TABLE (elt)->contents[c2],
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
249 NILP (elt)))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
250 return defalt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
251 return elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
252 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
253
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
254
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
255 static Lisp_Object
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
256 lookup_overriding_fontspec (frame, c)
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
257 Lisp_Object frame;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
258 int c;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
259 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
260 Lisp_Object tail;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
261
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
262 for (tail = Voverriding_fontspec_alist; CONSP (tail); tail = XCDR (tail))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
263 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
264 Lisp_Object val, target, elt;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
265
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
266 val = XCAR (tail);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
267 target = XCAR (val);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
268 val = XCDR (val);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
269 /* Now VAL is (NO-FRAME-LIST OK-FRAME-LIST CHAR FONTNAME). */
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
270 if (NILP (Fmemq (frame, XCAR (val)))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
271 && (CHAR_TABLE_P (target)
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
272 ? ! NILP (CHAR_TABLE_REF (target, c))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
273 : XINT (target) == CHAR_CHARSET (c)))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
274 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
275 val = XCDR (val);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
276 elt = XCDR (val);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
277 if (NILP (Fmemq (frame, XCAR (val))))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
278 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
279 if (! face_font_available_p (XFRAME (frame), XCDR (elt)))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
280 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
281 val = XCDR (XCAR (tail));
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
282 XSETCAR (val, Fcons (frame, XCAR (val)));
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
283 continue;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
284 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
285 XSETCAR (val, Fcons (frame, XCAR (val)));
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
286 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
287 if (NILP (XCAR (elt)))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
288 XSETCAR (elt, make_number (c));
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
289 return elt;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
290 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
291 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
292 return Qnil;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
293 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
294
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
295 #define FONTSET_REF_VIA_BASE(fontset, c) fontset_ref_via_base (fontset, &c)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
296
30398
dde5ab185aad (fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents: 30172
diff changeset
297 static Lisp_Object
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
298 fontset_ref_via_base (fontset, c)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
299 Lisp_Object fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
300 int *c;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
301 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
302 int charset, c1, c2;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
303 Lisp_Object elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
304
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
305 if (SINGLE_BYTE_CHAR_P (*c))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
306 return FONTSET_ASCII (fontset);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
307
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
308 elt = Qnil;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
309 if (! EQ (FONTSET_BASE (fontset), Vdefault_fontset))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
310 elt = FONTSET_REF (FONTSET_BASE (fontset), *c);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
311 if (NILP (elt))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
312 elt = lookup_overriding_fontspec (FONTSET_FRAME (fontset), *c);
53524
ccddf8ef9113 (fontset_ref_via_base): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 53353
diff changeset
313 if (NILP (elt))
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
314 elt = FONTSET_REF (Vdefault_fontset, *c);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
315 if (NILP (elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
316 return Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
317
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
318 *c = XINT (XCAR (elt));
29011
b60861d6c1e0 (fontset_ref): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 28971
diff changeset
319 SPLIT_CHAR (*c, charset, c1, c2);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
320 elt = XCHAR_TABLE (fontset)->contents[charset + 128];
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
321 if (c1 < 32)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
322 return (SUB_CHAR_TABLE_P (elt) ? XCHAR_TABLE (elt)->defalt : elt);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
323 if (!SUB_CHAR_TABLE_P (elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
324 return Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
325 elt = XCHAR_TABLE (elt)->contents[c1];
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
326 if (c2 < 32)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
327 return (SUB_CHAR_TABLE_P (elt) ? XCHAR_TABLE (elt)->defalt : elt);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
328 if (!SUB_CHAR_TABLE_P (elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
329 return Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
330 elt = XCHAR_TABLE (elt)->contents[c2];
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
331 return elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
332 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
333
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
334
30398
dde5ab185aad (fontset_ref): Remove INLINE declaration.
Kenichi Handa <handa@m17n.org>
parents: 30172
diff changeset
335 /* Store into the element of FONTSET at index C the value NEWELT. */
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
336 #define FONTSET_SET(fontset, c, newelt) fontset_set(fontset, c, newelt)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
337
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
338 static void
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
339 fontset_set (fontset, c, newelt)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
340 Lisp_Object fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
341 int c;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
342 Lisp_Object newelt;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
343 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
344 int charset, code[3];
34975
0d69e2d2724e (fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents: 32978
diff changeset
345 Lisp_Object *elt;
0d69e2d2724e (fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents: 32978
diff changeset
346 int i;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
347
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
348 if (SINGLE_BYTE_CHAR_P (c))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
349 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
350 FONTSET_ASCII (fontset) = newelt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
351 return;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
352 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
353
29011
b60861d6c1e0 (fontset_ref): Use SPLIT_CHAR instead of
Kenichi Handa <handa@m17n.org>
parents: 28971
diff changeset
354 SPLIT_CHAR (c, charset, code[0], code[1]);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
355 code[2] = 0; /* anchor */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
356 elt = &XCHAR_TABLE (fontset)->contents[charset + 128];
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
357 for (i = 0; code[i] > 0; i++)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
358 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
359 if (!SUB_CHAR_TABLE_P (*elt))
61736
e3221787f899 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 60511
diff changeset
360 {
e3221787f899 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 60511
diff changeset
361 Lisp_Object val = *elt;
61823
904a448ddde7 (fontset_set): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 61736
diff changeset
362 *elt = make_sub_char_table (Qnil);
61736
e3221787f899 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 60511
diff changeset
363 XCHAR_TABLE (*elt)->defalt = val;
e3221787f899 *** empty log message ***
Kenichi Handa <handa@m17n.org>
parents: 60511
diff changeset
364 }
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
365 elt = &XCHAR_TABLE (*elt)->contents[code[i]];
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
366 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
367 if (SUB_CHAR_TABLE_P (*elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
368 XCHAR_TABLE (*elt)->defalt = newelt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
369 else
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
370 *elt = newelt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
371 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
372
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
373
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
374 /* Return a newly created fontset with NAME. If BASE is nil, make a
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
375 base fontset. Otherwise make a realized fontset whose parent is
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
376 BASE. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
377
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
378 static Lisp_Object
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
379 make_fontset (frame, name, base)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
380 Lisp_Object frame, name, base;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
381 {
34975
0d69e2d2724e (fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents: 32978
diff changeset
382 Lisp_Object fontset;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
383 int size = ASIZE (Vfontset_table);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
384 int id = next_fontset_id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
385
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
386 /* 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
387 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
388 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
389 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
390 id. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
391 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
392
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
393 if (id + 1 == size)
85244
8a6c1b0352a2 (make_fontset): Use larger_vector.
Eli Zaretskii <eliz@gnu.org>
parents: 83652
diff changeset
394 Vfontset_table = larger_vector (Vfontset_table, size + 8, Qnil);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
395
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
396 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
397
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
398 FONTSET_ID (fontset) = make_number (id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
399 FONTSET_NAME (fontset) = name;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
400 FONTSET_FRAME (fontset) = frame;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
401 FONTSET_BASE (fontset) = base;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
402
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
403 AREF (Vfontset_table, id) = fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
404 next_fontset_id = id + 1;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
405 return fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
406 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
407
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
408
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
409 /* Return 1 if ID is a valid fontset id, else return 0. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
410
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
411 static INLINE int
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
412 fontset_id_valid_p (id)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
413 int id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
414 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
415 return (id >= 0 && id < ASIZE (Vfontset_table) - 1);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
416 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
417
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
418
35658
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
419 /* Extract `family' and `registry' string from FONTNAME and a cons of
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
420 them. Actually, `family' may also contain `foundry', `registry'
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
421 may also contain `encoding' of FONTNAME. But, if FONTNAME doesn't
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
422 conform to XLFD nor explicitely specifies the other fields
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
423 (i.e. not using wildcard `*'), return FONTNAME. If FORCE is
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
424 nonzero, specifications of the other fields are ignored, and return
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
425 a cons as far as FONTNAME conform to XLFD. */
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
426
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
427 static Lisp_Object
35658
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
428 font_family_registry (fontname, force)
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
429 Lisp_Object fontname;
35658
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
430 int force;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
431 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
432 Lisp_Object family, registry;
46466
9629aca792bb (font_family_registry, fs_query_fontset):
Ken Raeburn <raeburn@raeburn.org>
parents: 46440
diff changeset
433 const char *p = SDATA (fontname);
9629aca792bb (font_family_registry, fs_query_fontset):
Ken Raeburn <raeburn@raeburn.org>
parents: 46440
diff changeset
434 const char *sep[15];
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
435 int i = 0;
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
436
35658
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
437 while (*p && i < 15)
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
438 if (*p++ == '-')
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
439 {
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
440 if (!force && i >= 2 && i <= 11 && *p != '*' && p[1] != '-')
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
441 return fontname;
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
442 sep[i++] = p;
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
443 }
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
444 if (i != 14)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
445 return fontname;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
446
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
447 family = make_unibyte_string (sep[0], sep[2] - 1 - sep[0]);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
448 registry = make_unibyte_string (sep[12], p - sep[12]);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
449 return Fcons (family, registry);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
450 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
451
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
452
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
453 /********** INTERFACES TO xfaces.c and dispextern.h **********/
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
454
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
455 /* Return name of the fontset with ID. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
456
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
457 Lisp_Object
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
458 fontset_name (id)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
459 int id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
460 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
461 Lisp_Object fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
462 fontset = FONTSET_FROM_ID (id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
463 return FONTSET_NAME (fontset);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
464 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
465
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
466
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
467 /* Return ASCII font name of the fontset with ID. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
468
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
469 Lisp_Object
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
470 fontset_ascii (id)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
471 int id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
472 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
473 Lisp_Object fontset, elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
474 fontset= FONTSET_FROM_ID (id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
475 elt = FONTSET_ASCII (fontset);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
476 return XCDR (elt);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
477 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
478
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
479
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
480 /* Free fontset of FACE. Called from free_realized_face. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
481
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
482 void
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
483 free_face_fontset (f, face)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
484 FRAME_PTR f;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
485 struct face *face;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
486 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
487 if (fontset_id_valid_p (face->fontset))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
488 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
489 AREF (Vfontset_table, face->fontset) = Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
490 if (face->fontset < next_fontset_id)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
491 next_fontset_id = face->fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
492 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
493 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
494
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
495
78501
1677cf1c2509 Replace `iff' in comments.
Glenn Morris <rgm@gnu.org>
parents: 78313
diff changeset
496 /* 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
497 Otherwise return 0. Called from the macro FACE_SUITABLE_FOR_CHAR_P
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
498 when C is not a single byte character.. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
499
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
500 int
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
501 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
502 struct face *face;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
503 int c;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
504 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
505 Lisp_Object fontset, elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
506
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
507 if (SINGLE_BYTE_CHAR_P (c))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
508 return (face == face->ascii_face);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
509
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
510 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
511 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
512 xassert (!BASE_FONTSET_P (fontset));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
513
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
514 elt = FONTSET_REF_VIA_BASE (fontset, c);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
515 return (!NILP (elt) && face->id == XFASTINT (elt));
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
516 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
517
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
518
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
519 /* Return ID of face suitable for displaying character C on frame F.
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
520 The selection of face is done based on the fontset of FACE. FACE
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
521 should already have been realized for ASCII characters. Called
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
522 from the macro FACE_FOR_CHAR when C is not a single byte character. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
523
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
524 int
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
525 face_for_char (f, face, c)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
526 FRAME_PTR f;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
527 struct face *face;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
528 int c;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
529 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
530 Lisp_Object fontset, elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
531 int face_id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
532
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
533 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
534 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
535 xassert (!BASE_FONTSET_P (fontset));
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
536
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
537 elt = FONTSET_REF_VIA_BASE (fontset, c);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
538 if (!NILP (elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
539 return XINT (elt);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
540
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
541 /* No face is recorded for C in the fontset of FACE. Make a new
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
542 realized face for C that has the same fontset. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
543 face_id = lookup_face (f, face->lface, c, face);
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
544
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
545 /* Record the face ID in FONTSET at the same index as the
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
546 information in the base fontset. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
547 FONTSET_SET (fontset, c, make_number (face_id));
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
548 return face_id;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
549 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
550
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
551
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
552 /* 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
553 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
554 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
555 Called from realize_x_face. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
556
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
557 int
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
558 make_fontset_for_ascii_face (f, base_fontset_id)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
559 FRAME_PTR f;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
560 int base_fontset_id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
561 {
34975
0d69e2d2724e (fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents: 32978
diff changeset
562 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
563
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
564 XSETFRAME (frame, f);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
565 if (base_fontset_id >= 0)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
566 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
567 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
568 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
569 base_fontset = FONTSET_BASE (base_fontset);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
570 xassert (BASE_FONTSET_P (base_fontset));
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
571 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
572 else
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
573 base_fontset = Vdefault_fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
574
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
575 fontset = make_fontset (frame, Qnil, base_fontset);
28511
7a9707590ccd (make_fontset_for_ascii_face): Use XINT on return value.
Ken Raeburn <raeburn@raeburn.org>
parents: 28241
diff changeset
576 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
577 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
578
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
579
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
580 /* Return the font name pattern for C that is recorded in the fontset
35658
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
581 with ID. If a font name pattern is specified (instead of a cons of
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
582 family and registry), check if a font can be opened by that pattern
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
583 to get the fullname. If a font is opened, return that name.
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
584 Otherwise, return nil. If ID is -1, or the fontset doesn't contain
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
585 information about C, get the registry and encoding of C from the
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
586 default fontset. Called from choose_face_font. */
18346
c46e9f750033 (font_idx_temp): New temprary variable used in FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents: 18341
diff changeset
587
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
588 Lisp_Object
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
589 fontset_font_pattern (f, id, c)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
590 FRAME_PTR f;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
591 int id, c;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
592 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
593 Lisp_Object fontset, elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
594 struct font_info *fontp;
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
595
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
596 elt = Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
597 if (fontset_id_valid_p (id))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
598 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
599 fontset = FONTSET_FROM_ID (id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
600 xassert (!BASE_FONTSET_P (fontset));
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
601 fontset = FONTSET_BASE (fontset);
53622
5aba50936662 (fontset_font_pattern): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 53524
diff changeset
602 if (! EQ (fontset, Vdefault_fontset))
5aba50936662 (fontset_font_pattern): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 53524
diff changeset
603 elt = FONTSET_REF (fontset, c);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
604 }
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
605 if (NILP (elt))
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
606 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
607 Lisp_Object frame;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
608
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
609 XSETFRAME (frame, f);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
610 elt = lookup_overriding_fontspec (frame, c);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
611 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
612 if (NILP (elt))
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
613 elt = FONTSET_REF (Vdefault_fontset, c);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
614
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
615 if (!CONSP (elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
616 return Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
617 if (CONSP (XCDR (elt)))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
618 return XCDR (elt);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
619
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
620 /* The fontset specifies only a font name pattern (not cons of
35658
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
621 family and registry). If a font can be opened by that pattern,
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
622 return the name of opened font. Otherwise return nil. The
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
623 exception is a font for single byte characters. In that case, we
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
624 return a cons of FAMILY and REGISTRY extracted from the opened
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
625 font name. */
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
626 elt = XCDR (elt);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
627 xassert (STRINGP (elt));
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45848
diff changeset
628 fontp = FS_LOAD_FONT (f, c, SDATA (elt), -1);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
629 if (!fontp)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
630 return Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
631
35658
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
632 return font_family_registry (build_string (fontp->full_name),
3551e8549d4e (font_family_registry): Even if FONTNAME conform to
Kenichi Handa <handa@m17n.org>
parents: 34975
diff changeset
633 SINGLE_BYTE_CHAR_P (c));
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
634 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
635
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
636
40028
392c2fe9edd7 (fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents: 39973
diff changeset
637 #if defined(WINDOWSNT) && defined (_MSC_VER)
392c2fe9edd7 (fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents: 39973
diff changeset
638 #pragma optimize("", off)
392c2fe9edd7 (fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents: 39973
diff changeset
639 #endif
392c2fe9edd7 (fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents: 39973
diff changeset
640
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
641 /* Load a font named FONTNAME to display character C on frame F.
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
642 Return a pointer to the struct font_info of the loaded font. If
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
643 loading fails, return NULL. If FACE is non-zero and a fontset is
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
644 assigned to it, record FACE->id in the fontset for C. If FONTNAME
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
645 is NULL, the name is taken from the fontset of FACE or what
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
646 specified by ID. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
647
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
648 struct font_info *
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
649 fs_load_font (f, c, fontname, id, face)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
650 FRAME_PTR f;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
651 int c;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
652 char *fontname;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
653 int id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
654 struct face *face;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
655 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
656 Lisp_Object fontset;
57573
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
657 Lisp_Object list, elt, fullname;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
658 int size = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
659 struct font_info *fontp;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
660 int charset = CHAR_CHARSET (c);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
661
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
662 if (face)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
663 id = face->fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
664 if (id < 0)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
665 fontset = Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
666 else
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
667 fontset = FONTSET_FROM_ID (id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
668
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
669 if (!NILP (fontset)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
670 && !BASE_FONTSET_P (fontset))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
671 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
672 elt = FONTSET_REF_VIA_BASE (fontset, c);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
673 if (!NILP (elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
674 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
675 /* A suitable face for C is already recorded, which means
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
676 that a proper font is already loaded. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
677 int face_id = XINT (elt);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
678
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
679 xassert (face_id == face->id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
680 face = FACE_FROM_ID (f, face_id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
681 return (*get_font_info_func) (f, face->font_info_id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
682 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
683
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
684 if (!fontname && charset == CHARSET_ASCII)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
685 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
686 elt = FONTSET_ASCII (fontset);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45848
diff changeset
687 fontname = SDATA (XCDR (elt));
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
688 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
689 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
690
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
691 if (!fontname)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
692 /* No way to get fontname. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
693 return 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
694
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
695 fontp = (*load_font_func) (f, fontname, size);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
696 if (!fontp)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
697 return 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
698
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
699 /* Fill in members (charset, vertical_centering, encoding, etc) of
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
700 font_info structure that are not set by (*load_font_func). */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
701 fontp->charset = charset;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
702
57573
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
703 fullname = build_string (fontp->full_name);
26858
7cc081b4e084 (Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents: 26164
diff changeset
704 fontp->vertical_centering
7cc081b4e084 (Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents: 26164
diff changeset
705 = (STRINGP (Vvertical_centering_font_regexp)
57573
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
706 && (fast_string_match_ignore_case
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
707 (Vvertical_centering_font_regexp, fullname) >= 0));
26858
7cc081b4e084 (Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents: 26164
diff changeset
708
17999
5e325c8057c8 (fs_load_font): Before using a fontset, be sure to
Kenichi Handa <handa@m17n.org>
parents: 17882
diff changeset
709 if (fontp->encoding[1] != FONT_ENCODING_NOT_DECIDED)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
710 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
711 /* The font itself tells which code points to be used. Use this
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
712 encoding for all other charsets. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
713 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
714
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
715 fontp->encoding[0] = fontp->encoding[1];
17190
6637001cdb4b Adjusted for the change of MAX_CHARSET.
Kenichi Handa <handa@m17n.org>
parents: 17112
diff changeset
716 for (i = MIN_CHARSET_OFFICIAL_DIMENSION1; i <= MAX_CHARSET; i++)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
717 fontp->encoding[i] = fontp->encoding[1];
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
718 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
719 else
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
720 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
721 /* The font itself doesn't have information about encoding. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
722 int i;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
723
28766
da7e00e4eaa6 (fs_load_font): By default, use 0x00..0x7f for ASCII.
Kenichi Handa <handa@m17n.org>
parents: 28676
diff changeset
724 /* By default, encoding of ASCII chars is 0 (i.e. 0x00..0x7F),
da7e00e4eaa6 (fs_load_font): By default, use 0x00..0x7f for ASCII.
Kenichi Handa <handa@m17n.org>
parents: 28676
diff changeset
725 others is 1 (i.e. 0x80..0xFF). */
da7e00e4eaa6 (fs_load_font): By default, use 0x00..0x7f for ASCII.
Kenichi Handa <handa@m17n.org>
parents: 28676
diff changeset
726 fontp->encoding[0] = 0;
17190
6637001cdb4b Adjusted for the change of MAX_CHARSET.
Kenichi Handa <handa@m17n.org>
parents: 17112
diff changeset
727 for (i = MIN_CHARSET_OFFICIAL_DIMENSION1; i <= MAX_CHARSET; i++)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
728 fontp->encoding[i] = 1;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
729 /* Then override them by a specification in Vfont_encoding_alist. */
26164
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
730 for (list = Vfont_encoding_alist; CONSP (list); list = XCDR (list))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
731 {
26164
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
732 elt = XCAR (list);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
733 if (CONSP (elt)
26164
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
734 && STRINGP (XCAR (elt)) && CONSP (XCDR (elt))
57573
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
735 && (fast_string_match_ignore_case (XCAR (elt), fullname) >= 0))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
736 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
737 Lisp_Object tmp;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
738
26164
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
739 for (tmp = XCDR (elt); CONSP (tmp); tmp = XCDR (tmp))
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
740 if (CONSP (XCAR (tmp))
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
741 && ((i = get_charset_id (XCAR (XCAR (tmp))))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
742 >= 0)
26164
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
743 && INTEGERP (XCDR (XCAR (tmp)))
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
744 && XFASTINT (XCDR (XCAR (tmp))) < 4)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
745 fontp->encoding[i]
26164
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
746 = XFASTINT (XCDR (XCAR (tmp)));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
747 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
748 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
749 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
750
52729
124a3516f4db (fs_load_font): Don't set fontp->font_encoder to NULL
Kenichi Handa <handa@m17n.org>
parents: 52654
diff changeset
751 if (! fontp->font_encoder && find_ccl_program_func)
21553
2d7afcd11b72 (find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
752 (*find_ccl_program_func) (fontp);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
753
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
754 /* If we loaded a font for a face that has fontset, record the face
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
755 ID in the fontset for C. */
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
756 if (face
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
757 && !NILP (fontset)
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
758 && !BASE_FONTSET_P (fontset))
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
759 FONTSET_SET (fontset, c, make_number (face->id));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
760 return fontp;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
761 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
762
40028
392c2fe9edd7 (fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents: 39973
diff changeset
763 #if defined(WINDOWSNT) && defined (_MSC_VER)
392c2fe9edd7 (fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents: 39973
diff changeset
764 #pragma optimize("", on)
392c2fe9edd7 (fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents: 39973
diff changeset
765 #endif
392c2fe9edd7 (fs_load_font) [WINDOWSNT && _MSC_VER]: Disable
Andrew Innes <andrewi@gnu.org>
parents: 39973
diff changeset
766
60511
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
767 /* 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
768 not yet set. */
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
769 void
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
770 set_default_ascii_font (fontname)
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
771 Lisp_Object fontname;
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
772 {
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
773 if (! CONSP (FONTSET_ASCII (Vdefault_fontset)))
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
774 {
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
775 int id = fs_query_fontset (fontname, 2);
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
776
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
777 if (id >= 0)
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
778 fontname = XCDR (FONTSET_ASCII (FONTSET_FROM_ID (id)));
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
779 FONTSET_ASCII (Vdefault_fontset)
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
780 = Fcons (make_number (0), fontname);
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
781 }
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
782 }
7ee9d8cb89cb (set_default_ascii_font): New function.
Kenichi Handa <handa@m17n.org>
parents: 58025
diff changeset
783
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
784
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
785 /* Cache data used by fontset_pattern_regexp. The car part is a
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
786 pattern string containing at least one wild card, the cdr part is
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
787 the corresponding regular expression. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
788 static Lisp_Object Vcached_fontset_data;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
789
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45848
diff changeset
790 #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
791 #define CACHED_FONTSET_REGEX (XCDR (Vcached_fontset_data))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
792
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
793 /* If fontset name PATTERN contains any wild card, return regular
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
794 expression corresponding to PATTERN. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
795
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
796 static Lisp_Object
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
797 fontset_pattern_regexp (pattern)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
798 Lisp_Object pattern;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
799 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45848
diff changeset
800 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
801 && !index (SDATA (pattern), '?'))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
802 /* PATTERN does not contain any wild cards. */
17730
4bbcc6804b5d (Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17331
diff changeset
803 return Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
804
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
805 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
806 || strcmp (SDATA (pattern), CACHED_FONTSET_NAME))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
807 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
808 /* 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
809 unsigned char *regex, *p0, *p1;
57685
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
810 int ndashes = 0, nstars = 0;
57947
678d2c0d522e (fontset_pattern_regexp): Use unsigned char.
Kim F. Storm <storm@cua.dk>
parents: 57921
diff changeset
811
57685
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
812 for (p0 = SDATA (pattern); *p0; p0++)
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
813 {
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
814 if (*p0 == '-')
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
815 ndashes++;
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
816 else if (*p0 == '*')
57685
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
817 nstars++;
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
818 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
819
57685
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
820 /* 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
821 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
822 expression matching. */
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
823 if (ndashes < 14)
57947
678d2c0d522e (fontset_pattern_regexp): Use unsigned char.
Kim F. Storm <storm@cua.dk>
parents: 57921
diff changeset
824 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
825 else
57947
678d2c0d522e (fontset_pattern_regexp): Use unsigned char.
Kim F. Storm <storm@cua.dk>
parents: 57921
diff changeset
826 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
827
17730
4bbcc6804b5d (Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17331
diff changeset
828 *p1++ = '^';
57947
678d2c0d522e (fontset_pattern_regexp): Use unsigned char.
Kim F. Storm <storm@cua.dk>
parents: 57921
diff changeset
829 for (p0 = SDATA (pattern); *p0; p0++)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
830 {
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
831 if (*p0 == '*')
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
832 {
57685
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
833 if (ndashes < 14)
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
834 *p1++ = '.';
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
835 else
b935fc1cb542 (fontset_pattern_regexp): Optimize for the case that
Kenichi Handa <handa@m17n.org>
parents: 57573
diff changeset
836 *p1++ = '[', *p1++ = '^', *p1++ = '-', *p1++ = ']';
17730
4bbcc6804b5d (Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17331
diff changeset
837 *p1++ = '*';
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
838 }
17730
4bbcc6804b5d (Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17331
diff changeset
839 else if (*p0 == '?')
21127
577865651099 (fontset_pattern_regexp): `==' was used instead of `='.
Richard M. Stallman <rms@gnu.org>
parents: 20346
diff changeset
840 *p1++ = '.';
17730
4bbcc6804b5d (Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17331
diff changeset
841 else
4bbcc6804b5d (Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17331
diff changeset
842 *p1++ = *p0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
843 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
844 *p1++ = '$';
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
845 *p1++ = 0;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
846
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45848
diff changeset
847 Vcached_fontset_data = Fcons (build_string (SDATA (pattern)),
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
848 build_string (regex));
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
849 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
850
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
851 return CACHED_FONTSET_REGEX;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
852 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
853
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
854 /* 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
855 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
856 0: pattern containing '*' and '?' as wildcards
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
857 1: regular expression
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
858 2: literal fontset name
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
859 */
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
860
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
861 int
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
862 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
863 Lisp_Object name;
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
864 int name_pattern;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
865 {
34975
0d69e2d2724e (fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents: 32978
diff changeset
866 Lisp_Object tem;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
867 int i;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
868
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
869 name = Fdowncase (name);
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
870 if (name_pattern != 1)
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
871 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
872 tem = Frassoc (name, Vfontset_alias_alist);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
873 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
874 name = XCAR (tem);
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
875 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
876 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
877 tem = fontset_pattern_regexp (name);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
878 if (STRINGP (tem))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
879 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
880 name = tem;
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
881 name_pattern = 1;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
882 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
883 }
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
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
886 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
887 {
57573
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
888 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
889
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
890 fontset = FONTSET_FROM_ID (i);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
891 if (NILP (fontset)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
892 || !BASE_FONTSET_P (fontset))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
893 continue;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
894
57573
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
895 this_name = FONTSET_NAME (fontset);
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
896 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
897 ? 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
898 : !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
899 return i;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
900 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
901 return -1;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
902 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
903
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
904
21553
2d7afcd11b72 (find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
905 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
906 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
907 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
908 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
909 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
910 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
911 (pattern, regexpp)
21553
2d7afcd11b72 (find_ccl_program_func): New variable.
Kenichi Handa <handa@m17n.org>
parents: 21514
diff changeset
912 Lisp_Object pattern, regexpp;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
913 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
914 Lisp_Object fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
915 int id;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
916
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
917 (*check_window_system_func) ();
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
918
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
919 CHECK_STRING (pattern);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
920
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45848
diff changeset
921 if (SCHARS (pattern) == 0)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
922 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
923
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
924 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
925 if (id < 0)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
926 return Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
927
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
928 fontset = FONTSET_FROM_ID (id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
929 return FONTSET_NAME (fontset);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
930 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
931
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
932 /* Return a list of base fontset names matching PATTERN on frame F.
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
933 If SIZE is not 0, it is the size (maximum bound width) of fontsets
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
934 to be listed. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
935
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
936 Lisp_Object
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
937 list_fontsets (f, pattern, size)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
938 FRAME_PTR f;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
939 Lisp_Object pattern;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
940 int size;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
941 {
34975
0d69e2d2724e (fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents: 32978
diff changeset
942 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
943 int id;
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 XSETFRAME (frame, f);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
946
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
947 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
948 val = Qnil;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
949
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
950 for (id = 0; id < ASIZE (Vfontset_table); id++)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
951 {
57573
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
952 Lisp_Object fontset, name;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
953
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
954 fontset = FONTSET_FROM_ID (id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
955 if (NILP (fontset)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
956 || !BASE_FONTSET_P (fontset)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
957 || !EQ (frame, FONTSET_FRAME (fontset)))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
958 continue;
57573
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
959 name = FONTSET_NAME (fontset);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
960
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
961 if (!NILP (regexp)
57573
43067aee2f3e (fs_load_font): Use fast_string_match_ignore_case for
Kenichi Handa <handa@m17n.org>
parents: 56293
diff changeset
962 ? (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
963 : 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
964 continue;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
965
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
966 if (size)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
967 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
968 struct font_info *fontp;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
969 fontp = FS_LOAD_FONT (f, 0, NULL, id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
970 if (!fontp || size != fontp->size)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
971 continue;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
972 }
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
973 val = Fcons (Fcopy_sequence (FONTSET_NAME (fontset)), val);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
974 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
975
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
976 return val;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
977 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
978
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
979 DEFUN ("new-fontset", Fnew_fontset, Snew_fontset, 2, 2, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
980 doc: /* Create a new fontset NAME that contains font information in FONTLIST.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
981 FONTLIST is an alist of charsets vs corresponding font name patterns. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
982 (name, fontlist)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
983 Lisp_Object name, fontlist;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
984 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
985 Lisp_Object fontset, elements, ascii_font;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
986 Lisp_Object tem, tail, elt;
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
987 int id;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
988
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
989 (*check_window_system_func) ();
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
990
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
991 CHECK_STRING (name);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
992 CHECK_LIST (fontlist);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
993
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
994 name = Fdowncase (name);
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
995 id = fs_query_fontset (name, 2);
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
996 if (id >= 0)
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
997 {
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
998 fontset = FONTSET_FROM_ID (id);
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
999 tem = FONTSET_NAME (fontset);
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
1000 error ("Fontset `%s' matches the existing fontset `%s'",
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
1001 SDATA (name), SDATA (tem));
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
1002 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1003
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1004 /* Check the validity of FONTLIST while creating a template for
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1005 fontset elements. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1006 elements = ascii_font = Qnil;
26164
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
1007 for (tail = fontlist; CONSP (tail); tail = XCDR (tail))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1008 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1009 int c, charset;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1010
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1011 tem = XCAR (tail);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1012 if (!CONSP (tem)
26164
d39ec0a27081 more XCAR/XCDR/XFLOAT_DATA uses, to help isolete lisp engine
Ken Raeburn <raeburn@raeburn.org>
parents: 25668
diff changeset
1013 || (charset = get_charset_id (XCAR (tem))) < 0
36370
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1014 || (!STRINGP (XCDR (tem)) && !CONSP (XCDR (tem))))
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1015 error ("Elements of fontlist must be a cons of charset and font name pattern");
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1016
36370
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1017 tem = XCDR (tem);
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1018 if (STRINGP (tem))
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1019 tem = Fdowncase (tem);
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1020 else
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1021 tem = Fcons (Fdowncase (Fcar (tem)), Fdowncase (Fcdr (tem)));
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1022 if (charset == CHARSET_ASCII)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1023 ascii_font = tem;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1024 else
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1025 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1026 c = MAKE_CHAR (charset, 0, 0);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1027 elements = Fcons (Fcons (make_number (c), tem), elements);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1028 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1029 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1030
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1031 if (NILP (ascii_font))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1032 error ("No ASCII font in the fontlist");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1033
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1034 fontset = make_fontset (Qnil, name, Qnil);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1035 FONTSET_ASCII (fontset) = Fcons (make_number (0), ascii_font);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1036 for (; CONSP (elements); elements = XCDR (elements))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1037 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1038 elt = XCAR (elements);
36370
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1039 tem = XCDR (elt);
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1040 if (STRINGP (tem))
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1041 tem = font_family_registry (tem, 0);
751cb07c5f11 (Fnew_fontset): Fix handling of the case that an
Kenichi Handa <handa@m17n.org>
parents: 35663
diff changeset
1042 tem = Fcons (XCAR (elt), tem);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1043 FONTSET_SET (fontset, XINT (XCAR (elt)), tem);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1044 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1045
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1046 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1047 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1048
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 /* Clear all elements of FONTSET for multibyte characters. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1051
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1052 static void
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1053 clear_fontset_elements (fontset)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1054 Lisp_Object fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1055 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1056 int i;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1057
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1058 for (i = CHAR_TABLE_SINGLE_BYTE_SLOTS; i < CHAR_TABLE_ORDINARY_SLOTS; i++)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1059 XCHAR_TABLE (fontset)->contents[i] = Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1060 }
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
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1063 /* 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
1064 corresponding fontset. If not valid, signal an error.
49874
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1065 If NAME is nil, return Vdefault_fontset. */
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1066
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1067 static Lisp_Object
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1068 check_fontset_name (name)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1069 Lisp_Object name;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1070 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1071 int id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1072
49874
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1073 if (EQ (name, Qnil))
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1074 return Vdefault_fontset;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1075
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
1076 CHECK_STRING (name);
58025
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
1077 /* First try NAME as literal. */
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
1078 id = fs_query_fontset (name, 2);
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
1079 if (id < 0)
bcd053632eb2 (fontset_pattern_regexp): Cancel my previous change;
Kenichi Handa <handa@m17n.org>
parents: 57947
diff changeset
1080 /* 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
1081 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
1082 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
1083 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
1084 return FONTSET_FROM_ID (id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1085 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1086
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1087 /* Downcase FONTNAME or car and cdr of FONTNAME. If FONTNAME is a
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1088 string, maybe change FONTNAME to (FAMILY . REGISTRY). */
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1089
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1090 static Lisp_Object
54995
df451d79772b (regularize_fontname): Renamed from regulalize_fontname.
John Paul Wallington <jpw@pobox.com>
parents: 53622
diff changeset
1091 regularize_fontname (Lisp_Object fontname)
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1092 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1093 Lisp_Object family, registry;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1094
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1095 if (STRINGP (fontname))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1096 return font_family_registry (Fdowncase (fontname), 0);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1097
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1098 CHECK_CONS (fontname);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1099 family = XCAR (fontname);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1100 registry = XCDR (fontname);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1101 if (!NILP (family))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1102 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1103 CHECK_STRING (family);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1104 family = Fdowncase (family);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1105 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1106 if (!NILP (registry))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1107 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1108 CHECK_STRING (registry);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1109 registry = Fdowncase (registry);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1110 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1111 return Fcons (family, registry);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1112 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1113
49884
6e26943fda98 *** empty log message ***
Juanma Barranquero <lekktu@gmail.com>
parents: 49881
diff changeset
1114 DEFUN ("set-fontset-font", Fset_fontset_font, Sset_fontset_font, 3, 4, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1115 doc: /* Modify fontset NAME to use FONTNAME for CHARACTER.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1116
49881
95289e554702 (Fset_fontset_font): Document that NAME nil means the default
Kenichi Handa <handa@m17n.org>
parents: 49874
diff changeset
1117 If NAME is nil, modify the default fontset.
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1118 CHARACTER may be a cons; (FROM . TO), where FROM and TO are
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1119 non-generic characters. In that case, use FONTNAME
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1120 for all characters in the range FROM and TO (inclusive).
47277
8a4e82b00f6f (Fset_fontset_font): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46466
diff changeset
1121 CHARACTER may be a charset. In that case, use FONTNAME
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1122 for all character in the charsets.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1123
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1124 FONTNAME may be a cons; (FAMILY . REGISTRY), where FAMILY is a family
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
1125 name of a font, REGISTRY is a registry name of a font. */)
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1126 (name, character, fontname, frame)
28676
0a677c35ad99 (Fset_fontset_font): Fix docstring. Local variable
Kenichi Handa <handa@m17n.org>
parents: 28511
diff changeset
1127 Lisp_Object name, character, fontname, frame;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1128 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1129 Lisp_Object fontset, elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1130 Lisp_Object realized;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1131 int from, to;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1132 int id;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1133
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1134 fontset = check_fontset_name (name);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1135
28676
0a677c35ad99 (Fset_fontset_font): Fix docstring. Local variable
Kenichi Handa <handa@m17n.org>
parents: 28511
diff changeset
1136 if (CONSP (character))
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1137 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1138 /* CH should be (FROM . TO) where FROM and TO are non-generic
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1139 characters. */
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
1140 CHECK_NUMBER_CAR (character);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
1141 CHECK_NUMBER_CDR (character);
28676
0a677c35ad99 (Fset_fontset_font): Fix docstring. Local variable
Kenichi Handa <handa@m17n.org>
parents: 28511
diff changeset
1142 from = XINT (XCAR (character));
0a677c35ad99 (Fset_fontset_font): Fix docstring. Local variable
Kenichi Handa <handa@m17n.org>
parents: 28511
diff changeset
1143 to = XINT (XCDR (character));
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1144 if (!char_valid_p (from, 0) || !char_valid_p (to, 0))
53072
8787289602d1 Remove period at end of error message.
Jan Djärv <jan.h.d@swipnet.se>
parents: 52729
diff changeset
1145 error ("Character range should be by non-generic characters");
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1146 if (!NILP (name)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1147 && (SINGLE_BYTE_CHAR_P (from) || SINGLE_BYTE_CHAR_P (to)))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1148 error ("Can't change font for a single byte character");
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1149 }
29501
f901ec87b147 (Fset_fontset_font): The arg CHARACTER may be a charset.
Kenichi Handa <handa@m17n.org>
parents: 29233
diff changeset
1150 else if (SYMBOLP (character))
f901ec87b147 (Fset_fontset_font): The arg CHARACTER may be a charset.
Kenichi Handa <handa@m17n.org>
parents: 29233
diff changeset
1151 {
f901ec87b147 (Fset_fontset_font): The arg CHARACTER may be a charset.
Kenichi Handa <handa@m17n.org>
parents: 29233
diff changeset
1152 elt = Fget (character, Qcharset);
f901ec87b147 (Fset_fontset_font): The arg CHARACTER may be a charset.
Kenichi Handa <handa@m17n.org>
parents: 29233
diff changeset
1153 if (!VECTORP (elt) || ASIZE (elt) < 1 || !NATNUMP (AREF (elt, 0)))
46440
dd231f1390d2 (Fset_fontset_font): Use SDATA instead of XSTRING()->data.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
1154 error ("Invalid charset: %s", SDATA (SYMBOL_NAME (character)));
29501
f901ec87b147 (Fset_fontset_font): The arg CHARACTER may be a charset.
Kenichi Handa <handa@m17n.org>
parents: 29233
diff changeset
1155 from = MAKE_CHAR (XINT (AREF (elt, 0)), 0, 0);
f901ec87b147 (Fset_fontset_font): The arg CHARACTER may be a charset.
Kenichi Handa <handa@m17n.org>
parents: 29233
diff changeset
1156 to = from;
f901ec87b147 (Fset_fontset_font): The arg CHARACTER may be a charset.
Kenichi Handa <handa@m17n.org>
parents: 29233
diff changeset
1157 }
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1158 else
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1159 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
1160 CHECK_NUMBER (character);
28676
0a677c35ad99 (Fset_fontset_font): Fix docstring. Local variable
Kenichi Handa <handa@m17n.org>
parents: 28511
diff changeset
1161 from = XINT (character);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1162 to = from;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1163 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1164 if (!char_valid_p (from, 1))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1165 invalid_character (from);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1166 if (SINGLE_BYTE_CHAR_P (from))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1167 error ("Can't change font for a single byte character");
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1168 if (from < to)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1169 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1170 if (!char_valid_p (to, 1))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1171 invalid_character (to);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1172 if (SINGLE_BYTE_CHAR_P (to))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1173 error ("Can't change font for a single byte character");
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1174 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1175
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1176 /* 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
1177 the validity. */
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1178 if (!NILP (frame))
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
1179 CHECK_LIVE_FRAME (frame);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1180
54995
df451d79772b (regularize_fontname): Renamed from regulalize_fontname.
John Paul Wallington <jpw@pobox.com>
parents: 53622
diff changeset
1181 elt = Fcons (make_number (from), regularize_fontname (fontname));
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1182 for (; from <= to; from++)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1183 FONTSET_SET (fontset, from, elt);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1184 Foptimize_char_table (fontset);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1185
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1186 /* If there's a realized fontset REALIZED whose parent is FONTSET,
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1187 clear all the elements of REALIZED and free all multibyte faces
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1188 whose fontset is REALIZED. This way, the specified character(s)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1189 are surely redisplayed by a correct font. */
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1190 for (id = 0; id < ASIZE (Vfontset_table); id++)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1191 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1192 realized = AREF (Vfontset_table, id);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1193 if (!NILP (realized)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1194 && !BASE_FONTSET_P (realized)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1195 && EQ (FONTSET_BASE (realized), fontset))
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1196 {
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1197 FRAME_PTR f = XFRAME (FONTSET_FRAME (realized));
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1198 clear_fontset_elements (realized);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1199 free_realized_multibyte_face (f, id);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1200 }
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1201 }
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1202
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1203 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1204 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1205
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1206 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
1207 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
1208 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
1209 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
1210 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
1211 where
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1212 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
1213 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
1214 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
1215 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
1216 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
1217 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
1218 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
1219 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
1220 (name, frame)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1221 Lisp_Object name, frame;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1222 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1223 FRAME_PTR f;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1224 struct font_info *fontp;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1225 Lisp_Object info;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1226
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1227 (*check_window_system_func) ();
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1228
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
1229 CHECK_STRING (name);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1230 name = Fdowncase (name);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1231 if (NILP (frame))
25668
99290b59352d (Ffont_info): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 24611
diff changeset
1232 frame = selected_frame;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
1233 CHECK_LIVE_FRAME (frame);
25668
99290b59352d (Ffont_info): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 24611
diff changeset
1234 f = XFRAME (frame);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1235
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1236 if (!query_font_func)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1237 error ("Font query function is not supported");
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1238
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45848
diff changeset
1239 fontp = (*query_font_func) (f, SDATA (name));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1240 if (!fontp)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1241 return Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1242
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1243 info = Fmake_vector (make_number (7), Qnil);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1244
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1245 XVECTOR (info)->contents[0] = build_string (fontp->name);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1246 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
1247 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
1248 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
1249 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
1250 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
1251 XVECTOR (info)->contents[6] = make_number (fontp->default_ascent);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1252
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1253 return info;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1254 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1255
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1256
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1257 /* Return a cons (FONT-NAME . GLYPH-CODE).
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1258 FONT-NAME is the font name for the character at POSITION in the current
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1259 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
1260 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
1261 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
1262 default face.
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1263
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1264 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
1265
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1266 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
1267 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
1268
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1269 It returns nil in the following cases:
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1270
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1271 (1) The window system doesn't have a font for the character (thus
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1272 it is displayed by an empty box).
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1273
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1274 (2) The character code is invalid.
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1275
55094
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1276 (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
1277 in any window.
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1278
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1279 In addition, the returned font name may not take into account of
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1280 such redisplay engine hooks as what used in jit-lock-mode if
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1281 POSITION is currently not visible. */
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1282
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1283
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1284 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
1285 doc: /* For internal use only. */)
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1286 (position, ch)
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1287 Lisp_Object position, ch;
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1288 {
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1289 int pos, pos_byte, dummy;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1290 int face_id;
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1291 int c, code;
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1292 struct frame *f;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1293 struct face *face;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1294
55094
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1295 if (NILP (position))
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1296 {
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1297 CHECK_NATNUM (ch);
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1298 c = XINT (ch);
55094
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1299 f = XFRAME (selected_frame);
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1300 face_id = DEFAULT_FACE_ID;
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1301 }
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1302 else
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1303 {
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1304 Lisp_Object window;
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1305 struct window *w;
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1306
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1307 CHECK_NUMBER_COERCE_MARKER (position);
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1308 pos = XINT (position);
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1309 if (pos < BEGV || pos >= ZV)
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1310 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
1311 pos_byte = CHAR_TO_BYTE (pos);
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1312 if (NILP (ch))
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1313 c = FETCH_CHAR (pos_byte);
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1314 else
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1315 {
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1316 CHECK_NATNUM (ch);
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1317 c = XINT (ch);
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1318 }
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1319 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
1320 if (NILP (window))
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1321 return Qnil;
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1322 w = XWINDOW (window);
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1323 f = XFRAME (w->frame);
450b41d3c078 (Finternal_char_font): If POSITION is nil, return
Kenichi Handa <handa@m17n.org>
parents: 54995
diff changeset
1324 face_id = face_at_buffer_position (w, pos, -1, -1, &dummy, pos + 100, 0);
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1325 }
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1326 if (! CHAR_VALID_P (c, 0))
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1327 return Qnil;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1328 face_id = FACE_FOR_CHAR (f, FACE_FROM_ID (f, face_id), c);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1329 face = FACE_FROM_ID (f, face_id);
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1330 if (! face->font || ! face->font_name)
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1331 return Qnil;
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1332
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1333 {
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1334 struct font_info *fontp = (*get_font_info_func) (f, face->font_info_id);
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1335 XChar2b char2b;
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1336 int c1, c2, charset;
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1337
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1338 SPLIT_CHAR (c, charset, c1, c2);
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1339 if (c2 > 0)
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1340 STORE_XCHAR2B (&char2b, c1, c2);
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1341 else
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1342 STORE_XCHAR2B (&char2b, 0, c1);
82992
5de4189e659d Got rid of the rif (window-based redisplay interface) global variable.
Karoly Lorentey <lorentey@elte.hu>
parents: 53353
diff changeset
1343 FRAME_RIF (f)->encode_char (c, &char2b, fontp, NULL);
52654
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1344 code = (XCHAR2B_BYTE1 (&char2b) << 8) | XCHAR2B_BYTE2 (&char2b);
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1345 }
2e5944e29aa0 (Finternal_char_font): Change return value to
Kenichi Handa <handa@m17n.org>
parents: 52401
diff changeset
1346 return Fcons (build_string (face->font_name), make_number (code));
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1347 }
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1348
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1349
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1350 /* Called from Ffontset_info via map_char_table on each leaf of
49874
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1351 fontset. ARG is a copy of the default fontset. The current leaf
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1352 is indexed by CHARACTER and has value ELT. This function override
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1353 the copy by ELT if ELT is not nil. */
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1354
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1355 static void
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1356 override_font_info (fontset, character, elt)
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1357 Lisp_Object fontset, character, elt;
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1358 {
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1359 if (! NILP (elt))
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1360 Faset (fontset, character, elt);
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1361 }
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1362
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1363 /* Called from Ffontset_info via map_char_table on each leaf of
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1364 fontset. ARG is a list (LAST FONT-INFO ...), where LAST is `(last
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1365 ARG)' and FONT-INFOs have this form:
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1366 (CHAR FONT-SPEC) or ((FROM . TO) FONT-SPEC)
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1367 The current leaf is indexed by CHARACTER and has value ELT. This
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1368 function add the information of the current leaf to ARG by
49874
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1369 appending a new element or modifying the last element. */
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1370
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1371 static void
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1372 accumulate_font_info (arg, character, elt)
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1373 Lisp_Object arg, character, elt;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1374 {
34975
0d69e2d2724e (fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents: 32978
diff changeset
1375 Lisp_Object last, last_char, last_elt;
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1376
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
1377 if (!CONSP (elt) && !SINGLE_BYTE_CHAR_P (XINT (character)))
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
1378 elt = FONTSET_REF (Vdefault_fontset, XINT (character));
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1379 if (!CONSP (elt))
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1380 return;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1381 last = XCAR (arg);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1382 last_char = XCAR (XCAR (last));
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1383 last_elt = XCAR (XCDR (XCAR (last)));
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1384 elt = XCDR (elt);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1385 if (!NILP (Fequal (elt, last_elt)))
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1386 {
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1387 int this_charset = CHAR_CHARSET (XINT (character));
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1388
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1389 if (CONSP (last_char)) /* LAST_CHAR == (FROM . TO) */
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1390 {
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1391 if (this_charset == CHAR_CHARSET (XINT (XCAR (last_char))))
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1392 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 37744
diff changeset
1393 XSETCDR (last_char, character);
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1394 return;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1395 }
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1396 }
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
1397 else if (XINT (last_char) == XINT (character))
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
1398 return;
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
1399 else if (this_charset == CHAR_CHARSET (XINT (last_char)))
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1400 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 37744
diff changeset
1401 XSETCAR (XCAR (last), Fcons (last_char, character));
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
1402 return;
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1403 }
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1404 }
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 37744
diff changeset
1405 XSETCDR (last, Fcons (Fcons (character, Fcons (elt, Qnil)), Qnil));
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 37744
diff changeset
1406 XSETCAR (arg, XCDR (last));
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1407 }
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1408
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1409
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1410 DEFUN ("fontset-info", Ffontset_info, Sfontset_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
1411 doc: /* Return information about a fontset named NAME on frame FRAME.
49881
95289e554702 (Fset_fontset_font): Document that NAME nil means the default
Kenichi Handa <handa@m17n.org>
parents: 49874
diff changeset
1412 If NAME is nil, return information about the default fontset.
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1413 The value is a vector:
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1414 [ SIZE HEIGHT ((CHARSET-OR-RANGE FONT-SPEC OPENED ...) ...) ],
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1415 where,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1416 SIZE is the maximum bound width of ASCII font in the fontset,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1417 HEIGHT is the maximum bound height of ASCII font in the fontset,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1418 CHARSET-OR-RANGE is a charset, a character (may be a generic character)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1419 or a cons of two characters specifying the range of characters.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1420 FONT-SPEC is a fontname pattern string or a cons (FAMILY . REGISTRY),
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1421 where FAMILY is a `FAMILY' field of a XLFD font name,
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
1422 REGISTRY is a `CHARSET_REGISTRY' field of a XLFD font name.
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
1423 FAMILY may contain a `FOUNDRY' field at the head.
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1424 REGISTRY may contain a `CHARSET_ENCODING' field at the tail.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1425 OPENEDs are names of fonts actually opened.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1426 If the ASCII font is not yet opened, SIZE and HEIGHT are 0.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1427 If FRAME is omitted, it defaults to the currently selected frame. */)
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1428 (name, frame)
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1429 Lisp_Object name, frame;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1430 {
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1431 Lisp_Object fontset;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1432 FRAME_PTR f;
81794
c1184a3d99c9 (map_char_table): Use an array of int for `indices' rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 75364
diff changeset
1433 int indices[3];
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1434 Lisp_Object val, tail, elt;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1435 Lisp_Object *realized;
30124
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1436 struct font_info *fontp = NULL;
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1437 int n_realized = 0;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1438 int i;
41987
34952771ae85 Fix typos, remove unnecessary space.
Pavel Janík <Pavel@Janik.cz>
parents: 41052
diff changeset
1439
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1440 (*check_window_system_func) ();
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1441
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1442 fontset = check_fontset_name (name);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1443
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1444 if (NILP (frame))
25668
99290b59352d (Ffont_info): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 24611
diff changeset
1445 frame = selected_frame;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
1446 CHECK_LIVE_FRAME (frame);
25668
99290b59352d (Ffont_info): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 24611
diff changeset
1447 f = XFRAME (frame);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1448
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
1449 /* Recode realized fontsets whose base is FONTSET in the table
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1450 `realized'. */
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1451 realized = (Lisp_Object *) alloca (sizeof (Lisp_Object)
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1452 * ASIZE (Vfontset_table));
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1453 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
1454 {
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1455 elt = FONTSET_FROM_ID (i);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1456 if (!NILP (elt)
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1457 && EQ (FONTSET_BASE (elt), fontset))
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1458 realized[n_realized++] = elt;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1459 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1460
49874
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1461 if (! EQ (fontset, Vdefault_fontset))
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1462 {
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1463 /* Merge FONTSET onto the default fontset. */
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1464 val = Fcopy_sequence (Vdefault_fontset);
51033
8fe4bdd97052 (Ffontset_info): Pass new arg to map_char_table.
Richard M. Stallman <rms@gnu.org>
parents: 49884
diff changeset
1465 map_char_table (override_font_info, Qnil, fontset, fontset, val, 0, indices);
49874
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1466 fontset = val;
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1467 }
3bdee1887901 (check_fontset_name): If NAME is nil, return the
Kenichi Handa <handa@m17n.org>
parents: 49286
diff changeset
1468
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1469 /* Accumulate information of the fontset in VAL. The format is
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1470 (LAST FONT-INFO FONT-INFO ...), where FONT-INFO is (CHAR-OR-RANGE
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1471 FONT-SPEC). See the comment for accumulate_font_info for the
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1472 detail. */
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1473 val = Fcons (Fcons (make_number (0),
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1474 Fcons (XCDR (FONTSET_ASCII (fontset)), Qnil)),
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1475 Qnil);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1476 val = Fcons (val, val);
51033
8fe4bdd97052 (Ffontset_info): Pass new arg to map_char_table.
Richard M. Stallman <rms@gnu.org>
parents: 49884
diff changeset
1477 map_char_table (accumulate_font_info, Qnil, fontset, fontset, val, 0, indices);
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1478 val = XCDR (val);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1479
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1480 /* For each FONT-INFO, if CHAR_OR_RANGE (car part) is a generic
29767
c8e5453dc85d (FONTSET_ASCII): Use the first element of char table
Kenichi Handa <handa@m17n.org>
parents: 29501
diff changeset
1481 character for a charset, replace it with the charset symbol. If
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1482 fonts are opened for FONT-SPEC, append the names of the fonts to
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1483 FONT-SPEC. */
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1484 for (tail = val; CONSP (tail); tail = XCDR (tail))
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1485 {
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1486 int c;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1487 elt = XCAR (tail);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1488 if (INTEGERP (XCAR (elt)))
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1489 {
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1490 int charset, c1, c2;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1491 c = XINT (XCAR (elt));
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1492 SPLIT_CHAR (c, charset, c1, c2);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1493 if (c1 == 0)
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 37744
diff changeset
1494 XSETCAR (elt, CHARSET_SYMBOL (charset));
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1495 }
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1496 else
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1497 c = XINT (XCAR (XCAR (elt)));
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1498 for (i = 0; i < n_realized; i++)
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1499 {
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1500 Lisp_Object face_id, font;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1501 struct face *face;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1502
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1503 face_id = FONTSET_REF_VIA_BASE (realized[i], c);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1504 if (INTEGERP (face_id))
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1505 {
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1506 face = FACE_FROM_ID (f, XINT (face_id));
37744
7893c43d43c2 (Ffontset_info): Check that face is non-null
Gerd Moellmann <gerd@gnu.org>
parents: 36759
diff changeset
1507 if (face && face->font && face->font_name)
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1508 {
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1509 font = build_string (face->font_name);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1510 if (NILP (Fmember (font, XCDR (XCDR (elt)))))
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 37744
diff changeset
1511 XSETCDR (XCDR (elt), Fcons (font, XCDR (XCDR (elt))));
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1512 }
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1513 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1514 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1515 }
30124
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1516
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1517 elt = Fcdr (Fcdr (Fassq (CHARSET_SYMBOL (CHARSET_ASCII), val)));
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1518 if (CONSP (elt))
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1519 {
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1520 elt = XCAR (elt);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 45848
diff changeset
1521 fontp = (*query_font_func) (f, SDATA (elt));
30124
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1522 }
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1523 val = Fmake_vector (make_number (3), val);
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1524 AREF (val, 0) = fontp ? make_number (fontp->size) : make_number (0);
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1525 AREF (val, 1) = fontp ? make_number (fontp->height) : make_number (0);
26076259e03f (Ffontset_info): Make the return value more compatible
Kenichi Handa <handa@m17n.org>
parents: 29767
diff changeset
1526 return val;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1527 }
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1528
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1529 DEFUN ("fontset-font", Ffontset_font, Sfontset_font, 2, 2, 0,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1530 doc: /* Return a font name pattern for character CH in fontset NAME.
49881
95289e554702 (Fset_fontset_font): Document that NAME nil means the default
Kenichi Handa <handa@m17n.org>
parents: 49874
diff changeset
1531 If NAME is nil, find a font name pattern in the default fontset. */)
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1532 (name, ch)
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1533 Lisp_Object name, ch;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1534 {
34975
0d69e2d2724e (fontset_ref): Remove unused variable `i'.
Eli Zaretskii <eliz@gnu.org>
parents: 32978
diff changeset
1535 int c;
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1536 Lisp_Object fontset, elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1537
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1538 fontset = check_fontset_name (name);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1539
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40028
diff changeset
1540 CHECK_NUMBER (ch);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1541 c = XINT (ch);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1542 if (!char_valid_p (c, 1))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1543 invalid_character (c);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1544
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1545 elt = FONTSET_REF (fontset, c);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1546 if (CONSP (elt))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1547 elt = XCDR (elt);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1548
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1549 return elt;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1550 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1551
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1552 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
1553 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
1554 ()
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1555 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1556 Lisp_Object fontset, list;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1557 int i;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1558
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1559 list = Qnil;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1560 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
1561 {
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1562 fontset = FONTSET_FROM_ID (i);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1563 if (!NILP (fontset)
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1564 && BASE_FONTSET_P (fontset))
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1565 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
1566 }
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1567
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1568 return list;
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1569 }
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1570
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1571 DEFUN ("set-overriding-fontspec-internal", Fset_overriding_fontspec_internal,
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1572 Sset_overriding_fontspec_internal, 1, 1, 0,
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1573 doc: /* Internal use only.
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1574
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1575 FONTLIST is an alist of TARGET vs FONTNAME, where TARGET is a charset
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1576 or a char-table, FONTNAME have the same meanings as in
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1577 `set-fontset-font'.
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1578
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1579 It overrides the font specifications for each TARGET in the default
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1580 fontset by the corresponding FONTNAME.
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1581
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1582 If TARGET is a charset, targets are all characters in the charset. If
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1583 TARGET is a char-table, targets are characters whose value is non-nil
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1584 in the table.
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1585
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1586 It is intended that this function is called only from
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1587 `set-language-environment'. */)
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1588 (fontlist)
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1589 Lisp_Object fontlist;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1590 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1591 Lisp_Object tail;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1592
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1593 fontlist = Fcopy_sequence (fontlist);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1594 /* Now FONTLIST is ((TARGET . FONTNAME) ...). Reform it to ((TARGET
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1595 nil nil nil FONTSPEC) ...), where TARGET is a charset-id or a
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1596 char-table. */
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1597 for (tail = fontlist; CONSP (tail); tail = XCDR (tail))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1598 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1599 Lisp_Object elt, target;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1600
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1601 elt = XCAR (tail);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1602 target = Fcar (elt);
54995
df451d79772b (regularize_fontname): Renamed from regulalize_fontname.
John Paul Wallington <jpw@pobox.com>
parents: 53622
diff changeset
1603 elt = Fcons (Qnil, regularize_fontname (Fcdr (elt)));
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1604 if (! CHAR_TABLE_P (target))
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1605 {
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1606 int charset, c;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1607
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1608 CHECK_SYMBOL (target);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1609 charset = get_charset_id (target);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1610 if (charset < 0)
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1611 error ("Invalid charset %s", SDATA (SYMBOL_NAME (target)));
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1612 target = make_number (charset);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1613 c = MAKE_CHAR (charset, 0, 0);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1614 XSETCAR (elt, make_number (c));
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1615 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1616 elt = Fcons (target, Fcons (Qnil, Fcons (Qnil, elt)));
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1617 XSETCAR (tail, elt);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1618 }
71605
5ae0c66d4176 (Fset_overriding_fontspec_internal): Check if we need
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1619 if (! NILP (Fequal (fontlist, Voverriding_fontspec_alist)))
5ae0c66d4176 (Fset_overriding_fontspec_internal): Check if we need
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1620 return Qnil;
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1621 Voverriding_fontspec_alist = fontlist;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1622 clear_face_cache (0);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1623 ++windows_or_buffers_changed;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1624 return Qnil;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1625 }
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1626
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21127
diff changeset
1627 void
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1628 syms_of_fontset ()
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1629 {
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1630 if (!load_font_func)
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1631 /* Window system initializer should have set proper functions. */
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1632 abort ();
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1633
17112
5c48ff325655 (syms_of_fontset): Intern Qfontset. Declare new lisp
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
1634 Qfontset = intern ("fontset");
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1635 staticpro (&Qfontset);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1636 Fput (Qfontset, Qchar_table_extra_slots, make_number (3));
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1637
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1638 Vcached_fontset_data = Qnil;
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1639 staticpro (&Vcached_fontset_data);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1640
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1641 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
1642 staticpro (&Vfontset_table);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1643
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1644 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
1645 staticpro (&Vdefault_fontset);
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1646 FONTSET_ID (Vdefault_fontset) = make_number (0);
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1647 FONTSET_NAME (Vdefault_fontset)
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1648 = build_string ("-*-*-*-*-*-*-*-*-*-*-*-*-fontset-default");
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1649 AREF (Vfontset_table, 0) = Vdefault_fontset;
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1650 next_fontset_id = 1;
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1651
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1652 Voverriding_fontspec_alist = Qnil;
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1653 staticpro (&Voverriding_fontspec_alist);
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1654
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1655 DEFVAR_LISP ("font-encoding-alist", &Vfont_encoding_alist,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1656 doc: /* Alist of fontname patterns vs corresponding encoding info.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1657 Each element looks like (REGEXP . ENCODING-INFO),
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1658 where ENCODING-INFO is an alist of CHARSET vs ENCODING.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1659 ENCODING is one of the following integer values:
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1660 0: code points 0x20..0x7F or 0x2020..0x7F7F are used,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1661 1: code points 0xA0..0xFF or 0xA0A0..0xFFFF are used,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1662 2: code points 0x20A0..0x7FFF are used,
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1663 3: code points 0xA020..0xFF7F are used. */);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1664 Vfont_encoding_alist = Qnil;
49286
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1665 Vfont_encoding_alist
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1666 = Fcons (Fcons (build_string ("JISX0201"),
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1667 Fcons (Fcons (intern ("latin-jisx0201"), make_number (0)),
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1668 Qnil)),
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1669 Vfont_encoding_alist);
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1670 Vfont_encoding_alist
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1671 = Fcons (Fcons (build_string ("ISO8859-1"),
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1672 Fcons (Fcons (intern ("ascii"), make_number (0)),
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1673 Qnil)),
fc85fba774da (syms_of_fontset): Setup Vfont_encoding_alist here.
Kenichi Handa <handa@m17n.org>
parents: 47277
diff changeset
1674 Vfont_encoding_alist);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1675
17112
5c48ff325655 (syms_of_fontset): Intern Qfontset. Declare new lisp
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
1676 DEFVAR_LISP ("use-default-ascent", &Vuse_default_ascent,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1677 doc: /* Char table of characters whose ascent values should be ignored.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1678 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
1679 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
1680
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1681 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
1682 such a character is displayed on screen. */);
19282
09a1536debb4 (Vignore_relative_composition): New variable.
Kenichi Handa <handa@m17n.org>
parents: 19172
diff changeset
1683 Vuse_default_ascent = Qnil;
09a1536debb4 (Vignore_relative_composition): New variable.
Kenichi Handa <handa@m17n.org>
parents: 19172
diff changeset
1684
09a1536debb4 (Vignore_relative_composition): New variable.
Kenichi Handa <handa@m17n.org>
parents: 19172
diff changeset
1685 DEFVAR_LISP ("ignore-relative-composition", &Vignore_relative_composition,
41001
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1686 doc: /* Char table of characters which is not composed relatively.
a17c8b15ef1b Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 40771
diff changeset
1687 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
1688 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
1689 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
1690 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
1691 Vignore_relative_composition = Qnil;
17112
5c48ff325655 (syms_of_fontset): Intern Qfontset. Declare new lisp
Kenichi Handa <handa@m17n.org>
parents: 17071
diff changeset
1692
19450
895dc2520755 (Valternate_fontname_alist): Name changed from
Kenichi Handa <handa@m17n.org>
parents: 19282
diff changeset
1693 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
1694 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
1695 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
1696 alternate fontnames (if any) are tried instead. */);
19450
895dc2520755 (Valternate_fontname_alist): Name changed from
Kenichi Handa <handa@m17n.org>
parents: 19282
diff changeset
1697 Valternate_fontname_alist = Qnil;
17193
dc4562b0152a (Valternative_fontname_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17190
diff changeset
1698
17730
4bbcc6804b5d (Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17331
diff changeset
1699 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
1700 doc: /* Alist of fontset names vs the aliases. */);
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1701 Vfontset_alias_alist = Fcons (Fcons (FONTSET_NAME (Vdefault_fontset),
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1702 build_string ("fontset-default")),
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1703 Qnil);
17730
4bbcc6804b5d (Vfontset_alias_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 17331
diff changeset
1704
26858
7cc081b4e084 (Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents: 26164
diff changeset
1705 DEFVAR_LISP ("vertical-centering-font-regexp",
7cc081b4e084 (Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents: 26164
diff changeset
1706 &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
1707 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
1708 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
1709 at the vertical center of lines. */);
26858
7cc081b4e084 (Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents: 26164
diff changeset
1710 Vvertical_centering_font_regexp = Qnil;
7cc081b4e084 (Vvertical_centering_font_regexp): New variable.
Kenichi Handa <handa@m17n.org>
parents: 26164
diff changeset
1711
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1712 defsubr (&Squery_fontset);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1713 defsubr (&Snew_fontset);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1714 defsubr (&Sset_fontset_font);
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1715 defsubr (&Sfont_info);
28963
24af4ff8f7b6 Include "buffer.h".
Kenichi Handa <handa@m17n.org>
parents: 28766
diff changeset
1716 defsubr (&Sinternal_char_font);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1717 defsubr (&Sfontset_info);
28223
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1718 defsubr (&Sfontset_font);
b888c69e8bf0 All codes rewritten or adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26858
diff changeset
1719 defsubr (&Sfontset_list);
53353
b085f18ebcf0 (Voverriding_fontspec_alist): New variable.
Kenichi Handa <handa@m17n.org>
parents: 53072
diff changeset
1720 defsubr (&Sset_overriding_fontspec_internal);
17052
d0d7b244b1d0 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1721 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51033
diff changeset
1722
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51033
diff changeset
1723 /* arch-tag: ea861585-2f5f-4e5b-9849-d04a9c3a3537
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51033
diff changeset
1724 (do not change this comment) */