annotate src/casefiddle.c @ 25427:dde5fcbfa2af

(Info-tagify): Don't insert more than one newline before the tag table. (Info-tagify): Start by widening. Match node headers that don't list the file name, and more kinds of page separations. Strip properties during tagification. Use start of node header line as tag's position. Fix the "done" message. (Info-validate): Save and restore match data around narrowing down.
author Richard M. Stallman <rms@gnu.org>
date Sun, 29 Aug 1999 19:19:00 +0000
parents 59b74d3add13
children 4065a85ee695
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 case conversion functions.
20708
ed9ed828415e Update copyright year.
Richard M. Stallman <rms@gnu.org>
parents: 20611
diff changeset
2 Copyright (C) 1985, 1994, 1997 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: 12089
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: 14063
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: 14063
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
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 2822
diff changeset
22 #include <config.h>
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "lisp.h"
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "buffer.h"
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
25 #include "charset.h"
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include "commands.h"
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include "syntax.h"
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP};
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
30
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
31 Lisp_Object Qidentity;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 Lisp_Object
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 casify_object (flag, obj)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 enum case_action flag;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 Lisp_Object obj;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 register int i, c, len;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 register int inword = flag == CASE_DOWN;
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
40 Lisp_Object tem;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 while (1)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 {
9137
412e94c1dbf2 (casify_object): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9053
diff changeset
48 if (INTEGERP (obj))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 {
22506
2107e25fa56f (casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents: 21514
diff changeset
50 int flagbits = (CHAR_ALT | CHAR_SUPER | CHAR_HYPER
2107e25fa56f (casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents: 21514
diff changeset
51 | CHAR_SHIFT | CHAR_CTL | CHAR_META);
2107e25fa56f (casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents: 21514
diff changeset
52 int flags = XINT (obj) & flagbits;
2107e25fa56f (casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents: 21514
diff changeset
53
2107e25fa56f (casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents: 21514
diff changeset
54 c = DOWNCASE (XFASTINT (obj) & ~flagbits);
18136
015e9e4a90ed (casify_object): Fix bug on handling a character
Kenichi Handa <handa@m17n.org>
parents: 18005
diff changeset
55 if (inword)
22506
2107e25fa56f (casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents: 21514
diff changeset
56 XSETFASTINT (obj, c | flags);
2107e25fa56f (casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents: 21514
diff changeset
57 else if (c == (XFASTINT (obj) & ~flagbits))
18136
015e9e4a90ed (casify_object): Fix bug on handling a character
Kenichi Handa <handa@m17n.org>
parents: 18005
diff changeset
58 {
22506
2107e25fa56f (casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents: 21514
diff changeset
59 c = UPCASE1 ((XFASTINT (obj) & ~flagbits));
2107e25fa56f (casify_object): Cope with modifier bits in character.
Karl Heuer <kwzh@gnu.org>
parents: 21514
diff changeset
60 XSETFASTINT (obj, c | flags);
18136
015e9e4a90ed (casify_object): Fix bug on handling a character
Kenichi Handa <handa@m17n.org>
parents: 18005
diff changeset
61 }
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 return obj;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 }
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
64
9137
412e94c1dbf2 (casify_object): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 9053
diff changeset
65 if (STRINGP (obj))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 {
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
67 int multibyte = STRING_MULTIBYTE (obj);
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
68
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 obj = Fcopy_sequence (obj);
21244
50929073a0ba Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 20708
diff changeset
70 len = STRING_BYTES (XSTRING (obj));
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
71
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
72 /* Scan all single-byte characters from start of string. */
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
73 for (i = 0; i < len;)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 c = XSTRING (obj)->data[i];
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
76
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
77 if (multibyte && c >= 0x80)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
78 /* A multibyte character can't be handled in this
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
79 simple loop. */
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
80 break;
9052
6de22822cf72 (upcase_initials): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
81 if (inword && flag != CASE_CAPITALIZE_UP)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 c = DOWNCASE (c);
9052
6de22822cf72 (upcase_initials): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
83 else if (!UPPERCASEP (c)
6de22822cf72 (upcase_initials): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
84 && (!inword || flag != CASE_CAPITALIZE_UP))
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 c = UPCASE1 (c);
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
86 /* If this char won't fit in a single-byte string.
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
87 fall out to the multibyte case. */
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
88 if (multibyte ? ! ASCII_BYTE_P (c)
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
89 : ! SINGLE_BYTE_CHAR_P (c))
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
90 break;
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
91
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 XSTRING (obj)->data[i] = c;
9052
6de22822cf72 (upcase_initials): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
93 if ((int) flag >= (int) CASE_CAPITALIZE)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 inword = SYNTAX (c) == Sword;
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
95 i++;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 }
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
97
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
98 /* If we didn't do the whole string as single-byte,
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
99 scan the rest in a more complex way. */
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
100 if (i < len)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
101 {
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
102 /* The work is not yet finished because of a multibyte
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
103 character just encountered. */
23476
a1abe3ae2cd0 (casify_object): Use make_string instead of
Kenichi Handa <handa@m17n.org>
parents: 22506
diff changeset
104 int fromlen, tolen, j_byte = i;
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
105 char *buf
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
106 = (char *) alloca ((len - i) * MAX_LENGTH_OF_MULTI_BYTE_FORM
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
107 + i);
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
108 unsigned char *str, workbuf[4];
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
109
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
110 /* Copy data already handled. */
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
111 bcopy (XSTRING (obj)->data, buf, i);
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
112
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
113 /* From now on, I counts bytes. */
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
114 while (i < len)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
115 {
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
116 c = STRING_CHAR_AND_LENGTH (XSTRING (obj)->data + i,
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
117 len - i, fromlen);
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
118 if (inword && flag != CASE_CAPITALIZE_UP)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
119 c = DOWNCASE (c);
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
120 else if (!UPPERCASEP (c)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
121 && (!inword || flag != CASE_CAPITALIZE_UP))
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
122 c = UPCASE1 (c);
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
123 tolen = CHAR_STRING (c, workbuf, str);
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
124 bcopy (str, buf + j_byte, tolen);
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
125 i += fromlen;
20611
e351676e5044 (casify_object): Scan string by bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 20543
diff changeset
126 j_byte += tolen;
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
127 if ((int) flag >= (int) CASE_CAPITALIZE)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
128 inword = SYNTAX (c) == Sword;
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
129 }
24883
59b74d3add13 (casify_object): Use make_multibyte_string
Karl Heuer <kwzh@gnu.org>
parents: 23476
diff changeset
130 obj = make_multibyte_string (buf, XSTRING (obj)->size,
59b74d3add13 (casify_object): Use make_multibyte_string
Karl Heuer <kwzh@gnu.org>
parents: 23476
diff changeset
131 j_byte);
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
132 }
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 return obj;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 }
1926
952f2a18f83d * callint.c (Fcall_interactively): Pass the correct number of
Jim Blandy <jimb@redhat.com>
parents: 1505
diff changeset
135 obj = wrong_type_argument (Qchar_or_string_p, obj);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 DEFUN ("upcase", Fupcase, Supcase, 1, 1, 0,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 "Convert argument to upper case and return that.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 The argument may be a character or string. The result has the same type.\n\
9053
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
142 The argument object is not altered--the value is a copy.\n\
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
143 See also `capitalize', `downcase' and `upcase-initials'.")
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 (obj)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 Lisp_Object obj;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 return casify_object (CASE_UP, obj);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 DEFUN ("downcase", Fdowncase, Sdowncase, 1, 1, 0,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 "Convert argument to lower case and return that.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 The argument may be a character or string. The result has the same type.\n\
9053
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
153 The argument object is not altered--the value is a copy.")
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 (obj)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 Lisp_Object obj;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 return casify_object (CASE_DOWN, obj);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 DEFUN ("capitalize", Fcapitalize, Scapitalize, 1, 1, 0,
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 "Convert argument to capitalized form and return that.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 This means that each word's first character is upper case\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 and the rest is lower case.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 The argument may be a character or string. The result has the same type.\n\
9053
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
165 The argument object is not altered--the value is a copy.")
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 (obj)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 Lisp_Object obj;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 return casify_object (CASE_CAPITALIZE, obj);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 }
9052
6de22822cf72 (upcase_initials): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
171
12089
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
172 /* 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
173
9053
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
174 DEFUN ("upcase-initials", Fupcase_initials, Supcase_initials, 1, 1, 0,
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
175 "Convert the initial of each word in the argument to upper case.\n\
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
176 Do not change the other letters of each word.\n\
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
177 The argument may be a character or string. The result has the same type.\n\
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
178 The argument object is not altered--the value is a copy.")
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
179 (obj)
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
180 Lisp_Object obj;
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
181 {
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
182 return casify_object (CASE_CAPITALIZE_UP, obj);
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
183 }
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 /* flag is CASE_UP, CASE_DOWN or CASE_CAPITALIZE or CASE_CAPITALIZE_UP.
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 b and e specify range of buffer to operate on. */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21256
diff changeset
188 void
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 casify_region (flag, b, e)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 enum case_action flag;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 Lisp_Object b, e;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 register int i;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 register int c;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 register int inword = flag == CASE_DOWN;
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
196 register int multibyte = !NILP (current_buffer->enable_multibyte_characters);
12089
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
197 int start, end;
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
198 int start_byte, end_byte;
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
199 Lisp_Object ch, downch, val;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 if (EQ (b, e))
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 /* Not modifying because nothing marked */
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 return;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204
15170
0d698228e98c (casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
205 /* 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
206 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
207 Fset_case_table (current_buffer->downcase_table);
0d698228e98c (casify_region, casify_object):
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
208
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 validate_region (&b, &e);
12089
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
210 start = XFASTINT (b);
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
211 end = XFASTINT (e);
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
212 modify_region (current_buffer, start, end);
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
213 record_change (start, end - start);
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
214 start_byte = CHAR_TO_BYTE (start);
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
215 end_byte = CHAR_TO_BYTE (end);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
217 for (i = start_byte; i < end_byte; i++)
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
218 {
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
219 c = FETCH_BYTE (i);
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
220 if (multibyte && c >= 0x80)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
221 /* A multibyte character can't be handled in this simple loop. */
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
222 break;
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
223 if (inword && flag != CASE_CAPITALIZE_UP)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
224 c = DOWNCASE (c);
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
225 else if (!UPPERCASEP (c)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
226 && (!inword || flag != CASE_CAPITALIZE_UP))
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
227 c = UPCASE1 (c);
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
228 FETCH_BYTE (i) = c;
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
229 if ((int) flag >= (int) CASE_CAPITALIZE)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
230 inword = SYNTAX (c) == Sword;
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
231 }
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
232 if (i < end_byte)
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
233 {
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
234 /* The work is not yet finished because of a multibyte character
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
235 just encountered. */
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
236 int opoint = PT;
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
237 int opoint_byte = PT_BYTE;
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
238 int c2;
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
239
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
240 while (i < end_byte)
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
241 {
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
242 if ((c = FETCH_BYTE (i)) >= 0x80)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
243 c = FETCH_MULTIBYTE_CHAR (i);
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
244 c2 = c;
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
245 if (inword && flag != CASE_CAPITALIZE_UP)
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
246 c2 = DOWNCASE (c);
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
247 else if (!UPPERCASEP (c)
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
248 && (!inword || flag != CASE_CAPITALIZE_UP))
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
249 c2 = UPCASE1 (c);
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
250 if (c != c2)
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
251 {
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
252 int fromlen, tolen, j;
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
253 unsigned char workbuf[4], *str;
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
254
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
255 /* Handle the most likely case */
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
256 if (c < 0400 && c2 < 0400)
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
257 FETCH_BYTE (i) = c2;
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
258 else if (fromlen = CHAR_STRING (c, workbuf, str),
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
259 tolen = CHAR_STRING (c2, workbuf, str),
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
260 fromlen == tolen)
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
261 {
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
262 for (j = 0; j < tolen; ++j)
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
263 FETCH_BYTE (i + j) = str[j];
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
264 }
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
265 else
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
266 {
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
267 error ("Can't casify letters that change length");
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
268 #if 0 /* This is approximately what we'd like to be able to do here */
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
269 if (tolen < fromlen)
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
270 del_range_1 (i + tolen, i + fromlen, 0);
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
271 else if (tolen > fromlen)
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
272 {
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
273 TEMP_SET_PT (i + fromlen);
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
274 insert_1 (str + fromlen, tolen - fromlen, 1, 0, 0);
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
275 }
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
276 #endif
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
277 }
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
278 }
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
279 if ((int) flag >= (int) CASE_CAPITALIZE)
18005
ad95aa134d60 (casify_object): Handle multibyte characters.
Kenichi Handa <handa@m17n.org>
parents: 17816
diff changeset
280 inword = SYNTAX (c2) == Sword;
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
281 INC_POS (i);
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
282 }
20543
4dbda4b7c66f (casify_region): Scan in bytes and chars.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
283 TEMP_SET_PT_BOTH (opoint, opoint_byte);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285
12089
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
286 signal_after_change (start, end - start, end - start);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 DEFUN ("upcase-region", Fupcase_region, Supcase_region, 2, 2, "r",
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 "Convert the region to upper case. In programs, wants two arguments.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 These arguments specify the starting and ending character numbers of\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 the region to operate on. When used as a command, the text between\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 point and the mark is operated on.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 See also `capitalize-region'.")
14063
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
295 (beg, end)
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
296 Lisp_Object beg, end;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 {
14063
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
298 casify_region (CASE_UP, beg, end);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 DEFUN ("downcase-region", Fdowncase_region, Sdowncase_region, 2, 2, "r",
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 "Convert the region to lower case. In programs, wants two arguments.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 These arguments specify the starting and ending character numbers of\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 the region to operate on. When used as a command, the text between\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 point and the mark is operated on.")
14063
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
307 (beg, end)
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
308 Lisp_Object beg, end;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 {
14063
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
310 casify_region (CASE_DOWN, beg, end);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 DEFUN ("capitalize-region", Fcapitalize_region, Scapitalize_region, 2, 2, "r",
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 "Convert the region to capitalized form.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 Capitalized form means each word's first character is upper case\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 and the rest of it is lower case.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 In programs, give two arguments, the starting and ending\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 character positions to operate on.")
14063
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
320 (beg, end)
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
321 Lisp_Object beg, end;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 {
14063
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
323 casify_region (CASE_CAPITALIZE, beg, end);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326
12089
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
327 /* 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
328
9053
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
329 DEFUN ("upcase-initials-region", Fupcase_initials_region,
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
330 Supcase_initials_region, 2, 2, "r",
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
331 "Upcase the initial of each word in the region.\n\
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
332 Subsequent letters of each word are not changed.\n\
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
333 In programs, give two arguments, the starting and ending\n\
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
334 character positions to operate on.")
14063
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
335 (beg, end)
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
336 Lisp_Object beg, end;
9053
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
337 {
14063
ef7d4117c601 (Fupcase_region, Fdowncase_region, Fcapitalize_region,
Erik Naggum <erik@naggum.no>
parents: 12244
diff changeset
338 casify_region (CASE_CAPITALIZE_UP, beg, end);
9053
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
339 return Qnil;
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
340 }
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 Lisp_Object
6221
c2d29681d218 (operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
343 operate_on_word (arg, newpoint)
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 Lisp_Object arg;
6221
c2d29681d218 (operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
345 int *newpoint;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 {
1505
4f138b03e5ab * casefiddle.c (operate_on_word): Declare end to be an int, not a
Jim Blandy <jimb@redhat.com>
parents: 484
diff changeset
347 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
348 int farend;
12089
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
349 int iarg;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 CHECK_NUMBER (arg, 0);
12089
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
352 iarg = XINT (arg);
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15170
diff changeset
353 farend = scan_words (PT, iarg);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 if (!farend)
12089
f7cb17ca1815 (casify_region): Use explicit local vars for start
Karl Heuer <kwzh@gnu.org>
parents: 9299
diff changeset
355 farend = iarg > 0 ? ZV : BEGV;
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15170
diff changeset
357 *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
358 XSETFASTINT (val, farend);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 return val;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 DEFUN ("upcase-word", Fupcase_word, Supcase_word, 1, 1, "p",
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 "Convert following word (or ARG words) to upper case, moving over.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 With negative argument, convert previous words but do not move.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 See also `capitalize-word'.")
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 (arg)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 Lisp_Object arg;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 {
6221
c2d29681d218 (operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
370 Lisp_Object beg, end;
c2d29681d218 (operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
371 int newpoint;
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15170
diff changeset
372 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
373 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
374 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
375 SET_PT (newpoint);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 DEFUN ("downcase-word", Fdowncase_word, Sdowncase_word, 1, 1, "p",
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 "Convert following word (or ARG words) to lower case, moving over.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 With negative argument, convert previous words but do not move.")
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 (arg)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 Lisp_Object arg;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 {
6221
c2d29681d218 (operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
385 Lisp_Object beg, end;
c2d29681d218 (operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
386 int newpoint;
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15170
diff changeset
387 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
388 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
389 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
390 SET_PT (newpoint);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 DEFUN ("capitalize-word", Fcapitalize_word, Scapitalize_word, 1, 1, "p",
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 "Capitalize the following word (or ARG words), moving over.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 This gives the word(s) a first character in upper case\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397 and the rest lower case.\n\
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 With negative argument, capitalize previous words but do not move.")
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 (arg)
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 Lisp_Object arg;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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;
c2d29681d218 (operate_on_word): Don't move point; store in *NEWPOINT.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
403 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_CAPITALIZE, 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
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 return Qnil;
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21256
diff changeset
411 void
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 syms_of_casefiddle ()
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 {
17816
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
414 Qidentity = intern ("identity");
380442ed6a1c Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 17059
diff changeset
415 staticpro (&Qidentity);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 defsubr (&Supcase);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 defsubr (&Sdowncase);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 defsubr (&Scapitalize);
9053
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
419 defsubr (&Supcase_initials);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 defsubr (&Supcase_region);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 defsubr (&Sdowncase_region);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 defsubr (&Scapitalize_region);
9053
4887fc1a2dda (Fupcase_initials_region): New function.
Richard M. Stallman <rms@gnu.org>
parents: 9052
diff changeset
423 defsubr (&Supcase_initials_region);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 defsubr (&Supcase_word);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 defsubr (&Sdowncase_word);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 defsubr (&Scapitalize_word);
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427 }
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21256
diff changeset
429 void
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 keys_of_casefiddle ()
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 {
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 initial_define_key (control_x_map, Ctl('U'), "upcase-region");
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
433 Fput (intern ("upcase-region"), Qdisabled, Qt);
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 initial_define_key (control_x_map, Ctl('L'), "downcase-region");
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
435 Fput (intern ("downcase-region"), Qdisabled, Qt);
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 118
diff changeset
436
118
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 initial_define_key (meta_map, 'u', "upcase-word");
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 initial_define_key (meta_map, 'l', "downcase-word");
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 initial_define_key (meta_map, 'c', "capitalize-word");
49342840ba00 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440 }