diff options
| author | Richard M. Stallman | 1998-01-05 17:15:53 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1998-01-05 17:15:53 +0000 |
| commit | 43d27a7200666ad48dc94c98647e945e9900c6c4 (patch) | |
| tree | 6bb180d9a74ad0068c19ad1a5e8a1a810692954a /src/buffer.c | |
| parent | 82d6226f4e92fb6635ca19a6f4667340dadcdb0f (diff) | |
| download | emacs-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.c | 45 |
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) |