Mercurial > emacs
annotate src/fns.c @ 21342:efdf4fe4875b
(Fstring_as_multibyte): Never return unibyte string unchanged.
Set size_byte field.
| author | Richard M. Stallman <rms@gnu.org> |
|---|---|
| date | Thu, 02 Apr 1998 22:48:51 +0000 |
| parents | 91933098b4ae |
| children | 456146137d23 |
| rev | line source |
|---|---|
| 211 | 1 /* Random utility Lisp functions. |
| 20706 | 2 Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 1998 Free Software Foundation, Inc. |
| 211 | 3 |
| 4 This file is part of GNU Emacs. | |
| 5 | |
| 6 GNU Emacs is free software; you can redistribute it and/or modify | |
| 7 it under the terms of the GNU General Public License as published by | |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
8 the Free Software Foundation; either version 2, or (at your option) |
| 211 | 9 any later version. |
| 10 | |
| 11 GNU Emacs is distributed in the hope that it will be useful, | |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 GNU General Public License for more details. | |
| 15 | |
| 16 You should have received a copy of the GNU General Public License | |
| 17 along with GNU Emacs; see the file COPYING. If not, write to | |
|
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14097
diff
changeset
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14097
diff
changeset
|
19 Boston, MA 02111-1307, USA. */ |
| 211 | 20 |
| 21 | |
|
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4616
diff
changeset
|
22 #include <config.h> |
| 211 | 23 |
| 24 /* Note on some machines this defines `vector' as a typedef, | |
| 25 so make sure we don't use that name in this file. */ | |
| 26 #undef vector | |
| 27 #define vector ***** | |
| 28 | |
| 29 #include "lisp.h" | |
| 30 #include "commands.h" | |
|
17182
47bfc66eb7f1
(map_char_table): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17063
diff
changeset
|
31 #include "charset.h" |
| 211 | 32 |
| 33 #include "buffer.h" | |
|
1513
7381accd610d
* fns.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents:
1194
diff
changeset
|
34 #include "keyboard.h" |
|
4004
71541ea16adf
* fns.c (Fsubstring, concat): Pass all six arguments to
Jim Blandy <jimb@redhat.com>
parents:
3379
diff
changeset
|
35 #include "intervals.h" |
|
16561
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
36 #include "frame.h" |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
37 #include "window.h" |
| 211 | 38 |
| 12062 | 39 #ifndef NULL |
| 40 #define NULL (void *)0 | |
| 41 #endif | |
| 42 | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
43 /* Nonzero enables use of dialog boxes for questions |
|
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
44 asked by mouse commands. */ |
|
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
45 int use_dialog_box; |
|
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
46 |
|
8901
ab65a3dae221
(Frandom): Fix Lisp_Object vs. int problems.
Karl Heuer <kwzh@gnu.org>
parents:
8388
diff
changeset
|
47 extern Lisp_Object Flookup_key (); |
|
ab65a3dae221
(Frandom): Fix Lisp_Object vs. int problems.
Karl Heuer <kwzh@gnu.org>
parents:
8388
diff
changeset
|
48 |
|
16561
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
49 extern int minibuffer_auto_raise; |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
50 extern Lisp_Object minibuf_window; |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
51 |
|
2546
c8cd694d70eb
(provide, require): Put appropriately-marked
Richard M. Stallman <rms@gnu.org>
parents:
2525
diff
changeset
|
52 Lisp_Object Qstring_lessp, Qprovide, Qrequire; |
|
4456
cbfcf187b5da
(Fyes_or_no_p): Use Qyes_or_no_p_history.
Richard M. Stallman <rms@gnu.org>
parents:
4004
diff
changeset
|
53 Lisp_Object Qyes_or_no_p_history; |
|
14456
fb11ccbe5c7c
(Qcursor_in_echo_area): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14392
diff
changeset
|
54 Lisp_Object Qcursor_in_echo_area; |
| 20004 | 55 Lisp_Object Qwidget_type; |
| 211 | 56 |
|
9927
05aa745fc829
(internal_equal): Use new overlay substructure.
Karl Heuer <kwzh@gnu.org>
parents:
9439
diff
changeset
|
57 static int internal_equal (); |
|
399
21aa17a1560d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
350
diff
changeset
|
58 |
| 211 | 59 DEFUN ("identity", Fidentity, Sidentity, 1, 1, 0, |
| 60 "Return the argument unchanged.") | |
| 61 (arg) | |
| 62 Lisp_Object arg; | |
| 63 { | |
| 64 return arg; | |
| 65 } | |
| 66 | |
|
10485
40c59e55775a
(Frandom): Call seed_random and get_random.
Karl Heuer <kwzh@gnu.org>
parents:
10411
diff
changeset
|
67 extern long get_random (); |
|
40c59e55775a
(Frandom): Call seed_random and get_random.
Karl Heuer <kwzh@gnu.org>
parents:
10411
diff
changeset
|
68 extern void seed_random (); |
|
40c59e55775a
(Frandom): Call seed_random and get_random.
Karl Heuer <kwzh@gnu.org>
parents:
10411
diff
changeset
|
69 extern long time (); |
|
40c59e55775a
(Frandom): Call seed_random and get_random.
Karl Heuer <kwzh@gnu.org>
parents:
10411
diff
changeset
|
70 |
| 211 | 71 DEFUN ("random", Frandom, Srandom, 0, 1, 0, |
| 72 "Return a pseudo-random number.\n\ | |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
73 All integers representable in Lisp are equally likely.\n\ |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
74 On most systems, this is 28 bits' worth.\n\ |
|
10485
40c59e55775a
(Frandom): Call seed_random and get_random.
Karl Heuer <kwzh@gnu.org>
parents:
10411
diff
changeset
|
75 With positive integer argument N, return random number in interval [0,N).\n\ |
| 211 | 76 With argument t, set the random number seed from the current time and pid.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
77 (n) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
78 Lisp_Object n; |
| 211 | 79 { |
|
12008
637671248a31
(Frandom): Use EMACS_INT, not int.
Karl Heuer <kwzh@gnu.org>
parents:
11539
diff
changeset
|
80 EMACS_INT val; |
|
637671248a31
(Frandom): Use EMACS_INT, not int.
Karl Heuer <kwzh@gnu.org>
parents:
11539
diff
changeset
|
81 Lisp_Object lispy_val; |
|
6376
3fe339cf2dde
(Frandom): Eliminate bias in random number generator.
Karl Heuer <kwzh@gnu.org>
parents:
6344
diff
changeset
|
82 unsigned long denominator; |
| 211 | 83 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
84 if (EQ (n, Qt)) |
|
12008
637671248a31
(Frandom): Use EMACS_INT, not int.
Karl Heuer <kwzh@gnu.org>
parents:
11539
diff
changeset
|
85 seed_random (getpid () + time (NULL)); |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
86 if (NATNUMP (n) && XFASTINT (n) != 0) |
| 211 | 87 { |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
88 /* Try to take our random number from the higher bits of VAL, |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
89 not the lower, since (says Gentzel) the low bits of `random' |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
90 are less random than the higher ones. We do this by using the |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
91 quotient rather than the remainder. At the high end of the RNG |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
92 it's possible to get a quotient larger than n; discarding |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
93 these values eliminates the bias that would otherwise appear |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
94 when using a large n. */ |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
95 denominator = ((unsigned long)1 << VALBITS) / XFASTINT (n); |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
96 do |
|
10485
40c59e55775a
(Frandom): Call seed_random and get_random.
Karl Heuer <kwzh@gnu.org>
parents:
10411
diff
changeset
|
97 val = get_random () / denominator; |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
98 while (val >= XFASTINT (n)); |
| 211 | 99 } |
|
6376
3fe339cf2dde
(Frandom): Eliminate bias in random number generator.
Karl Heuer <kwzh@gnu.org>
parents:
6344
diff
changeset
|
100 else |
|
10485
40c59e55775a
(Frandom): Call seed_random and get_random.
Karl Heuer <kwzh@gnu.org>
parents:
10411
diff
changeset
|
101 val = get_random (); |
|
12008
637671248a31
(Frandom): Use EMACS_INT, not int.
Karl Heuer <kwzh@gnu.org>
parents:
11539
diff
changeset
|
102 XSETINT (lispy_val, val); |
|
637671248a31
(Frandom): Use EMACS_INT, not int.
Karl Heuer <kwzh@gnu.org>
parents:
11539
diff
changeset
|
103 return lispy_val; |
| 211 | 104 } |
| 105 | |
| 106 /* Random data-structure functions */ | |
| 107 | |
| 108 DEFUN ("length", Flength, Slength, 1, 1, 0, | |
| 109 "Return the length of vector, list or string SEQUENCE.\n\ | |
| 19383 | 110 A byte-code function object is also allowed.\n\ |
| 111 If the string contains multibyte characters, this is not the necessarily\n\ | |
| 112 the number of characters in the string; it is the number of bytes.\n\ | |
| 113 To get the number of characters, use `chars-in-string'") | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
114 (sequence) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
115 register Lisp_Object sequence; |
| 211 | 116 { |
| 117 register Lisp_Object tail, val; | |
| 118 register int i; | |
| 119 | |
| 120 retry: | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
121 if (STRINGP (sequence)) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
122 XSETFASTINT (val, XSTRING (sequence)->size); |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
123 else if (VECTORP (sequence)) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
124 XSETFASTINT (val, XVECTOR (sequence)->size); |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
125 else if (CHAR_TABLE_P (sequence)) |
|
20992
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
126 XSETFASTINT (val, (MIN_CHAR_COMPOSITION |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
127 + (CHAR_FIELD2_MASK | CHAR_FIELD3_MASK) |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
128 - 1)); |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
129 else if (BOOL_VECTOR_P (sequence)) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
130 XSETFASTINT (val, XBOOL_VECTOR (sequence)->size); |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
131 else if (COMPILEDP (sequence)) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
132 XSETFASTINT (val, XVECTOR (sequence)->size & PSEUDOVECTOR_SIZE_MASK); |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
133 else if (CONSP (sequence)) |
| 211 | 134 { |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
135 for (i = 0, tail = sequence; !NILP (tail); i++) |
| 211 | 136 { |
| 137 QUIT; | |
| 138 tail = Fcdr (tail); | |
| 139 } | |
| 140 | |
|
9308
2c594629baaa
(Flength, concat, mapcar1): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9289
diff
changeset
|
141 XSETFASTINT (val, i); |
| 211 | 142 } |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
143 else if (NILP (sequence)) |
|
9965
f68eab303ddb
(Flength): Don't call Farray_length, just use size field.
Karl Heuer <kwzh@gnu.org>
parents:
9927
diff
changeset
|
144 XSETFASTINT (val, 0); |
| 211 | 145 else |
| 146 { | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
147 sequence = wrong_type_argument (Qsequencep, sequence); |
| 211 | 148 goto retry; |
| 149 } | |
|
9965
f68eab303ddb
(Flength): Don't call Farray_length, just use size field.
Karl Heuer <kwzh@gnu.org>
parents:
9927
diff
changeset
|
150 return val; |
| 211 | 151 } |
| 152 | |
|
12466
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
153 /* This does not check for quits. That is safe |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
154 since it must terminate. */ |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
155 |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
156 DEFUN ("safe-length", Fsafe_length, Ssafe_length, 1, 1, 0, |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
157 "Return the length of a list, but avoid error or infinite loop.\n\ |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
158 This function never gets an error. If LIST is not really a list,\n\ |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
159 it returns 0. If LIST is circular, it returns a finite value\n\ |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
160 which is at least the number of distinct elements.") |
| 20004 | 161 (list) |
|
12466
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
162 Lisp_Object list; |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
163 { |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
164 Lisp_Object tail, halftail, length; |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
165 int len = 0; |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
166 |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
167 /* halftail is used to detect circular lists. */ |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
168 halftail = list; |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
169 for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr) |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
170 { |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
171 if (EQ (tail, halftail) && len != 0) |
|
12618
60c4c0fee545
(Fsafe_length): Use conservative upper bound.
Karl Heuer <kwzh@gnu.org>
parents:
12466
diff
changeset
|
172 break; |
|
12466
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
173 len++; |
|
13344
30e17254a280
(Fsafe_length): Add missing parentheses around & within comparison.
Richard M. Stallman <rms@gnu.org>
parents:
13277
diff
changeset
|
174 if ((len & 1) == 0) |
|
12466
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
175 halftail = XCONS (halftail)->cdr; |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
176 } |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
177 |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
178 XSETINT (length, len); |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
179 return length; |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
180 } |
|
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
181 |
|
20864
ad9e06c97d95
(Fstring_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20814
diff
changeset
|
182 DEFUN ("string-bytes", Fstring_bytes, Sstring_bytes, 1, 1, 0, |
|
ad9e06c97d95
(Fstring_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20814
diff
changeset
|
183 "Return the number of bytes in STRING.\n\ |
|
ad9e06c97d95
(Fstring_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20814
diff
changeset
|
184 If STRING is a multibyte string, this is greater than the length of STRING.") |
|
ad9e06c97d95
(Fstring_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20814
diff
changeset
|
185 (string) |
|
20881
fd35cf0efd94
(Fstring_bytes): Declare arg STRING as Lisp_Object.
Kenichi Handa <handa@m17n.org>
parents:
20880
diff
changeset
|
186 Lisp_Object string; |
|
20864
ad9e06c97d95
(Fstring_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20814
diff
changeset
|
187 { |
|
ad9e06c97d95
(Fstring_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20814
diff
changeset
|
188 CHECK_STRING (string, 1); |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
189 return make_number (STRING_BYTES (XSTRING (string))); |
|
20864
ad9e06c97d95
(Fstring_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20814
diff
changeset
|
190 } |
|
ad9e06c97d95
(Fstring_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20814
diff
changeset
|
191 |
| 211 | 192 DEFUN ("string-equal", Fstring_equal, Sstring_equal, 2, 2, 0, |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
193 "Return t if two strings have identical contents.\n\ |
|
10114
6f6db8f5b8a0
(internal_equal): Call compare_string_intervals.
Richard M. Stallman <rms@gnu.org>
parents:
10059
diff
changeset
|
194 Case is significant, but text properties are ignored.\n\ |
| 211 | 195 Symbols are also allowed; their print names are used instead.") |
| 196 (s1, s2) | |
| 197 register Lisp_Object s1, s2; | |
| 198 { | |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
199 if (SYMBOLP (s1)) |
|
9289
e5a850de0ba8
(Fstring_equal, Fstring_lessp): Delete now-redundant XSETTYPE.
Karl Heuer <kwzh@gnu.org>
parents:
9128
diff
changeset
|
200 XSETSTRING (s1, XSYMBOL (s1)->name); |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
201 if (SYMBOLP (s2)) |
|
9289
e5a850de0ba8
(Fstring_equal, Fstring_lessp): Delete now-redundant XSETTYPE.
Karl Heuer <kwzh@gnu.org>
parents:
9128
diff
changeset
|
202 XSETSTRING (s2, XSYMBOL (s2)->name); |
| 211 | 203 CHECK_STRING (s1, 0); |
| 204 CHECK_STRING (s2, 1); | |
| 205 | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
206 if (XSTRING (s1)->size != XSTRING (s2)->size |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
207 || STRING_BYTES (XSTRING (s1)) != STRING_BYTES (XSTRING (s2)) |
|
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
208 || bcmp (XSTRING (s1)->data, XSTRING (s2)->data, STRING_BYTES (XSTRING (s1)))) |
| 211 | 209 return Qnil; |
| 210 return Qt; | |
| 211 } | |
| 212 | |
| 213 DEFUN ("string-lessp", Fstring_lessp, Sstring_lessp, 2, 2, 0, | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
214 "Return t if first arg string is less than second in lexicographic order.\n\ |
| 211 | 215 Case is significant.\n\ |
| 216 Symbols are also allowed; their print names are used instead.") | |
| 217 (s1, s2) | |
| 218 register Lisp_Object s1, s2; | |
| 219 { | |
| 220 register int end; | |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
221 register int i1, i1_byte, i2, i2_byte; |
| 211 | 222 |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
223 if (SYMBOLP (s1)) |
|
9289
e5a850de0ba8
(Fstring_equal, Fstring_lessp): Delete now-redundant XSETTYPE.
Karl Heuer <kwzh@gnu.org>
parents:
9128
diff
changeset
|
224 XSETSTRING (s1, XSYMBOL (s1)->name); |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
225 if (SYMBOLP (s2)) |
|
9289
e5a850de0ba8
(Fstring_equal, Fstring_lessp): Delete now-redundant XSETTYPE.
Karl Heuer <kwzh@gnu.org>
parents:
9128
diff
changeset
|
226 XSETSTRING (s2, XSYMBOL (s2)->name); |
| 211 | 227 CHECK_STRING (s1, 0); |
| 228 CHECK_STRING (s2, 1); | |
| 229 | |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
230 i1 = i1_byte = i2 = i2_byte = 0; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
231 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
232 end = XSTRING (s1)->size; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
233 if (end > XSTRING (s2)->size) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
234 end = XSTRING (s2)->size; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
235 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
236 while (i1 < end) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
237 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
238 /* When we find a mismatch, we must compare the |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
239 characters, not just the bytes. */ |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
240 int c1, c2; |
| 211 | 241 |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
242 if (STRING_MULTIBYTE (s1)) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
243 FETCH_STRING_CHAR_ADVANCE (c1, s1, i1, i1_byte); |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
244 else |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
245 c1 = XSTRING (s1)->data[i1++]; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
246 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
247 if (STRING_MULTIBYTE (s2)) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
248 FETCH_STRING_CHAR_ADVANCE (c2, s2, i2, i2_byte); |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
249 else |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
250 c2 = XSTRING (s2)->data[i2++]; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
251 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
252 if (c1 != c2) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
253 return c1 < c2 ? Qt : Qnil; |
| 211 | 254 } |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
255 return i1 < XSTRING (s2)->size ? Qt : Qnil; |
| 211 | 256 } |
| 257 | |
| 258 static Lisp_Object concat (); | |
| 259 | |
| 260 /* ARGSUSED */ | |
| 261 Lisp_Object | |
| 262 concat2 (s1, s2) | |
| 263 Lisp_Object s1, s2; | |
| 264 { | |
| 265 #ifdef NO_ARG_ARRAY | |
| 266 Lisp_Object args[2]; | |
| 267 args[0] = s1; | |
| 268 args[1] = s2; | |
| 269 return concat (2, args, Lisp_String, 0); | |
| 270 #else | |
| 271 return concat (2, &s1, Lisp_String, 0); | |
| 272 #endif /* NO_ARG_ARRAY */ | |
| 273 } | |
| 274 | |
|
8966
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
275 /* ARGSUSED */ |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
276 Lisp_Object |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
277 concat3 (s1, s2, s3) |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
278 Lisp_Object s1, s2, s3; |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
279 { |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
280 #ifdef NO_ARG_ARRAY |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
281 Lisp_Object args[3]; |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
282 args[0] = s1; |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
283 args[1] = s2; |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
284 args[2] = s3; |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
285 return concat (3, args, Lisp_String, 0); |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
286 #else |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
287 return concat (3, &s1, Lisp_String, 0); |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
288 #endif /* NO_ARG_ARRAY */ |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
289 } |
|
cafc16f356c2
(concat3): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8901
diff
changeset
|
290 |
| 211 | 291 DEFUN ("append", Fappend, Sappend, 0, MANY, 0, |
| 292 "Concatenate all the arguments and make the result a list.\n\ | |
| 293 The result is a list whose elements are the elements of all the arguments.\n\ | |
| 294 Each argument may be a list, vector or string.\n\ | |
| 1037 | 295 The last argument is not copied, just used as the tail of the new list.") |
| 211 | 296 (nargs, args) |
| 297 int nargs; | |
| 298 Lisp_Object *args; | |
| 299 { | |
| 300 return concat (nargs, args, Lisp_Cons, 1); | |
| 301 } | |
| 302 | |
| 303 DEFUN ("concat", Fconcat, Sconcat, 0, MANY, 0, | |
| 304 "Concatenate all the arguments and make the result a string.\n\ | |
| 305 The result is a string whose elements are the elements of all the arguments.\n\ | |
|
11142
41b869bbe0e1
(Fconcat): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
11138
diff
changeset
|
306 Each argument may be a string or a list or vector of characters (integers).\n\ |
|
41b869bbe0e1
(Fconcat): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
11138
diff
changeset
|
307 \n\ |
|
41b869bbe0e1
(Fconcat): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
11138
diff
changeset
|
308 Do not use individual integers as arguments!\n\ |
|
41b869bbe0e1
(Fconcat): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
11138
diff
changeset
|
309 The behavior of `concat' in that case will be changed later!\n\ |
|
41b869bbe0e1
(Fconcat): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
11138
diff
changeset
|
310 If your program passes an integer as an argument to `concat',\n\ |
|
41b869bbe0e1
(Fconcat): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
11138
diff
changeset
|
311 you should change it right away not to do so.") |
| 211 | 312 (nargs, args) |
| 313 int nargs; | |
| 314 Lisp_Object *args; | |
| 315 { | |
| 316 return concat (nargs, args, Lisp_String, 0); | |
| 317 } | |
| 318 | |
| 319 DEFUN ("vconcat", Fvconcat, Svconcat, 0, MANY, 0, | |
| 320 "Concatenate all the arguments and make the result a vector.\n\ | |
| 321 The result is a vector whose elements are the elements of all the arguments.\n\ | |
| 322 Each argument may be a list, vector or string.") | |
| 323 (nargs, args) | |
| 324 int nargs; | |
| 325 Lisp_Object *args; | |
| 326 { | |
|
10006
402c87cbc4fa
(Fvconcat, concat): Use Lisp_Vectorlike.
Karl Heuer <kwzh@gnu.org>
parents:
9965
diff
changeset
|
327 return concat (nargs, args, Lisp_Vectorlike, 0); |
| 211 | 328 } |
| 329 | |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
330 /* Retrun a copy of a sub char table ARG. The elements except for a |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
331 nested sub char table are not copied. */ |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
332 static Lisp_Object |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
333 copy_sub_char_table (arg) |
|
17826
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
334 Lisp_Object arg; |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
335 { |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
336 Lisp_Object copy = make_sub_char_table (XCHAR_TABLE (arg)->defalt); |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
337 int i; |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
338 |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
339 /* Copy all the contents. */ |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
340 bcopy (XCHAR_TABLE (arg)->contents, XCHAR_TABLE (copy)->contents, |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
341 SUB_CHAR_TABLE_ORDINARY_SLOTS * sizeof (Lisp_Object)); |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
342 /* Recursively copy any sub char-tables in the ordinary slots. */ |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
343 for (i = 32; i < SUB_CHAR_TABLE_ORDINARY_SLOTS; i++) |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
344 if (SUB_CHAR_TABLE_P (XCHAR_TABLE (arg)->contents[i])) |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
345 XCHAR_TABLE (copy)->contents[i] |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
346 = copy_sub_char_table (XCHAR_TABLE (copy)->contents[i]); |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
347 |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
348 return copy; |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
349 } |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
350 |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
351 |
| 211 | 352 DEFUN ("copy-sequence", Fcopy_sequence, Scopy_sequence, 1, 1, 0, |
| 353 "Return a copy of a list, vector or string.\n\ | |
| 354 The elements of a list or vector are not copied; they are shared\n\ | |
| 355 with the original.") | |
| 356 (arg) | |
| 357 Lisp_Object arg; | |
| 358 { | |
| 485 | 359 if (NILP (arg)) return arg; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
360 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
361 if (CHAR_TABLE_P (arg)) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
362 { |
|
17291
b66473f0d0fe
(Fcopy_sequence): Delete unused variable.
Karl Heuer <kwzh@gnu.org>
parents:
17182
diff
changeset
|
363 int i; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
364 Lisp_Object copy; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
365 |
|
13184
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
366 copy = Fmake_char_table (XCHAR_TABLE (arg)->purpose, Qnil); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
367 /* Copy all the slots, including the extra ones. */ |
|
17819
6fd66459ec9a
(Fcopy_sequence): Correctly copy the char-table contents.
Richard M. Stallman <rms@gnu.org>
parents:
17789
diff
changeset
|
368 bcopy (XVECTOR (arg)->contents, XVECTOR (copy)->contents, |
|
17291
b66473f0d0fe
(Fcopy_sequence): Delete unused variable.
Karl Heuer <kwzh@gnu.org>
parents:
17182
diff
changeset
|
369 ((XCHAR_TABLE (arg)->size & PSEUDOVECTOR_SIZE_MASK) |
|
b66473f0d0fe
(Fcopy_sequence): Delete unused variable.
Karl Heuer <kwzh@gnu.org>
parents:
17182
diff
changeset
|
370 * sizeof (Lisp_Object))); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
371 |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
372 /* Recursively copy any sub char tables in the ordinary slots |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
373 for multibyte characters. */ |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
374 for (i = CHAR_TABLE_SINGLE_BYTE_SLOTS; |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
375 i < CHAR_TABLE_ORDINARY_SLOTS; i++) |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
376 if (SUB_CHAR_TABLE_P (XCHAR_TABLE (arg)->contents[i])) |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
377 XCHAR_TABLE (copy)->contents[i] |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
378 = copy_sub_char_table (XCHAR_TABLE (copy)->contents[i]); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
379 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
380 return copy; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
381 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
382 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
383 if (BOOL_VECTOR_P (arg)) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
384 { |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
385 Lisp_Object val; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
386 int size_in_chars |
|
17063
647b28ba4d1b
(Fcopy_sequence, concat, internal_equal, Ffillarray):
Karl Heuer <kwzh@gnu.org>
parents:
16863
diff
changeset
|
387 = (XBOOL_VECTOR (arg)->size + BITS_PER_CHAR - 1) / BITS_PER_CHAR; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
388 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
389 val = Fmake_bool_vector (Flength (arg), Qnil); |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
390 bcopy (XBOOL_VECTOR (arg)->data, XBOOL_VECTOR (val)->data, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
391 size_in_chars); |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
392 return val; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
393 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
394 |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
395 if (!CONSP (arg) && !VECTORP (arg) && !STRINGP (arg)) |
| 211 | 396 arg = wrong_type_argument (Qsequencep, arg); |
| 397 return concat (1, &arg, CONSP (arg) ? Lisp_Cons : XTYPE (arg), 0); | |
| 398 } | |
| 399 | |
| 400 static Lisp_Object | |
| 401 concat (nargs, args, target_type, last_special) | |
| 402 int nargs; | |
| 403 Lisp_Object *args; | |
| 404 enum Lisp_Type target_type; | |
| 405 int last_special; | |
| 406 { | |
| 407 Lisp_Object val; | |
| 408 register Lisp_Object tail; | |
| 409 register Lisp_Object this; | |
| 410 int toindex; | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
411 int toindex_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
412 register int result_len; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
413 register int result_len_byte; |
| 211 | 414 register int argnum; |
| 415 Lisp_Object last_tail; | |
| 416 Lisp_Object prev; | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
417 int some_multibyte; |
| 211 | 418 |
| 419 /* In append, the last arg isn't treated like the others */ | |
| 420 if (last_special && nargs > 0) | |
| 421 { | |
| 422 nargs--; | |
| 423 last_tail = args[nargs]; | |
| 424 } | |
| 425 else | |
| 426 last_tail = Qnil; | |
| 427 | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
428 /* Canonicalize each argument. */ |
| 211 | 429 for (argnum = 0; argnum < nargs; argnum++) |
| 430 { | |
| 431 this = args[argnum]; | |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
432 if (!(CONSP (this) || NILP (this) || VECTORP (this) || STRINGP (this) |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
433 || COMPILEDP (this) || BOOL_VECTOR_P (this))) |
| 211 | 434 { |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
435 if (INTEGERP (this)) |
|
11142
41b869bbe0e1
(Fconcat): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
11138
diff
changeset
|
436 args[argnum] = Fnumber_to_string (this); |
| 211 | 437 else |
| 438 args[argnum] = wrong_type_argument (Qsequencep, this); | |
| 439 } | |
| 440 } | |
| 441 | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
442 /* Compute total length in chars of arguments in RESULT_LEN. |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
443 If desired output is a string, also compute length in bytes |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
444 in RESULT_LEN_BYTE, and determine in SOME_MULTIBYTE |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
445 whether the result should be a multibyte string. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
446 result_len_byte = 0; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
447 result_len = 0; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
448 some_multibyte = 0; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
449 for (argnum = 0; argnum < nargs; argnum++) |
| 211 | 450 { |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
451 int len; |
| 211 | 452 this = args[argnum]; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
453 len = XFASTINT (Flength (this)); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
454 if (target_type == Lisp_String) |
|
18311
8b716cb12cdd
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
18108
diff
changeset
|
455 { |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
456 /* We must count the number of bytes needed in the string |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
457 as well as the number of characters. */ |
|
18311
8b716cb12cdd
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
18108
diff
changeset
|
458 int i; |
|
8b716cb12cdd
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
18108
diff
changeset
|
459 Lisp_Object ch; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
460 int this_len_byte; |
|
18311
8b716cb12cdd
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
18108
diff
changeset
|
461 |
|
19278
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
462 if (VECTORP (this)) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
463 for (i = 0; i < len; i++) |
|
19278
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
464 { |
|
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
465 ch = XVECTOR (this)->contents[i]; |
|
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
466 if (! INTEGERP (ch)) |
|
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
467 wrong_type_argument (Qintegerp, ch); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
468 this_len_byte = XFASTINT (Fchar_bytes (ch)); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
469 result_len_byte += this_len_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
470 if (this_len_byte > 1) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
471 some_multibyte = 1; |
|
19278
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
472 } |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
473 else if (BOOL_VECTOR_P (this) && XBOOL_VECTOR (this)->size > 0) |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
474 wrong_type_argument (Qintegerp, Faref (this, make_number (0))); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
475 else if (CONSP (this)) |
|
19278
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
476 for (; CONSP (this); this = XCONS (this)->cdr) |
|
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
477 { |
|
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
478 ch = XCONS (this)->car; |
|
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
479 if (! INTEGERP (ch)) |
|
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
480 wrong_type_argument (Qintegerp, ch); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
481 this_len_byte = XFASTINT (Fchar_bytes (ch)); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
482 result_len_byte += this_len_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
483 if (this_len_byte > 1) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
484 some_multibyte = 1; |
|
19278
50f47ef6ce9a
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
19223
diff
changeset
|
485 } |
|
20639
12240a9b3679
(concat): Check STRINGP before increasing result_len_byte.
Kenichi Handa <handa@m17n.org>
parents:
20607
diff
changeset
|
486 else if (STRINGP (this)) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
487 { |
|
20699
907d8633c8cc
(concat): Use unibyte_char_to_multibyte.
Richard M. Stallman <rms@gnu.org>
parents:
20667
diff
changeset
|
488 if (STRING_MULTIBYTE (this)) |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
489 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
490 some_multibyte = 1; |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
491 result_len_byte += STRING_BYTES (XSTRING (this)); |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
492 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
493 else |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
494 result_len_byte += count_size_as_multibyte (XSTRING (this)->data, |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
495 XSTRING (this)->size); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
496 } |
|
18311
8b716cb12cdd
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
18108
diff
changeset
|
497 } |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
498 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
499 result_len += len; |
| 211 | 500 } |
| 501 | |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
502 if (! some_multibyte) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
503 result_len_byte = result_len; |
| 211 | 504 |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
505 /* Create the output object. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
506 if (target_type == Lisp_Cons) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
507 val = Fmake_list (make_number (result_len), Qnil); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
508 else if (target_type == Lisp_Vectorlike) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
509 val = Fmake_vector (make_number (result_len), Qnil); |
|
21260
4ac9ba6e745d
(substring_both, Fsubstring): Use make_specified_string.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
510 else if (some_multibyte) |
|
4ac9ba6e745d
(substring_both, Fsubstring): Use make_specified_string.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
511 val = make_uninit_multibyte_string (result_len, result_len_byte); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
512 else |
|
21260
4ac9ba6e745d
(substring_both, Fsubstring): Use make_specified_string.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
513 val = make_uninit_string (result_len); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
514 |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
515 /* In `append', if all but last arg are nil, return last arg. */ |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
516 if (target_type == Lisp_Cons && EQ (val, Qnil)) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
517 return last_tail; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
518 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
519 /* Copy the contents of the args into the result. */ |
| 211 | 520 if (CONSP (val)) |
| 521 tail = val, toindex = -1; /* -1 in toindex is flag we are making a list */ | |
| 522 else | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
523 toindex = 0, toindex_byte = 0; |
| 211 | 524 |
| 525 prev = Qnil; | |
| 526 | |
| 527 for (argnum = 0; argnum < nargs; argnum++) | |
| 528 { | |
| 529 Lisp_Object thislen; | |
| 530 int thisleni; | |
|
16863
591b7a95d7a5
(concat): Take modulus of thisindex before shifting.
Richard M. Stallman <rms@gnu.org>
parents:
16561
diff
changeset
|
531 register unsigned int thisindex = 0; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
532 register unsigned int thisindex_byte = 0; |
| 211 | 533 |
| 534 this = args[argnum]; | |
| 535 if (!CONSP (this)) | |
| 536 thislen = Flength (this), thisleni = XINT (thislen); | |
| 537 | |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
538 if (STRINGP (this) && STRINGP (val) |
|
4004
71541ea16adf
* fns.c (Fsubstring, concat): Pass all six arguments to
Jim Blandy <jimb@redhat.com>
parents:
3379
diff
changeset
|
539 && ! NULL_INTERVAL_P (XSTRING (this)->intervals)) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
540 copy_text_properties (make_number (0), thislen, this, |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
541 make_number (toindex), val, Qnil); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
542 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
543 /* Between strings of the same kind, copy fast. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
544 if (STRINGP (this) && STRINGP (val) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
545 && STRING_MULTIBYTE (this) == some_multibyte) |
|
4004
71541ea16adf
* fns.c (Fsubstring, concat): Pass all six arguments to
Jim Blandy <jimb@redhat.com>
parents:
3379
diff
changeset
|
546 { |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
547 int thislen_byte = STRING_BYTES (XSTRING (this)); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
548 bcopy (XSTRING (this)->data, XSTRING (val)->data + toindex_byte, |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
549 STRING_BYTES (XSTRING (this))); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
550 toindex_byte += thislen_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
551 toindex += thisleni; |
|
4004
71541ea16adf
* fns.c (Fsubstring, concat): Pass all six arguments to
Jim Blandy <jimb@redhat.com>
parents:
3379
diff
changeset
|
552 } |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
553 /* Copy a single-byte string to a multibyte string. */ |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
554 else if (STRINGP (this) && STRINGP (val)) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
555 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
556 toindex_byte += copy_text (XSTRING (this)->data, |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
557 XSTRING (val)->data + toindex_byte, |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
558 XSTRING (this)->size, 0, 1); |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
559 toindex += thisleni; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
560 } |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
561 else |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
562 /* Copy element by element. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
563 while (1) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
564 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
565 register Lisp_Object elt; |
| 211 | 566 |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
567 /* Fetch next element of `this' arg into `elt', or break if |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
568 `this' is exhausted. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
569 if (NILP (this)) break; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
570 if (CONSP (this)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
571 elt = XCONS (this)->car, this = XCONS (this)->cdr; |
|
20814
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
572 else if (thisindex >= thisleni) |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
573 break; |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
574 else if (STRINGP (this)) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
575 { |
|
21029
3f47b0364c2a
(DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents:
21021
diff
changeset
|
576 int c; |
|
20814
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
577 if (STRING_MULTIBYTE (this)) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
578 { |
|
20814
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
579 FETCH_STRING_CHAR_ADVANCE (c, this, |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
580 thisindex, |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
581 thisindex_byte); |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
582 XSETFASTINT (elt, c); |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
583 } |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
584 else |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
585 { |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
586 XSETFASTINT (elt, XSTRING (this)->data[thisindex++]); |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
587 if (some_multibyte && XINT (elt) >= 0200 |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
588 && XINT (elt) < 0400) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
589 { |
|
21029
3f47b0364c2a
(DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents:
21021
diff
changeset
|
590 c = unibyte_char_to_multibyte (XINT (elt)); |
|
20814
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
591 XSETINT (elt, c); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
592 } |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
593 } |
|
20814
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
594 } |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
595 else if (BOOL_VECTOR_P (this)) |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
596 { |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
597 int byte; |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
598 byte = XBOOL_VECTOR (this)->data[thisindex / BITS_PER_CHAR]; |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
599 if (byte & (1 << (thisindex % BITS_PER_CHAR))) |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
600 elt = Qt; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
601 else |
|
20814
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
602 elt = Qnil; |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
603 thisindex++; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
604 } |
|
20814
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
605 else |
|
8f6d92b4f48a
(concat): Handle bool-vectors correctly.
Richard M. Stallman <rms@gnu.org>
parents:
20813
diff
changeset
|
606 elt = XVECTOR (this)->contents[thisindex++]; |
| 211 | 607 |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
608 /* Store this element into the result. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
609 if (toindex < 0) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
610 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
611 XCONS (tail)->car = elt; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
612 prev = tail; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
613 tail = XCONS (tail)->cdr; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
614 } |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
615 else if (VECTORP (val)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
616 XVECTOR (val)->contents[toindex++] = elt; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
617 else |
| 211 | 618 { |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
619 CHECK_NUMBER (elt, 0); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
620 if (SINGLE_BYTE_CHAR_P (XINT (elt))) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
621 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
622 XSTRING (val)->data[toindex++] = XINT (elt); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
623 toindex_byte++; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
624 } |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
625 else |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
626 /* If we have any multibyte characters, |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
627 we already decided to make a multibyte string. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
628 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
629 int c = XINT (elt); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
630 unsigned char work[4], *str; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
631 int i = CHAR_STRING (c, work, str); |
|
18311
8b716cb12cdd
(concat): Pay attention to multibyte characters when
Kenichi Handa <handa@m17n.org>
parents:
18108
diff
changeset
|
632 |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
633 /* P exists as a variable |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
634 to avoid a bug on the Masscomp C compiler. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
635 unsigned char *p = & XSTRING (val)->data[toindex_byte]; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
636 bcopy (str, p, i); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
637 toindex_byte += i; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
638 toindex++; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
639 } |
| 211 | 640 } |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
641 } |
| 211 | 642 } |
| 485 | 643 if (!NILP (prev)) |
| 211 | 644 XCONS (prev)->cdr = last_tail; |
| 645 | |
| 20004 | 646 return val; |
| 211 | 647 } |
| 648 | |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
649 static Lisp_Object string_char_byte_cache_string; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
650 static int string_char_byte_cache_charpos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
651 static int string_char_byte_cache_bytepos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
652 |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
653 /* Return the character index corresponding to CHAR_INDEX in STRING. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
654 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
655 int |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
656 string_char_to_byte (string, char_index) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
657 Lisp_Object string; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
658 int char_index; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
659 { |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
660 int i, i_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
661 int best_below, best_below_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
662 int best_above, best_above_byte; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
663 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
664 if (! STRING_MULTIBYTE (string)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
665 return char_index; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
666 |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
667 best_below = best_below_byte = 0; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
668 best_above = XSTRING (string)->size; |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
669 best_above_byte = STRING_BYTES (XSTRING (string)); |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
670 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
671 if (EQ (string, string_char_byte_cache_string)) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
672 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
673 if (string_char_byte_cache_charpos < char_index) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
674 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
675 best_below = string_char_byte_cache_charpos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
676 best_below_byte = string_char_byte_cache_bytepos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
677 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
678 else |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
679 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
680 best_above = string_char_byte_cache_charpos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
681 best_above_byte = string_char_byte_cache_bytepos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
682 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
683 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
684 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
685 if (char_index - best_below < best_above - char_index) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
686 { |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
687 while (best_below < char_index) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
688 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
689 int c; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
690 FETCH_STRING_CHAR_ADVANCE (c, string, best_below, best_below_byte); |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
691 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
692 i = best_below; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
693 i_byte = best_below_byte; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
694 } |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
695 else |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
696 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
697 while (best_above > char_index) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
698 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
699 int best_above_byte_saved = --best_above_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
700 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
701 while (best_above_byte > 0 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
702 && !CHAR_HEAD_P (XSTRING (string)->data[best_above_byte])) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
703 best_above_byte--; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
704 if (XSTRING (string)->data[best_above_byte] < 0x80) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
705 best_above_byte = best_above_byte_saved; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
706 best_above--; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
707 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
708 i = best_above; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
709 i_byte = best_above_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
710 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
711 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
712 string_char_byte_cache_bytepos = i_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
713 string_char_byte_cache_charpos = i; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
714 string_char_byte_cache_string = string; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
715 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
716 return i_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
717 } |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
718 |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
719 /* Return the character index corresponding to BYTE_INDEX in STRING. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
720 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
721 int |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
722 string_byte_to_char (string, byte_index) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
723 Lisp_Object string; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
724 int byte_index; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
725 { |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
726 int i, i_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
727 int best_below, best_below_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
728 int best_above, best_above_byte; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
729 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
730 if (! STRING_MULTIBYTE (string)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
731 return byte_index; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
732 |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
733 best_below = best_below_byte = 0; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
734 best_above = XSTRING (string)->size; |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
735 best_above_byte = STRING_BYTES (XSTRING (string)); |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
736 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
737 if (EQ (string, string_char_byte_cache_string)) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
738 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
739 if (string_char_byte_cache_bytepos < byte_index) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
740 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
741 best_below = string_char_byte_cache_charpos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
742 best_below_byte = string_char_byte_cache_bytepos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
743 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
744 else |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
745 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
746 best_above = string_char_byte_cache_charpos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
747 best_above_byte = string_char_byte_cache_bytepos; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
748 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
749 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
750 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
751 if (byte_index - best_below_byte < best_above_byte - byte_index) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
752 { |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
753 while (best_below_byte < byte_index) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
754 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
755 int c; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
756 FETCH_STRING_CHAR_ADVANCE (c, string, best_below, best_below_byte); |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
757 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
758 i = best_below; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
759 i_byte = best_below_byte; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
760 } |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
761 else |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
762 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
763 while (best_above_byte > byte_index) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
764 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
765 int best_above_byte_saved = --best_above_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
766 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
767 while (best_above_byte > 0 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
768 && !CHAR_HEAD_P (XSTRING (string)->data[best_above_byte])) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
769 best_above_byte--; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
770 if (XSTRING (string)->data[best_above_byte] < 0x80) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
771 best_above_byte = best_above_byte_saved; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
772 best_above--; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
773 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
774 i = best_above; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
775 i_byte = best_above_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
776 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
777 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
778 string_char_byte_cache_bytepos = i_byte; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
779 string_char_byte_cache_charpos = i; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
780 string_char_byte_cache_string = string; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
781 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
782 return i; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
783 } |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
784 |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
785 /* Convert STRING to a multibyte string. |
|
21029
3f47b0364c2a
(DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents:
21021
diff
changeset
|
786 Single-byte characters 0240 through 0377 are converted |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
787 by adding nonascii_insert_offset to each. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
788 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
789 Lisp_Object |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
790 string_make_multibyte (string) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
791 Lisp_Object string; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
792 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
793 unsigned char *buf; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
794 int nbytes; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
795 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
796 if (STRING_MULTIBYTE (string)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
797 return string; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
798 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
799 nbytes = count_size_as_multibyte (XSTRING (string)->data, |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
800 XSTRING (string)->size); |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
801 /* If all the chars are ASCII, they won't need any more bytes |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
802 once converted. In that case, we can return STRING itself. */ |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
803 if (nbytes == STRING_BYTES (XSTRING (string))) |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
804 return string; |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
805 |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
806 buf = (unsigned char *) alloca (nbytes); |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
807 copy_text (XSTRING (string)->data, buf, STRING_BYTES (XSTRING (string)), |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
808 0, 1); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
809 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
810 return make_multibyte_string (buf, XSTRING (string)->size, nbytes); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
811 } |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
812 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
813 /* Convert STRING to a single-byte string. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
814 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
815 Lisp_Object |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
816 string_make_unibyte (string) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
817 Lisp_Object string; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
818 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
819 unsigned char *buf; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
820 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
821 if (! STRING_MULTIBYTE (string)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
822 return string; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
823 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
824 buf = (unsigned char *) alloca (XSTRING (string)->size); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
825 |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
826 copy_text (XSTRING (string)->data, buf, STRING_BYTES (XSTRING (string)), |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
827 1, 0); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
828 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
829 return make_unibyte_string (buf, XSTRING (string)->size); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
830 } |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
831 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
832 DEFUN ("string-make-multibyte", Fstring_make_multibyte, Sstring_make_multibyte, |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
833 1, 1, 0, |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
834 "Return the multibyte equivalent of STRING.") |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
835 (string) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
836 Lisp_Object string; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
837 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
838 return string_make_multibyte (string); |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
839 } |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
840 |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
841 DEFUN ("string-make-unibyte", Fstring_make_unibyte, Sstring_make_unibyte, |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
842 1, 1, 0, |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
843 "Return the unibyte equivalent of STRING.") |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
844 (string) |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
845 Lisp_Object string; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
846 { |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
847 return string_make_unibyte (string); |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
848 } |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
849 |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
850 DEFUN ("string-as-unibyte", Fstring_as_unibyte, Sstring_as_unibyte, |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
851 1, 1, 0, |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
852 "Return a unibyte string with the same individual bytes as STRING.\n\ |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
853 If STRING is unibyte, the result is STRING itself.") |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
854 (string) |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
855 Lisp_Object string; |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
856 { |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
857 if (STRING_MULTIBYTE (string)) |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
858 { |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
859 string = Fcopy_sequence (string); |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
860 XSTRING (string)->size = STRING_BYTES (XSTRING (string)); |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
861 } |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
862 return string; |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
863 } |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
864 |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
865 DEFUN ("string-as-multibyte", Fstring_as_multibyte, Sstring_as_multibyte, |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
866 1, 1, 0, |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
867 "Return a multibyte string with the same individual bytes as STRING.\n\ |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
868 If STRING is multibyte, the result is STRING itself.") |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
869 (string) |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
870 Lisp_Object string; |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
871 { |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
872 if (! STRING_MULTIBYTE (string)) |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
873 { |
|
21342
efdf4fe4875b
(Fstring_as_multibyte): Never return unibyte string unchanged.
Richard M. Stallman <rms@gnu.org>
parents:
21339
diff
changeset
|
874 int nbytes = STRING_BYTES (XSTRING (string)); |
|
efdf4fe4875b
(Fstring_as_multibyte): Never return unibyte string unchanged.
Richard M. Stallman <rms@gnu.org>
parents:
21339
diff
changeset
|
875 int newlen = multibyte_chars_in_text (XSTRING (string)->data, nbytes); |
|
efdf4fe4875b
(Fstring_as_multibyte): Never return unibyte string unchanged.
Richard M. Stallman <rms@gnu.org>
parents:
21339
diff
changeset
|
876 |
|
efdf4fe4875b
(Fstring_as_multibyte): Never return unibyte string unchanged.
Richard M. Stallman <rms@gnu.org>
parents:
21339
diff
changeset
|
877 string = Fcopy_sequence (string); |
|
efdf4fe4875b
(Fstring_as_multibyte): Never return unibyte string unchanged.
Richard M. Stallman <rms@gnu.org>
parents:
21339
diff
changeset
|
878 XSTRING (string)->size = newlen; |
|
efdf4fe4875b
(Fstring_as_multibyte): Never return unibyte string unchanged.
Richard M. Stallman <rms@gnu.org>
parents:
21339
diff
changeset
|
879 XSTRING (string)->size_byte = nbytes; |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
880 } |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
881 return string; |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
882 } |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
883 |
| 211 | 884 DEFUN ("copy-alist", Fcopy_alist, Scopy_alist, 1, 1, 0, |
| 885 "Return a copy of ALIST.\n\ | |
| 886 This is an alist which represents the same mapping from objects to objects,\n\ | |
| 887 but does not share the alist structure with ALIST.\n\ | |
| 888 The objects mapped (cars and cdrs of elements of the alist)\n\ | |
| 889 are shared, however.\n\ | |
| 890 Elements of ALIST that are not conses are also shared.") | |
| 891 (alist) | |
| 892 Lisp_Object alist; | |
| 893 { | |
| 894 register Lisp_Object tem; | |
| 895 | |
| 896 CHECK_LIST (alist, 0); | |
| 485 | 897 if (NILP (alist)) |
| 211 | 898 return alist; |
| 899 alist = concat (1, &alist, Lisp_Cons, 0); | |
| 900 for (tem = alist; CONSP (tem); tem = XCONS (tem)->cdr) | |
| 901 { | |
| 902 register Lisp_Object car; | |
| 903 car = XCONS (tem)->car; | |
| 904 | |
| 905 if (CONSP (car)) | |
| 906 XCONS (tem)->car = Fcons (XCONS (car)->car, XCONS (car)->cdr); | |
| 907 } | |
| 908 return alist; | |
| 909 } | |
| 910 | |
| 911 DEFUN ("substring", Fsubstring, Ssubstring, 2, 3, 0, | |
| 912 "Return a substring of STRING, starting at index FROM and ending before TO.\n\ | |
| 913 TO may be nil or omitted; then the substring runs to the end of STRING.\n\ | |
|
15966
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
914 If FROM or TO is negative, it counts from the end.\n\ |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
915 \n\ |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
916 This function allows vectors as well as strings.") |
| 211 | 917 (string, from, to) |
| 918 Lisp_Object string; | |
| 919 register Lisp_Object from, to; | |
| 920 { | |
|
4004
71541ea16adf
* fns.c (Fsubstring, concat): Pass all six arguments to
Jim Blandy <jimb@redhat.com>
parents:
3379
diff
changeset
|
921 Lisp_Object res; |
|
15966
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
922 int size; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
923 int size_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
924 int from_char, to_char; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
925 int from_byte, to_byte; |
|
4004
71541ea16adf
* fns.c (Fsubstring, concat): Pass all six arguments to
Jim Blandy <jimb@redhat.com>
parents:
3379
diff
changeset
|
926 |
|
15966
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
927 if (! (STRINGP (string) || VECTORP (string))) |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
928 wrong_type_argument (Qarrayp, string); |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
929 |
| 211 | 930 CHECK_NUMBER (from, 1); |
|
15966
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
931 |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
932 if (STRINGP (string)) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
933 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
934 size = XSTRING (string)->size; |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
935 size_byte = STRING_BYTES (XSTRING (string)); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
936 } |
|
15966
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
937 else |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
938 size = XVECTOR (string)->size; |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
939 |
| 485 | 940 if (NILP (to)) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
941 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
942 to_char = size; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
943 to_byte = size_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
944 } |
| 211 | 945 else |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
946 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
947 CHECK_NUMBER (to, 2); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
948 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
949 to_char = XINT (to); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
950 if (to_char < 0) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
951 to_char += size; |
| 211 | 952 |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
953 if (STRINGP (string)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
954 to_byte = string_char_to_byte (string, to_char); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
955 } |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
956 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
957 from_char = XINT (from); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
958 if (from_char < 0) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
959 from_char += size; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
960 if (STRINGP (string)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
961 from_byte = string_char_to_byte (string, from_char); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
962 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
963 if (!(0 <= from_char && from_char <= to_char && to_char <= size)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
964 args_out_of_range_3 (string, make_number (from_char), |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
965 make_number (to_char)); |
| 211 | 966 |
|
15966
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
967 if (STRINGP (string)) |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
968 { |
|
21260
4ac9ba6e745d
(substring_both, Fsubstring): Use make_specified_string.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
969 res = make_specified_string (XSTRING (string)->data + from_byte, |
|
4ac9ba6e745d
(substring_both, Fsubstring): Use make_specified_string.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
970 to_char - from_char, to_byte - from_byte, |
|
4ac9ba6e745d
(substring_both, Fsubstring): Use make_specified_string.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
971 STRING_MULTIBYTE (string)); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
972 copy_text_properties (from_char, to_char, string, |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
973 make_number (0), res, Qnil); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
974 } |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
975 else |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
976 res = Fvector (to_char - from_char, |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
977 XVECTOR (string)->contents + from_char); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
978 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
979 return res; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
980 } |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
981 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
982 /* Extract a substring of STRING, giving start and end positions |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
983 both in characters and in bytes. */ |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
984 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
985 Lisp_Object |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
986 substring_both (string, from, from_byte, to, to_byte) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
987 Lisp_Object string; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
988 int from, from_byte, to, to_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
989 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
990 Lisp_Object res; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
991 int size; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
992 int size_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
993 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
994 if (! (STRINGP (string) || VECTORP (string))) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
995 wrong_type_argument (Qarrayp, string); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
996 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
997 if (STRINGP (string)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
998 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
999 size = XSTRING (string)->size; |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
1000 size_byte = STRING_BYTES (XSTRING (string)); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1001 } |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1002 else |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1003 size = XVECTOR (string)->size; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1004 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1005 if (!(0 <= from && from <= to && to <= size)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1006 args_out_of_range_3 (string, make_number (from), make_number (to)); |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1007 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1008 if (STRINGP (string)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1009 { |
|
21260
4ac9ba6e745d
(substring_both, Fsubstring): Use make_specified_string.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
1010 res = make_specified_string (XSTRING (string)->data + from_byte, |
|
4ac9ba6e745d
(substring_both, Fsubstring): Use make_specified_string.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
1011 to - from, to_byte - from_byte, |
|
4ac9ba6e745d
(substring_both, Fsubstring): Use make_specified_string.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
1012 STRING_MULTIBYTE (string)); |
|
15966
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
1013 copy_text_properties (from, to, string, make_number (0), res, Qnil); |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
1014 } |
|
ceb8d03a04f6
(Fsubstring): Handle vectors as well as strings.
Richard M. Stallman <rms@gnu.org>
parents:
15713
diff
changeset
|
1015 else |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1016 res = Fvector (to - from, |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1017 XVECTOR (string)->contents + from); |
| 20004 | 1018 |
|
4004
71541ea16adf
* fns.c (Fsubstring, concat): Pass all six arguments to
Jim Blandy <jimb@redhat.com>
parents:
3379
diff
changeset
|
1019 return res; |
| 211 | 1020 } |
| 1021 | |
| 1022 DEFUN ("nthcdr", Fnthcdr, Snthcdr, 2, 2, 0, | |
| 1023 "Take cdr N times on LIST, returns the result.") | |
| 1024 (n, list) | |
| 1025 Lisp_Object n; | |
| 1026 register Lisp_Object list; | |
| 1027 { | |
| 1028 register int i, num; | |
| 1029 CHECK_NUMBER (n, 0); | |
| 1030 num = XINT (n); | |
| 485 | 1031 for (i = 0; i < num && !NILP (list); i++) |
| 211 | 1032 { |
| 1033 QUIT; | |
| 1034 list = Fcdr (list); | |
| 1035 } | |
| 1036 return list; | |
| 1037 } | |
| 1038 | |
| 1039 DEFUN ("nth", Fnth, Snth, 2, 2, 0, | |
| 1040 "Return the Nth element of LIST.\n\ | |
| 1041 N counts from zero. If LIST is not that long, nil is returned.") | |
| 1042 (n, list) | |
| 1043 Lisp_Object n, list; | |
| 1044 { | |
| 1045 return Fcar (Fnthcdr (n, list)); | |
| 1046 } | |
| 1047 | |
| 1048 DEFUN ("elt", Felt, Selt, 2, 2, 0, | |
| 1049 "Return element of SEQUENCE at index N.") | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1050 (sequence, n) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1051 register Lisp_Object sequence, n; |
| 211 | 1052 { |
| 1053 CHECK_NUMBER (n, 0); | |
| 1054 while (1) | |
| 1055 { | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1056 if (CONSP (sequence) || NILP (sequence)) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1057 return Fcar (Fnthcdr (n, sequence)); |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1058 else if (STRINGP (sequence) || VECTORP (sequence) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1059 || BOOL_VECTOR_P (sequence) || CHAR_TABLE_P (sequence)) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1060 return Faref (sequence, n); |
| 211 | 1061 else |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1062 sequence = wrong_type_argument (Qsequencep, sequence); |
| 211 | 1063 } |
| 1064 } | |
| 1065 | |
| 1066 DEFUN ("member", Fmember, Smember, 2, 2, 0, | |
| 6990 | 1067 "Return non-nil if ELT is an element of LIST. Comparison done with `equal'.\n\ |
| 211 | 1068 The value is actually the tail of LIST whose car is ELT.") |
| 1069 (elt, list) | |
| 1070 register Lisp_Object elt; | |
| 1071 Lisp_Object list; | |
| 1072 { | |
| 1073 register Lisp_Object tail; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1074 for (tail = list; !NILP (tail); tail = XCONS (tail)->cdr) |
| 211 | 1075 { |
| 1076 register Lisp_Object tem; | |
| 1077 tem = Fcar (tail); | |
| 485 | 1078 if (! NILP (Fequal (elt, tem))) |
| 211 | 1079 return tail; |
| 1080 QUIT; | |
| 1081 } | |
| 1082 return Qnil; | |
| 1083 } | |
| 1084 | |
| 1085 DEFUN ("memq", Fmemq, Smemq, 2, 2, 0, | |
| 1086 "Return non-nil if ELT is an element of LIST. Comparison done with EQ.\n\ | |
| 1087 The value is actually the tail of LIST whose car is ELT.") | |
| 1088 (elt, list) | |
| 1089 register Lisp_Object elt; | |
| 1090 Lisp_Object list; | |
| 1091 { | |
| 1092 register Lisp_Object tail; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1093 for (tail = list; !NILP (tail); tail = XCONS (tail)->cdr) |
| 211 | 1094 { |
| 1095 register Lisp_Object tem; | |
| 1096 tem = Fcar (tail); | |
| 1097 if (EQ (elt, tem)) return tail; | |
| 1098 QUIT; | |
| 1099 } | |
| 1100 return Qnil; | |
| 1101 } | |
| 1102 | |
| 1103 DEFUN ("assq", Fassq, Sassq, 2, 2, 0, | |
|
5661
066830a71a63
(Fassq, Fassoc): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
5437
diff
changeset
|
1104 "Return non-nil if KEY is `eq' to the car of an element of LIST.\n\ |
|
066830a71a63
(Fassq, Fassoc): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
5437
diff
changeset
|
1105 The value is actually the element of LIST whose car is KEY.\n\ |
| 211 | 1106 Elements of LIST that are not conses are ignored.") |
| 1107 (key, list) | |
| 1108 register Lisp_Object key; | |
| 1109 Lisp_Object list; | |
| 1110 { | |
| 1111 register Lisp_Object tail; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1112 for (tail = list; !NILP (tail); tail = XCONS (tail)->cdr) |
| 211 | 1113 { |
| 1114 register Lisp_Object elt, tem; | |
| 1115 elt = Fcar (tail); | |
| 1116 if (!CONSP (elt)) continue; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1117 tem = XCONS (elt)->car; |
| 211 | 1118 if (EQ (key, tem)) return elt; |
| 1119 QUIT; | |
| 1120 } | |
| 1121 return Qnil; | |
| 1122 } | |
| 1123 | |
| 1124 /* Like Fassq but never report an error and do not allow quits. | |
| 1125 Use only on lists known never to be circular. */ | |
| 1126 | |
| 1127 Lisp_Object | |
| 1128 assq_no_quit (key, list) | |
| 1129 register Lisp_Object key; | |
| 1130 Lisp_Object list; | |
| 1131 { | |
| 1132 register Lisp_Object tail; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1133 for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr) |
| 211 | 1134 { |
| 1135 register Lisp_Object elt, tem; | |
| 1136 elt = Fcar (tail); | |
| 1137 if (!CONSP (elt)) continue; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1138 tem = XCONS (elt)->car; |
| 211 | 1139 if (EQ (key, tem)) return elt; |
| 1140 } | |
| 1141 return Qnil; | |
| 1142 } | |
| 1143 | |
| 1144 DEFUN ("assoc", Fassoc, Sassoc, 2, 2, 0, | |
|
5661
066830a71a63
(Fassq, Fassoc): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
5437
diff
changeset
|
1145 "Return non-nil if KEY is `equal' to the car of an element of LIST.\n\ |
|
10588
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1146 The value is actually the element of LIST whose car equals KEY.") |
| 211 | 1147 (key, list) |
| 1148 register Lisp_Object key; | |
| 1149 Lisp_Object list; | |
| 1150 { | |
| 1151 register Lisp_Object tail; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1152 for (tail = list; !NILP (tail); tail = XCONS (tail)->cdr) |
| 211 | 1153 { |
| 1154 register Lisp_Object elt, tem; | |
| 1155 elt = Fcar (tail); | |
| 1156 if (!CONSP (elt)) continue; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1157 tem = Fequal (XCONS (elt)->car, key); |
| 485 | 1158 if (!NILP (tem)) return elt; |
| 211 | 1159 QUIT; |
| 1160 } | |
| 1161 return Qnil; | |
| 1162 } | |
| 1163 | |
| 1164 DEFUN ("rassq", Frassq, Srassq, 2, 2, 0, | |
| 1165 "Return non-nil if ELT is `eq' to the cdr of an element of LIST.\n\ | |
| 1166 The value is actually the element of LIST whose cdr is ELT.") | |
| 1167 (key, list) | |
| 1168 register Lisp_Object key; | |
| 1169 Lisp_Object list; | |
| 1170 { | |
| 1171 register Lisp_Object tail; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1172 for (tail = list; !NILP (tail); tail = XCONS (tail)->cdr) |
| 211 | 1173 { |
| 1174 register Lisp_Object elt, tem; | |
| 1175 elt = Fcar (tail); | |
| 1176 if (!CONSP (elt)) continue; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1177 tem = XCONS (elt)->cdr; |
| 211 | 1178 if (EQ (key, tem)) return elt; |
| 1179 QUIT; | |
| 1180 } | |
| 1181 return Qnil; | |
| 1182 } | |
|
10588
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1183 |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1184 DEFUN ("rassoc", Frassoc, Srassoc, 2, 2, 0, |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1185 "Return non-nil if KEY is `equal' to the cdr of an element of LIST.\n\ |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1186 The value is actually the element of LIST whose cdr equals KEY.") |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1187 (key, list) |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1188 register Lisp_Object key; |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1189 Lisp_Object list; |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1190 { |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1191 register Lisp_Object tail; |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1192 for (tail = list; !NILP (tail); tail = XCONS (tail)->cdr) |
|
10588
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1193 { |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1194 register Lisp_Object elt, tem; |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1195 elt = Fcar (tail); |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1196 if (!CONSP (elt)) continue; |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1197 tem = Fequal (XCONS (elt)->cdr, key); |
|
10588
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1198 if (!NILP (tem)) return elt; |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1199 QUIT; |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1200 } |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1201 return Qnil; |
|
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
1202 } |
| 211 | 1203 |
| 1204 DEFUN ("delq", Fdelq, Sdelq, 2, 2, 0, | |
| 1205 "Delete by side effect any occurrences of ELT as a member of LIST.\n\ | |
| 1206 The modified LIST is returned. Comparison is done with `eq'.\n\ | |
| 1207 If the first member of LIST is ELT, there is no way to remove it by side effect;\n\ | |
| 1208 therefore, write `(setq foo (delq element foo))'\n\ | |
| 1209 to be sure of changing the value of `foo'.") | |
| 1210 (elt, list) | |
| 1211 register Lisp_Object elt; | |
| 1212 Lisp_Object list; | |
| 1213 { | |
| 1214 register Lisp_Object tail, prev; | |
| 1215 register Lisp_Object tem; | |
| 1216 | |
| 1217 tail = list; | |
| 1218 prev = Qnil; | |
| 485 | 1219 while (!NILP (tail)) |
| 211 | 1220 { |
| 1221 tem = Fcar (tail); | |
| 1222 if (EQ (elt, tem)) | |
| 1223 { | |
| 485 | 1224 if (NILP (prev)) |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1225 list = XCONS (tail)->cdr; |
| 211 | 1226 else |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1227 Fsetcdr (prev, XCONS (tail)->cdr); |
| 211 | 1228 } |
| 1229 else | |
| 1230 prev = tail; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1231 tail = XCONS (tail)->cdr; |
| 211 | 1232 QUIT; |
| 1233 } | |
| 1234 return list; | |
| 1235 } | |
| 1236 | |
| 414 | 1237 DEFUN ("delete", Fdelete, Sdelete, 2, 2, 0, |
| 401 | 1238 "Delete by side effect any occurrences of ELT as a member of LIST.\n\ |
| 1239 The modified LIST is returned. Comparison is done with `equal'.\n\ | |
| 6990 | 1240 If the first member of LIST is ELT, deleting it is not a side effect;\n\ |
| 1241 it is simply using a different list.\n\ | |
| 1242 Therefore, write `(setq foo (delete element foo))'\n\ | |
| 401 | 1243 to be sure of changing the value of `foo'.") |
| 1244 (elt, list) | |
| 1245 register Lisp_Object elt; | |
| 1246 Lisp_Object list; | |
| 1247 { | |
| 1248 register Lisp_Object tail, prev; | |
| 1249 register Lisp_Object tem; | |
| 1250 | |
| 1251 tail = list; | |
| 1252 prev = Qnil; | |
| 485 | 1253 while (!NILP (tail)) |
| 401 | 1254 { |
| 1255 tem = Fcar (tail); | |
|
1513
7381accd610d
* fns.c: #include keyboard.h.
Jim Blandy <jimb@redhat.com>
parents:
1194
diff
changeset
|
1256 if (! NILP (Fequal (elt, tem))) |
| 401 | 1257 { |
| 485 | 1258 if (NILP (prev)) |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1259 list = XCONS (tail)->cdr; |
| 401 | 1260 else |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1261 Fsetcdr (prev, XCONS (tail)->cdr); |
| 401 | 1262 } |
| 1263 else | |
| 1264 prev = tail; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1265 tail = XCONS (tail)->cdr; |
| 401 | 1266 QUIT; |
| 1267 } | |
| 1268 return list; | |
| 1269 } | |
| 1270 | |
| 211 | 1271 DEFUN ("nreverse", Fnreverse, Snreverse, 1, 1, 0, |
| 1272 "Reverse LIST by modifying cdr pointers.\n\ | |
| 1273 Returns the beginning of the reversed list.") | |
| 1274 (list) | |
| 1275 Lisp_Object list; | |
| 1276 { | |
| 1277 register Lisp_Object prev, tail, next; | |
| 1278 | |
| 485 | 1279 if (NILP (list)) return list; |
| 211 | 1280 prev = Qnil; |
| 1281 tail = list; | |
| 485 | 1282 while (!NILP (tail)) |
| 211 | 1283 { |
| 1284 QUIT; | |
| 1285 next = Fcdr (tail); | |
| 1286 Fsetcdr (tail, prev); | |
| 1287 prev = tail; | |
| 1288 tail = next; | |
| 1289 } | |
| 1290 return prev; | |
| 1291 } | |
| 1292 | |
| 1293 DEFUN ("reverse", Freverse, Sreverse, 1, 1, 0, | |
| 1294 "Reverse LIST, copying. Returns the beginning of the reversed list.\n\ | |
| 1295 See also the function `nreverse', which is used more often.") | |
| 1296 (list) | |
| 1297 Lisp_Object list; | |
| 1298 { | |
| 18421 | 1299 Lisp_Object new; |
| 211 | 1300 |
| 18421 | 1301 for (new = Qnil; CONSP (list); list = XCONS (list)->cdr) |
| 1302 new = Fcons (XCONS (list)->car, new); | |
| 1303 if (!NILP (list)) | |
| 1304 wrong_type_argument (Qconsp, list); | |
| 1305 return new; | |
| 211 | 1306 } |
| 1307 | |
| 1308 Lisp_Object merge (); | |
| 1309 | |
| 1310 DEFUN ("sort", Fsort, Ssort, 2, 2, 0, | |
| 1311 "Sort LIST, stably, comparing elements using PREDICATE.\n\ | |
| 1312 Returns the sorted list. LIST is modified by side effects.\n\ | |
| 1313 PREDICATE is called with two elements of LIST, and should return T\n\ | |
| 1314 if the first element is \"less\" than the second.") | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1315 (list, predicate) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1316 Lisp_Object list, predicate; |
| 211 | 1317 { |
| 1318 Lisp_Object front, back; | |
| 1319 register Lisp_Object len, tem; | |
| 1320 struct gcpro gcpro1, gcpro2; | |
| 1321 register int length; | |
| 1322 | |
| 1323 front = list; | |
| 1324 len = Flength (list); | |
| 1325 length = XINT (len); | |
| 1326 if (length < 2) | |
| 1327 return list; | |
| 1328 | |
| 1329 XSETINT (len, (length / 2) - 1); | |
| 1330 tem = Fnthcdr (len, list); | |
| 1331 back = Fcdr (tem); | |
| 1332 Fsetcdr (tem, Qnil); | |
| 1333 | |
| 1334 GCPRO2 (front, back); | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1335 front = Fsort (front, predicate); |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1336 back = Fsort (back, predicate); |
| 211 | 1337 UNGCPRO; |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1338 return merge (front, back, predicate); |
| 211 | 1339 } |
| 1340 | |
| 1341 Lisp_Object | |
| 1342 merge (org_l1, org_l2, pred) | |
| 1343 Lisp_Object org_l1, org_l2; | |
| 1344 Lisp_Object pred; | |
| 1345 { | |
| 1346 Lisp_Object value; | |
| 1347 register Lisp_Object tail; | |
| 1348 Lisp_Object tem; | |
| 1349 register Lisp_Object l1, l2; | |
| 1350 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; | |
| 1351 | |
| 1352 l1 = org_l1; | |
| 1353 l2 = org_l2; | |
| 1354 tail = Qnil; | |
| 1355 value = Qnil; | |
| 1356 | |
| 1357 /* It is sufficient to protect org_l1 and org_l2. | |
| 1358 When l1 and l2 are updated, we copy the new values | |
| 1359 back into the org_ vars. */ | |
| 1360 GCPRO4 (org_l1, org_l2, pred, value); | |
| 1361 | |
| 1362 while (1) | |
| 1363 { | |
| 485 | 1364 if (NILP (l1)) |
| 211 | 1365 { |
| 1366 UNGCPRO; | |
| 485 | 1367 if (NILP (tail)) |
| 211 | 1368 return l2; |
| 1369 Fsetcdr (tail, l2); | |
| 1370 return value; | |
| 1371 } | |
| 485 | 1372 if (NILP (l2)) |
| 211 | 1373 { |
| 1374 UNGCPRO; | |
| 485 | 1375 if (NILP (tail)) |
| 211 | 1376 return l1; |
| 1377 Fsetcdr (tail, l1); | |
| 1378 return value; | |
| 1379 } | |
| 1380 tem = call2 (pred, Fcar (l2), Fcar (l1)); | |
| 485 | 1381 if (NILP (tem)) |
| 211 | 1382 { |
| 1383 tem = l1; | |
| 1384 l1 = Fcdr (l1); | |
| 1385 org_l1 = l1; | |
| 1386 } | |
| 1387 else | |
| 1388 { | |
| 1389 tem = l2; | |
| 1390 l2 = Fcdr (l2); | |
| 1391 org_l2 = l2; | |
| 1392 } | |
| 485 | 1393 if (NILP (tail)) |
| 211 | 1394 value = tem; |
| 1395 else | |
| 1396 Fsetcdr (tail, tem); | |
| 1397 tail = tem; | |
| 1398 } | |
| 1399 } | |
| 1400 | |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1401 |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1402 DEFUN ("plist-get", Fplist_get, Splist_get, 2, 2, 0, |
|
14051
7f7e97f219ce
(Fplist_get): Rename arg `val' to `plist' as in doc.
Erik Naggum <erik@naggum.no>
parents:
13862
diff
changeset
|
1403 "Extract a value from a property list.\n\ |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1404 PLIST is a property list, which is a list of the form\n\ |
|
11138
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1405 \(PROP1 VALUE1 PROP2 VALUE2...). This function returns the value\n\ |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1406 corresponding to the given PROP, or nil if PROP is not\n\ |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1407 one of the properties on the list.") |
|
14051
7f7e97f219ce
(Fplist_get): Rename arg `val' to `plist' as in doc.
Erik Naggum <erik@naggum.no>
parents:
13862
diff
changeset
|
1408 (plist, prop) |
|
7f7e97f219ce
(Fplist_get): Rename arg `val' to `plist' as in doc.
Erik Naggum <erik@naggum.no>
parents:
13862
diff
changeset
|
1409 Lisp_Object plist; |
| 211 | 1410 register Lisp_Object prop; |
| 1411 { | |
| 1412 register Lisp_Object tail; | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1413 for (tail = plist; !NILP (tail); tail = Fcdr (XCONS (tail)->cdr)) |
| 211 | 1414 { |
| 1415 register Lisp_Object tem; | |
| 1416 tem = Fcar (tail); | |
| 1417 if (EQ (prop, tem)) | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
1418 return Fcar (XCONS (tail)->cdr); |
| 211 | 1419 } |
| 1420 return Qnil; | |
| 1421 } | |
| 1422 | |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1423 DEFUN ("get", Fget, Sget, 2, 2, 0, |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1424 "Return the value of SYMBOL's PROPNAME property.\n\ |
|
11138
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1425 This is the last value stored with `(put SYMBOL PROPNAME VALUE)'.") |
|
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1426 (symbol, propname) |
|
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1427 Lisp_Object symbol, propname; |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1428 { |
|
11138
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1429 CHECK_SYMBOL (symbol, 0); |
|
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1430 return Fplist_get (XSYMBOL (symbol)->plist, propname); |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1431 } |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1432 |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1433 DEFUN ("plist-put", Fplist_put, Splist_put, 3, 3, 0, |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1434 "Change value in PLIST of PROP to VAL.\n\ |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1435 PLIST is a property list, which is a list of the form\n\ |
|
11138
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1436 \(PROP1 VALUE1 PROP2 VALUE2 ...). PROP is a symbol and VAL is any object.\n\ |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1437 If PROP is already a property on the list, its value is set to VAL,\n\ |
| 11221 | 1438 otherwise the new PROP VAL pair is added. The new plist is returned;\n\ |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1439 use `(setq x (plist-put x prop val))' to be sure to use the new value.\n\ |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1440 The PLIST is modified by side effects.") |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1441 (plist, prop, val) |
| 20004 | 1442 Lisp_Object plist; |
| 1443 register Lisp_Object prop; | |
| 1444 Lisp_Object val; | |
| 211 | 1445 { |
| 1446 register Lisp_Object tail, prev; | |
| 1447 Lisp_Object newcell; | |
| 1448 prev = Qnil; | |
|
11539
d8227796a997
(Fplist_put): Don't signal an error if plist isn't a cons.
Karl Heuer <kwzh@gnu.org>
parents:
11240
diff
changeset
|
1449 for (tail = plist; CONSP (tail) && CONSP (XCONS (tail)->cdr); |
|
d8227796a997
(Fplist_put): Don't signal an error if plist isn't a cons.
Karl Heuer <kwzh@gnu.org>
parents:
11240
diff
changeset
|
1450 tail = XCONS (XCONS (tail)->cdr)->cdr) |
| 211 | 1451 { |
|
11539
d8227796a997
(Fplist_put): Don't signal an error if plist isn't a cons.
Karl Heuer <kwzh@gnu.org>
parents:
11240
diff
changeset
|
1452 if (EQ (prop, XCONS (tail)->car)) |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1453 { |
|
11539
d8227796a997
(Fplist_put): Don't signal an error if plist isn't a cons.
Karl Heuer <kwzh@gnu.org>
parents:
11240
diff
changeset
|
1454 Fsetcar (XCONS (tail)->cdr, val); |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1455 return plist; |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1456 } |
| 211 | 1457 prev = tail; |
| 1458 } | |
| 1459 newcell = Fcons (prop, Fcons (val, Qnil)); | |
| 485 | 1460 if (NILP (prev)) |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1461 return newcell; |
| 211 | 1462 else |
|
11539
d8227796a997
(Fplist_put): Don't signal an error if plist isn't a cons.
Karl Heuer <kwzh@gnu.org>
parents:
11240
diff
changeset
|
1463 Fsetcdr (XCONS (prev)->cdr, newcell); |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1464 return plist; |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1465 } |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1466 |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1467 DEFUN ("put", Fput, Sput, 3, 3, 0, |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1468 "Store SYMBOL's PROPNAME property with value VALUE.\n\ |
|
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1469 It can be retrieved with `(get SYMBOL PROPNAME)'.") |
|
11138
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1470 (symbol, propname, value) |
|
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1471 Lisp_Object symbol, propname, value; |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
1472 { |
|
11138
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1473 CHECK_SYMBOL (symbol, 0); |
|
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1474 XSYMBOL (symbol)->plist |
|
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1475 = Fplist_put (XSYMBOL (symbol)->plist, propname, value); |
|
8eed13a00d2b
(Fget, Fput): Fetch and store symbol's plist directly.
Richard M. Stallman <rms@gnu.org>
parents:
11130
diff
changeset
|
1476 return value; |
| 211 | 1477 } |
| 1478 | |
| 1479 DEFUN ("equal", Fequal, Sequal, 2, 2, 0, | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1480 "Return t if two Lisp objects have similar structure and contents.\n\ |
| 211 | 1481 They must have the same data type.\n\ |
| 1482 Conses are compared by comparing the cars and the cdrs.\n\ | |
| 1483 Vectors and strings are compared element by element.\n\ | |
|
3379
68f28e378f50
(internal_equal): Don't let ints be equal to floats.
Richard M. Stallman <rms@gnu.org>
parents:
3332
diff
changeset
|
1484 Numbers are compared by value, but integers cannot equal floats.\n\ |
|
68f28e378f50
(internal_equal): Don't let ints be equal to floats.
Richard M. Stallman <rms@gnu.org>
parents:
3332
diff
changeset
|
1485 (Use `=' if you want integers and floats to be able to be equal.)\n\ |
|
68f28e378f50
(internal_equal): Don't let ints be equal to floats.
Richard M. Stallman <rms@gnu.org>
parents:
3332
diff
changeset
|
1486 Symbols must match exactly.") |
| 211 | 1487 (o1, o2) |
| 1488 register Lisp_Object o1, o2; | |
| 1489 { | |
|
9927
05aa745fc829
(internal_equal): Use new overlay substructure.
Karl Heuer <kwzh@gnu.org>
parents:
9439
diff
changeset
|
1490 return internal_equal (o1, o2, 0) ? Qt : Qnil; |
|
399
21aa17a1560d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
350
diff
changeset
|
1491 } |
|
21aa17a1560d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
350
diff
changeset
|
1492 |
|
9927
05aa745fc829
(internal_equal): Use new overlay substructure.
Karl Heuer <kwzh@gnu.org>
parents:
9439
diff
changeset
|
1493 static int |
|
399
21aa17a1560d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
350
diff
changeset
|
1494 internal_equal (o1, o2, depth) |
|
21aa17a1560d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
350
diff
changeset
|
1495 register Lisp_Object o1, o2; |
|
21aa17a1560d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
350
diff
changeset
|
1496 int depth; |
|
21aa17a1560d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
350
diff
changeset
|
1497 { |
|
21aa17a1560d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
350
diff
changeset
|
1498 if (depth > 200) |
|
21aa17a1560d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
350
diff
changeset
|
1499 error ("Stack overflow in equal"); |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1500 |
|
9927
05aa745fc829
(internal_equal): Use new overlay substructure.
Karl Heuer <kwzh@gnu.org>
parents:
9439
diff
changeset
|
1501 tail_recurse: |
| 211 | 1502 QUIT; |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1503 if (EQ (o1, o2)) |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1504 return 1; |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1505 if (XTYPE (o1) != XTYPE (o2)) |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1506 return 0; |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1507 |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1508 switch (XTYPE (o1)) |
| 211 | 1509 { |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1510 #ifdef LISP_FLOAT_TYPE |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1511 case Lisp_Float: |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1512 return (extract_float (o1) == extract_float (o2)); |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1513 #endif |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1514 |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1515 case Lisp_Cons: |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1516 if (!internal_equal (XCONS (o1)->car, XCONS (o2)->car, depth + 1)) |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1517 return 0; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1518 o1 = XCONS (o1)->cdr; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1519 o2 = XCONS (o2)->cdr; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1520 goto tail_recurse; |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1521 |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1522 case Lisp_Misc: |
|
11240
2642924d2d21
(internal_equal): Use XMISCTYPE.
Richard M. Stallman <rms@gnu.org>
parents:
11235
diff
changeset
|
1523 if (XMISCTYPE (o1) != XMISCTYPE (o2)) |
|
9927
05aa745fc829
(internal_equal): Use new overlay substructure.
Karl Heuer <kwzh@gnu.org>
parents:
9439
diff
changeset
|
1524 return 0; |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1525 if (OVERLAYP (o1)) |
| 211 | 1526 { |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1527 if (!internal_equal (OVERLAY_START (o1), OVERLAY_START (o1), |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1528 depth + 1) |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1529 || !internal_equal (OVERLAY_END (o1), OVERLAY_END (o1), |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1530 depth + 1)) |
|
9927
05aa745fc829
(internal_equal): Use new overlay substructure.
Karl Heuer <kwzh@gnu.org>
parents:
9439
diff
changeset
|
1531 return 0; |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1532 o1 = XOVERLAY (o1)->plist; |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1533 o2 = XOVERLAY (o2)->plist; |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1534 goto tail_recurse; |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1535 } |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1536 if (MARKERP (o1)) |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1537 { |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1538 return (XMARKER (o1)->buffer == XMARKER (o2)->buffer |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1539 && (XMARKER (o1)->buffer == 0 |
|
20567
d56b7d5c18e8
(internal_equal): For markers, use bytepos instead of bufpos.
Richard M. Stallman <rms@gnu.org>
parents:
20314
diff
changeset
|
1540 || XMARKER (o1)->bytepos == XMARKER (o2)->bytepos)); |
| 211 | 1541 } |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1542 break; |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1543 |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1544 case Lisp_Vectorlike: |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1545 { |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1546 register int i, size; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1547 size = XVECTOR (o1)->size; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1548 /* Pseudovectors have the type encoded in the size field, so this test |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1549 actually checks that the objects have the same type as well as the |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1550 same size. */ |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1551 if (XVECTOR (o2)->size != size) |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1552 return 0; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1553 /* Boolvectors are compared much like strings. */ |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1554 if (BOOL_VECTOR_P (o1)) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1555 { |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1556 int size_in_chars |
|
17063
647b28ba4d1b
(Fcopy_sequence, concat, internal_equal, Ffillarray):
Karl Heuer <kwzh@gnu.org>
parents:
16863
diff
changeset
|
1557 = (XBOOL_VECTOR (o1)->size + BITS_PER_CHAR - 1) / BITS_PER_CHAR; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1558 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1559 if (XBOOL_VECTOR (o1)->size != XBOOL_VECTOR (o2)->size) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1560 return 0; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1561 if (bcmp (XBOOL_VECTOR (o1)->data, XBOOL_VECTOR (o2)->data, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1562 size_in_chars)) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1563 return 0; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1564 return 1; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1565 } |
|
20776
219fdecc30d3
(internal_equal): Use compare_window_configurations.
Richard M. Stallman <rms@gnu.org>
parents:
20712
diff
changeset
|
1566 if (WINDOW_CONFIGURATIONP (o1)) |
|
21021
7be2384fabdc
(internal_equal): compare_window_configurations takes new arg.
Richard M. Stallman <rms@gnu.org>
parents:
20992
diff
changeset
|
1567 return compare_window_configurations (o1, o2, 0); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1568 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1569 /* Aside from them, only true vectors, char-tables, and compiled |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1570 functions are sensible to compare, so eliminate the others now. */ |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1571 if (size & PSEUDOVECTOR_FLAG) |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1572 { |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1573 if (!(size & (PVEC_COMPILED | PVEC_CHAR_TABLE))) |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1574 return 0; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1575 size &= PSEUDOVECTOR_SIZE_MASK; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1576 } |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1577 for (i = 0; i < size; i++) |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1578 { |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1579 Lisp_Object v1, v2; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1580 v1 = XVECTOR (o1)->contents [i]; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1581 v2 = XVECTOR (o2)->contents [i]; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1582 if (!internal_equal (v1, v2, depth + 1)) |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1583 return 0; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1584 } |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1585 return 1; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1586 } |
|
10405
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1587 break; |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1588 |
|
609f34c0c7bc
(internal_equal): Once again use a switch.
Richard M. Stallman <rms@gnu.org>
parents:
10289
diff
changeset
|
1589 case Lisp_String: |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1590 if (XSTRING (o1)->size != XSTRING (o2)->size) |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1591 return 0; |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
1592 if (STRING_BYTES (XSTRING (o1)) != STRING_BYTES (XSTRING (o2))) |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1593 return 0; |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1594 if (bcmp (XSTRING (o1)->data, XSTRING (o2)->data, |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
1595 STRING_BYTES (XSTRING (o1)))) |
|
10411
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1596 return 0; |
|
b3c03881e6f6
(internal_equal): Delete redundant tests.
Karl Heuer <kwzh@gnu.org>
parents:
10405
diff
changeset
|
1597 return 1; |
| 211 | 1598 } |
|
9927
05aa745fc829
(internal_equal): Use new overlay substructure.
Karl Heuer <kwzh@gnu.org>
parents:
9439
diff
changeset
|
1599 return 0; |
| 211 | 1600 } |
| 1601 | |
|
18613
614b916ff5bf
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18531
diff
changeset
|
1602 extern Lisp_Object Fmake_char_internal (); |
|
614b916ff5bf
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18531
diff
changeset
|
1603 |
| 211 | 1604 DEFUN ("fillarray", Ffillarray, Sfillarray, 2, 2, 0, |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1605 "Store each element of ARRAY with ITEM.\n\ |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1606 ARRAY is a vector, string, char-table, or bool-vector.") |
| 211 | 1607 (array, item) |
| 1608 Lisp_Object array, item; | |
| 1609 { | |
| 1610 register int size, index, charval; | |
| 1611 retry: | |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
1612 if (VECTORP (array)) |
| 211 | 1613 { |
| 1614 register Lisp_Object *p = XVECTOR (array)->contents; | |
| 1615 size = XVECTOR (array)->size; | |
| 1616 for (index = 0; index < size; index++) | |
| 1617 p[index] = item; | |
| 1618 } | |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1619 else if (CHAR_TABLE_P (array)) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1620 { |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1621 register Lisp_Object *p = XCHAR_TABLE (array)->contents; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1622 size = CHAR_TABLE_ORDINARY_SLOTS; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1623 for (index = 0; index < size; index++) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1624 p[index] = item; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1625 XCHAR_TABLE (array)->defalt = Qnil; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1626 } |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
1627 else if (STRINGP (array)) |
| 211 | 1628 { |
| 1629 register unsigned char *p = XSTRING (array)->data; | |
| 1630 CHECK_NUMBER (item, 1); | |
| 1631 charval = XINT (item); | |
| 1632 size = XSTRING (array)->size; | |
| 1633 for (index = 0; index < size; index++) | |
| 1634 p[index] = charval; | |
| 1635 } | |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1636 else if (BOOL_VECTOR_P (array)) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1637 { |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1638 register unsigned char *p = XBOOL_VECTOR (array)->data; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1639 int size_in_chars |
|
17063
647b28ba4d1b
(Fcopy_sequence, concat, internal_equal, Ffillarray):
Karl Heuer <kwzh@gnu.org>
parents:
16863
diff
changeset
|
1640 = (XBOOL_VECTOR (array)->size + BITS_PER_CHAR - 1) / BITS_PER_CHAR; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1641 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1642 charval = (! NILP (item) ? -1 : 0); |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1643 for (index = 0; index < size_in_chars; index++) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1644 p[index] = charval; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1645 } |
| 211 | 1646 else |
| 1647 { | |
| 1648 array = wrong_type_argument (Qarrayp, array); | |
| 1649 goto retry; | |
| 1650 } | |
| 1651 return array; | |
| 1652 } | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1653 |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1654 DEFUN ("char-table-subtype", Fchar_table_subtype, Schar_table_subtype, |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1655 1, 1, 0, |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1656 "Return the subtype of char-table CHAR-TABLE. The value is a symbol.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1657 (char_table) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1658 Lisp_Object char_table; |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1659 { |
| 20004 | 1660 CHECK_CHAR_TABLE (char_table, 0); |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1661 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1662 return XCHAR_TABLE (char_table)->purpose; |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1663 } |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1664 |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1665 DEFUN ("char-table-parent", Fchar_table_parent, Schar_table_parent, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1666 1, 1, 0, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1667 "Return the parent char-table of CHAR-TABLE.\n\ |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1668 The value is either nil or another char-table.\n\ |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1669 If CHAR-TABLE holds nil for a given character,\n\ |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1670 then the actual applicable value is inherited from the parent char-table\n\ |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1671 \(or from its parents, if necessary).") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1672 (char_table) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1673 Lisp_Object char_table; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1674 { |
| 20004 | 1675 CHECK_CHAR_TABLE (char_table, 0); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1676 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1677 return XCHAR_TABLE (char_table)->parent; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1678 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1679 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1680 DEFUN ("set-char-table-parent", Fset_char_table_parent, Sset_char_table_parent, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1681 2, 2, 0, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1682 "Set the parent char-table of CHAR-TABLE to PARENT.\n\ |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1683 PARENT must be either nil or another char-table.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1684 (char_table, parent) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1685 Lisp_Object char_table, parent; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1686 { |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1687 Lisp_Object temp; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1688 |
| 20004 | 1689 CHECK_CHAR_TABLE (char_table, 0); |
|
13184
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1690 |
|
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1691 if (!NILP (parent)) |
|
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1692 { |
| 20004 | 1693 CHECK_CHAR_TABLE (parent, 0); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1694 |
|
13184
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1695 for (temp = parent; !NILP (temp); temp = XCHAR_TABLE (temp)->parent) |
|
14097
91c55574973f
(Fset_char_table_parent): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
14091
diff
changeset
|
1696 if (EQ (temp, char_table)) |
|
13184
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1697 error ("Attempt to make a chartable be its own parent"); |
|
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1698 } |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1699 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1700 XCHAR_TABLE (char_table)->parent = parent; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1701 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1702 return parent; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1703 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1704 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1705 DEFUN ("char-table-extra-slot", Fchar_table_extra_slot, Schar_table_extra_slot, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1706 2, 2, 0, |
|
17291
b66473f0d0fe
(Fcopy_sequence): Delete unused variable.
Karl Heuer <kwzh@gnu.org>
parents:
17182
diff
changeset
|
1707 "Return the value of CHAR-TABLE's extra-slot number N.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1708 (char_table, n) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1709 Lisp_Object char_table, n; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1710 { |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1711 CHECK_CHAR_TABLE (char_table, 1); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1712 CHECK_NUMBER (n, 2); |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1713 if (XINT (n) < 0 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1714 || XINT (n) >= CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (char_table))) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1715 args_out_of_range (char_table, n); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1716 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1717 return XCHAR_TABLE (char_table)->extras[XINT (n)]; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1718 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1719 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1720 DEFUN ("set-char-table-extra-slot", Fset_char_table_extra_slot, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1721 Sset_char_table_extra_slot, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1722 3, 3, 0, |
|
17291
b66473f0d0fe
(Fcopy_sequence): Delete unused variable.
Karl Heuer <kwzh@gnu.org>
parents:
17182
diff
changeset
|
1723 "Set CHAR-TABLE's extra-slot number N to VALUE.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1724 (char_table, n, value) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1725 Lisp_Object char_table, n, value; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1726 { |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1727 CHECK_CHAR_TABLE (char_table, 1); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1728 CHECK_NUMBER (n, 2); |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1729 if (XINT (n) < 0 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1730 || XINT (n) >= CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (char_table))) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1731 args_out_of_range (char_table, n); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1732 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1733 return XCHAR_TABLE (char_table)->extras[XINT (n)] = value; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1734 } |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1735 |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1736 DEFUN ("char-table-range", Fchar_table_range, Schar_table_range, |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1737 2, 2, 0, |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1738 "Return the value in CHAR-TABLE for a range of characters RANGE.\n\ |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1739 RANGE should be nil (for the default value)\n\ |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1740 a vector which identifies a character set or a row of a character set,\n\ |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1741 a character set name, or a character code.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1742 (char_table, range) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1743 Lisp_Object char_table, range; |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1744 { |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1745 int i; |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1746 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1747 CHECK_CHAR_TABLE (char_table, 0); |
| 20004 | 1748 |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1749 if (EQ (range, Qnil)) |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1750 return XCHAR_TABLE (char_table)->defalt; |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1751 else if (INTEGERP (range)) |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1752 return Faref (char_table, range); |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1753 else if (SYMBOLP (range)) |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1754 { |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1755 Lisp_Object charset_info; |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1756 |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1757 charset_info = Fget (range, Qcharset); |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1758 CHECK_VECTOR (charset_info, 0); |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1759 |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1760 return Faref (char_table, XVECTOR (charset_info)->contents[0] + 128); |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1761 } |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1762 else if (VECTORP (range)) |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1763 { |
|
18035
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1764 if (XVECTOR (range)->size == 1) |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1765 return Faref (char_table, XVECTOR (range)->contents[0] + 128); |
|
18035
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1766 else |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1767 { |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1768 int size = XVECTOR (range)->size; |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1769 Lisp_Object *val = XVECTOR (range)->contents; |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1770 Lisp_Object ch = Fmake_char_internal (size <= 0 ? Qnil : val[0], |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1771 size <= 1 ? Qnil : val[1], |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1772 size <= 2 ? Qnil : val[2]); |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1773 return Faref (char_table, ch); |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1774 } |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1775 } |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1776 else |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1777 error ("Invalid RANGE argument to `char-table-range'"); |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1778 } |
|
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
1779 |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1780 DEFUN ("set-char-table-range", Fset_char_table_range, Sset_char_table_range, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1781 3, 3, 0, |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1782 "Set the value in CHAR-TABLE for a range of characters RANGE to VALUE.\n\ |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1783 RANGE should be t (for all characters), nil (for the default value)\n\ |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1784 a vector which identifies a character set or a row of a character set,\n\ |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1785 a coding system, or a character code.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1786 (char_table, range, value) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1787 Lisp_Object char_table, range, value; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1788 { |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1789 int i; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1790 |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1791 CHECK_CHAR_TABLE (char_table, 0); |
| 20004 | 1792 |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1793 if (EQ (range, Qt)) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1794 for (i = 0; i < CHAR_TABLE_ORDINARY_SLOTS; i++) |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1795 XCHAR_TABLE (char_table)->contents[i] = value; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1796 else if (EQ (range, Qnil)) |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1797 XCHAR_TABLE (char_table)->defalt = value; |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1798 else if (SYMBOLP (range)) |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1799 { |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1800 Lisp_Object charset_info; |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1801 |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1802 charset_info = Fget (range, Qcharset); |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1803 CHECK_VECTOR (charset_info, 0); |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1804 |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1805 return Faset (char_table, XVECTOR (charset_info)->contents[0] + 128, |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1806 value); |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1807 } |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1808 else if (INTEGERP (range)) |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1809 Faset (char_table, range, value); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1810 else if (VECTORP (range)) |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1811 { |
|
18035
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1812 if (XVECTOR (range)->size == 1) |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
1813 return Faset (char_table, XVECTOR (range)->contents[0] + 128, value); |
|
18035
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1814 else |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1815 { |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1816 int size = XVECTOR (range)->size; |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1817 Lisp_Object *val = XVECTOR (range)->contents; |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1818 Lisp_Object ch = Fmake_char_internal (size <= 0 ? Qnil : val[0], |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1819 size <= 1 ? Qnil : val[1], |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1820 size <= 2 ? Qnil : val[2]); |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1821 return Faset (char_table, ch, value); |
|
edf54f605b36
(Fchar_table_range, Fset_char_table_range):
Richard M. Stallman <rms@gnu.org>
parents:
18000
diff
changeset
|
1822 } |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1823 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1824 else |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1825 error ("Invalid RANGE argument to `set-char-table-range'"); |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1826 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1827 return value; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1828 } |
|
17826
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1829 |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1830 DEFUN ("set-char-table-default", Fset_char_table_default, |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1831 Sset_char_table_default, 3, 3, 0, |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1832 "Set the default value in CHAR-TABLE for a generic character CHAR to VALUE.\n\ |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1833 The generic character specifies the group of characters.\n\ |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1834 See also the documentation of make-char.") |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1835 (char_table, ch, value) |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1836 Lisp_Object char_table, ch, value; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1837 { |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1838 int c, i, charset, code1, code2; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1839 Lisp_Object temp; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1840 |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1841 CHECK_CHAR_TABLE (char_table, 0); |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1842 CHECK_NUMBER (ch, 1); |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1843 |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1844 c = XINT (ch); |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1845 SPLIT_NON_ASCII_CHAR (c, charset, code1, code2); |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1846 if (! CHARSET_DEFINED_P (charset)) |
|
20928
7ad239d7020b
(Fset_char_table_default): For an invalid character, call
Kenichi Handa <handa@m17n.org>
parents:
20881
diff
changeset
|
1847 invalid_character (c); |
|
17826
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1848 |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1849 if (charset == CHARSET_ASCII) |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1850 return (XCHAR_TABLE (char_table)->defalt = value); |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1851 |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1852 /* Even if C is not a generic char, we had better behave as if a |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1853 generic char is specified. */ |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1854 if (CHARSET_DIMENSION (charset) == 1) |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1855 code1 = 0; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1856 temp = XCHAR_TABLE (char_table)->contents[charset + 128]; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1857 if (!code1) |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1858 { |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1859 if (SUB_CHAR_TABLE_P (temp)) |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1860 XCHAR_TABLE (temp)->defalt = value; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1861 else |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1862 XCHAR_TABLE (char_table)->contents[charset + 128] = value; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1863 return value; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1864 } |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1865 char_table = temp; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1866 if (! SUB_CHAR_TABLE_P (char_table)) |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1867 char_table = (XCHAR_TABLE (char_table)->contents[charset + 128] |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1868 = make_sub_char_table (temp)); |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1869 temp = XCHAR_TABLE (char_table)->contents[code1]; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1870 if (SUB_CHAR_TABLE_P (temp)) |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1871 XCHAR_TABLE (temp)->defalt = value; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1872 else |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1873 XCHAR_TABLE (char_table)->contents[code1] = value; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1874 return value; |
|
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
1875 } |
|
21339
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1876 |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1877 /* Look up the element in TABLE at index CH, |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1878 and return it as an integer. |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1879 If the element is nil, return CH itself. |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1880 (Actually we do that for any non-integer.) */ |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1881 |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1882 int |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1883 char_table_translate (table, ch) |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1884 Lisp_Object table; |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1885 int ch; |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1886 { |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1887 Lisp_Object value; |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1888 value = Faref (table, make_number (ch)); |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1889 if (! INTEGERP (value)) |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1890 return ch; |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1891 return XINT (value); |
|
91933098b4ae
(char_table_translate): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21260
diff
changeset
|
1892 } |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1893 |
|
17789
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1894 /* Map C_FUNCTION or FUNCTION over SUBTABLE, calling it for each |
|
13184
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1895 character or group of characters that share a value. |
|
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1896 DEPTH is the current depth in the originally specified |
|
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1897 chartable, and INDICES contains the vector indices |
|
17789
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1898 for the levels our callers have descended. |
|
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1899 |
|
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1900 ARG is passed to C_FUNCTION when that is called. */ |
|
13184
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1901 |
|
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1902 void |
|
17789
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1903 map_char_table (c_function, function, subtable, arg, depth, indices) |
|
20314
3fb425cf6a83
* fns.c (map_char_table): Protoize parameter.
Andreas Schwab <schwab@suse.de>
parents:
20148
diff
changeset
|
1904 void (*c_function) P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); |
|
3fb425cf6a83
* fns.c (map_char_table): Protoize parameter.
Andreas Schwab <schwab@suse.de>
parents:
20148
diff
changeset
|
1905 Lisp_Object function, subtable, arg, *indices; |
|
16105
1712db4a1709
(map_char_table): Declare depth as int.
Richard M. Stallman <rms@gnu.org>
parents:
15966
diff
changeset
|
1906 int depth; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1907 { |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1908 int i, to; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1909 |
|
17182
47bfc66eb7f1
(map_char_table): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17063
diff
changeset
|
1910 if (depth == 0) |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1911 { |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1912 /* At first, handle ASCII and 8-bit European characters. */ |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1913 for (i = 0; i < CHAR_TABLE_SINGLE_BYTE_SLOTS; i++) |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1914 { |
|
17789
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1915 Lisp_Object elt = XCHAR_TABLE (subtable)->contents[i]; |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1916 if (c_function) |
|
17789
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1917 (*c_function) (arg, make_number (i), elt); |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1918 else |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1919 call2 (function, make_number (i), elt); |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1920 } |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1921 #if 0 /* If the char table has entries for higher characters, |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1922 we should report them. */ |
|
20148
988eef7dba1b
(map_char_table): Do not operate on invalid characters.
Kenichi Handa <handa@m17n.org>
parents:
20004
diff
changeset
|
1923 if (NILP (current_buffer->enable_multibyte_characters)) |
|
988eef7dba1b
(map_char_table): Do not operate on invalid characters.
Kenichi Handa <handa@m17n.org>
parents:
20004
diff
changeset
|
1924 return; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
1925 #endif |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1926 to = CHAR_TABLE_ORDINARY_SLOTS; |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1927 } |
|
17182
47bfc66eb7f1
(map_char_table): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17063
diff
changeset
|
1928 else |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1929 { |
|
20148
988eef7dba1b
(map_char_table): Do not operate on invalid characters.
Kenichi Handa <handa@m17n.org>
parents:
20004
diff
changeset
|
1930 i = 32; |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1931 to = SUB_CHAR_TABLE_ORDINARY_SLOTS; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1932 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1933 |
|
18000
2873e0dabbc1
(map_char_table): For sub char-table, index should be
Kenichi Handa <handa@m17n.org>
parents:
17931
diff
changeset
|
1934 for (; i < to; i++) |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1935 { |
|
17789
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1936 Lisp_Object elt = XCHAR_TABLE (subtable)->contents[i]; |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1937 |
|
18108
af791b0f0657
(map_char_table): Use XSETFASTINT.
Richard M. Stallman <rms@gnu.org>
parents:
18035
diff
changeset
|
1938 XSETFASTINT (indices[depth], i); |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1939 |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1940 if (SUB_CHAR_TABLE_P (elt)) |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1941 { |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1942 if (depth >= 3) |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1943 error ("Too deep char table"); |
|
18000
2873e0dabbc1
(map_char_table): For sub char-table, index should be
Kenichi Handa <handa@m17n.org>
parents:
17931
diff
changeset
|
1944 map_char_table (c_function, function, elt, arg, depth + 1, indices); |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1945 } |
|
13184
04170e19b3d4
(Fcopy_sequence): Call Fmake_char_table the new way.
Richard M. Stallman <rms@gnu.org>
parents:
13140
diff
changeset
|
1946 else |
|
17182
47bfc66eb7f1
(map_char_table): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17063
diff
changeset
|
1947 { |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1948 int charset = XFASTINT (indices[0]) - 128, c1, c2, c; |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1949 |
|
17182
47bfc66eb7f1
(map_char_table): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17063
diff
changeset
|
1950 if (CHARSET_DEFINED_P (charset)) |
|
47bfc66eb7f1
(map_char_table): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17063
diff
changeset
|
1951 { |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1952 c1 = depth >= 1 ? XFASTINT (indices[1]) : 0; |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1953 c2 = depth >= 2 ? XFASTINT (indices[2]) : 0; |
|
17182
47bfc66eb7f1
(map_char_table): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17063
diff
changeset
|
1954 c = MAKE_NON_ASCII_CHAR (charset, c1, c2); |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1955 if (c_function) |
|
17789
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1956 (*c_function) (arg, make_number (c), elt); |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1957 else |
|
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1958 call2 (function, make_number (c), elt); |
|
17182
47bfc66eb7f1
(map_char_table): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17063
diff
changeset
|
1959 } |
| 20004 | 1960 } |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1961 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1962 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1963 |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1964 DEFUN ("map-char-table", Fmap_char_table, Smap_char_table, |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1965 2, 2, 0, |
|
18000
2873e0dabbc1
(map_char_table): For sub char-table, index should be
Kenichi Handa <handa@m17n.org>
parents:
17931
diff
changeset
|
1966 "Call FUNCTION for each (normal and generic) characters in CHAR-TABLE.\n\ |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1967 FUNCTION is called with two arguments--a key and a value.\n\ |
|
18000
2873e0dabbc1
(map_char_table): For sub char-table, index should be
Kenichi Handa <handa@m17n.org>
parents:
17931
diff
changeset
|
1968 The key is always a possible IDX argument to `aref'.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1969 (function, char_table) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
1970 Lisp_Object function, char_table; |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1971 { |
|
17318
224e100b393c
(copy_sub_char_table): New function.
Kenichi Handa <handa@m17n.org>
parents:
17291
diff
changeset
|
1972 /* The depth of char table is at most 3. */ |
|
18000
2873e0dabbc1
(map_char_table): For sub char-table, index should be
Kenichi Handa <handa@m17n.org>
parents:
17931
diff
changeset
|
1973 Lisp_Object indices[3]; |
|
2873e0dabbc1
(map_char_table): For sub char-table, index should be
Kenichi Handa <handa@m17n.org>
parents:
17931
diff
changeset
|
1974 |
|
2873e0dabbc1
(map_char_table): For sub char-table, index should be
Kenichi Handa <handa@m17n.org>
parents:
17931
diff
changeset
|
1975 CHECK_CHAR_TABLE (char_table, 1); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1976 |
|
17789
120a8d934816
(map_char_table): New arg SUBTABLE. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
17318
diff
changeset
|
1977 map_char_table (NULL, function, char_table, char_table, 0, indices); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1978 return Qnil; |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1979 } |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
1980 |
| 211 | 1981 /* ARGSUSED */ |
| 1982 Lisp_Object | |
| 1983 nconc2 (s1, s2) | |
| 1984 Lisp_Object s1, s2; | |
| 1985 { | |
| 1986 #ifdef NO_ARG_ARRAY | |
| 1987 Lisp_Object args[2]; | |
| 1988 args[0] = s1; | |
| 1989 args[1] = s2; | |
| 1990 return Fnconc (2, args); | |
| 1991 #else | |
| 1992 return Fnconc (2, &s1); | |
| 1993 #endif /* NO_ARG_ARRAY */ | |
| 1994 } | |
| 1995 | |
| 1996 DEFUN ("nconc", Fnconc, Snconc, 0, MANY, 0, | |
| 1997 "Concatenate any number of lists by altering them.\n\ | |
| 1998 Only the last argument is not altered, and need not be a list.") | |
| 1999 (nargs, args) | |
| 2000 int nargs; | |
| 2001 Lisp_Object *args; | |
| 2002 { | |
| 2003 register int argnum; | |
| 2004 register Lisp_Object tail, tem, val; | |
| 2005 | |
| 2006 val = Qnil; | |
| 2007 | |
| 2008 for (argnum = 0; argnum < nargs; argnum++) | |
| 2009 { | |
| 2010 tem = args[argnum]; | |
| 485 | 2011 if (NILP (tem)) continue; |
| 211 | 2012 |
| 485 | 2013 if (NILP (val)) |
| 211 | 2014 val = tem; |
| 2015 | |
| 2016 if (argnum + 1 == nargs) break; | |
| 2017 | |
| 2018 if (!CONSP (tem)) | |
| 2019 tem = wrong_type_argument (Qlistp, tem); | |
| 2020 | |
| 2021 while (CONSP (tem)) | |
| 2022 { | |
| 2023 tail = tem; | |
| 2024 tem = Fcdr (tail); | |
| 2025 QUIT; | |
| 2026 } | |
| 2027 | |
| 2028 tem = args[argnum + 1]; | |
| 2029 Fsetcdr (tail, tem); | |
| 485 | 2030 if (NILP (tem)) |
| 211 | 2031 args[argnum + 1] = tail; |
| 2032 } | |
| 2033 | |
| 2034 return val; | |
| 2035 } | |
| 2036 | |
| 2037 /* This is the guts of all mapping functions. | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2038 Apply FN to each element of SEQ, one by one, |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2039 storing the results into elements of VALS, a C vector of Lisp_Objects. |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2040 LENI is the length of VALS, which should also be the length of SEQ. */ |
| 211 | 2041 |
| 2042 static void | |
| 2043 mapcar1 (leni, vals, fn, seq) | |
| 2044 int leni; | |
| 2045 Lisp_Object *vals; | |
| 2046 Lisp_Object fn, seq; | |
| 2047 { | |
| 2048 register Lisp_Object tail; | |
| 2049 Lisp_Object dummy; | |
| 2050 register int i; | |
| 2051 struct gcpro gcpro1, gcpro2, gcpro3; | |
| 2052 | |
| 2053 /* Don't let vals contain any garbage when GC happens. */ | |
| 2054 for (i = 0; i < leni; i++) | |
| 2055 vals[i] = Qnil; | |
| 2056 | |
| 2057 GCPRO3 (dummy, fn, seq); | |
| 2058 gcpro1.var = vals; | |
| 2059 gcpro1.nvars = leni; | |
| 2060 /* We need not explicitly protect `tail' because it is used only on lists, and | |
| 2061 1) lists are not relocated and 2) the list is marked via `seq' so will not be freed */ | |
| 2062 | |
|
9128
04a702d7f662
(Frandom, Flength, Fstring_equal, Fstring_lessp, Fcopy_sequence, concat, Felt,
Karl Heuer <kwzh@gnu.org>
parents:
8966
diff
changeset
|
2063 if (VECTORP (seq)) |
| 211 | 2064 { |
| 2065 for (i = 0; i < leni; i++) | |
| 2066 { | |
| 2067 dummy = XVECTOR (seq)->contents[i]; | |
| 2068 vals[i] = call1 (fn, dummy); | |
| 2069 } | |
| 2070 } | |
|
20992
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2071 else if (BOOL_VECTOR_P (seq)) |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2072 { |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2073 for (i = 0; i < leni; i++) |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2074 { |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2075 int byte; |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2076 byte = XBOOL_VECTOR (seq)->data[i / BITS_PER_CHAR]; |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2077 if (byte & (1 << (i % BITS_PER_CHAR))) |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2078 dummy = Qt; |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2079 else |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2080 dummy = Qnil; |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2081 |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2082 vals[i] = call1 (fn, dummy); |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2083 } |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2084 } |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2085 else if (STRINGP (seq) && ! STRING_MULTIBYTE (seq)) |
| 211 | 2086 { |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2087 /* Single-byte string. */ |
| 211 | 2088 for (i = 0; i < leni; i++) |
| 2089 { | |
|
9308
2c594629baaa
(Flength, concat, mapcar1): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9289
diff
changeset
|
2090 XSETFASTINT (dummy, XSTRING (seq)->data[i]); |
| 211 | 2091 vals[i] = call1 (fn, dummy); |
| 2092 } | |
| 2093 } | |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2094 else if (STRINGP (seq)) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2095 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2096 /* Multi-byte string. */ |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21218
diff
changeset
|
2097 int len_byte = STRING_BYTES (XSTRING (seq)); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2098 int i_byte; |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2099 |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2100 for (i = 0, i_byte = 0; i < leni;) |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2101 { |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2102 int c; |
|
20712
50255c536f0f
(mapcar1): Keep `i' in `i_before' before `i' is
Kenichi Handa <handa@m17n.org>
parents:
20706
diff
changeset
|
2103 int i_before = i; |
|
50255c536f0f
(mapcar1): Keep `i' in `i_before' before `i' is
Kenichi Handa <handa@m17n.org>
parents:
20706
diff
changeset
|
2104 |
|
50255c536f0f
(mapcar1): Keep `i' in `i_before' before `i' is
Kenichi Handa <handa@m17n.org>
parents:
20706
diff
changeset
|
2105 FETCH_STRING_CHAR_ADVANCE (c, seq, i, i_byte); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2106 XSETFASTINT (dummy, c); |
|
20712
50255c536f0f
(mapcar1): Keep `i' in `i_before' before `i' is
Kenichi Handa <handa@m17n.org>
parents:
20706
diff
changeset
|
2107 vals[i_before] = call1 (fn, dummy); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2108 } |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2109 } |
| 211 | 2110 else /* Must be a list, since Flength did not get an error */ |
| 2111 { | |
| 2112 tail = seq; | |
| 2113 for (i = 0; i < leni; i++) | |
| 2114 { | |
| 2115 vals[i] = call1 (fn, Fcar (tail)); | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
2116 tail = XCONS (tail)->cdr; |
| 211 | 2117 } |
| 2118 } | |
| 2119 | |
| 2120 UNGCPRO; | |
| 2121 } | |
| 2122 | |
| 2123 DEFUN ("mapconcat", Fmapconcat, Smapconcat, 3, 3, 0, | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2124 "Apply FUNCTION to each element of SEQUENCE, and concat the results as strings.\n\ |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2125 In between each pair of results, stick in SEPARATOR. Thus, \" \" as\n\ |
|
20992
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2126 SEPARATOR results in spaces between the values returned by FUNCTION.\n\ |
|
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2127 SEQUENCE may be a list, a vector, a bool-vector, or a string.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2128 (function, sequence, separator) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2129 Lisp_Object function, sequence, separator; |
| 211 | 2130 { |
| 2131 Lisp_Object len; | |
| 2132 register int leni; | |
| 2133 int nargs; | |
| 2134 register Lisp_Object *args; | |
| 2135 register int i; | |
| 2136 struct gcpro gcpro1; | |
| 2137 | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2138 len = Flength (sequence); |
| 211 | 2139 leni = XINT (len); |
| 2140 nargs = leni + leni - 1; | |
| 2141 if (nargs < 0) return build_string (""); | |
| 2142 | |
| 2143 args = (Lisp_Object *) alloca (nargs * sizeof (Lisp_Object)); | |
| 2144 | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2145 GCPRO1 (separator); |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2146 mapcar1 (leni, args, function, sequence); |
| 211 | 2147 UNGCPRO; |
| 2148 | |
| 2149 for (i = leni - 1; i >= 0; i--) | |
| 2150 args[i + i] = args[i]; | |
| 20004 | 2151 |
| 211 | 2152 for (i = 1; i < nargs; i += 2) |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2153 args[i] = separator; |
| 211 | 2154 |
| 2155 return Fconcat (nargs, args); | |
| 2156 } | |
| 2157 | |
| 2158 DEFUN ("mapcar", Fmapcar, Smapcar, 2, 2, 0, | |
| 2159 "Apply FUNCTION to each element of SEQUENCE, and make a list of the results.\n\ | |
| 2160 The result is a list just as long as SEQUENCE.\n\ | |
|
20992
d2366423bc00
(mapcar1): Handle bool-vectors.
Karl Heuer <kwzh@gnu.org>
parents:
20928
diff
changeset
|
2161 SEQUENCE may be a list, a vector, a bool-vector, or a string.") |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2162 (function, sequence) |
|
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2163 Lisp_Object function, sequence; |
| 211 | 2164 { |
| 2165 register Lisp_Object len; | |
| 2166 register int leni; | |
| 2167 register Lisp_Object *args; | |
| 2168 | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2169 len = Flength (sequence); |
| 211 | 2170 leni = XFASTINT (len); |
| 2171 args = (Lisp_Object *) alloca (leni * sizeof (Lisp_Object)); | |
| 2172 | |
|
14091
34911b128a47
(Frandom, Flength, Felt, Fsort, Fchar_table_subtype, Fchar_table_parent,
Erik Naggum <erik@naggum.no>
parents:
14051
diff
changeset
|
2173 mapcar1 (leni, args, function, sequence); |
| 211 | 2174 |
| 2175 return Flist (leni, args); | |
| 2176 } | |
| 2177 | |
| 2178 /* Anything that calls this function must protect from GC! */ | |
| 2179 | |
| 2180 DEFUN ("y-or-n-p", Fy_or_n_p, Sy_or_n_p, 1, 1, 0, | |
| 2181 "Ask user a \"y or n\" question. Return t if answer is \"y\".\n\ | |
|
759
58b7fc91b74a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
727
diff
changeset
|
2182 Takes one argument, which is the string to display to ask the question.\n\ |
|
58b7fc91b74a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
727
diff
changeset
|
2183 It should end in a space; `y-or-n-p' adds `(y or n) ' to it.\n\ |
| 211 | 2184 No confirmation of the answer is requested; a single character is enough.\n\ |
| 2185 Also accepts Space to mean yes, or Delete to mean no.") | |
| 2186 (prompt) | |
| 2187 Lisp_Object prompt; | |
| 2188 { | |
|
2091
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2189 register Lisp_Object obj, key, def, answer_string, map; |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2190 register int answer; |
| 211 | 2191 Lisp_Object xprompt; |
| 2192 Lisp_Object args[2]; | |
| 2193 struct gcpro gcpro1, gcpro2; | |
|
14456
fb11ccbe5c7c
(Qcursor_in_echo_area): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14392
diff
changeset
|
2194 int count = specpdl_ptr - specpdl; |
|
fb11ccbe5c7c
(Qcursor_in_echo_area): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14392
diff
changeset
|
2195 |
|
fb11ccbe5c7c
(Qcursor_in_echo_area): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14392
diff
changeset
|
2196 specbind (Qcursor_in_echo_area, Qt); |
| 211 | 2197 |
|
2091
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2198 map = Fsymbol_value (intern ("query-replace-map")); |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2199 |
| 211 | 2200 CHECK_STRING (prompt, 0); |
| 2201 xprompt = prompt; | |
| 2202 GCPRO2 (prompt, xprompt); | |
| 2203 | |
| 2204 while (1) | |
| 2205 { | |
|
14456
fb11ccbe5c7c
(Qcursor_in_echo_area): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14392
diff
changeset
|
2206 |
|
13862
817ecef2d2d0
(Fy_or_n_p, Fyes_or_no_p): using_x_p renamed to have_menus_p.
Richard M. Stallman <rms@gnu.org>
parents:
13410
diff
changeset
|
2207 #ifdef HAVE_MENUS |
|
7790
75153e2d5d85
(Fy_or_n_p): Don't use dialog box if not an X frame.
Richard M. Stallman <rms@gnu.org>
parents:
7307
diff
changeset
|
2208 if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event)) |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
2209 && use_dialog_box |
|
13862
817ecef2d2d0
(Fy_or_n_p, Fyes_or_no_p): using_x_p renamed to have_menus_p.
Richard M. Stallman <rms@gnu.org>
parents:
13410
diff
changeset
|
2210 && have_menus_p ()) |
|
6057
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2211 { |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2212 Lisp_Object pane, menu; |
|
7815
5d167db8ce8a
(Fy_or_n_p, Fyes_or_no_p) [HAVE_X_MENU]: Redisplay before popping up a menu.
Karl Heuer <kwzh@gnu.org>
parents:
7790
diff
changeset
|
2213 redisplay_preserve_echo_area (); |
|
6057
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2214 pane = Fcons (Fcons (build_string ("Yes"), Qt), |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2215 Fcons (Fcons (build_string ("No"), Qnil), |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2216 Qnil)); |
|
6478
65c2e184b5d9
(Fy_or_n_p, Fyes_or_no_p): Call Fx_popup_dialog the new way.
Richard M. Stallman <rms@gnu.org>
parents:
6427
diff
changeset
|
2217 menu = Fcons (prompt, pane); |
|
6303
1571be153f56
(Fyes_or_no_p): Call Fx_popup_dialog instead of Fx_popup_menu.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6057
diff
changeset
|
2218 obj = Fx_popup_dialog (Qt, menu); |
|
6057
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2219 answer = !NILP (obj); |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2220 break; |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2221 } |
|
13862
817ecef2d2d0
(Fy_or_n_p, Fyes_or_no_p): using_x_p renamed to have_menus_p.
Richard M. Stallman <rms@gnu.org>
parents:
13410
diff
changeset
|
2222 #endif /* HAVE_MENUS */ |
|
6850
d2d8b40fb599
(Fy_or_n_p, Fyes_or_no_p): Test HAVE_X_MENU.
Karl Heuer <kwzh@gnu.org>
parents:
6478
diff
changeset
|
2223 cursor_in_echo_area = 1; |
|
14392
127c6142a07a
(Fy_or_n_p): Call choose_minibuf_frame.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
2224 choose_minibuf_frame (); |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2225 message_with_string ("%s(y or n) ", xprompt, 0); |
| 211 | 2226 |
|
16561
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
2227 if (minibuffer_auto_raise) |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
2228 { |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
2229 Lisp_Object mini_frame; |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
2230 |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
2231 mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window)); |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
2232 |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
2233 Fraise_frame (mini_frame); |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
2234 } |
|
55fcbbf28987
Include frame.h and window.h.
Richard M. Stallman <rms@gnu.org>
parents:
16105
diff
changeset
|
2235 |
|
6850
d2d8b40fb599
(Fy_or_n_p, Fyes_or_no_p): Test HAVE_X_MENU.
Karl Heuer <kwzh@gnu.org>
parents:
6478
diff
changeset
|
2236 obj = read_filtered_event (1, 0, 0); |
|
d2d8b40fb599
(Fy_or_n_p, Fyes_or_no_p): Test HAVE_X_MENU.
Karl Heuer <kwzh@gnu.org>
parents:
6478
diff
changeset
|
2237 cursor_in_echo_area = 0; |
|
d2d8b40fb599
(Fy_or_n_p, Fyes_or_no_p): Test HAVE_X_MENU.
Karl Heuer <kwzh@gnu.org>
parents:
6478
diff
changeset
|
2238 /* If we need to quit, quit with cursor_in_echo_area = 0. */ |
|
d2d8b40fb599
(Fy_or_n_p, Fyes_or_no_p): Test HAVE_X_MENU.
Karl Heuer <kwzh@gnu.org>
parents:
6478
diff
changeset
|
2239 QUIT; |
|
2369
8ce8541f393a
(Fy_or_n_p): Ensure cursor_in_echo_area = 0 when quit.
Richard M. Stallman <rms@gnu.org>
parents:
2311
diff
changeset
|
2240 |
|
2091
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2241 key = Fmake_vector (make_number (1), obj); |
|
15713
27487191083d
(Fy_or_n_p): Pass 3rd arg to Flookup_key.
Karl Heuer <kwzh@gnu.org>
parents:
14617
diff
changeset
|
2242 def = Flookup_key (map, key, Qt); |
|
2091
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2243 answer_string = Fsingle_key_description (obj); |
| 211 | 2244 |
|
2091
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2245 if (EQ (def, intern ("skip"))) |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2246 { |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2247 answer = 0; |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2248 break; |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2249 } |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2250 else if (EQ (def, intern ("act"))) |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2251 { |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2252 answer = 1; |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2253 break; |
|
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2254 } |
|
2311
98b714786ad0
(Fy_or_n_p): Handle `recenter' response type.
Richard M. Stallman <rms@gnu.org>
parents:
2171
diff
changeset
|
2255 else if (EQ (def, intern ("recenter"))) |
|
98b714786ad0
(Fy_or_n_p): Handle `recenter' response type.
Richard M. Stallman <rms@gnu.org>
parents:
2171
diff
changeset
|
2256 { |
|
98b714786ad0
(Fy_or_n_p): Handle `recenter' response type.
Richard M. Stallman <rms@gnu.org>
parents:
2171
diff
changeset
|
2257 Frecenter (Qnil); |
|
98b714786ad0
(Fy_or_n_p): Handle `recenter' response type.
Richard M. Stallman <rms@gnu.org>
parents:
2171
diff
changeset
|
2258 xprompt = prompt; |
|
98b714786ad0
(Fy_or_n_p): Handle `recenter' response type.
Richard M. Stallman <rms@gnu.org>
parents:
2171
diff
changeset
|
2259 continue; |
|
98b714786ad0
(Fy_or_n_p): Handle `recenter' response type.
Richard M. Stallman <rms@gnu.org>
parents:
2171
diff
changeset
|
2260 } |
|
2091
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2261 else if (EQ (def, intern ("quit"))) |
| 211 | 2262 Vquit_flag = Qt; |
|
10059
c1b138be512e
(Fy_or_n_p): Handle exit-prefix in query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
10006
diff
changeset
|
2263 /* We want to exit this command for exit-prefix, |
|
c1b138be512e
(Fy_or_n_p): Handle exit-prefix in query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
10006
diff
changeset
|
2264 and this is the only way to do it. */ |
|
c1b138be512e
(Fy_or_n_p): Handle exit-prefix in query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
10006
diff
changeset
|
2265 else if (EQ (def, intern ("exit-prefix"))) |
|
c1b138be512e
(Fy_or_n_p): Handle exit-prefix in query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
10006
diff
changeset
|
2266 Vquit_flag = Qt; |
|
2091
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2267 |
| 211 | 2268 QUIT; |
| 1194 | 2269 |
| 2270 /* If we don't clear this, then the next call to read_char will | |
| 2271 return quit_char again, and we'll enter an infinite loop. */ | |
|
1193
e1329d41271d
* fns.c (Fy_or_n_p): After testing for a QUIT, clear Vquit_flag.
Jim Blandy <jimb@redhat.com>
parents:
1093
diff
changeset
|
2272 Vquit_flag = Qnil; |
| 211 | 2273 |
| 2274 Fding (Qnil); | |
| 2275 Fdiscard_input (); | |
| 2276 if (EQ (xprompt, prompt)) | |
| 2277 { | |
| 2278 args[0] = build_string ("Please answer y or n. "); | |
| 2279 args[1] = prompt; | |
| 2280 xprompt = Fconcat (2, args); | |
| 2281 } | |
| 2282 } | |
| 2283 UNGCPRO; | |
|
2171
4fbceca13b22
* fns.c (Fy_or_n_p): Display the answer.
Jim Blandy <jimb@redhat.com>
parents:
2091
diff
changeset
|
2284 |
|
2525
6cf2344e6e7e
(Fy_or_n_p): Echo the answer just once, at exit.
Richard M. Stallman <rms@gnu.org>
parents:
2429
diff
changeset
|
2285 if (! noninteractive) |
|
6cf2344e6e7e
(Fy_or_n_p): Echo the answer just once, at exit.
Richard M. Stallman <rms@gnu.org>
parents:
2429
diff
changeset
|
2286 { |
|
6cf2344e6e7e
(Fy_or_n_p): Echo the answer just once, at exit.
Richard M. Stallman <rms@gnu.org>
parents:
2429
diff
changeset
|
2287 cursor_in_echo_area = -1; |
|
20607
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2288 message_with_string (answer ? "%s(y or n) y" : "%s(y or n) n", |
|
04a436e5760b
(map_char_table): Unconditionally consider non-ASCII charsets.
Richard M. Stallman <rms@gnu.org>
parents:
20567
diff
changeset
|
2289 xprompt, 0); |
|
2525
6cf2344e6e7e
(Fy_or_n_p): Echo the answer just once, at exit.
Richard M. Stallman <rms@gnu.org>
parents:
2429
diff
changeset
|
2290 } |
|
2171
4fbceca13b22
* fns.c (Fy_or_n_p): Display the answer.
Jim Blandy <jimb@redhat.com>
parents:
2091
diff
changeset
|
2291 |
|
14456
fb11ccbe5c7c
(Qcursor_in_echo_area): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14392
diff
changeset
|
2292 unbind_to (count, Qnil); |
|
2091
eedbad26e34c
(Fy_or_n_p): Use query-replace-map.
Richard M. Stallman <rms@gnu.org>
parents:
1919
diff
changeset
|
2293 return answer ? Qt : Qnil; |
| 211 | 2294 } |
| 2295 | |
| 2296 /* This is how C code calls `yes-or-no-p' and allows the user | |
| 2297 to redefined it. | |
| 2298 | |
| 2299 Anything that calls this function must protect from GC! */ | |
| 2300 | |
| 2301 Lisp_Object | |
| 2302 do_yes_or_no_p (prompt) | |
| 2303 Lisp_Object prompt; | |
| 2304 { | |
| 2305 return call1 (intern ("yes-or-no-p"), prompt); | |
| 2306 } | |
| 2307 | |
| 2308 /* Anything that calls this function must protect from GC! */ | |
| 2309 | |
| 2310 DEFUN ("yes-or-no-p", Fyes_or_no_p, Syes_or_no_p, 1, 1, 0, | |
|
759
58b7fc91b74a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
727
diff
changeset
|
2311 "Ask user a yes-or-no question. Return t if answer is yes.\n\ |
|
58b7fc91b74a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
727
diff
changeset
|
2312 Takes one argument, which is the string to display to ask the question.\n\ |
|
58b7fc91b74a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
727
diff
changeset
|
2313 It should end in a space; `yes-or-no-p' adds `(yes or no) ' to it.\n\ |
|
58b7fc91b74a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
727
diff
changeset
|
2314 The user must confirm the answer with RET,\n\ |
| 11194 | 2315 and can edit it until it has been confirmed.") |
| 211 | 2316 (prompt) |
| 2317 Lisp_Object prompt; | |
| 2318 { | |
| 2319 register Lisp_Object ans; | |
| 2320 Lisp_Object args[2]; | |
| 2321 struct gcpro gcpro1; | |
|
6057
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2322 Lisp_Object menu; |
| 211 | 2323 |
| 2324 CHECK_STRING (prompt, 0); | |
| 2325 | |
|
13862
817ecef2d2d0
(Fy_or_n_p, Fyes_or_no_p): using_x_p renamed to have_menus_p.
Richard M. Stallman <rms@gnu.org>
parents:
13410
diff
changeset
|
2326 #ifdef HAVE_MENUS |
| 20004 | 2327 if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event)) |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
2328 && use_dialog_box |
|
13862
817ecef2d2d0
(Fy_or_n_p, Fyes_or_no_p): using_x_p renamed to have_menus_p.
Richard M. Stallman <rms@gnu.org>
parents:
13410
diff
changeset
|
2329 && have_menus_p ()) |
|
6057
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2330 { |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2331 Lisp_Object pane, menu, obj; |
|
7815
5d167db8ce8a
(Fy_or_n_p, Fyes_or_no_p) [HAVE_X_MENU]: Redisplay before popping up a menu.
Karl Heuer <kwzh@gnu.org>
parents:
7790
diff
changeset
|
2332 redisplay_preserve_echo_area (); |
|
6057
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2333 pane = Fcons (Fcons (build_string ("Yes"), Qt), |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2334 Fcons (Fcons (build_string ("No"), Qnil), |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2335 Qnil)); |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2336 GCPRO1 (pane); |
|
6478
65c2e184b5d9
(Fy_or_n_p, Fyes_or_no_p): Call Fx_popup_dialog the new way.
Richard M. Stallman <rms@gnu.org>
parents:
6427
diff
changeset
|
2337 menu = Fcons (prompt, pane); |
| 6344 | 2338 obj = Fx_popup_dialog (Qt, menu); |
|
6057
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2339 UNGCPRO; |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2340 return obj; |
|
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2341 } |
|
13862
817ecef2d2d0
(Fy_or_n_p, Fyes_or_no_p): using_x_p renamed to have_menus_p.
Richard M. Stallman <rms@gnu.org>
parents:
13410
diff
changeset
|
2342 #endif /* HAVE_MENUS */ |
|
6057
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2343 |
| 211 | 2344 args[0] = prompt; |
| 2345 args[1] = build_string ("(yes or no) "); | |
| 2346 prompt = Fconcat (2, args); | |
| 2347 | |
| 2348 GCPRO1 (prompt); | |
|
6057
b2cc63a56415
(Fy_or_n_p): Use a popup menu if reached via mouse command.
Richard M. Stallman <rms@gnu.org>
parents:
5664
diff
changeset
|
2349 |
| 211 | 2350 while (1) |
| 2351 { | |
|
4456
cbfcf187b5da
(Fyes_or_no_p): Use Qyes_or_no_p_history.
Richard M. Stallman <rms@gnu.org>
parents:
4004
diff
changeset
|
2352 ans = Fdowncase (Fread_from_minibuffer (prompt, Qnil, Qnil, Qnil, |
|
19542
6d3cc8864678
(Fyes_or_no_p): Call Fread_from_minibuffer
Kenichi Handa <handa@m17n.org>
parents:
19383
diff
changeset
|
2353 Qyes_or_no_p_history, Qnil, |
|
6d3cc8864678
(Fyes_or_no_p): Call Fread_from_minibuffer
Kenichi Handa <handa@m17n.org>
parents:
19383
diff
changeset
|
2354 Qnil)); |
| 211 | 2355 if (XSTRING (ans)->size == 3 && !strcmp (XSTRING (ans)->data, "yes")) |
| 2356 { | |
| 2357 UNGCPRO; | |
| 2358 return Qt; | |
| 2359 } | |
| 2360 if (XSTRING (ans)->size == 2 && !strcmp (XSTRING (ans)->data, "no")) | |
| 2361 { | |
| 2362 UNGCPRO; | |
| 2363 return Qnil; | |
| 2364 } | |
| 2365 | |
| 2366 Fding (Qnil); | |
| 2367 Fdiscard_input (); | |
| 2368 message ("Please answer yes or no."); | |
|
1045
2ac1c701fced
* fns.c (Fyes_or_no_p): Call Fsleep_for with the appropriate
Jim Blandy <jimb@redhat.com>
parents:
1037
diff
changeset
|
2369 Fsleep_for (make_number (2), Qnil); |
| 211 | 2370 } |
| 2371 } | |
| 2372 | |
| 2373 DEFUN ("load-average", Fload_average, Sload_average, 0, 0, 0, | |
| 2374 "Return list of 1 minute, 5 minute and 15 minute load averages.\n\ | |
| 2375 Each of the three load averages is multiplied by 100,\n\ | |
| 727 | 2376 then converted to integer.\n\ |
| 2377 If the 5-minute or 15-minute load averages are not available, return a\n\ | |
| 2378 shortened list, containing only those averages which are available.") | |
| 211 | 2379 () |
| 2380 { | |
| 727 | 2381 double load_ave[3]; |
| 2382 int loads = getloadavg (load_ave, 3); | |
| 2383 Lisp_Object ret; | |
| 211 | 2384 |
| 727 | 2385 if (loads < 0) |
| 2386 error ("load-average not implemented for this operating system"); | |
| 211 | 2387 |
| 727 | 2388 ret = Qnil; |
| 2389 while (loads > 0) | |
| 2390 ret = Fcons (make_number ((int) (load_ave[--loads] * 100.0)), ret); | |
| 211 | 2391 |
| 727 | 2392 return ret; |
| 211 | 2393 } |
| 2394 | |
| 2395 Lisp_Object Vfeatures; | |
| 2396 | |
| 2397 DEFUN ("featurep", Ffeaturep, Sfeaturep, 1, 1, 0, | |
| 2398 "Returns t if FEATURE is present in this Emacs.\n\ | |
| 2399 Use this to conditionalize execution of lisp code based on the presence or\n\ | |
| 2400 absence of emacs or environment extensions.\n\ | |
| 2401 Use `provide' to declare that a feature is available.\n\ | |
| 2402 This function looks at the value of the variable `features'.") | |
| 20004 | 2403 (feature) |
| 211 | 2404 Lisp_Object feature; |
| 2405 { | |
| 2406 register Lisp_Object tem; | |
| 2407 CHECK_SYMBOL (feature, 0); | |
| 2408 tem = Fmemq (feature, Vfeatures); | |
| 485 | 2409 return (NILP (tem)) ? Qnil : Qt; |
| 211 | 2410 } |
| 2411 | |
| 2412 DEFUN ("provide", Fprovide, Sprovide, 1, 1, 0, | |
| 2413 "Announce that FEATURE is a feature of the current Emacs.") | |
| 20004 | 2414 (feature) |
| 211 | 2415 Lisp_Object feature; |
| 2416 { | |
| 2417 register Lisp_Object tem; | |
| 2418 CHECK_SYMBOL (feature, 0); | |
| 485 | 2419 if (!NILP (Vautoload_queue)) |
| 211 | 2420 Vautoload_queue = Fcons (Fcons (Vfeatures, Qnil), Vautoload_queue); |
| 2421 tem = Fmemq (feature, Vfeatures); | |
| 485 | 2422 if (NILP (tem)) |
| 211 | 2423 Vfeatures = Fcons (feature, Vfeatures); |
|
2546
c8cd694d70eb
(provide, require): Put appropriately-marked
Richard M. Stallman <rms@gnu.org>
parents:
2525
diff
changeset
|
2424 LOADHIST_ATTACH (Fcons (Qprovide, feature)); |
| 211 | 2425 return feature; |
| 2426 } | |
| 2427 | |
| 2428 DEFUN ("require", Frequire, Srequire, 1, 2, 0, | |
| 2429 "If feature FEATURE is not loaded, load it from FILENAME.\n\ | |
| 2430 If FEATURE is not a member of the list `features', then the feature\n\ | |
| 2431 is not loaded; so load the file FILENAME.\n\ | |
| 2432 If FILENAME is omitted, the printname of FEATURE is used as the file name.") | |
| 20004 | 2433 (feature, file_name) |
| 211 | 2434 Lisp_Object feature, file_name; |
| 2435 { | |
| 2436 register Lisp_Object tem; | |
| 2437 CHECK_SYMBOL (feature, 0); | |
| 2438 tem = Fmemq (feature, Vfeatures); | |
|
2546
c8cd694d70eb
(provide, require): Put appropriately-marked
Richard M. Stallman <rms@gnu.org>
parents:
2525
diff
changeset
|
2439 LOADHIST_ATTACH (Fcons (Qrequire, feature)); |
| 485 | 2440 if (NILP (tem)) |
| 211 | 2441 { |
| 2442 int count = specpdl_ptr - specpdl; | |
| 2443 | |
| 2444 /* Value saved here is to be restored into Vautoload_queue */ | |
| 2445 record_unwind_protect (un_autoload, Vautoload_queue); | |
| 2446 Vautoload_queue = Qt; | |
| 2447 | |
| 485 | 2448 Fload (NILP (file_name) ? Fsymbol_name (feature) : file_name, |
|
19223
475cf041a683
(Frequire): Don't insist on a suffix
Richard M. Stallman <rms@gnu.org>
parents:
19117
diff
changeset
|
2449 Qnil, Qt, Qnil, (NILP (file_name) ? Qt : Qnil)); |
| 211 | 2450 |
| 2451 tem = Fmemq (feature, Vfeatures); | |
| 485 | 2452 if (NILP (tem)) |
| 211 | 2453 error ("Required feature %s was not provided", |
|
19223
475cf041a683
(Frequire): Don't insist on a suffix
Richard M. Stallman <rms@gnu.org>
parents:
19117
diff
changeset
|
2454 XSYMBOL (feature)->name->data); |
| 211 | 2455 |
| 2456 /* Once loading finishes, don't undo it. */ | |
| 2457 Vautoload_queue = Qt; | |
| 2458 feature = unbind_to (count, feature); | |
| 2459 } | |
| 2460 return feature; | |
| 2461 } | |
| 2462 | |
| 20004 | 2463 /* Primitives for work of the "widget" library. |
| 2464 In an ideal world, this section would not have been necessary. | |
| 2465 However, lisp function calls being as slow as they are, it turns | |
| 2466 out that some functions in the widget library (wid-edit.el) are the | |
| 2467 bottleneck of Widget operation. Here is their translation to C, | |
| 2468 for the sole reason of efficiency. */ | |
| 2469 | |
| 2470 DEFUN ("widget-plist-member", Fwidget_plist_member, Swidget_plist_member, 2, 2, 0, | |
| 2471 "Return non-nil if PLIST has the property PROP.\n\ | |
| 2472 PLIST is a property list, which is a list of the form\n\ | |
| 2473 \(PROP1 VALUE1 PROP2 VALUE2 ...\). PROP is a symbol.\n\ | |
| 2474 Unlike `plist-get', this allows you to distinguish between a missing\n\ | |
| 2475 property and a property with the value nil.\n\ | |
| 2476 The value is actually the tail of PLIST whose car is PROP.") | |
| 2477 (plist, prop) | |
| 2478 Lisp_Object plist, prop; | |
| 2479 { | |
| 2480 while (CONSP (plist) && !EQ (XCAR (plist), prop)) | |
| 2481 { | |
| 2482 QUIT; | |
| 2483 plist = XCDR (plist); | |
| 2484 plist = CDR (plist); | |
| 2485 } | |
| 2486 return plist; | |
| 2487 } | |
| 2488 | |
| 2489 DEFUN ("widget-put", Fwidget_put, Swidget_put, 3, 3, 0, | |
| 2490 "In WIDGET, set PROPERTY to VALUE.\n\ | |
| 2491 The value can later be retrieved with `widget-get'.") | |
| 2492 (widget, property, value) | |
| 2493 Lisp_Object widget, property, value; | |
| 2494 { | |
| 2495 CHECK_CONS (widget, 1); | |
| 2496 XCDR (widget) = Fplist_put (XCDR (widget), property, value); | |
| 2497 } | |
| 2498 | |
| 2499 DEFUN ("widget-get", Fwidget_get, Swidget_get, 2, 2, 0, | |
| 2500 "In WIDGET, get the value of PROPERTY.\n\ | |
| 2501 The value could either be specified when the widget was created, or\n\ | |
| 2502 later with `widget-put'.") | |
| 2503 (widget, property) | |
| 2504 Lisp_Object widget, property; | |
| 2505 { | |
| 2506 Lisp_Object tmp; | |
| 2507 | |
| 2508 while (1) | |
| 2509 { | |
| 2510 if (NILP (widget)) | |
| 2511 return Qnil; | |
| 2512 CHECK_CONS (widget, 1); | |
| 2513 tmp = Fwidget_plist_member (XCDR (widget), property); | |
| 2514 if (CONSP (tmp)) | |
| 2515 { | |
| 2516 tmp = XCDR (tmp); | |
| 2517 return CAR (tmp); | |
| 2518 } | |
| 2519 tmp = XCAR (widget); | |
| 2520 if (NILP (tmp)) | |
| 2521 return Qnil; | |
| 2522 widget = Fget (tmp, Qwidget_type); | |
| 2523 } | |
| 2524 } | |
| 2525 | |
| 2526 DEFUN ("widget-apply", Fwidget_apply, Swidget_apply, 2, MANY, 0, | |
| 2527 "Apply the value of WIDGET's PROPERTY to the widget itself.\n\ | |
| 2528 ARGS are passed as extra arguments to the function.") | |
| 2529 (nargs, args) | |
| 2530 int nargs; | |
| 2531 Lisp_Object *args; | |
| 2532 { | |
| 2533 /* This function can GC. */ | |
| 2534 Lisp_Object newargs[3]; | |
| 2535 struct gcpro gcpro1, gcpro2; | |
| 2536 Lisp_Object result; | |
| 2537 | |
| 2538 newargs[0] = Fwidget_get (args[0], args[1]); | |
| 2539 newargs[1] = args[0]; | |
| 2540 newargs[2] = Flist (nargs - 2, args + 2); | |
| 2541 GCPRO2 (newargs[0], newargs[2]); | |
| 2542 result = Fapply (3, newargs); | |
| 2543 UNGCPRO; | |
| 2544 return result; | |
| 2545 } | |
| 2546 | |
| 211 | 2547 syms_of_fns () |
| 2548 { | |
| 2549 Qstring_lessp = intern ("string-lessp"); | |
| 2550 staticpro (&Qstring_lessp); | |
|
2546
c8cd694d70eb
(provide, require): Put appropriately-marked
Richard M. Stallman <rms@gnu.org>
parents:
2525
diff
changeset
|
2551 Qprovide = intern ("provide"); |
|
c8cd694d70eb
(provide, require): Put appropriately-marked
Richard M. Stallman <rms@gnu.org>
parents:
2525
diff
changeset
|
2552 staticpro (&Qprovide); |
|
c8cd694d70eb
(provide, require): Put appropriately-marked
Richard M. Stallman <rms@gnu.org>
parents:
2525
diff
changeset
|
2553 Qrequire = intern ("require"); |
|
c8cd694d70eb
(provide, require): Put appropriately-marked
Richard M. Stallman <rms@gnu.org>
parents:
2525
diff
changeset
|
2554 staticpro (&Qrequire); |
|
4456
cbfcf187b5da
(Fyes_or_no_p): Use Qyes_or_no_p_history.
Richard M. Stallman <rms@gnu.org>
parents:
4004
diff
changeset
|
2555 Qyes_or_no_p_history = intern ("yes-or-no-p-history"); |
|
cbfcf187b5da
(Fyes_or_no_p): Use Qyes_or_no_p_history.
Richard M. Stallman <rms@gnu.org>
parents:
4004
diff
changeset
|
2556 staticpro (&Qyes_or_no_p_history); |
|
14456
fb11ccbe5c7c
(Qcursor_in_echo_area): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14392
diff
changeset
|
2557 Qcursor_in_echo_area = intern ("cursor-in-echo-area"); |
|
fb11ccbe5c7c
(Qcursor_in_echo_area): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
14392
diff
changeset
|
2558 staticpro (&Qcursor_in_echo_area); |
| 20004 | 2559 Qwidget_type = intern ("widget-type"); |
| 2560 staticpro (&Qwidget_type); | |
| 211 | 2561 |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
2562 staticpro (&string_char_byte_cache_string); |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
2563 string_char_byte_cache_string = Qnil; |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
2564 |
|
14486
3c4ba112108e
(syms_of_fns): Set yes-or-no-p-history to nil.
Richard M. Stallman <rms@gnu.org>
parents:
14456
diff
changeset
|
2565 Fset (Qyes_or_no_p_history, Qnil); |
|
3c4ba112108e
(syms_of_fns): Set yes-or-no-p-history to nil.
Richard M. Stallman <rms@gnu.org>
parents:
14456
diff
changeset
|
2566 |
| 211 | 2567 DEFVAR_LISP ("features", &Vfeatures, |
| 2568 "A list of symbols which are the features of the executing emacs.\n\ | |
| 2569 Used by `featurep' and `require', and altered by `provide'."); | |
| 2570 Vfeatures = Qnil; | |
| 2571 | |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
2572 DEFVAR_BOOL ("use-dialog-box", &use_dialog_box, |
|
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
2573 "*Non-nil means mouse commands use dialog boxes to ask questions.\n\ |
|
18686
186f1b58028d
(syms_of_fns): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18613
diff
changeset
|
2574 This applies to y-or-n and yes-or-no questions asked by commands\n\ |
|
18531
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
2575 invoked by mouse clicks and mouse menu items."); |
|
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
2576 use_dialog_box = 1; |
|
35a263e545b3
(Fy_or_n_p, Fyes_or_no_p): Obey use_dialog_box.
Richard M. Stallman <rms@gnu.org>
parents:
18421
diff
changeset
|
2577 |
| 211 | 2578 defsubr (&Sidentity); |
| 2579 defsubr (&Srandom); | |
| 2580 defsubr (&Slength); | |
|
12466
b22565172b9b
(Fsafe_length): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12062
diff
changeset
|
2581 defsubr (&Ssafe_length); |
|
20864
ad9e06c97d95
(Fstring_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20814
diff
changeset
|
2582 defsubr (&Sstring_bytes); |
| 211 | 2583 defsubr (&Sstring_equal); |
| 2584 defsubr (&Sstring_lessp); | |
| 2585 defsubr (&Sappend); | |
| 2586 defsubr (&Sconcat); | |
| 2587 defsubr (&Svconcat); | |
| 2588 defsubr (&Scopy_sequence); | |
|
20667
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
2589 defsubr (&Sstring_make_multibyte); |
|
64af046211eb
(concat): Move the test for all nil in `append'
Karl Heuer <kwzh@gnu.org>
parents:
20639
diff
changeset
|
2590 defsubr (&Sstring_make_unibyte); |
|
20813
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
2591 defsubr (&Sstring_as_multibyte); |
|
b040da7cfab8
(concat): If making a string, a nonempty bool-vector is error.
Richard M. Stallman <rms@gnu.org>
parents:
20776
diff
changeset
|
2592 defsubr (&Sstring_as_unibyte); |
| 211 | 2593 defsubr (&Scopy_alist); |
| 2594 defsubr (&Ssubstring); | |
| 2595 defsubr (&Snthcdr); | |
| 2596 defsubr (&Snth); | |
| 2597 defsubr (&Selt); | |
| 2598 defsubr (&Smember); | |
| 2599 defsubr (&Smemq); | |
| 2600 defsubr (&Sassq); | |
| 2601 defsubr (&Sassoc); | |
| 2602 defsubr (&Srassq); | |
|
10588
2a8f29cd9e9f
(Frassoc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
10485
diff
changeset
|
2603 defsubr (&Srassoc); |
| 211 | 2604 defsubr (&Sdelq); |
| 414 | 2605 defsubr (&Sdelete); |
| 211 | 2606 defsubr (&Snreverse); |
| 2607 defsubr (&Sreverse); | |
| 2608 defsubr (&Ssort); | |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
2609 defsubr (&Splist_get); |
| 211 | 2610 defsubr (&Sget); |
|
11130
052869c2f609
(Fplist_put, Fplist_get): New fns.
Boris Goldowsky <boris@gnu.org>
parents:
11094
diff
changeset
|
2611 defsubr (&Splist_put); |
| 211 | 2612 defsubr (&Sput); |
| 2613 defsubr (&Sequal); | |
| 2614 defsubr (&Sfillarray); | |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
2615 defsubr (&Schar_table_subtype); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
2616 defsubr (&Schar_table_parent); |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
2617 defsubr (&Sset_char_table_parent); |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
2618 defsubr (&Schar_table_extra_slot); |
|
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
2619 defsubr (&Sset_char_table_extra_slot); |
|
13236
c9af99bb26d4
(Fchar_table_subtype): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13184
diff
changeset
|
2620 defsubr (&Schar_table_range); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
2621 defsubr (&Sset_char_table_range); |
|
17826
961399e23170
(copy_sub_char_table): Declare the argument ARG as
Kenichi Handa <handa@m17n.org>
parents:
17819
diff
changeset
|
2622 defsubr (&Sset_char_table_default); |
|
13140
99c5d39b9531
(Fset_char_table_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12618
diff
changeset
|
2623 defsubr (&Smap_char_table); |
| 211 | 2624 defsubr (&Snconc); |
| 2625 defsubr (&Smapcar); | |
| 2626 defsubr (&Smapconcat); | |
| 2627 defsubr (&Sy_or_n_p); | |
| 2628 defsubr (&Syes_or_no_p); | |
| 2629 defsubr (&Sload_average); | |
| 2630 defsubr (&Sfeaturep); | |
| 2631 defsubr (&Srequire); | |
| 2632 defsubr (&Sprovide); | |
| 20004 | 2633 defsubr (&Swidget_plist_member); |
| 2634 defsubr (&Swidget_put); | |
| 2635 defsubr (&Swidget_get); | |
| 2636 defsubr (&Swidget_apply); | |
| 211 | 2637 } |
