aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1998-05-01 04:51:20 +0000
committerRichard M. Stallman1998-05-01 04:51:20 +0000
commit1e9582d459d99b4137d2dfd41b7c7b47ecaf5cac (patch)
tree8aac4116ff8f0c207e99bf0be1b442321074059a
parentb662c4bc6bc1503dac6cf2c27a3351232204de55 (diff)
downloademacs-1e9582d459d99b4137d2dfd41b7c7b47ecaf5cac.tar.gz
emacs-1e9582d459d99b4137d2dfd41b7c7b47ecaf5cac.zip
(wordify): Do the second loop by chars, not by bytes.
-rw-r--r--src/search.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/src/search.c b/src/search.c
index 90155806e24..fc4142ce478 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1958,18 +1958,35 @@ wordify (string)
1958 o = XSTRING (val)->data; 1958 o = XSTRING (val)->data;
1959 *o++ = '\\'; 1959 *o++ = '\\';
1960 *o++ = 'b'; 1960 *o++ = 'b';
1961 prev_c = 0;
1961 1962
1962 for (i = 0; i < STRING_BYTES (XSTRING (val)); i++) 1963 for (i = 0, i_byte = 0; i < len; )
1963 if (SYNTAX (p[i]) == Sword) 1964 {
1964 *o++ = p[i]; 1965 int c;
1965 else if (i > 0 && SYNTAX (p[i-1]) == Sword && --word_count) 1966 int i_byte_orig = i_byte;
1966 { 1967
1967 *o++ = '\\'; 1968 if (STRING_MULTIBYTE (string))
1968 *o++ = 'W'; 1969 FETCH_STRING_CHAR_ADVANCE (c, string, i, i_byte);
1969 *o++ = '\\'; 1970 else
1970 *o++ = 'W'; 1971 c = XSTRING (string)->data[i++];
1971 *o++ = '*'; 1972
1972 } 1973 if (SYNTAX (c) == Sword)
1974 {
1975 bcopy (&XSTRING (string)->data[i_byte_orig], o,
1976 i_byte - i_byte_orig);
1977 o += i_byte - i_byte_orig;
1978 }
1979 else if (i > 0 && SYNTAX (prev_c) == Sword && --word_count)
1980 {
1981 *o++ = '\\';
1982 *o++ = 'W';
1983 *o++ = '\\';
1984 *o++ = 'W';
1985 *o++ = '*';
1986 }
1987
1988 prev_c = c;
1989 }
1973 1990
1974 *o++ = '\\'; 1991 *o++ = '\\';
1975 *o++ = 'b'; 1992 *o++ = 'b';