diff options
| author | Karoly Lorentey | 2005-02-03 23:28:36 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2005-02-03 23:28:36 +0000 |
| commit | 597cfb3fbc57114062f12dfdfa37c0157fff1e97 (patch) | |
| tree | dea42300f641805b707eb9a64035acac8c9f547e /src/casefiddle.c | |
| parent | fd41924555942f6c3c1e12400ab313717a3818cd (diff) | |
| parent | 4e07258f2b539fa9a3ba97442e81e3e67a9ce5a7 (diff) | |
| download | emacs-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.c | 87 |
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 | ||
| 5 | This file is part of GNU Emacs. | 5 | This 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; |