]> code.delx.au - gnu-emacs/blobdiff - src/casefiddle.c
(mark_byte_stack): Use XMARKBIT and XMARK.
[gnu-emacs] / src / casefiddle.c
index 8768ad1fd8a1bf8e365aa7e88b523c0d8d5edc61..24f63637bf12240d447670fdcb44597a8cc07ef6 100644 (file)
@@ -1,5 +1,5 @@
 /* GNU Emacs case conversion functions.
-   Copyright (C) 1985, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1994, 1997 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -37,7 +37,6 @@ casify_object (flag, obj)
 {
   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]))
@@ -47,13 +46,17 @@ casify_object (flag, 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)
-           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;
        }
@@ -63,7 +66,7 @@ casify_object (flag, obj)
          int multibyte = STRING_MULTIBYTE (obj);
 
          obj = Fcopy_sequence (obj);
-         len = XSTRING (obj)->size_byte;
+         len = STRING_BYTES (XSTRING (obj));
 
          /* Scan all single-byte characters from start of string.  */
          for (i = 0; i < len;)
@@ -97,7 +100,7 @@ casify_object (flag, obj)
            {
              /* The work is not yet finished because of a multibyte
                 character just encountered.  */
-             int fromlen, tolen, j = i, j_byte = i;
+             int fromlen, tolen, j_byte = i;
              char *buf
                = (char *) alloca ((len - i) * MAX_LENGTH_OF_MULTI_BYTE_FORM
                                   + i);
@@ -119,12 +122,12 @@ casify_object (flag, obj)
                  tolen = CHAR_STRING (c, workbuf, str);
                  bcopy (str, buf + j_byte, tolen);
                  i += fromlen;
-                 j++;
                  j_byte += tolen;
                  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;
        }
@@ -181,6 +184,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. */
 
+void
 casify_region (flag, b, e)
      enum case_action flag;
      Lisp_Object b, e;
@@ -191,7 +195,6 @@ casify_region (flag, b, e)
   register int multibyte = !NILP (current_buffer->enable_multibyte_characters);
   int start, end;
   int start_byte, end_byte;
-  Lisp_Object ch, downch, val;
 
   if (EQ (b, e))
     /* Not modifying because nothing marked */
@@ -403,6 +406,7 @@ With negative argument, capitalize previous words but do not move.")
   return Qnil;
 }
 \f
+void
 syms_of_casefiddle ()
 {
   Qidentity = intern ("identity");
@@ -420,6 +424,7 @@ syms_of_casefiddle ()
   defsubr (&Scapitalize_word);
 }
 
+void
 keys_of_casefiddle ()
 {
   initial_define_key (control_x_map, Ctl('U'), "upcase-region");