Mercurial > emacs
annotate src/casefiddle.c @ 97366:d2c211c8ceda
(w32_list_system_processes, w32_system_process_attributes): Add prototypes.
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess, Qttname)
(Qminflt, Qmajflt, Qcminflt, Qcmajflt, Qutime, Qstime, Qcutime)
(Qpri, Qnice, Qthcount, Qstart, Qvsize, Qrss, Qargs, Quser, Qgroup)
(Qetime, Qpcpu, Qpmem, Qtpgid, Qcstime): Add extern declarations.
| author | Eli Zaretskii <eliz@gnu.org> |
|---|---|
| date | Sat, 09 Aug 2008 17:53:30 +0000 |
| parents | 44c693827736 |
| children | e038c1a8307c |
| rev | line source |
|---|---|
| 118 | 1 /* GNU Emacs case conversion functions. |
|
64770
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
2 Copyright (C) 1985, 1994, 1997, 1998, 1999, 2001, 2002, 2003, 2004, |
| 79759 | 3 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
| 118 | 4 |
| 5 This file is part of GNU Emacs. | |
| 6 | |
|
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93509
diff
changeset
|
7 GNU Emacs is free software: you can redistribute it and/or modify |
| 118 | 8 it under the terms of the GNU General Public License as published by |
|
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93509
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
|
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93509
diff
changeset
|
10 (at your option) any later version. |
| 118 | 11 |
| 12 GNU Emacs is distributed in the hope that it will be useful, | |
| 13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 GNU General Public License for more details. | |
| 16 | |
| 17 You should have received a copy of the GNU General Public License | |
|
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93509
diff
changeset
|
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
| 118 | 19 |
| 20 | |
|
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
2822
diff
changeset
|
21 #include <config.h> |
| 118 | 22 #include "lisp.h" |
| 23 #include "buffer.h" | |
|
88351
aac41b50c875
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
40656
diff
changeset
|
24 #include "character.h" |
| 118 | 25 #include "commands.h" |
| 26 #include "syntax.h" | |
| 26839 | 27 #include "composite.h" |
|
39748
42b7a798ff79
Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34969
diff
changeset
|
28 #include "keymap.h" |
| 118 | 29 |
| 30 enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP}; | |
| 17816 | 31 |
| 32 Lisp_Object Qidentity; | |
| 118 | 33 |
| 34 Lisp_Object | |
| 35 casify_object (flag, obj) | |
| 36 enum case_action flag; | |
| 37 Lisp_Object obj; | |
| 38 { | |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
39 register int c, c1; |
| 118 | 40 register int inword = flag == CASE_DOWN; |
| 41 | |
|
15170
0d698228e98c
(casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
42 /* If the case table is flagged as modified, rescan it. */ |
|
0d698228e98c
(casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
43 if (NILP (XCHAR_TABLE (current_buffer->downcase_table)->extras[1])) |
|
0d698228e98c
(casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
44 Fset_case_table (current_buffer->downcase_table); |
|
0d698228e98c
(casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
45 |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
46 if (INTEGERP (obj)) |
| 118 | 47 { |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
48 int flagbits = (CHAR_ALT | CHAR_SUPER | CHAR_HYPER |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
49 | CHAR_SHIFT | CHAR_CTL | CHAR_META); |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
50 int flags = XINT (obj) & flagbits; |
|
90534
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
51 int multibyte = ! NILP (current_buffer->enable_multibyte_characters); |
|
22506
2107e25fa56f
(casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents:
21514
diff
changeset
|
52 |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
53 /* If the character has higher bits set |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
54 above the flags, return it unchanged. |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
55 It is not a real character. */ |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
56 if ((unsigned) XFASTINT (obj) > (unsigned) flagbits) |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
57 return obj; |
|
55743
4f33fa491183
(casify_object): Return OBJ unchanged if not real char.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
58 |
|
90534
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
59 c1 = XFASTINT (obj) & ~flagbits; |
|
95328
44c693827736
(casify_object): Try to guess better whether the argument is a byte or a char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
60 /* FIXME: Even if enable-multibyte-characters is nil, we may |
|
44c693827736
(casify_object): Try to guess better whether the argument is a byte or a char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
61 manipulate multibyte chars. This means we have a bug for latin-1 |
|
44c693827736
(casify_object): Try to guess better whether the argument is a byte or a char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
62 chars since when we receive an int 128-255 we can't tell whether |
|
44c693827736
(casify_object): Try to guess better whether the argument is a byte or a char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
63 it's an eight-bit byte or a latin-1 char. */ |
|
44c693827736
(casify_object): Try to guess better whether the argument is a byte or a char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
64 if (c1 >= 256) |
|
44c693827736
(casify_object): Try to guess better whether the argument is a byte or a char.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
94963
diff
changeset
|
65 multibyte = 1; |
|
90534
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
66 if (! multibyte) |
|
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
67 MAKE_CHAR_MULTIBYTE (c1); |
|
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
68 c = DOWNCASE (c1); |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
69 if (inword) |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
70 XSETFASTINT (obj, c | flags); |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
71 else if (c == (XFASTINT (obj) & ~flagbits)) |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
72 { |
|
90534
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
73 if (! inword) |
|
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
74 c = UPCASE1 (c1); |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
75 if (! multibyte) |
|
90534
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
76 MAKE_CHAR_UNIBYTE (c); |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
77 XSETFASTINT (obj, c | flags); |
| 118 | 78 } |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
79 return obj; |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
80 } |
|
20611
e351676e5044
(casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents:
20543
diff
changeset
|
81 |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
82 if (!STRINGP (obj)) |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
83 wrong_type_argument (Qchar_or_string_p, obj); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
84 else if (!STRING_MULTIBYTE (obj)) |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
85 { |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
86 EMACS_INT i; |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
87 EMACS_INT size = SCHARS (obj); |
|
18005
ad95aa134d60
(casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17816
diff
changeset
|
88 |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
89 obj = Fcopy_sequence (obj); |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
90 for (i = 0; i < size; i++) |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
91 { |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
92 c = SREF (obj, i); |
|
90534
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
93 MAKE_CHAR_MULTIBYTE (c); |
|
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
94 c1 = c; |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
95 if (inword && flag != CASE_CAPITALIZE_UP) |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
96 c = DOWNCASE (c); |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
97 else if (!UPPERCASEP (c) |
|
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
98 && (!inword || flag != CASE_CAPITALIZE_UP)) |
|
90534
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
99 c = UPCASE1 (c1); |
|
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
100 if ((int) flag >= (int) CASE_CAPITALIZE) |
|
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
101 inword = (SYNTAX (c) == Sword); |
|
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
102 if (c != c1) |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
103 { |
|
90534
2811bff46a36
(casify_object): Sync with HEAD.
Kenichi Handa <handa@m17n.org>
parents:
90294
diff
changeset
|
104 MAKE_CHAR_UNIBYTE (c); |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
105 /* If the char can't be converted to a valid byte, just don't |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
106 change it. */ |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
107 if (c >= 0 && c < 256) |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
108 SSET (obj, i, c); |
|
18005
ad95aa134d60
(casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17816
diff
changeset
|
109 } |
| 118 | 110 } |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
111 return obj; |
|
93509
367250b2af54
(casify_object): Fix up int/EMACS_INT mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93179
diff
changeset
|
112 } |
|
367250b2af54
(casify_object): Fix up int/EMACS_INT mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93179
diff
changeset
|
113 else |
|
367250b2af54
(casify_object): Fix up int/EMACS_INT mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93179
diff
changeset
|
114 { |
|
367250b2af54
(casify_object): Fix up int/EMACS_INT mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93179
diff
changeset
|
115 EMACS_INT i, i_byte, size = SCHARS (obj); |
|
367250b2af54
(casify_object): Fix up int/EMACS_INT mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93179
diff
changeset
|
116 int len; |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
117 USE_SAFE_ALLOCA; |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
118 unsigned char *dst, *o; |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
119 /* Over-allocate by 12%: this is a minor overhead, but should be |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
120 sufficient in 99.999% of the cases to avoid a reallocation. */ |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
121 EMACS_INT o_size = SBYTES (obj) + SBYTES (obj) / 8 + MAX_MULTIBYTE_LENGTH; |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
122 SAFE_ALLOCA (dst, void *, o_size); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
123 o = dst; |
|
71827
5e4428007299
(casify_object): Remove loop around wrong_type_argument.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
124 |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
125 for (i = i_byte = 0; i < size; i++, i_byte += len) |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
126 { |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
127 if ((o - dst) + MAX_MULTIBYTE_LENGTH > o_size) |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
128 { /* Not enough space for the next char: grow the destination. */ |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
129 unsigned char *old_dst = dst; |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
130 o_size += o_size; /* Probably overkill, but extremely rare. */ |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
131 SAFE_ALLOCA (dst, void *, o_size); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
132 bcopy (old_dst, dst, o - old_dst); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
133 o = dst + (o - old_dst); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
134 } |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
135 c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i_byte, 0, len); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
136 if (inword && flag != CASE_CAPITALIZE_UP) |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
137 c = DOWNCASE (c); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
138 else if (!UPPERCASEP (c) |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
139 && (!inword || flag != CASE_CAPITALIZE_UP)) |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
140 c = UPCASE1 (c); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
141 if ((int) flag >= (int) CASE_CAPITALIZE) |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
142 inword = (SYNTAX (c) == Sword); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
143 o += CHAR_STRING (c, o); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
144 } |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
145 eassert (o - dst <= o_size); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
146 obj = make_multibyte_string (dst, size, o - dst); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
147 SAFE_FREE (); |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
148 return obj; |
|
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
149 } |
| 118 | 150 } |
| 151 | |
| 152 DEFUN ("upcase", Fupcase, Supcase, 1, 1, 0, | |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
153 doc: /* Convert argument to upper case and return that. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
154 The argument may be a character or string. The result has the same type. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
155 The argument object is not altered--the value is a copy. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
156 See also `capitalize', `downcase' and `upcase-initials'. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
157 (obj) |
| 118 | 158 Lisp_Object obj; |
| 159 { | |
| 160 return casify_object (CASE_UP, obj); | |
| 161 } | |
| 162 | |
| 163 DEFUN ("downcase", Fdowncase, Sdowncase, 1, 1, 0, | |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
164 doc: /* Convert argument to lower case and return that. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
165 The argument may be a character or string. The result has the same type. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
166 The argument object is not altered--the value is a copy. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
167 (obj) |
| 118 | 168 Lisp_Object obj; |
| 169 { | |
| 170 return casify_object (CASE_DOWN, obj); | |
| 171 } | |
| 172 | |
| 173 DEFUN ("capitalize", Fcapitalize, Scapitalize, 1, 1, 0, | |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
174 doc: /* Convert argument to capitalized form and return that. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
175 This means that each word's first character is upper case |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
176 and the rest is lower case. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
177 The argument may be a character or string. The result has the same type. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
178 The argument object is not altered--the value is a copy. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
179 (obj) |
| 118 | 180 Lisp_Object obj; |
| 181 { | |
| 182 return casify_object (CASE_CAPITALIZE, obj); | |
| 183 } | |
|
9052
6de22822cf72
(upcase_initials): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7307
diff
changeset
|
184 |
|
12089
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
185 /* Like Fcapitalize but change only the initials. */ |
|
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
186 |
|
9053
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
187 DEFUN ("upcase-initials", Fupcase_initials, Supcase_initials, 1, 1, 0, |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
188 doc: /* Convert the initial of each word in the argument to upper case. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
189 Do not change the other letters of each word. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
190 The argument may be a character or string. The result has the same type. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
191 The argument object is not altered--the value is a copy. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
192 (obj) |
|
9053
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
193 Lisp_Object obj; |
|
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
194 { |
|
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
195 return casify_object (CASE_CAPITALIZE_UP, obj); |
|
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
196 } |
| 118 | 197 |
| 198 /* flag is CASE_UP, CASE_DOWN or CASE_CAPITALIZE or CASE_CAPITALIZE_UP. | |
| 199 b and e specify range of buffer to operate on. */ | |
| 200 | |
| 21514 | 201 void |
| 118 | 202 casify_region (flag, b, e) |
| 203 enum case_action flag; | |
| 204 Lisp_Object b, e; | |
| 205 { | |
| 206 register int c; | |
| 207 register int inword = flag == CASE_DOWN; | |
|
18005
ad95aa134d60
(casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17816
diff
changeset
|
208 register int multibyte = !NILP (current_buffer->enable_multibyte_characters); |
|
91803
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
209 EMACS_INT start, end; |
|
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
210 EMACS_INT start_byte, end_byte; |
|
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
211 EMACS_INT first = -1, last; /* Position of first and last changes. */ |
|
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
212 EMACS_INT opoint = PT; |
|
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
213 EMACS_INT opoint_byte = PT_BYTE; |
| 118 | 214 |
| 215 if (EQ (b, e)) | |
| 216 /* Not modifying because nothing marked */ | |
| 217 return; | |
| 218 | |
|
15170
0d698228e98c
(casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
219 /* If the case table is flagged as modified, rescan it. */ |
|
0d698228e98c
(casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
220 if (NILP (XCHAR_TABLE (current_buffer->downcase_table)->extras[1])) |
|
0d698228e98c
(casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
221 Fset_case_table (current_buffer->downcase_table); |
|
0d698228e98c
(casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
222 |
| 118 | 223 validate_region (&b, &e); |
|
12089
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
224 start = XFASTINT (b); |
|
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
225 end = XFASTINT (e); |
|
72592
f6de516bbb4b
* buffer.h (struct buffer_text): New field chars_modiff.
Chong Yidong <cyd@stupidchicken.com>
parents:
71970
diff
changeset
|
226 modify_region (current_buffer, start, end, 0); |
|
12089
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
227 record_change (start, end - start); |
|
20543
4dbda4b7c66f
(casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents:
18613
diff
changeset
|
228 start_byte = CHAR_TO_BYTE (start); |
|
4dbda4b7c66f
(casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents:
18613
diff
changeset
|
229 end_byte = CHAR_TO_BYTE (end); |
| 118 | 230 |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
231 while (start < end) |
| 17816 | 232 { |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
233 int c2, len; |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
234 |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
235 if (multibyte) |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
236 { |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
237 c = FETCH_MULTIBYTE_CHAR (start_byte); |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
238 len = CHAR_BYTES (c); |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
239 } |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
240 else |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
241 { |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
242 c = FETCH_BYTE (start_byte); |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
243 MAKE_CHAR_MULTIBYTE (c); |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
244 len = 1; |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
245 } |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
246 c2 = c; |
|
18005
ad95aa134d60
(casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17816
diff
changeset
|
247 if (inword && flag != CASE_CAPITALIZE_UP) |
|
ad95aa134d60
(casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17816
diff
changeset
|
248 c = DOWNCASE (c); |
|
ad95aa134d60
(casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17816
diff
changeset
|
249 else if (!UPPERCASEP (c) |
|
ad95aa134d60
(casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17816
diff
changeset
|
250 && (!inword || flag != CASE_CAPITALIZE_UP)) |
|
ad95aa134d60
(casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17816
diff
changeset
|
251 c = UPCASE1 (c); |
|
ad95aa134d60
(casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents:
17816
diff
changeset
|
252 if ((int) flag >= (int) CASE_CAPITALIZE) |
| 89483 | 253 inword = ((SYNTAX (c) == Sword) && (inword || !SYNTAX_PREFIX (c))); |
| 26839 | 254 if (c != c2) |
| 17816 | 255 { |
|
91803
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
256 last = start; |
|
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
257 if (first < 0) |
|
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
258 first = start; |
|
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
259 |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
260 if (! multibyte) |
| 17816 | 261 { |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
262 MAKE_CHAR_UNIBYTE (c); |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
263 FETCH_BYTE (start_byte) = c; |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
264 } |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
265 else if (ASCII_CHAR_P (c2) && ASCII_CHAR_P (c)) |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
266 FETCH_BYTE (start_byte) = c; |
|
90049
73c7169fe4ff
(casify_region): Handle changes in byte-length
Kenichi Handa <handa@m17n.org>
parents:
89943
diff
changeset
|
267 else |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
268 { |
|
90049
73c7169fe4ff
(casify_region): Handle changes in byte-length
Kenichi Handa <handa@m17n.org>
parents:
89943
diff
changeset
|
269 int tolen = CHAR_BYTES (c); |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
270 int j; |
| 26839 | 271 unsigned char str[MAX_MULTIBYTE_LENGTH]; |
| 17816 | 272 |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
273 CHAR_STRING (c, str); |
|
90049
73c7169fe4ff
(casify_region): Handle changes in byte-length
Kenichi Handa <handa@m17n.org>
parents:
89943
diff
changeset
|
274 if (len == tolen) |
| 17816 | 275 { |
|
57877
194fa92926e4
(casify_region): Handle changes in byte-length using replace_range_2.
Richard M. Stallman <rms@gnu.org>
parents:
57726
diff
changeset
|
276 /* Length is unchanged. */ |
|
90049
73c7169fe4ff
(casify_region): Handle changes in byte-length
Kenichi Handa <handa@m17n.org>
parents:
89943
diff
changeset
|
277 for (j = 0; j < len; ++j) |
|
73c7169fe4ff
(casify_region): Handle changes in byte-length
Kenichi Handa <handa@m17n.org>
parents:
89943
diff
changeset
|
278 FETCH_BYTE (start_byte + j) = str[j]; |
| 17816 | 279 } |
| 280 else | |
|
59854
75a481e7d8f1
(casify_object): Enable changing characters of
Kenichi Handa <handa@m17n.org>
parents:
57877
diff
changeset
|
281 { |
|
75a481e7d8f1
(casify_object): Enable changing characters of
Kenichi Handa <handa@m17n.org>
parents:
57877
diff
changeset
|
282 /* Replace one character with the other, |
|
75a481e7d8f1
(casify_object): Enable changing characters of
Kenichi Handa <handa@m17n.org>
parents:
57877
diff
changeset
|
283 keeping text properties the same. */ |
|
90049
73c7169fe4ff
(casify_region): Handle changes in byte-length
Kenichi Handa <handa@m17n.org>
parents:
89943
diff
changeset
|
284 replace_range_2 (start, start_byte, |
|
73c7169fe4ff
(casify_region): Handle changes in byte-length
Kenichi Handa <handa@m17n.org>
parents:
89943
diff
changeset
|
285 start + 1, start_byte + len, |
|
59854
75a481e7d8f1
(casify_object): Enable changing characters of
Kenichi Handa <handa@m17n.org>
parents:
57877
diff
changeset
|
286 str, 1, tolen, |
|
90049
73c7169fe4ff
(casify_region): Handle changes in byte-length
Kenichi Handa <handa@m17n.org>
parents:
89943
diff
changeset
|
287 0); |
|
73c7169fe4ff
(casify_region): Handle changes in byte-length
Kenichi Handa <handa@m17n.org>
parents:
89943
diff
changeset
|
288 len = tolen; |
|
59854
75a481e7d8f1
(casify_object): Enable changing characters of
Kenichi Handa <handa@m17n.org>
parents:
57877
diff
changeset
|
289 } |
| 17816 | 290 } |
| 291 } | |
|
89017
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
292 start++; |
|
6a9e0cb7368b
(casify_object): Simplified. Handle the case that
Kenichi Handa <handa@m17n.org>
parents:
88426
diff
changeset
|
293 start_byte += len; |
| 118 | 294 } |
| 295 | |
| 89483 | 296 if (PT != opoint) |
| 297 TEMP_SET_PT_BOTH (opoint, opoint_byte); | |
| 298 | |
|
91803
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
299 if (first >= 0) |
| 26839 | 300 { |
|
91803
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
301 signal_after_change (first, last + 1 - first, last + 1 - first); |
|
78fbdbd37286
(casify_region): Only call after-change and composition
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
302 update_compositions (first, last + 1, CHECK_ALL); |
| 26839 | 303 } |
| 118 | 304 } |
| 305 | |
| 306 DEFUN ("upcase-region", Fupcase_region, Supcase_region, 2, 2, "r", | |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
307 doc: /* Convert the region to upper case. In programs, wants two arguments. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
308 These arguments specify the starting and ending character numbers of |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
309 the region to operate on. When used as a command, the text between |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
310 point and the mark is operated on. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
311 See also `capitalize-region'. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
312 (beg, end) |
|
14063
ef7d4117c601
(Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents:
12244
diff
changeset
|
313 Lisp_Object beg, end; |
| 118 | 314 { |
|
14063
ef7d4117c601
(Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents:
12244
diff
changeset
|
315 casify_region (CASE_UP, beg, end); |
| 118 | 316 return Qnil; |
| 317 } | |
| 318 | |
| 319 DEFUN ("downcase-region", Fdowncase_region, Sdowncase_region, 2, 2, "r", | |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
320 doc: /* Convert the region to lower case. In programs, wants two arguments. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
321 These arguments specify the starting and ending character numbers of |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
322 the region to operate on. When used as a command, the text between |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
323 point and the mark is operated on. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
324 (beg, end) |
|
14063
ef7d4117c601
(Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents:
12244
diff
changeset
|
325 Lisp_Object beg, end; |
| 118 | 326 { |
|
14063
ef7d4117c601
(Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents:
12244
diff
changeset
|
327 casify_region (CASE_DOWN, beg, end); |
| 118 | 328 return Qnil; |
| 329 } | |
| 330 | |
| 331 DEFUN ("capitalize-region", Fcapitalize_region, Scapitalize_region, 2, 2, "r", | |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
332 doc: /* Convert the region to capitalized form. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
333 Capitalized form means each word's first character is upper case |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
334 and the rest of it is lower case. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
335 In programs, give two arguments, the starting and ending |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
336 character positions to operate on. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
337 (beg, end) |
|
14063
ef7d4117c601
(Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents:
12244
diff
changeset
|
338 Lisp_Object beg, end; |
| 118 | 339 { |
|
14063
ef7d4117c601
(Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents:
12244
diff
changeset
|
340 casify_region (CASE_CAPITALIZE, beg, end); |
| 118 | 341 return Qnil; |
| 342 } | |
| 343 | |
|
12089
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
344 /* Like Fcapitalize_region but change only the initials. */ |
|
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
345 |
|
9053
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
346 DEFUN ("upcase-initials-region", Fupcase_initials_region, |
|
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
347 Supcase_initials_region, 2, 2, "r", |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
348 doc: /* Upcase the initial of each word in the region. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
349 Subsequent letters of each word are not changed. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
350 In programs, give two arguments, the starting and ending |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
351 character positions to operate on. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
352 (beg, end) |
|
14063
ef7d4117c601
(Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents:
12244
diff
changeset
|
353 Lisp_Object beg, end; |
|
9053
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
354 { |
|
14063
ef7d4117c601
(Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents:
12244
diff
changeset
|
355 casify_region (CASE_CAPITALIZE_UP, beg, end); |
|
9053
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
356 return Qnil; |
|
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
357 } |
| 118 | 358 |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
359 static Lisp_Object |
|
6221
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
360 operate_on_word (arg, newpoint) |
| 118 | 361 Lisp_Object arg; |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
362 EMACS_INT *newpoint; |
| 118 | 363 { |
|
1505
4f138b03e5ab
* casefiddle.c (operate_on_word): Declare end to be an int, not a
Jim Blandy <jimb@redhat.com>
parents:
484
diff
changeset
|
364 Lisp_Object val; |
|
6221
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
365 int farend; |
|
12089
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
366 int iarg; |
| 118 | 367 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40103
diff
changeset
|
368 CHECK_NUMBER (arg); |
|
12089
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
369 iarg = XINT (arg); |
|
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15170
diff
changeset
|
370 farend = scan_words (PT, iarg); |
| 118 | 371 if (!farend) |
|
12089
f7cb17ca1815
(casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents:
9299
diff
changeset
|
372 farend = iarg > 0 ? ZV : BEGV; |
| 118 | 373 |
|
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15170
diff
changeset
|
374 *newpoint = PT > farend ? PT : farend; |
|
9299
e8c880f2723e
(casify_object, operate_on_word, Fupcase_word, Fdowncase_word,
Karl Heuer <kwzh@gnu.org>
parents:
9137
diff
changeset
|
375 XSETFASTINT (val, farend); |
| 118 | 376 |
| 377 return val; | |
| 378 } | |
| 379 | |
| 380 DEFUN ("upcase-word", Fupcase_word, Supcase_word, 1, 1, "p", | |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
381 doc: /* Convert following word (or ARG words) to upper case, moving over. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
382 With negative argument, convert previous words but do not move. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
383 See also `capitalize-word'. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
384 (arg) |
| 118 | 385 Lisp_Object arg; |
| 386 { | |
|
6221
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
387 Lisp_Object beg, end; |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
388 EMACS_INT newpoint; |
|
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15170
diff
changeset
|
389 XSETFASTINT (beg, PT); |
|
6221
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
390 end = operate_on_word (arg, &newpoint); |
|
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
391 casify_region (CASE_UP, beg, end); |
|
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
392 SET_PT (newpoint); |
| 118 | 393 return Qnil; |
| 394 } | |
| 395 | |
| 396 DEFUN ("downcase-word", Fdowncase_word, Sdowncase_word, 1, 1, "p", | |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
397 doc: /* Convert following word (or ARG words) to lower case, moving over. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
398 With negative argument, convert previous words but do not move. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
399 (arg) |
| 118 | 400 Lisp_Object arg; |
| 401 { | |
|
6221
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
402 Lisp_Object beg, end; |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
403 EMACS_INT newpoint; |
|
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15170
diff
changeset
|
404 XSETFASTINT (beg, PT); |
|
6221
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
405 end = operate_on_word (arg, &newpoint); |
|
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
406 casify_region (CASE_DOWN, beg, end); |
|
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
407 SET_PT (newpoint); |
| 118 | 408 return Qnil; |
| 409 } | |
| 410 | |
| 411 DEFUN ("capitalize-word", Fcapitalize_word, Scapitalize_word, 1, 1, "p", | |
|
40103
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
412 doc: /* Capitalize the following word (or ARG words), moving over. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
413 This gives the word(s) a first character in upper case |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
414 and the rest lower case. |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
415 With negative argument, capitalize previous words but do not move. */) |
|
6b389fb978bc
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
39748
diff
changeset
|
416 (arg) |
| 118 | 417 Lisp_Object arg; |
| 418 { | |
|
6221
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
419 Lisp_Object beg, end; |
|
93179
139d0b227fdc
(casify_object): Avoid pathological N^2 worst case if
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91803
diff
changeset
|
420 EMACS_INT newpoint; |
|
16039
855c8d8ba0f0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
15170
diff
changeset
|
421 XSETFASTINT (beg, PT); |
|
6221
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
422 end = operate_on_word (arg, &newpoint); |
|
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
423 casify_region (CASE_CAPITALIZE, beg, end); |
|
c2d29681d218
(operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
424 SET_PT (newpoint); |
| 118 | 425 return Qnil; |
| 426 } | |
| 427 | |
| 21514 | 428 void |
| 118 | 429 syms_of_casefiddle () |
| 430 { | |
| 17816 | 431 Qidentity = intern ("identity"); |
| 432 staticpro (&Qidentity); | |
| 118 | 433 defsubr (&Supcase); |
| 434 defsubr (&Sdowncase); | |
| 435 defsubr (&Scapitalize); | |
|
9053
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
436 defsubr (&Supcase_initials); |
| 118 | 437 defsubr (&Supcase_region); |
| 438 defsubr (&Sdowncase_region); | |
| 439 defsubr (&Scapitalize_region); | |
|
9053
4887fc1a2dda
(Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9052
diff
changeset
|
440 defsubr (&Supcase_initials_region); |
| 118 | 441 defsubr (&Supcase_word); |
| 442 defsubr (&Sdowncase_word); | |
| 443 defsubr (&Scapitalize_word); | |
| 444 } | |
| 445 | |
| 21514 | 446 void |
| 118 | 447 keys_of_casefiddle () |
| 448 { | |
| 449 initial_define_key (control_x_map, Ctl('U'), "upcase-region"); | |
| 484 | 450 Fput (intern ("upcase-region"), Qdisabled, Qt); |
| 118 | 451 initial_define_key (control_x_map, Ctl('L'), "downcase-region"); |
| 484 | 452 Fput (intern ("downcase-region"), Qdisabled, Qt); |
| 453 | |
| 118 | 454 initial_define_key (meta_map, 'u', "upcase-word"); |
| 455 initial_define_key (meta_map, 'l', "downcase-word"); | |
| 456 initial_define_key (meta_map, 'c', "capitalize-word"); | |
| 457 } | |
| 52401 | 458 |
| 459 /* arch-tag: 60a73c66-5489-47e7-a81f-cead4057c526 | |
| 460 (do not change this comment) */ |
