Mercurial > emacs
annotate src/composite.h @ 63576:7c3d537469b0
(grep-regexp-alist): Use backreference at the
end of first regexp to limit the match to the position between
line number and source line with same separator character as used
between file name and line number. In the second regexp limit
mouse-face area to file name and line number by adding new group
for them and referring it in HYPERLINK arg.
(grep-regexp-alist, grep-mode-font-lock-keywords): Use shy group.
(grep-mode): Set font-lock-lines-before to 0 to not refontify the
previous line where grep markers may be already removed.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Sat, 18 Jun 2005 12:56:14 +0000 |
parents | 695cf19ef79e |
children | a8fa7c632ee4 375f2633d815 |
rev | line source |
---|---|
26848 | 1 /* Header for composite sequence handler. |
2 Copyright (C) 1999 Electrotechnical Laboratory, JAPAN. | |
3 Licensed to the Free Software Foundation. | |
38484
924488395239
(syms_of_composite): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
37240
diff
changeset
|
4 Copyright (C) 2001 Free Software Foundation, Inc. |
26848 | 5 |
6 This file is part of GNU Emacs. | |
7 | |
8 GNU Emacs is free software; you can redistribute it and/or modify | |
9 it under the terms of the GNU General Public License as published by | |
10 the Free Software Foundation; either version 2, or (at your option) | |
11 any later version. | |
12 | |
13 GNU Emacs is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with GNU Emacs; see the file COPYING. If not, write to | |
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
21 Boston, MA 02111-1307, USA. */ | |
22 | |
29572
d88f50e982a1
(EMACS_COMPOSITE_H): Renamed from _COMPOSITE_H.
Kenichi Handa <handa@m17n.org>
parents:
26992
diff
changeset
|
23 #ifndef EMACS_COMPOSITE_H |
d88f50e982a1
(EMACS_COMPOSITE_H): Renamed from _COMPOSITE_H.
Kenichi Handa <handa@m17n.org>
parents:
26992
diff
changeset
|
24 #define EMACS_COMPOSITE_H |
26848 | 25 |
26 /* Methods to display a sequence of components a composition. */ | |
27 enum composition_method { | |
28 /* The first two are actually not methods, but used in code | |
29 conversion to specify the current composing status. */ | |
30 COMPOSITION_DISABLED, /* Never handle composition data */ | |
31 COMPOSITION_NO, /* Not processing composition data */ | |
32 /* Compose relatively without alternate characters. */ | |
33 COMPOSITION_RELATIVE, | |
34 /* Compose by specified composition rule. This is not used in Emacs | |
35 21 but we need it to decode files saved in the older versions of | |
36 Emacs. */ | |
37 COMPOSITION_WITH_RULE, | |
38 /* Compose relatively with alternate characters. */ | |
39 COMPOSITION_WITH_ALTCHARS, | |
40 /* Compose by specified composition rule with alternate characters. */ | |
41 COMPOSITION_WITH_RULE_ALTCHARS | |
42 }; | |
43 | |
44 /* Maximum number of compoments a single composition can have. */ | |
45 #define MAX_COMPOSITION_COMPONENTS 16 | |
46 | |
47 /* These macros access information about a composition that | |
48 has `composition' property PROP. PROP is: | |
49 ((LENGTH . COMPONENTS) . MODIFICATION-FUNC) | |
50 or | |
51 (COMPOSITION-ID . (LENGTH COMPONENTS . MODIFICATION-FUNC)) | |
52 They don't check validity of PROP. */ | |
53 | |
54 /* Temporary variable used only in the following macros. */ | |
55 extern Lisp_Object composition_temp; | |
56 | |
57 /* Return 1 iff the composition is already registered. */ | |
58 #define COMPOSITION_REGISTERD_P(prop) INTEGERP (XCAR (prop)) | |
59 | |
60 /* Return ID number of the already registered composition. */ | |
61 #define COMPOSITION_ID(prop) XINT (XCAR (prop)) | |
62 | |
63 /* Return length of the composition. */ | |
64 #define COMPOSITION_LENGTH(prop) \ | |
65 (COMPOSITION_REGISTERD_P (prop) \ | |
66 ? XINT (XCAR (XCDR (prop))) \ | |
67 : XINT (XCAR (XCAR (prop)))) | |
68 | |
69 /* Return components of the composition. */ | |
70 #define COMPOSITION_COMPONENTS(prop) \ | |
71 (COMPOSITION_REGISTERD_P (prop) \ | |
72 ? XCAR (XCDR (XCDR (prop))) \ | |
73 : XCDR (XCAR (prop))) | |
74 | |
75 /* Return modification function of the composition. */ | |
76 #define COMPOSITION_MODIFICATION_FUNC(prop) \ | |
77 (COMPOSITION_REGISTERD_P (prop) \ | |
78 ? XCDR (XCDR (XCDR (prop))) \ | |
46939
6c76daadf530
(COMPOSITION_MODIFICATION_FUNC): If PROP is not a cons, return Qnil.
Kenichi Handa <handa@m17n.org>
parents:
38484
diff
changeset
|
79 : CONSP (prop) ? XCDR (prop) : Qnil) |
26848 | 80 |
81 /* Return the method of composition. */ | |
82 #define COMPOSITION_METHOD(prop) \ | |
83 (COMPOSITION_REGISTERD_P (prop) \ | |
84 ? composition_table[COMPOSITION_ID (prop)]->method \ | |
85 : (composition_temp = XCDR (XCAR (prop)), \ | |
86 (NILP (composition_temp) \ | |
87 ? COMPOSITION_RELATIVE \ | |
88 : ((INTEGERP (composition_temp) || STRINGP (composition_temp)) \ | |
89 ? COMPOSITION_WITH_ALTCHARS \ | |
90 : COMPOSITION_WITH_RULE_ALTCHARS)))) | |
91 | |
92 /* Return 1 iff the composition is valid. It is valid if length of | |
93 the composition equals to (END - START). */ | |
37240
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
94 #define COMPOSITION_VALID_P(start, end, prop) \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
95 (CONSP (prop) \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
96 && (COMPOSITION_REGISTERD_P (prop) \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
97 ? (COMPOSITION_ID (prop) >= 0 \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
98 && COMPOSITION_ID (prop) <= n_compositions \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
99 && CONSP (XCDR (prop))) \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
100 : (composition_temp = XCAR (prop), \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
101 (CONSP (composition_temp) \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
102 && (composition_temp = XCDR (composition_temp), \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
103 (NILP (composition_temp) \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
104 || STRINGP (composition_temp) \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
105 || VECTORP (composition_temp) \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
106 || INTEGERP (composition_temp) \ |
77c7dc464611
(COMPOSITION_VALID_P): Allow integers as cdrs of
Gerd Moellmann <gerd@gnu.org>
parents:
36691
diff
changeset
|
107 || CONSP (composition_temp)))))) \ |
26848 | 108 && (end - start) == COMPOSITION_LENGTH (prop)) |
109 | |
110 /* Return the Nth glyph of composition specified by CMP. CMP is a | |
111 pointer to `struct composition'. */ | |
112 #define COMPOSITION_GLYPH(cmp, n) \ | |
113 XINT (XVECTOR (XVECTOR (XHASH_TABLE (composition_hash_table) \ | |
114 ->key_and_value) \ | |
115 ->contents[cmp->hash_index * 2]) \ | |
116 ->contents[cmp->method == COMPOSITION_WITH_RULE_ALTCHARS \ | |
117 ? (n) * 2 : (n)]) | |
118 | |
119 /* Return the encoded composition rule to compose the Nth glyph of | |
120 rule-base composition specified by CMP. CMP is a pointer to | |
121 `struct composition'. */ | |
122 #define COMPOSITION_RULE(cmp, n) \ | |
123 XINT (XVECTOR (XVECTOR (XHASH_TABLE (composition_hash_table) \ | |
124 ->key_and_value) \ | |
125 ->contents[cmp->hash_index * 2]) \ | |
126 ->contents[(n) * 2 - 1]) | |
127 | |
128 /* Decode encoded composition rule RULE_CODE into GREF (global | |
129 reference point code) and NREF (new reference point code). Don't | |
130 check RULE_CODE, always set GREF and NREF to valid values. */ | |
131 #define COMPOSITION_DECODE_RULE(rule_code, gref, nref) \ | |
132 do { \ | |
133 gref = (rule_code) / 12; \ | |
134 if (gref > 12) gref = 11; \ | |
135 nref = (rule_code) % 12; \ | |
136 } while (0) | |
137 | |
138 /* Return encoded composition rule for the pair of global reference | |
139 point GREF and new reference point NREF. If arguments are invalid, | |
140 return -1. */ | |
141 #define COMPOSITION_ENCODE_RULE(gref, nref) \ | |
142 ((unsigned) (gref) < 12 && (unsigned) (nref) < 12 \ | |
143 ? (gref) * 12 + (nref) : -1) | |
144 | |
145 /* Data structure that records information about a composition | |
146 currently used in some buffers or strings. | |
147 | |
148 When a composition is assigned an ID number (by | |
149 get_composition_id), this structure is allocated for the | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
46939
diff
changeset
|
150 composition and linked in composition_table[ID]. |
26848 | 151 |
152 Identical compositions appearing at different places have the same | |
153 ID, and thus share the same instance of this structure. */ | |
154 | |
155 struct composition { | |
36691
144162f5b2e3
(struct composition): Change types of members; glyph_len to unsigned,
Kenichi Handa <handa@m17n.org>
parents:
33239
diff
changeset
|
156 /* Number of glyphs of the composition components. */ |
144162f5b2e3
(struct composition): Change types of members; glyph_len to unsigned,
Kenichi Handa <handa@m17n.org>
parents:
33239
diff
changeset
|
157 unsigned glyph_len; |
144162f5b2e3
(struct composition): Change types of members; glyph_len to unsigned,
Kenichi Handa <handa@m17n.org>
parents:
33239
diff
changeset
|
158 |
144162f5b2e3
(struct composition): Change types of members; glyph_len to unsigned,
Kenichi Handa <handa@m17n.org>
parents:
33239
diff
changeset
|
159 /* Width, ascent, and descent pixels of the composition. */ |
144162f5b2e3
(struct composition): Change types of members; glyph_len to unsigned,
Kenichi Handa <handa@m17n.org>
parents:
33239
diff
changeset
|
160 short pixel_width, ascent, descent; |
144162f5b2e3
(struct composition): Change types of members; glyph_len to unsigned,
Kenichi Handa <handa@m17n.org>
parents:
33239
diff
changeset
|
161 |
26848 | 162 /* How many columns the overall glyphs occupy on the screen. This |
163 gives an approximate value for column calculation in | |
164 Fcurrent_column, and etc. */ | |
36691
144162f5b2e3
(struct composition): Change types of members; glyph_len to unsigned,
Kenichi Handa <handa@m17n.org>
parents:
33239
diff
changeset
|
165 unsigned short width; |
26992
c7f8ea6a37bd
(struct composition): Change the order of declaring
Kenichi Handa <handa@m17n.org>
parents:
26848
diff
changeset
|
166 |
26848 | 167 /* Method of the composition. */ |
168 enum composition_method method; | |
169 | |
170 /* Index to the composition hash table. */ | |
171 int hash_index; | |
172 | |
173 /* For which font we have calculated the remaining members. The | |
174 actual type is device dependent. */ | |
175 void *font; | |
176 | |
177 /* Pointer to an array of x-offset and y-offset (by pixels) of | |
178 glyphs. This points to a sufficient memory space (sizeof (int) * | |
179 glyph_len * 2) that is allocated when the composition is | |
180 registered in composition_table. X-offset and Y-offset of Nth | |
181 glyph are (2N)th and (2N+1)th elements respectively. */ | |
182 short *offsets; | |
183 }; | |
184 | |
185 /* Table of pointers to the structure `composition' indexed by | |
186 COMPOSITION-ID. */ | |
187 extern struct composition **composition_table; | |
188 /* Number of the currently registered compositions. */ | |
189 extern int n_compositions; | |
190 | |
191 /* Mask bits for CHECK_MASK arg to update_compositions. | |
192 For a change in the region FROM and TO, check compositions ... */ | |
193 #define CHECK_HEAD 1 /* adjacent to FROM */ | |
194 #define CHECK_TAIL 2 /* adjacent to TO */ | |
195 #define CHECK_INSIDE 4 /* between FROM and TO */ | |
196 #define CHECK_BORDER (CHECK_HEAD | CHECK_TAIL) | |
197 #define CHECK_ALL (CHECK_BORDER | CHECK_INSIDE) | |
198 | |
199 extern Lisp_Object Qcomposition; | |
200 extern Lisp_Object composition_hash_table; | |
201 | |
202 extern int get_composition_id P_ ((int, int, int, Lisp_Object, Lisp_Object)); | |
203 extern int find_composition P_ ((int, int, int *, int *, Lisp_Object *, | |
204 Lisp_Object)); | |
205 extern void update_compositions P_ ((int, int, int)); | |
30025
c5eb8840659f
(make_composition_value_copy): Extern it.
Kenichi Handa <handa@m17n.org>
parents:
29895
diff
changeset
|
206 extern void make_composition_value_copy P_ ((Lisp_Object)); |
26848 | 207 extern void compose_region P_ ((int, int, Lisp_Object, Lisp_Object, |
208 Lisp_Object)); | |
38484
924488395239
(syms_of_composite): Renamed from
Gerd Moellmann <gerd@gnu.org>
parents:
37240
diff
changeset
|
209 extern void syms_of_composite P_ ((void)); |
29895 | 210 extern void compose_text P_ ((int, int, Lisp_Object, Lisp_Object, |
211 Lisp_Object)); | |
33239
fdc59b687d25
(compose_chars_in_text): Add prototype.
Kenichi Handa <handa@m17n.org>
parents:
30025
diff
changeset
|
212 extern void compose_chars_in_text P_ ((int, int, Lisp_Object)); |
26848 | 213 |
29572
d88f50e982a1
(EMACS_COMPOSITE_H): Renamed from _COMPOSITE_H.
Kenichi Handa <handa@m17n.org>
parents:
26992
diff
changeset
|
214 #endif /* not EMACS_COMPOSITE_H */ |
52401 | 215 |
216 /* arch-tag: 59524d89-c645-47bd-b5e6-65e861690118 | |
217 (do not change this comment) */ |