aboutsummaryrefslogtreecommitdiffstats
path: root/src/casefiddle.c
diff options
context:
space:
mode:
authorKaroly Lorentey2005-02-03 23:28:36 +0000
committerKaroly Lorentey2005-02-03 23:28:36 +0000
commit597cfb3fbc57114062f12dfdfa37c0157fff1e97 (patch)
treedea42300f641805b707eb9a64035acac8c9f547e /src/casefiddle.c
parentfd41924555942f6c3c1e12400ab313717a3818cd (diff)
parent4e07258f2b539fa9a3ba97442e81e3e67a9ce5a7 (diff)
downloademacs-597cfb3fbc57114062f12dfdfa37c0157fff1e97.tar.gz
emacs-597cfb3fbc57114062f12dfdfa37c0157fff1e97.zip
Merged in changes from CVS trunk. (Long time no see!) :-)
Patches applied: * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-83 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-84 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-1 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-2 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-3 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-4 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-5 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-6 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-7 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-8 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-9 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-10 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-11 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-12 Remove "-face" suffix from lazy-highlight face name * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-13 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-14 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-15 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-16 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-17 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-18 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-20 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-21 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-22 <no summary provided> * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-23 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-24 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-25 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-26 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-27 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-28 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-29 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-30 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-31 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-32 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-33 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-34 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-35 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-36 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-37 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-38 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-39 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-40 Fix regressions from latest reftex update * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-41 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-42 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-43 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-44 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-45 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-46 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-47 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-48 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-49 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-50 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-51 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-52 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-53 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-54 Update from CVS: lisp/cus-start.el (all): Add `undo-outer-limit'. * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-55 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-56 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-57 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-58 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-59 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-60 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-61 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-62 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-63 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-64 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-65 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-66 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-67 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-68 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-69 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-70 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-71 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-72 src/dispextern.h (xassert): Enable unconditionally. * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-73 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-74 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-75 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--base-0 tag of miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-82 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-1 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-2 Merge from miles@gnu.org--gnu-2004 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-3 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-4 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-5 Update from CVS: exi/gnus-faq.texi ([4.1]): Typo. * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-6 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-7 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-8 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-9 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-10 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-11 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-281
Diffstat (limited to 'src/casefiddle.c')
-rw-r--r--src/casefiddle.c87
1 files changed, 29 insertions, 58 deletions
diff --git a/src/casefiddle.c b/src/casefiddle.c
index ae4888088bd..9af4015fbb3 100644
--- a/src/casefiddle.c
+++ b/src/casefiddle.c
@@ -1,5 +1,5 @@
1/* GNU Emacs case conversion functions. 1/* GNU Emacs case conversion functions.
2 Copyright (C) 1985,94,97,98,99, 2001, 2002, 2004 2 Copyright (C) 1985,94,97,98,99, 2001, 2002, 2004, 2005
3 Free Software Foundation, Inc. 3 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
@@ -73,71 +73,38 @@ casify_object (flag, obj)
73 if (STRINGP (obj)) 73 if (STRINGP (obj))
74 { 74 {
75 int multibyte = STRING_MULTIBYTE (obj); 75 int multibyte = STRING_MULTIBYTE (obj);
76 int n;
76 77
77 obj = Fcopy_sequence (obj); 78 obj = Fcopy_sequence (obj);
78 len = SBYTES (obj); 79 len = SBYTES (obj);
79 80
80 /* Scan all single-byte characters from start of string. */ 81 /* I counts bytes, and N counts chars. */
81 for (i = 0; i < len;) 82 for (i = n = 0; i < len; n++)
82 { 83 {
84 int from_len = 1, to_len = 1;
85
83 c = SREF (obj, i); 86 c = SREF (obj, i);
84 87
85 if (multibyte && c >= 0x80) 88 if (multibyte && c >= 0x80)
86 /* A multibyte character can't be handled in this 89 c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i, len -i, from_len);
87 simple loop. */
88 break;
89 if (inword && flag != CASE_CAPITALIZE_UP) 90 if (inword && flag != CASE_CAPITALIZE_UP)
90 c = DOWNCASE (c); 91 c = DOWNCASE (c);
91 else if (!UPPERCASEP (c) 92 else if (!UPPERCASEP (c)
92 && (!inword || flag != CASE_CAPITALIZE_UP)) 93 && (!inword || flag != CASE_CAPITALIZE_UP))
93 c = UPCASE1 (c); 94 c = UPCASE1 (c);
94 /* If this char won't fit in a single-byte string. 95 if (ASCII_BYTE_P (c) || (! multibyte && SINGLE_BYTE_CHAR_P (c)))
95 fall out to the multibyte case. */ 96 SSET (obj, i, c);
96 if (multibyte ? ! ASCII_BYTE_P (c) 97 else
97 : ! SINGLE_BYTE_CHAR_P (c))
98 break;
99
100 SSET (obj, i, c);
101 if ((int) flag >= (int) CASE_CAPITALIZE)
102 inword = SYNTAX (c) == Sword;
103 i++;
104 }
105
106 /* If we didn't do the whole string as single-byte,
107 scan the rest in a more complex way. */
108 if (i < len)
109 {
110 /* The work is not yet finished because of a multibyte
111 character just encountered. */
112 int fromlen, j_byte = i;
113 char *buf;
114 int bufsize;
115 USE_SAFE_ALLOCA;
116
117 bufsize = (len - i) * MAX_MULTIBYTE_LENGTH + i;
118 SAFE_ALLOCA (buf, char *, bufsize);
119
120 /* Copy data already handled. */
121 bcopy (SDATA (obj), buf, i);
122
123 /* From now on, I counts bytes. */
124 while (i < len)
125 { 98 {
126 c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i, 99 to_len = CHAR_BYTES (c);
127 len - i, fromlen); 100 if (from_len == to_len)
128 if (inword && flag != CASE_CAPITALIZE_UP) 101 CHAR_STRING (c, SDATA (obj) + i);
129 c = DOWNCASE (c); 102 else
130 else if (!UPPERCASEP (c) 103 Faset (obj, make_number (n), make_number (c));
131 && (!inword || flag != CASE_CAPITALIZE_UP))
132 c = UPCASE1 (c);
133 i += fromlen;
134 j_byte += CHAR_STRING (c, buf + j_byte);
135 if ((int) flag >= (int) CASE_CAPITALIZE)
136 inword = SYNTAX (c) == Sword;
137 } 104 }
138 obj = make_multibyte_string (buf, SCHARS (obj), 105 if ((int) flag >= (int) CASE_CAPITALIZE)
139 j_byte); 106 inword = SYNTAX (c) == Sword;
140 SAFE_FREE (); 107 i += to_len;
141 } 108 }
142 return obj; 109 return obj;
143 } 110 }
@@ -253,7 +220,7 @@ casify_region (flag, b, e)
253 int opoint_byte = PT_BYTE; 220 int opoint_byte = PT_BYTE;
254 int c2; 221 int c2;
255 222
256 while (i < end_byte) 223 while (start < end)
257 { 224 {
258 if ((c = FETCH_BYTE (i)) >= 0x80) 225 if ((c = FETCH_BYTE (i)) >= 0x80)
259 c = FETCH_MULTIBYTE_CHAR (i); 226 c = FETCH_MULTIBYTE_CHAR (i);
@@ -281,12 +248,16 @@ casify_region (flag, b, e)
281 FETCH_BYTE (i + j) = str[j]; 248 FETCH_BYTE (i + j) = str[j];
282 } 249 }
283 else 250 else
284 /* Replace one character with the other, 251 {
285 keeping text properties the same. */ 252 /* Replace one character with the other,
286 replace_range_2 (start + 1, i + tolen, 253 keeping text properties the same. */
287 start + 2, i + tolen + fromlen, 254 replace_range_2 (start, i,
288 str, 1, tolen, 255 start + 1, i + fromlen,
289 0); 256 str, 1, tolen,
257 1);
258 if (opoint > start)
259 opoint_byte += tolen - fromlen;
260 }
290 } 261 }
291 if ((int) flag >= (int) CASE_CAPITALIZE) 262 if ((int) flag >= (int) CASE_CAPITALIZE)
292 inword = SYNTAX (c2) == Sword; 263 inword = SYNTAX (c2) == Sword;