diff options
| author | Joakim Verona | 2011-06-16 00:22:07 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-06-16 00:22:07 +0200 |
| commit | a7513ade3bc0fe79430d5541d88c9dcda0932bec (patch) | |
| tree | 4383951ba698a11e9f8933a9d8c72e00aa872a10 /src/casefiddle.c | |
| parent | 4bd51ad5c3445b644dfb017d5b57b10a90aa325f (diff) | |
| parent | 4bba86e6210a74326e843a8fdc8409127105e1fe (diff) | |
| download | emacs-a7513ade3bc0fe79430d5541d88c9dcda0932bec.tar.gz emacs-a7513ade3bc0fe79430d5541d88c9dcda0932bec.zip | |
merge from upstream
Diffstat (limited to 'src/casefiddle.c')
| -rw-r--r-- | src/casefiddle.c | 53 |
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 | ||
| 33 | Lisp_Object Qidentity; | 33 | Lisp_Object Qidentity; |
| 34 | 34 | ||
| 35 | Lisp_Object | 35 | static Lisp_Object |
| 36 | casify_object (enum case_action flag, Lisp_Object obj) | 36 | casify_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 | ||
| 196 | void | 196 | static void |
| 197 | casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e) | 197 | casify_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 | |||