changeset 26860:96ecaefd97a0

(copy_text): Adjusted for the change of CHAR_STRING. (insert_char): Likewise. (insert): Call update_compositions. (insert_and_inherit): Likewise. (insert_before_markers): Likewise. (insert_before_markers_and_inherit): Likewise. (insert_from_string): Likewise. (insert_from_string_before_markers): Likewise. (insert_from_buffer): Likewise. (replace_range): Likewise. (count_combining_composition): Deleted. (count_combining_before): Delete codes for a composite character. (count_combining_after): Likewise. (del_range_1): Call update_compositions. (del_range_byte): Likewise. (del_range_both): Likewise. (Fcombine_after_change_execute): Likewise.
author Kenichi Handa <handa@m17n.org>
date Wed, 15 Dec 1999 00:13:49 +0000
parents 4cf41c98ad2d
children 7d3ca36657cb
files src/insdel.c
diffstat 1 files changed, 17 insertions(+), 49 deletions(-) [+]
line wrap: on
line diff
--- a/src/insdel.c	Wed Dec 15 00:13:13 1999 +0000
+++ b/src/insdel.c	Wed Dec 15 00:13:49 1999 +0000
@@ -715,17 +715,13 @@
       while (nbytes > 0)
 	{
 	  int c = *from_addr++;
-	  unsigned char workbuf[4], *str;
-	  int len;
 
 	  if (c < 0400
 	      && (c >= 0240
 		  || (c >= 0200 && !NILP (Vnonascii_translation_table))))
 	    {
 	      c = unibyte_char_to_multibyte (c);
-	      len = CHAR_STRING (c, workbuf, str);
-	      bcopy (str, to_addr, len);
-	      to_addr += len;
+	      to_addr += CHAR_STRING (c, to_addr);
 	      nbytes--;
 	    }
 	  else
@@ -782,6 +778,7 @@
       int opoint = PT;
       insert_1 (string, nbytes, 0, 1, 0);
       signal_after_change (opoint, 0, PT - opoint);
+      update_compositions (opoint, PT, CHECK_BORDER);
     }
 }
 
@@ -797,6 +794,7 @@
       int opoint = PT;
       insert_1 (string, nbytes, 1, 1, 0);
       signal_after_change (opoint, 0, PT - opoint);
+      update_compositions (opoint, PT, CHECK_BORDER);
     }
 }
 
@@ -806,16 +804,15 @@
 insert_char (c)
      int c;
 {
-  unsigned char workbuf[4], *str;
+  unsigned char str[MAX_MULTIBYTE_LENGTH];
   int len;
 
   if (! NILP (current_buffer->enable_multibyte_characters))
-    len = CHAR_STRING (c, workbuf, str);
+    len = CHAR_STRING (c, str);
   else
     {
       len = 1;
-      workbuf[0] = c;
-      str = workbuf;
+      str[0] = c;
     }
 
   insert (str, len);
@@ -846,6 +843,7 @@
 
       insert_1 (string, nbytes, 0, 1, 1);
       signal_after_change (opoint, 0, PT - opoint);
+      update_compositions (opoint, PT, CHECK_BORDER);
     }
 }
 
@@ -862,6 +860,7 @@
 
       insert_1 (string, nbytes, 1, 1, 1);
       signal_after_change (opoint, 0, PT - opoint);
+      update_compositions (opoint, PT, CHECK_BORDER);
     }
 }
 
@@ -877,33 +876,6 @@
 		 inherit, prepare, before_markers);
 }
 
-/* See if the byte sequence at STR1 of length LEN1 combine with the
-   byte sequence at STR2 of length LEN2 to form a single composite
-   character.  If so, return the number of bytes at the start of STR2
-   which combine in this way.  Otherwise, return 0.  If STR3 is not
-   NULL, it is a byte sequence of length LEN3 to be appended to STR1
-   before checking the combining.  */
-int
-count_combining_composition (str1, len1, str2, len2, str3, len3)
-     unsigned char *str1, *str2, *str3;
-     int len1, len2, len3;
-{
-  int len = len1 + len2 + len3;
-  unsigned char *buf = (unsigned char *) alloca (len + 1);
-  int bytes;
-
-  bcopy (str1, buf, len1);
-  if (str3)
-    {
-      bcopy (str3, buf + len1, len3);
-      len1 += len3;
-    }
-  bcopy (str2, buf + len1 , len2);
-  buf[len] = 0;
-  PARSE_MULTIBYTE_SEQ (buf, len, bytes);
-  return (bytes <= len1 ? 0 : bytes - len1);
-}
-
 /* See if the bytes before POS/POS_BYTE combine with bytes
    at the start of STRING to form a single character.
    If so, return the number of bytes at the start of STRING
@@ -935,10 +907,6 @@
   if (! BASE_LEADING_CODE_P (*p)) /* case (3) */
     return 0;
 
-  /* A sequence of a composite character requires a special handling.  */
-  if (*p == LEADING_CODE_COMPOSITION)
-    return count_combining_composition (p, len, string, length, NULL, 0);
-
   combining_bytes = BYTES_BY_CHAR_HEAD (*p) - len;
   if (combining_bytes <= 0)
     /* The character preceding POS is, complete and no room for
@@ -1003,11 +971,7 @@
 	i--;
       if (i < 0 || !BASE_LEADING_CODE_P (p[i]))
 	return 0;
-      /* A sequence of a composite character requires a special handling.  */
-      if (p[i] == LEADING_CODE_COMPOSITION)
-	return count_combining_composition (p + i, pos_byte - 1 - i,
-					    bufp, Z_BYTE - pos_byte,
-					    string, length);
+
       bytes = BYTES_BY_CHAR_HEAD (p[i]);
       return (bytes <= pos_byte - 1 - i + length
 	      ? 0
@@ -1015,10 +979,6 @@
     }
   if (!BASE_LEADING_CODE_P (string[i]))
     return 0;
-  /* A sequence of a composite character requires a special handling.  */
-  if (string[i] == LEADING_CODE_COMPOSITION)
-    return count_combining_composition (string + i, length - i,
-					bufp, Z_BYTE - pos_byte, NULL, 0);
 
   bytes = BYTES_BY_CHAR_HEAD (string[i]) - (length - i);
   bufp++, pos_byte++;
@@ -1227,6 +1187,7 @@
   insert_from_string_1 (string, pos, pos_byte, length, length_byte,
 			inherit, 0);
   signal_after_change (opoint, 0, PT - opoint);
+  update_compositions (opoint, PT, CHECK_BORDER);
 }
 
 /* Like `insert_from_string' except that all markers pointing
@@ -1243,6 +1204,7 @@
   insert_from_string_1 (string, pos, pos_byte, length, length_byte,
 			inherit, 1);
   signal_after_change (opoint, 0, PT - opoint);
+  update_compositions (opoint, PT, CHECK_BORDER);
 }
 
 /* Subroutine of the insertion functions above.  */
@@ -1412,6 +1374,7 @@
 
   insert_from_buffer_1 (buf, charpos, nchars, inherit);
   signal_after_change (opoint, 0, PT - opoint);
+  update_compositions (opoint, PT, CHECK_BORDER);
 }
 
 static void
@@ -2043,6 +2006,7 @@
   UNGCPRO;
 
   signal_after_change (from, nchars_del, GPT - from);
+  update_compositions (from, GPT, CHECK_BORDER);
 }
 
 /* Delete characters in current buffer
@@ -2128,6 +2092,7 @@
 
   del_range_2 (from, from_byte, to, to_byte, 0);
   signal_after_change (from, to - from, 0);
+  update_compositions (from, from, CHECK_HEAD);
 }
 
 /* Like del_range_1, but positions are specified both as charpos
@@ -2166,6 +2131,8 @@
 
   del_range_2 (from, from_byte, to, to_byte, 0);
   signal_after_change (from, to - from, 0);
+  update_compositions (from, from, CHECK_HEAD);
+  update_compositions (from, from, CHECK_HEAD);
 }
 
 /* Delete a range of text, specified both as character positions
@@ -2692,6 +2659,7 @@
   record_unwind_protect (Fcombine_after_change_execute_1,
 			 Vcombine_after_change_calls);
   signal_after_change (begpos, endpos - begpos - change, endpos - begpos);
+  update_compositions (begpos, endpos, CHECK_ALL);
 
   return unbind_to (count, Qnil);
 }