*** empty log message ***
[bpt/emacs.git] / src / casefiddle.c
index fcfebe9..1e502af 100644 (file)
@@ -72,37 +72,36 @@ casify_object (flag, obj)
        {
          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));
@@ -170,7 +169,6 @@ casify_region (flag, b, e)
      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);
@@ -218,7 +216,7 @@ casify_region (flag, b, e)
               && (!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;
@@ -250,6 +248,9 @@ casify_region (flag, b, e)
       start_byte += len;
     }
 
+  if (PT != opoint)
+    TEMP_SET_PT_BOTH (opoint, opoint_byte);
+
   if (changed)
     {
       start = XFASTINT (b);