Commit 16ef9c56 authored by Kenichi Handa's avatar Kenichi Handa

(code_convert_region_unwind): ARG is changed to a cons.

(code_convert_region): Adjusted for the above change.
(set_conversion_work_buffer): If the work buffer is already in
use, generate a new buffer and return it.  Otherwise return Qnil.
(run_pre_post_conversion_on_str): Adjusted for the above change.
(run_pre_write_conversin_on_c_str): Likewise.
parent ead25b5c
2005-07-14 Kenichi Handa <handa@m17n.org>
* coding.c (code_convert_region_unwind): ARG is changed to a cons.
(code_convert_region): Adjusted for the above change.
(set_conversion_work_buffer): If the work buffer is already in
use, generate a new buffer and return it. Otherwise return Qnil.
(run_pre_post_conversion_on_str): Adjusted for the above change.
(run_pre_write_conversin_on_c_str): Likewise.
2005-07-13 Kim F. Storm <storm@cua.dk>
* xdisp.c (start_display): Don't reseat to next visible line start
......
......@@ -5353,12 +5353,17 @@ static int shrink_conversion_region_threshhold = 1024;
} \
} while (0)
/* ARG is (CODING . BUFFER) where CODING is what to be set in
Vlast_coding_system_used and BUFFER if non-nil is a buffer to
kill. */
static Lisp_Object
code_convert_region_unwind (arg)
Lisp_Object arg;
{
inhibit_pre_post_conversion = 0;
Vlast_coding_system_used = arg;
Vlast_coding_system_used = XCAR (arg);
if (! NILP (XCDR (arg)))
Fkill_buffer (XCDR (arg));
return Qnil;
}
......@@ -5611,7 +5616,7 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace)
Lisp_Object new;
record_unwind_protect (code_convert_region_unwind,
Vlast_coding_system_used);
Fcons (Vlast_coding_system_used, Qnil));
/* We should not call any more pre-write/post-read-conversion
functions while this pre-write-conversion is running. */
inhibit_pre_post_conversion = 1;
......@@ -5979,7 +5984,7 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace)
TEMP_SET_PT_BOTH (from, from_byte);
prev_Z = Z;
record_unwind_protect (code_convert_region_unwind,
Vlast_coding_system_used);
Fcons (Vlast_coding_system_used, Qnil));
saved_coding_system = Vlast_coding_system_used;
Vlast_coding_system_used = coding->symbol;
/* We should not call any more pre-write/post-read-conversion
......@@ -6025,17 +6030,31 @@ static Lisp_Object Vcode_conversion_workbuf_name;
/* Set the current buffer to the working buffer prepared for
code-conversion. MULTIBYTE specifies the multibyteness of the
buffer. */
buffer. Return the buffer we set if it must be killed after use.
Otherwise return Qnil. */
static struct buffer *
static Lisp_Object
set_conversion_work_buffer (multibyte)
int multibyte;
{
Lisp_Object buffer;
Lisp_Object buffer, buffer_to_kill;
struct buffer *buf;
buffer = Fget_buffer_create (Vcode_conversion_workbuf_name);
buf = XBUFFER (buffer);
if (buf == current_buffer)
{
/* As we are already in the work buffer, we must generate a new
buffer for the work. */
Lisp_Object name;
name = Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil);
buffer = buffer_to_kill = Fget_buffer_create (name);
buf = XBUFFER (buffer);
}
else
buffer_to_kill = Qnil;
delete_all_overlays (buf);
buf->directory = current_buffer->directory;
buf->read_only = Qnil;
......@@ -6048,7 +6067,7 @@ set_conversion_work_buffer (multibyte)
Fwiden ();
del_range_2 (BEG, BEG_BYTE, Z, Z_BYTE, 0);
buf->enable_multibyte_characters = multibyte ? Qt : Qnil;
return buf;
return buffer_to_kill;
}
Lisp_Object
......@@ -6061,10 +6080,9 @@ run_pre_post_conversion_on_str (str, coding, encodep)
struct gcpro gcpro1, gcpro2;
int multibyte = STRING_MULTIBYTE (str);
Lisp_Object old_deactivate_mark;
Lisp_Object buffer_to_kill;
record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
record_unwind_protect (code_convert_region_unwind,
Vlast_coding_system_used);
/* It is not crucial to specbind this. */
old_deactivate_mark = Vdeactivate_mark;
GCPRO2 (str, old_deactivate_mark);
......@@ -6072,7 +6090,9 @@ run_pre_post_conversion_on_str (str, coding, encodep)
/* We must insert the contents of STR as is without
unibyte<->multibyte conversion. For that, we adjust the
multibyteness of the working buffer to that of STR. */
set_conversion_work_buffer (multibyte);
buffer_to_kill = set_conversion_work_buffer (multibyte);
record_unwind_protect (code_convert_region_unwind,
Fcons (Vlast_coding_system_used, buffer_to_kill));
insert_from_string (str, 0, 0,
SCHARS (str), SBYTES (str), 0);
......@@ -6115,6 +6135,7 @@ run_pre_write_conversin_on_c_str (str, size, nchars, nbytes, coding)
struct buffer *cur = current_buffer;
Lisp_Object old_deactivate_mark, old_last_coding_system_used;
Lisp_Object args[3];
Lisp_Object buffer_to_kill;
/* It is not crucial to specbind this. */
old_deactivate_mark = Vdeactivate_mark;
......@@ -6124,7 +6145,7 @@ run_pre_write_conversin_on_c_str (str, size, nchars, nbytes, coding)
/* We must insert the contents of STR as is without
unibyte<->multibyte conversion. For that, we adjust the
multibyteness of the working buffer to that of STR. */
set_conversion_work_buffer (coding->src_multibyte);
buffer_to_kill = set_conversion_work_buffer (coding->src_multibyte);
insert_1_both (*str, nchars, nbytes, 0, 0, 0);
UNGCPRO;
inhibit_pre_post_conversion = 1;
......@@ -6148,6 +6169,8 @@ run_pre_write_conversin_on_c_str (str, size, nchars, nbytes, coding)
coding->src_multibyte
= ! NILP (current_buffer->enable_multibyte_characters);
set_buffer_internal (cur);
if (! NILP (buffer_to_kill))
Fkill_buffer (buffer_to_kill);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment