HCoop
/
bpt
/
emacs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
(struct it): Increase size of ctl_chars to 16.
[bpt/emacs.git]
/
src
/
casefiddle.c
diff --git
a/src/casefiddle.c
b/src/casefiddle.c
index
d3ddf6c
..
887cce0
100644
(file)
--- a/
src/casefiddle.c
+++ b/
src/casefiddle.c
@@
-25,6
+25,7
@@
Boston, MA 02111-1307, USA. */
#include "charset.h"
#include "commands.h"
#include "syntax.h"
#include "charset.h"
#include "commands.h"
#include "syntax.h"
+#include "composite.h"
enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP};
enum case_action {CASE_UP, CASE_DOWN, CASE_CAPITALIZE, CASE_CAPITALIZE_UP};
@@
-37,7
+38,6
@@
casify_object (flag, obj)
{
register int i, c, len;
register int inword = flag == CASE_DOWN;
{
register int i, c, len;
register int inword = flag == CASE_DOWN;
- Lisp_Object tem;
/* If the case table is flagged as modified, rescan it. */
if (NILP (XCHAR_TABLE (current_buffer->downcase_table)->extras[1]))
/* If the case table is flagged as modified, rescan it. */
if (NILP (XCHAR_TABLE (current_buffer->downcase_table)->extras[1]))
@@
-47,13
+47,17
@@
casify_object (flag, obj)
{
if (INTEGERP (obj))
{
{
if (INTEGERP (obj))
{
- c = DOWNCASE (XFASTINT (obj));
+ int flagbits = (CHAR_ALT | CHAR_SUPER | CHAR_HYPER
+ | CHAR_SHIFT | CHAR_CTL | CHAR_META);
+ int flags = XINT (obj) & flagbits;
+
+ c = DOWNCASE (XFASTINT (obj) & ~flagbits);
if (inword)
if (inword)
- XSETFASTINT (obj, c);
- else if (c ==
XFASTINT (obj
))
+ XSETFASTINT (obj, c
| flags
);
+ else if (c ==
(XFASTINT (obj) & ~flagbits
))
{
{
- c = UPCASE1 (
XFASTINT (obj
));
- XSETFASTINT (obj, c);
+ c = UPCASE1 (
(XFASTINT (obj) & ~flagbits
));
+ XSETFASTINT (obj, c
| flags
);
}
return obj;
}
}
return obj;
}
@@
-97,11
+101,9
@@
casify_object (flag, obj)
{
/* The work is not yet finished because of a multibyte
character just encountered. */
{
/* The work is not yet finished because of a multibyte
character just encountered. */
- int fromlen,
tolen, j = i,
j_byte = i;
+ int fromlen, j_byte = i;
char *buf
char *buf
- = (char *) alloca ((len - i) * MAX_LENGTH_OF_MULTI_BYTE_FORM
- + i);
- unsigned char *str, workbuf[4];
+ = (char *) alloca ((len - i) * MAX_MULTIBYTE_LENGTH + i);
/* Copy data already handled. */
bcopy (XSTRING (obj)->data, buf, i);
/* Copy data already handled. */
bcopy (XSTRING (obj)->data, buf, i);
@@
-116,15
+118,13
@@
casify_object (flag, obj)
else if (!UPPERCASEP (c)
&& (!inword || flag != CASE_CAPITALIZE_UP))
c = UPCASE1 (c);
else if (!UPPERCASEP (c)
&& (!inword || flag != CASE_CAPITALIZE_UP))
c = UPCASE1 (c);
- tolen = CHAR_STRING (c, workbuf, str);
- bcopy (str, buf + j_byte, tolen);
i += fromlen;
i += fromlen;
- j++;
- j_byte += tolen;
+ j_byte += CHAR_STRING (c, buf + j_byte);
if ((int) flag >= (int) CASE_CAPITALIZE)
inword = SYNTAX (c) == Sword;
}
if ((int) flag >= (int) CASE_CAPITALIZE)
inword = SYNTAX (c) == Sword;
}
- obj = make_multibyte_string (buf, j, j_byte);
+ obj = make_multibyte_string (buf, XSTRING (obj)->size,
+ j_byte);
}
return obj;
}
}
return obj;
}
@@
-181,6
+181,7
@@
The argument object is not altered--the value is a copy.")
/* flag is CASE_UP, CASE_DOWN or CASE_CAPITALIZE or CASE_CAPITALIZE_UP.
b and e specify range of buffer to operate on. */
/* flag is CASE_UP, CASE_DOWN or CASE_CAPITALIZE or CASE_CAPITALIZE_UP.
b and e specify range of buffer to operate on. */
+void
casify_region (flag, b, e)
enum case_action flag;
Lisp_Object b, e;
casify_region (flag, b, e)
enum case_action flag;
Lisp_Object b, e;
@@
-191,7
+192,7
@@
casify_region (flag, b, e)
register int multibyte = !NILP (current_buffer->enable_multibyte_characters);
int start, end;
int start_byte, end_byte;
register int multibyte = !NILP (current_buffer->enable_multibyte_characters);
int start, end;
int start_byte, end_byte;
-
Lisp_Object ch, downch, val
;
+
int changed = 0
;
if (EQ (b, e))
/* Not modifying because nothing marked */
if (EQ (b, e))
/* Not modifying because nothing marked */
@@
-209,9
+210,10
@@
casify_region (flag, b, e)
start_byte = CHAR_TO_BYTE (start);
end_byte = CHAR_TO_BYTE (end);
start_byte = CHAR_TO_BYTE (start);
end_byte = CHAR_TO_BYTE (end);
- for (i = start_byte; i < end_byte; i++)
+ for (i = start_byte; i < end_byte; i++
, start++
)
{
{
- c = FETCH_BYTE (i);
+ int c2;
+ c = c2 = FETCH_BYTE (i);
if (multibyte && c >= 0x80)
/* A multibyte character can't be handled in this simple loop. */
break;
if (multibyte && c >= 0x80)
/* A multibyte character can't be handled in this simple loop. */
break;
@@
-221,6
+223,8
@@
casify_region (flag, b, e)
&& (!inword || flag != CASE_CAPITALIZE_UP))
c = UPCASE1 (c);
FETCH_BYTE (i) = c;
&& (!inword || flag != CASE_CAPITALIZE_UP))
c = UPCASE1 (c);
FETCH_BYTE (i) = c;
+ if (c != c2)
+ changed = 1;
if ((int) flag >= (int) CASE_CAPITALIZE)
inword = SYNTAX (c) == Sword;
}
if ((int) flag >= (int) CASE_CAPITALIZE)
inword = SYNTAX (c) == Sword;
}
@@
-245,13
+249,14
@@
casify_region (flag, b, e)
if (c != c2)
{
int fromlen, tolen, j;
if (c != c2)
{
int fromlen, tolen, j;
- unsigned char
workbuf[4], *str
;
+ unsigned char
str[MAX_MULTIBYTE_LENGTH]
;
+ changed = 1;
/* Handle the most likely case */
if (c < 0400 && c2 < 0400)
FETCH_BYTE (i) = c2;
/* Handle the most likely case */
if (c < 0400 && c2 < 0400)
FETCH_BYTE (i) = c2;
- else if (fromlen = CHAR_STRING (c,
workbuf,
str),
- tolen = CHAR_STRING (c2,
workbuf,
str),
+ else if (fromlen = CHAR_STRING (c, str),
+ tolen = CHAR_STRING (c2, str),
fromlen == tolen)
{
for (j = 0; j < tolen; ++j)
fromlen == tolen)
{
for (j = 0; j < tolen; ++j)
@@
-262,7
+267,7
@@
casify_region (flag, b, e)
error ("Can't casify letters that change length");
#if 0 /* This is approximately what we'd like to be able to do here */
if (tolen < fromlen)
error ("Can't casify letters that change length");
#if 0 /* This is approximately what we'd like to be able to do here */
if (tolen < fromlen)
- del_range_1 (i + tolen, i + fromlen, 0);
+ del_range_1 (i + tolen, i + fromlen, 0
, 0
);
else if (tolen > fromlen)
{
TEMP_SET_PT (i + fromlen);
else if (tolen > fromlen)
{
TEMP_SET_PT (i + fromlen);
@@
-273,12
+278,17
@@
casify_region (flag, b, e)
}
if ((int) flag >= (int) CASE_CAPITALIZE)
inword = SYNTAX (c2) == Sword;
}
if ((int) flag >= (int) CASE_CAPITALIZE)
inword = SYNTAX (c2) == Sword;
- INC_
POS (
i);
+ INC_
BOTH (start,
i);
}
TEMP_SET_PT_BOTH (opoint, opoint_byte);
}
}
TEMP_SET_PT_BOTH (opoint, opoint_byte);
}
- signal_after_change (start, end - start, end - start);
+ start = XFASTINT (b);
+ if (changed)
+ {
+ signal_after_change (start, end - start, end - start);
+ update_compositions (start, end, CHECK_ALL);
+ }
}
DEFUN ("upcase-region", Fupcase_region, Supcase_region, 2, 2, "r",
}
DEFUN ("upcase-region", Fupcase_region, Supcase_region, 2, 2, "r",
@@
-403,6
+413,7
@@
With negative argument, capitalize previous words but do not move.")
return Qnil;
}
\f
return Qnil;
}
\f
+void
syms_of_casefiddle ()
{
Qidentity = intern ("identity");
syms_of_casefiddle ()
{
Qidentity = intern ("identity");
@@
-420,6
+431,7
@@
syms_of_casefiddle ()
defsubr (&Scapitalize_word);
}
defsubr (&Scapitalize_word);
}
+void
keys_of_casefiddle ()
{
initial_define_key (control_x_map, Ctl('U'), "upcase-region");
keys_of_casefiddle ()
{
initial_define_key (control_x_map, Ctl('U'), "upcase-region");