annotate src/casetab.c @ 45098:06120f91eb06

(eshell-modify-global-environment): Added this customization variable, which will cause any "export" commands within any eshell buffer to modify the global Emacs environment. It defaults to nil, which means that such commands will only modify that Eshell buffer's environment. (eshell-var-initialize): Initialize `eshell-modify-global-environment'.
author John Wiegley <johnw@newartisans.com>
date Fri, 03 May 2002 20:43:53 +0000
parents 6b389fb978bc
children 644bd031ece8 1cf6a8acec39
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* GNU Emacs routines to deal with case tables.
7307
cd81dba38a49 Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 6937
diff changeset
2 Copyright (C) 1993, 1994 Free Software Foundation, Inc.
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
12244
ac7375e60931 Update GPL to version 2.
Karl Heuer <kwzh@gnu.org>
parents: 9136
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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: 14064
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: 14064
diff changeset
19 Boston, MA 02111-1307, USA. */
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 /* Written by Howard Gayle. See chartab.c for details. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 3069
diff changeset
23 #include <config.h>
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "lisp.h"
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "buffer.h"
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
26 #include "charset.h"
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
28 Lisp_Object Qcase_table_p, Qcase_table;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 Lisp_Object Vascii_downcase_table, Vascii_upcase_table;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 Lisp_Object Vascii_canon_table, Vascii_eqv_table;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
32 /* Used as a temporary in DOWNCASE and other macros in lisp.h. No
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
33 need to mark it, since it is used only very temporarily. */
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18004
diff changeset
34 int case_temp1;
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18004
diff changeset
35 Lisp_Object case_temp2;
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
36
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
37 static void set_canon ();
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
38 static void set_identity ();
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
39 static void shuffle ();
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 DEFUN ("case-table-p", Fcase_table_p, Scase_table_p, 1, 1, 0,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
42 doc: /* Return t iff OBJECT is a case table.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
43 See `set-case-table' for more information on these data structures. */)
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
44 (object)
14064
d090a0a25ac8 (Fcase_table_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13321
diff changeset
45 Lisp_Object object;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 {
13276
a09ec2a2f6dd (Fcase_table_p, Fcurrent_case_table): Delete unused local variables.
Erik Naggum <erik@naggum.no>
parents: 13242
diff changeset
47 Lisp_Object up, canon, eqv;
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
48
14064
d090a0a25ac8 (Fcase_table_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13321
diff changeset
49 if (! CHAR_TABLE_P (object))
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
50 return Qnil;
14064
d090a0a25ac8 (Fcase_table_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13321
diff changeset
51 if (! EQ (XCHAR_TABLE (object)->purpose, Qcase_table))
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
52 return Qnil;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53
14064
d090a0a25ac8 (Fcase_table_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13321
diff changeset
54 up = XCHAR_TABLE (object)->extras[0];
d090a0a25ac8 (Fcase_table_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13321
diff changeset
55 canon = XCHAR_TABLE (object)->extras[1];
d090a0a25ac8 (Fcase_table_p): Harmonize arguments with documentation.
Erik Naggum <erik@naggum.no>
parents: 13321
diff changeset
56 eqv = XCHAR_TABLE (object)->extras[2];
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
58 return ((NILP (up) || CHAR_TABLE_P (up))
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
59 && ((NILP (canon) && NILP (eqv))
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
60 || (CHAR_TABLE_P (canon)
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
61 && (NILP (eqv) || CHAR_TABLE_P (eqv))))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 ? Qt : Qnil);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 static Lisp_Object
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 check_case_table (obj)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 Lisp_Object obj;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 register Lisp_Object tem;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
71 while (tem = Fcase_table_p (obj), NILP (tem))
1926
952f2a18f83d * callint.c (Fcall_interactively): Pass the correct number of
Jim Blandy <jimb@redhat.com>
parents: 1506
diff changeset
72 obj = wrong_type_argument (Qcase_table_p, obj);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 return (obj);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 DEFUN ("current-case-table", Fcurrent_case_table, Scurrent_case_table, 0, 0, 0,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
77 doc: /* Return the case table of the current buffer. */)
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
78 ()
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 {
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
80 return current_buffer->downcase_table;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82
3069
93ff3c50bd1d * casetab.c: Fix formatting, so as not to confuse etags.
Jim Blandy <jimb@redhat.com>
parents: 2961
diff changeset
83 DEFUN ("standard-case-table", Fstandard_case_table, Sstandard_case_table, 0, 0, 0,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
84 doc: /* Return the standard case table.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
85 This is the one used for new buffers. */)
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
86 ()
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 {
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
88 return Vascii_downcase_table;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90
1506
5fe52748a72c * casetab.c (set_case_table): Declare this to be static, and
Jim Blandy <jimb@redhat.com>
parents: 484
diff changeset
91 static Lisp_Object set_case_table ();
5fe52748a72c * casetab.c (set_case_table): Declare this to be static, and
Jim Blandy <jimb@redhat.com>
parents: 484
diff changeset
92
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 DEFUN ("set-case-table", Fset_case_table, Sset_case_table, 1, 1, 0,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
94 doc: /* Select a new case table for the current buffer.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
95 A case table is a char-table which maps characters
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
96 to their lower-case equivalents. It also has three \"extra\" slots
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
97 which may be additional char-tables or nil.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
98 These slots are called UPCASE, CANONICALIZE and EQUIVALENCES.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
99 UPCASE maps each character to its upper-case equivalent;
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
100 if lower and upper case characters are in 1-1 correspondence,
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
101 you may use nil and the upcase table will be deduced from DOWNCASE.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
102 CANONICALIZE maps each character to a canonical equivalent;
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
103 any two characters that are related by case-conversion have the same
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
104 canonical equivalent character; it may be nil, in which case it is
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
105 deduced from DOWNCASE and UPCASE.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
106 EQUIVALENCES is a map that cyclicly permutes each equivalence class
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
107 (of characters with the same canonical equivalent); it may be nil,
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
108 in which case it is deduced from CANONICALIZE. */)
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
109 (table)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 Lisp_Object table;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 {
1506
5fe52748a72c * casetab.c (set_case_table): Declare this to be static, and
Jim Blandy <jimb@redhat.com>
parents: 484
diff changeset
112 return set_case_table (table, 0);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114
3069
93ff3c50bd1d * casetab.c: Fix formatting, so as not to confuse etags.
Jim Blandy <jimb@redhat.com>
parents: 2961
diff changeset
115 DEFUN ("set-standard-case-table", Fset_standard_case_table, Sset_standard_case_table, 1, 1, 0,
40103
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
116 doc: /* Select a new standard case table for new buffers.
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
117 See `set-case-table' for more info on case tables. */)
6b389fb978bc Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 21514
diff changeset
118 (table)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 Lisp_Object table;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 {
1506
5fe52748a72c * casetab.c (set_case_table): Declare this to be static, and
Jim Blandy <jimb@redhat.com>
parents: 484
diff changeset
121 return set_case_table (table, 1);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123
1506
5fe52748a72c * casetab.c (set_case_table): Declare this to be static, and
Jim Blandy <jimb@redhat.com>
parents: 484
diff changeset
124 static Lisp_Object
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 set_case_table (table, standard)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 Lisp_Object table;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 int standard;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 {
13276
a09ec2a2f6dd (Fcase_table_p, Fcurrent_case_table): Delete unused local variables.
Erik Naggum <erik@naggum.no>
parents: 13242
diff changeset
129 Lisp_Object up, canon, eqv;
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
130 Lisp_Object indices[3];
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 check_case_table (table);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
134 up = XCHAR_TABLE (table)->extras[0];
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
135 canon = XCHAR_TABLE (table)->extras[1];
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
136 eqv = XCHAR_TABLE (table)->extras[2];
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
138 if (NILP (up))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 {
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
140 up = Fmake_char_table (Qcase_table, Qnil);
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
141 map_char_table (set_identity, Qnil, table, up, 0, indices);
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
142 map_char_table (shuffle, Qnil, table, up, 0, indices);
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
143 XCHAR_TABLE (table)->extras[0] = up;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
146 if (NILP (canon))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 {
13276
a09ec2a2f6dd (Fcase_table_p, Fcurrent_case_table): Delete unused local variables.
Erik Naggum <erik@naggum.no>
parents: 13242
diff changeset
148 canon = Fmake_char_table (Qcase_table, Qnil);
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
149 XCHAR_TABLE (table)->extras[1] = canon;
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
150 map_char_table (set_canon, Qnil, table, table, 0, indices);
6937
c5a85ac1d292 (set_case_table): Handle nil for EQV with non-nil CANON.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
151 }
c5a85ac1d292 (set_case_table): Handle nil for EQV with non-nil CANON.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
152
c5a85ac1d292 (set_case_table): Handle nil for EQV with non-nil CANON.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
153 if (NILP (eqv))
c5a85ac1d292 (set_case_table): Handle nil for EQV with non-nil CANON.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
154 {
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
155 eqv = Fmake_char_table (Qcase_table, Qnil);
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
156 map_char_table (set_identity, Qnil, canon, eqv, 0, indices);
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
157 map_char_table (shuffle, Qnil, canon, eqv, 0, indices);
13276
a09ec2a2f6dd (Fcase_table_p, Fcurrent_case_table): Delete unused local variables.
Erik Naggum <erik@naggum.no>
parents: 13242
diff changeset
158 XCHAR_TABLE (table)->extras[2] = eqv;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 if (standard)
13276
a09ec2a2f6dd (Fcase_table_p, Fcurrent_case_table): Delete unused local variables.
Erik Naggum <erik@naggum.no>
parents: 13242
diff changeset
162 Vascii_downcase_table = table;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 else
15171
36c329b45867 (set_case_table): Set upcase_table, case_canon_table
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
164 {
36c329b45867 (set_case_table): Set upcase_table, case_canon_table
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
165 current_buffer->downcase_table = table;
36c329b45867 (set_case_table): Set upcase_table, case_canon_table
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
166 current_buffer->upcase_table = up;
36c329b45867 (set_case_table): Set upcase_table, case_canon_table
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
167 current_buffer->case_canon_table = canon;
36c329b45867 (set_case_table): Set upcase_table, case_canon_table
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
168 current_buffer->case_eqv_table = eqv;
36c329b45867 (set_case_table): Set upcase_table, case_canon_table
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
169 }
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
170
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 return table;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
174 /* The following functions are called in map_char_table. */
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
175
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
176 /* Set CANON char-table element for C to a translated ELT by UP and
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
177 DOWN char-tables. This is done only when ELT is a character. The
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
178 char-tables CANON, UP, and DOWN are in CASE_TABLE. */
17815
c407a3aca56f (compute_trt_identity, compute_trt_shuffle): Add comments.
Karl Heuer <kwzh@gnu.org>
parents: 17807
diff changeset
179
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
180 static void
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
181 set_canon (case_table, c, elt)
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
182 Lisp_Object case_table, c, elt;
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
183 {
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
184 Lisp_Object up = XCHAR_TABLE (case_table)->extras[0];
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
185 Lisp_Object canon = XCHAR_TABLE (case_table)->extras[1];
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
186
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
187 if (NATNUMP (elt))
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
188 Faset (canon, c, Faref (case_table, Faref (up, elt)));
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
189 }
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
190
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
191 /* Set elements of char-table TABLE for C to C itself. This is done
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
192 only when ELT is a character. This is called in map_char_table. */
17815
c407a3aca56f (compute_trt_identity, compute_trt_shuffle): Add comments.
Karl Heuer <kwzh@gnu.org>
parents: 17807
diff changeset
193
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
194 static void
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
195 set_identity (table, c, elt)
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
196 Lisp_Object table, c, elt;
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
197 {
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
198 if (NATNUMP (elt))
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
199 Faset (table, c, c);
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
200 }
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
201
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
202 /* Permute the elements of TABLE (which is initially an identity
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
203 mapping) so that it has one cycle for each equivalence class
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
204 induced by the translation table on which map_char_table is
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
205 operated. */
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
207 static void
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
208 shuffle (table, c, elt)
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
209 Lisp_Object table, c, elt;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 {
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18004
diff changeset
211 if (NATNUMP (elt) && !EQ (c, elt))
18004
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
212 {
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
213 Lisp_Object tem = Faref (table, elt);
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
214 Faset (table, elt, c);
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
215 Faset (table, c, tem);
40ce43a92060 (case_temp1, case_temp2): New variables temporarily
Kenichi Handa <handa@m17n.org>
parents: 17815
diff changeset
216 }
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
219 void
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 init_casetab_once ()
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 register int i;
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
223 Lisp_Object down, up;
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
224 Qcase_table = intern ("case-table");
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
225 staticpro (&Qcase_table);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
227 /* Intern this now in case it isn't already done.
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
228 Setting this variable twice is harmless.
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
229 But don't staticpro it here--that is done in alloc.c. */
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
230 Qchar_table_extra_slots = intern ("char-table-extra-slots");
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
231
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
232 /* Now we are ready to set up this property, so we can
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
233 create char tables. */
13276
a09ec2a2f6dd (Fcase_table_p, Fcurrent_case_table): Delete unused local variables.
Erik Naggum <erik@naggum.no>
parents: 13242
diff changeset
234 Fput (Qcase_table, Qchar_table_extra_slots, make_number (3));
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
235
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
236 down = Fmake_char_table (Qcase_table, Qnil);
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
237 Vascii_downcase_table = down;
17340
64722b193f14 (init_casetab_once): Initialize the purpose slot.
Richard M. Stallman <rms@gnu.org>
parents: 16224
diff changeset
238 XCHAR_TABLE (down)->purpose = Qcase_table;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
240 for (i = 0; i < CHAR_TABLE_SINGLE_BYTE_SLOTS; i++)
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
241 XSETFASTINT (XCHAR_TABLE (down)->contents[i],
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
242 (i >= 'A' && i <= 'Z') ? i + ('a' - 'A') : i);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
244 XCHAR_TABLE (down)->extras[1] = Fcopy_sequence (down);
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
245
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
246 up = Fmake_char_table (Qcase_table, Qnil);
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
247 XCHAR_TABLE (down)->extras[0] = up;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248
17804
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
249 for (i = 0; i < CHAR_TABLE_SINGLE_BYTE_SLOTS; i++)
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
250 XSETFASTINT (XCHAR_TABLE (up)->contents[i],
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
251 ((i >= 'A' && i <= 'Z')
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
252 ? i + ('a' - 'A')
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
253 : ((i >= 'a' && i <= 'z')
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
254 ? i + ('A' - 'a')
5977a67b9356 Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17340
diff changeset
255 : i)));
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
256
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
257 XCHAR_TABLE (down)->extras[2] = Fcopy_sequence (up);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 18613
diff changeset
260 void
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 syms_of_casetab ()
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 Qcase_table_p = intern ("case-table-p");
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 staticpro (&Qcase_table_p);
13242
3a8c500b97c3 Case tables are now char-tables,
Richard M. Stallman <rms@gnu.org>
parents: 12244
diff changeset
265
16224
d4c102d5ac70 (syms_of_casetab): staticpro Vascii_canontable, Vascii_eqv_table, and
Erik Naggum <erik@naggum.no>
parents: 15171
diff changeset
266 staticpro (&Vascii_canon_table);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 staticpro (&Vascii_downcase_table);
16224
d4c102d5ac70 (syms_of_casetab): staticpro Vascii_canontable, Vascii_eqv_table, and
Erik Naggum <erik@naggum.no>
parents: 15171
diff changeset
268 staticpro (&Vascii_eqv_table);
d4c102d5ac70 (syms_of_casetab): staticpro Vascii_canontable, Vascii_eqv_table, and
Erik Naggum <erik@naggum.no>
parents: 15171
diff changeset
269 staticpro (&Vascii_upcase_table);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 defsubr (&Scase_table_p);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 defsubr (&Scurrent_case_table);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 defsubr (&Sstandard_case_table);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 defsubr (&Sset_case_table);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 defsubr (&Sset_standard_case_table);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 }