aboutsummaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
authorRichard M. Stallman1998-01-05 17:15:53 +0000
committerRichard M. Stallman1998-01-05 17:15:53 +0000
commit43d27a7200666ad48dc94c98647e945e9900c6c4 (patch)
tree6bb180d9a74ad0068c19ad1a5e8a1a810692954a /src/buffer.c
parent82d6226f4e92fb6635ca19a6f4667340dadcdb0f (diff)
downloademacs-43d27a7200666ad48dc94c98647e945e9900c6c4.tar.gz
emacs-43d27a7200666ad48dc94c98647e945e9900c6c4.zip
(record_overlay_string): Totalize sizes assuming
strings are converted to match buffer in multibyteness. (overlay_strings): Convert strings to match buffer in multibyteness.
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c45
1 files changed, 37 insertions, 8 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 27e3cc0c44b..dd5026cf6e4 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2186,6 +2186,8 @@ record_overlay_string (ssl, str, str2, pri, size)
2186 Lisp_Object str, str2, pri; 2186 Lisp_Object str, str2, pri;
2187 int size; 2187 int size;
2188{ 2188{
2189 int nbytes;
2190
2189 if (ssl->used == ssl->size) 2191 if (ssl->used == ssl->size)
2190 { 2192 {
2191 if (ssl->buf) 2193 if (ssl->buf)
@@ -2200,9 +2202,29 @@ record_overlay_string (ssl, str, str2, pri, size)
2200 ssl->buf[ssl->used].size = size; 2202 ssl->buf[ssl->used].size = size;
2201 ssl->buf[ssl->used].priority = (INTEGERP (pri) ? XINT (pri) : 0); 2203 ssl->buf[ssl->used].priority = (INTEGERP (pri) ? XINT (pri) : 0);
2202 ssl->used++; 2204 ssl->used++;
2203 ssl->bytes += XSTRING (str)->size; 2205
2206 if (NILP (current_buffer->enable_multibyte_characters))
2207 nbytes = XSTRING (str)->size;
2208 else if (! STRING_MULTIBYTE (str))
2209 nbytes = count_size_as_multibyte (XSTRING (str)->data,
2210 XSTRING (str)->size_byte);
2211 else
2212 nbytes = XSTRING (str)->size_byte;
2213
2214 ssl->bytes += nbytes;
2215
2204 if (STRINGP (str2)) 2216 if (STRINGP (str2))
2205 ssl->bytes += XSTRING (str2)->size; 2217 {
2218 if (NILP (current_buffer->enable_multibyte_characters))
2219 nbytes = XSTRING (str2)->size;
2220 else if (! STRING_MULTIBYTE (str2))
2221 nbytes = count_size_as_multibyte (XSTRING (str2)->data,
2222 XSTRING (str2)->size_byte);
2223 else
2224 nbytes = XSTRING (str2)->size_byte;
2225
2226 ssl->bytes += nbytes;
2227 }
2206} 2228}
2207 2229
2208/* Return the concatenation of the strings associated with overlays that 2230/* Return the concatenation of the strings associated with overlays that
@@ -2225,6 +2247,7 @@ overlay_strings (pos, w, pstr)
2225{ 2247{
2226 Lisp_Object ov, overlay, window, str; 2248 Lisp_Object ov, overlay, window, str;
2227 int startpos, endpos; 2249 int startpos, endpos;
2250 int multibyte = ! NILP (current_buffer->enable_multibyte_characters);
2228 2251
2229 overlay_heads.used = overlay_heads.bytes = 0; 2252 overlay_heads.used = overlay_heads.bytes = 0;
2230 overlay_tails.used = overlay_tails.bytes = 0; 2253 overlay_tails.used = overlay_tails.bytes = 0;
@@ -2308,20 +2331,26 @@ overlay_strings (pos, w, pstr)
2308 p = overlay_str_buf; 2331 p = overlay_str_buf;
2309 for (i = overlay_tails.used; --i >= 0;) 2332 for (i = overlay_tails.used; --i >= 0;)
2310 { 2333 {
2334 int nbytes;
2311 tem = overlay_tails.buf[i].string; 2335 tem = overlay_tails.buf[i].string;
2312 bcopy (XSTRING (tem)->data, p, XSTRING (tem)->size); 2336 nbytes = copy_text (XSTRING (tem)->data, p, XSTRING (tem)->size_byte,
2313 p += XSTRING (tem)->size; 2337 STRING_MULTIBYTE (tem), multibyte);
2338 p += nbytes;
2314 } 2339 }
2315 for (i = 0; i < overlay_heads.used; ++i) 2340 for (i = 0; i < overlay_heads.used; ++i)
2316 { 2341 {
2342 int nbytes;
2317 tem = overlay_heads.buf[i].string; 2343 tem = overlay_heads.buf[i].string;
2318 bcopy (XSTRING (tem)->data, p, XSTRING (tem)->size); 2344 nbytes = copy_text (XSTRING (tem)->data, p, XSTRING (tem)->size_byte,
2319 p += XSTRING (tem)->size; 2345 STRING_MULTIBYTE (tem), multibyte);
2346 p += nbytes;
2320 tem = overlay_heads.buf[i].string2; 2347 tem = overlay_heads.buf[i].string2;
2321 if (STRINGP (tem)) 2348 if (STRINGP (tem))
2322 { 2349 {
2323 bcopy (XSTRING (tem)->data, p, XSTRING (tem)->size); 2350 nbytes = copy_text (XSTRING (tem)->data, p,
2324 p += XSTRING (tem)->size; 2351 XSTRING (tem)->size_byte,
2352 STRING_MULTIBYTE (tem), multibyte);
2353 p += nbytes;
2325 } 2354 }
2326 } 2355 }
2327 if (p != overlay_str_buf + total) 2356 if (p != overlay_str_buf + total)