]> git.eshelyaron.com Git - emacs.git/commitdiff
(wordify): Do the second loop by chars, not by bytes.
authorRichard M. Stallman <rms@gnu.org>
Fri, 1 May 1998 04:51:20 +0000 (04:51 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 1 May 1998 04:51:20 +0000 (04:51 +0000)
src/search.c

index 90155806e243590c306fd4d645127488b65820e7..fc4142ce478955b03ecd57ef257728860fe8671e 100644 (file)
@@ -1958,18 +1958,35 @@ wordify (string)
   o = XSTRING (val)->data;
   *o++ = '\\';
   *o++ = 'b';
+  prev_c = 0;
 
-  for (i = 0; i < STRING_BYTES (XSTRING (val)); i++)
-    if (SYNTAX (p[i]) == Sword)
-      *o++ = p[i];
-    else if (i > 0 && SYNTAX (p[i-1]) == Sword && --word_count)
-      {
-       *o++ = '\\';
-       *o++ = 'W';
-       *o++ = '\\';
-       *o++ = 'W';
-       *o++ = '*';
-      }
+  for (i = 0, i_byte = 0; i < len; )
+    {
+      int c;
+      int i_byte_orig = i_byte;
+      
+      if (STRING_MULTIBYTE (string))
+       FETCH_STRING_CHAR_ADVANCE (c, string, i, i_byte);
+      else
+       c = XSTRING (string)->data[i++];
+
+      if (SYNTAX (c) == Sword)
+       {
+         bcopy (&XSTRING (string)->data[i_byte_orig], o,
+                i_byte - i_byte_orig);
+         o += i_byte - i_byte_orig;
+       }
+      else if (i > 0 && SYNTAX (prev_c) == Sword && --word_count)
+       {
+         *o++ = '\\';
+         *o++ = 'W';
+         *o++ = '\\';
+         *o++ = 'W';
+         *o++ = '*';
+       }
+
+      prev_c = c;
+    }
 
   *o++ = '\\';
   *o++ = 'b';