{
int multibyte = STRING_MULTIBYTE (obj);
int i, i_byte, len;
- int size = XSTRING (obj)->size;
+ int size = SCHARS (obj);
obj = Fcopy_sequence (obj);
for (i = i_byte = 0; i < size; i++, i_byte += len)
{
if (multibyte)
- c = STRING_CHAR_AND_LENGTH (XSTRING (obj)->data + i_byte,
- 0, len);
+ c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i_byte, 0, len);
else
{
- c = XSTRING (obj)->data[i_byte];
+ c = SREF (obj, i_byte);
len = 1;
MAKE_CHAR_MULTIBYTE (c);
}
- c1 = c;
+ c1 = c;
if (inword && flag != CASE_CAPITALIZE_UP)
c = DOWNCASE (c);
else if (!UPPERCASEP (c)
&& (!inword || flag != CASE_CAPITALIZE_UP))
c = UPCASE1 (c1);
if ((int) flag >= (int) CASE_CAPITALIZE)
- inword = SYNTAX (c) == Sword;
+ inword = (SYNTAX (c) == Sword);
if (c != c1)
{
if (! multibyte)
{
MAKE_CHAR_UNIBYTE (c);
- XSTRING (obj)->data[i_byte] = c;
+ SSET (obj, i_byte, c);
}
else if (ASCII_CHAR_P (c1) && ASCII_CHAR_P (c))
- XSTRING (obj)->data[i_byte] = c;
+ SSET (obj, i_byte, c);
else
{
Faset (obj, make_number (i), make_number (c));
enum case_action flag;
Lisp_Object b, e;
{
- register int i;
register int c;
register int inword = flag == CASE_DOWN;
register int multibyte = !NILP (current_buffer->enable_multibyte_characters);
&& (!inword || flag != CASE_CAPITALIZE_UP))
c = UPCASE1 (c);
if ((int) flag >= (int) CASE_CAPITALIZE)
- inword = SYNTAX (c) == Sword;
+ inword = ((SYNTAX (c) == Sword) && (inword || !SYNTAX_PREFIX (c)));
if (c != c2)
{
changed = 1;
start_byte += len;
}
+ if (PT != opoint)
+ TEMP_SET_PT_BOTH (opoint, opoint_byte);
+
if (changed)
{
start = XFASTINT (b);