aboutsummaryrefslogtreecommitdiffstats
path: root/src/casefiddle.c
diff options
context:
space:
mode:
authorJoakim Verona2011-06-16 00:22:07 +0200
committerJoakim Verona2011-06-16 00:22:07 +0200
commita7513ade3bc0fe79430d5541d88c9dcda0932bec (patch)
tree4383951ba698a11e9f8933a9d8c72e00aa872a10 /src/casefiddle.c
parent4bd51ad5c3445b644dfb017d5b57b10a90aa325f (diff)
parent4bba86e6210a74326e843a8fdc8409127105e1fe (diff)
downloademacs-a7513ade3bc0fe79430d5541d88c9dcda0932bec.tar.gz
emacs-a7513ade3bc0fe79430d5541d88c9dcda0932bec.zip
merge from upstream
Diffstat (limited to 'src/casefiddle.c')
-rw-r--r--src/casefiddle.c53
1 files changed, 27 insertions, 26 deletions
diff --git a/src/casefiddle.c b/src/casefiddle.c
index 6f82f99bd26..1a0a62f273c 100644
--- a/src/casefiddle.c
+++ b/src/casefiddle.c
@@ -32,27 +32,27 @@ enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP};
32 32
33Lisp_Object Qidentity; 33Lisp_Object Qidentity;
34 34
35Lisp_Object 35static Lisp_Object
36casify_object (enum case_action flag, Lisp_Object obj) 36casify_object (enum case_action flag, Lisp_Object obj)
37{ 37{
38 register int c, c1; 38 register int c, c1;
39 register int inword = flag == CASE_DOWN; 39 register int inword = flag == CASE_DOWN;
40 40
41 /* If the case table is flagged as modified, rescan it. */ 41 /* If the case table is flagged as modified, rescan it. */
42 if (NILP (XCHAR_TABLE (current_buffer->downcase_table)->extras[1])) 42 if (NILP (XCHAR_TABLE (BVAR (current_buffer, downcase_table))->extras[1]))
43 Fset_case_table (current_buffer->downcase_table); 43 Fset_case_table (BVAR (current_buffer, downcase_table));
44 44
45 if (INTEGERP (obj)) 45 if (INTEGERP (obj))
46 { 46 {
47 int flagbits = (CHAR_ALT | CHAR_SUPER | CHAR_HYPER 47 int flagbits = (CHAR_ALT | CHAR_SUPER | CHAR_HYPER
48 | CHAR_SHIFT | CHAR_CTL | CHAR_META); 48 | CHAR_SHIFT | CHAR_CTL | CHAR_META);
49 int flags = XINT (obj) & flagbits; 49 int flags = XINT (obj) & flagbits;
50 int multibyte = ! NILP (current_buffer->enable_multibyte_characters); 50 int multibyte = ! NILP (BVAR (current_buffer, enable_multibyte_characters));
51 51
52 /* If the character has higher bits set 52 /* If the character has higher bits set
53 above the flags, return it unchanged. 53 above the flags, return it unchanged.
54 It is not a real character. */ 54 It is not a real character. */
55 if ((unsigned) XFASTINT (obj) > (unsigned) flagbits) 55 if (UNSIGNED_CMP (XFASTINT (obj), >, flagbits))
56 return obj; 56 return obj;
57 57
58 c1 = XFASTINT (obj) & ~flagbits; 58 c1 = XFASTINT (obj) & ~flagbits;
@@ -64,13 +64,13 @@ casify_object (enum case_action flag, Lisp_Object obj)
64 multibyte = 1; 64 multibyte = 1;
65 if (! multibyte) 65 if (! multibyte)
66 MAKE_CHAR_MULTIBYTE (c1); 66 MAKE_CHAR_MULTIBYTE (c1);
67 c = DOWNCASE (c1); 67 c = downcase (c1);
68 if (inword) 68 if (inword)
69 XSETFASTINT (obj, c | flags); 69 XSETFASTINT (obj, c | flags);
70 else if (c == (XFASTINT (obj) & ~flagbits)) 70 else if (c == (XFASTINT (obj) & ~flagbits))
71 { 71 {
72 if (! inword) 72 if (! inword)
73 c = UPCASE1 (c1); 73 c = upcase1 (c1);
74 if (! multibyte) 74 if (! multibyte)
75 MAKE_CHAR_UNIBYTE (c); 75 MAKE_CHAR_UNIBYTE (c);
76 XSETFASTINT (obj, c | flags); 76 XSETFASTINT (obj, c | flags);
@@ -92,10 +92,10 @@ casify_object (enum case_action flag, Lisp_Object obj)
92 MAKE_CHAR_MULTIBYTE (c); 92 MAKE_CHAR_MULTIBYTE (c);
93 c1 = c; 93 c1 = c;
94 if (inword && flag != CASE_CAPITALIZE_UP) 94 if (inword && flag != CASE_CAPITALIZE_UP)
95 c = DOWNCASE (c); 95 c = downcase (c);
96 else if (!UPPERCASEP (c) 96 else if (!uppercasep (c)
97 && (!inword || flag != CASE_CAPITALIZE_UP)) 97 && (!inword || flag != CASE_CAPITALIZE_UP))
98 c = UPCASE1 (c1); 98 c = upcase1 (c1);
99 if ((int) flag >= (int) CASE_CAPITALIZE) 99 if ((int) flag >= (int) CASE_CAPITALIZE)
100 inword = (SYNTAX (c) == Sword); 100 inword = (SYNTAX (c) == Sword);
101 if (c != c1) 101 if (c != c1)
@@ -133,16 +133,16 @@ casify_object (enum case_action flag, Lisp_Object obj)
133 } 133 }
134 c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i_byte, len); 134 c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i_byte, len);
135 if (inword && flag != CASE_CAPITALIZE_UP) 135 if (inword && flag != CASE_CAPITALIZE_UP)
136 c = DOWNCASE (c); 136 c = downcase (c);
137 else if (!UPPERCASEP (c) 137 else if (!uppercasep (c)
138 && (!inword || flag != CASE_CAPITALIZE_UP)) 138 && (!inword || flag != CASE_CAPITALIZE_UP))
139 c = UPCASE1 (c); 139 c = upcase1 (c);
140 if ((int) flag >= (int) CASE_CAPITALIZE) 140 if ((int) flag >= (int) CASE_CAPITALIZE)
141 inword = (SYNTAX (c) == Sword); 141 inword = (SYNTAX (c) == Sword);
142 o += CHAR_STRING (c, o); 142 o += CHAR_STRING (c, o);
143 } 143 }
144 eassert (o - dst <= o_size); 144 eassert (o - dst <= o_size);
145 obj = make_multibyte_string (dst, size, o - dst); 145 obj = make_multibyte_string ((char *) dst, size, o - dst);
146 SAFE_FREE (); 146 SAFE_FREE ();
147 return obj; 147 return obj;
148 } 148 }
@@ -193,15 +193,18 @@ The argument object is not altered--the value is a copy. */)
193/* flag is CASE_UP, CASE_DOWN or CASE_CAPITALIZE or CASE_CAPITALIZE_UP. 193/* flag is CASE_UP, CASE_DOWN or CASE_CAPITALIZE or CASE_CAPITALIZE_UP.
194 b and e specify range of buffer to operate on. */ 194 b and e specify range of buffer to operate on. */
195 195
196void 196static void
197casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e) 197casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e)
198{ 198{
199 register int c; 199 register int c;
200 register int inword = flag == CASE_DOWN; 200 register int inword = flag == CASE_DOWN;
201 register int multibyte = !NILP (current_buffer->enable_multibyte_characters); 201 register int multibyte = !NILP (BVAR (current_buffer, enable_multibyte_characters));
202 EMACS_INT start, end; 202 EMACS_INT start, end;
203 EMACS_INT start_byte, end_byte; 203 EMACS_INT start_byte;
204 EMACS_INT first = -1, last; /* Position of first and last changes. */ 204
205 /* Position of first and last changes. */
206 EMACS_INT first = -1, last IF_LINT (= 0);
207
205 EMACS_INT opoint = PT; 208 EMACS_INT opoint = PT;
206 EMACS_INT opoint_byte = PT_BYTE; 209 EMACS_INT opoint_byte = PT_BYTE;
207 210
@@ -210,8 +213,8 @@ casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e)
210 return; 213 return;
211 214
212 /* If the case table is flagged as modified, rescan it. */ 215 /* If the case table is flagged as modified, rescan it. */
213 if (NILP (XCHAR_TABLE (current_buffer->downcase_table)->extras[1])) 216 if (NILP (XCHAR_TABLE (BVAR (current_buffer, downcase_table))->extras[1]))
214 Fset_case_table (current_buffer->downcase_table); 217 Fset_case_table (BVAR (current_buffer, downcase_table));
215 218
216 validate_region (&b, &e); 219 validate_region (&b, &e);
217 start = XFASTINT (b); 220 start = XFASTINT (b);
@@ -219,7 +222,6 @@ casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e)
219 modify_region (current_buffer, start, end, 0); 222 modify_region (current_buffer, start, end, 0);
220 record_change (start, end - start); 223 record_change (start, end - start);
221 start_byte = CHAR_TO_BYTE (start); 224 start_byte = CHAR_TO_BYTE (start);
222 end_byte = CHAR_TO_BYTE (end);
223 225
224 SETUP_BUFFER_SYNTAX_TABLE(); /* For syntax_prefix_flag_p. */ 226 SETUP_BUFFER_SYNTAX_TABLE(); /* For syntax_prefix_flag_p. */
225 227
@@ -240,10 +242,10 @@ casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e)
240 } 242 }
241 c2 = c; 243 c2 = c;
242 if (inword && flag != CASE_CAPITALIZE_UP) 244 if (inword && flag != CASE_CAPITALIZE_UP)
243 c = DOWNCASE (c); 245 c = downcase (c);
244 else if (!UPPERCASEP (c) 246 else if (!uppercasep (c)
245 && (!inword || flag != CASE_CAPITALIZE_UP)) 247 && (!inword || flag != CASE_CAPITALIZE_UP))
246 c = UPCASE1 (c); 248 c = upcase1 (c);
247 if ((int) flag >= (int) CASE_CAPITALIZE) 249 if ((int) flag >= (int) CASE_CAPITALIZE)
248 inword = ((SYNTAX (c) == Sword) 250 inword = ((SYNTAX (c) == Sword)
249 && (inword || !syntax_prefix_flag_p (c))); 251 && (inword || !syntax_prefix_flag_p (c)));
@@ -279,7 +281,7 @@ casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e)
279 keeping text properties the same. */ 281 keeping text properties the same. */
280 replace_range_2 (start, start_byte, 282 replace_range_2 (start, start_byte,
281 start + 1, start_byte + len, 283 start + 1, start_byte + len,
282 str, 1, tolen, 284 (char *) str, 1, tolen,
283 0); 285 0);
284 len = tolen; 286 len = tolen;
285 } 287 }
@@ -442,4 +444,3 @@ keys_of_casefiddle (void)
442 initial_define_key (meta_map, 'l', "downcase-word"); 444 initial_define_key (meta_map, 'l', "downcase-word");
443 initial_define_key (meta_map, 'c', "capitalize-word"); 445 initial_define_key (meta_map, 'c', "capitalize-word");
444} 446}
445