1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-20 20:50:53 -08:00

Merged in changes from CVS trunk.

Patches applied:

 * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-714
   Update from CVS

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-271
This commit is contained in:
Karoly Lorentey 2004-12-08 22:20:27 +00:00
commit fad2f68580
200 changed files with 25780 additions and 10574 deletions

View file

@ -6004,6 +6004,37 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace)
return 0;
}
/* Name (or base name) of work buffer for code conversion. */
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. */
static struct buffer *
set_conversion_work_buffer (multibyte)
int multibyte;
{
Lisp_Object buffer;
struct buffer *buf;
buffer = Fget_buffer_create (Vcode_conversion_workbuf_name);
buf = XBUFFER (buffer);
delete_all_overlays (buf);
buf->directory = current_buffer->directory;
buf->read_only = Qnil;
buf->filename = Qnil;
buf->undo_list = Qt;
eassert (buf->overlays_before == NULL);
eassert (buf->overlays_after == NULL);
set_buffer_internal (buf);
if (BEG != BEGV || Z != ZV)
Fwiden ();
del_range_2 (BEG, BEG_BYTE, Z, Z_BYTE, 0);
buf->enable_multibyte_characters = multibyte ? Qt : Qnil;
return buf;
}
Lisp_Object
run_pre_post_conversion_on_str (str, coding, encodep)
Lisp_Object str;
@ -6013,7 +6044,6 @@ run_pre_post_conversion_on_str (str, coding, encodep)
int count = SPECPDL_INDEX ();
struct gcpro gcpro1, gcpro2;
int multibyte = STRING_MULTIBYTE (str);
Lisp_Object buffer;
struct buffer *buf;
Lisp_Object old_deactivate_mark;
@ -6024,23 +6054,10 @@ run_pre_post_conversion_on_str (str, coding, encodep)
old_deactivate_mark = Vdeactivate_mark;
GCPRO2 (str, old_deactivate_mark);
buffer = Fget_buffer_create (build_string (" *code-converting-work*"));
buf = XBUFFER (buffer);
delete_all_overlays (buf);
buf->directory = current_buffer->directory;
buf->read_only = Qnil;
buf->filename = Qnil;
buf->undo_list = Qt;
eassert (buf->overlays_before == NULL);
eassert (buf->overlays_after == NULL);
set_buffer_internal (buf);
/* 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. */
Ferase_buffer ();
buf->enable_multibyte_characters = multibyte ? Qt : Qnil;
set_conversion_work_buffer (multibyte);
insert_from_string (str, 0, 0,
SCHARS (str), SBYTES (str), 0);
@ -6061,6 +6078,64 @@ run_pre_post_conversion_on_str (str, coding, encodep)
return unbind_to (count, str);
}
/* Run pre-write-conversion function of CODING on NCHARS/NBYTES
text in *STR. *SIZE is the allocated bytes for STR. As it
is intended that this function is called from encode_terminal_code,
the pre-write-conversion function is run by safe_call and thus
"Error during redisplay: ..." is logged when an error occurs.
Store the resulting text in *STR and set CODING->produced_char and
CODING->produced to the number of characters and bytes
respectively. If the size of *STR is too small, enlarge it by
xrealloc and update *STR and *SIZE. */
void
run_pre_write_conversin_on_c_str (str, size, nchars, nbytes, coding)
unsigned char **str;
int *size, nchars, nbytes;
struct coding_system *coding;
{
struct gcpro gcpro1, gcpro2;
struct buffer *cur = current_buffer;
Lisp_Object old_deactivate_mark, old_last_coding_system_used;
Lisp_Object args[3];
/* It is not crucial to specbind this. */
old_deactivate_mark = Vdeactivate_mark;
old_last_coding_system_used = Vlast_coding_system_used;
GCPRO2 (old_deactivate_mark, old_last_coding_system_used);
/* 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);
insert_1_both (*str, nchars, nbytes, 0, 0, 0);
UNGCPRO;
inhibit_pre_post_conversion = 1;
args[0] = coding->pre_write_conversion;
args[1] = make_number (BEG);
args[2] = make_number (Z);
safe_call (3, args);
inhibit_pre_post_conversion = 0;
Vdeactivate_mark = old_deactivate_mark;
Vlast_coding_system_used = old_last_coding_system_used;
coding->produced_char = Z - BEG;
coding->produced = Z_BYTE - BEG_BYTE;
if (coding->produced > *size)
{
*size = coding->produced;
*str = xrealloc (*str, *size);
}
if (BEG < GPT && GPT < Z)
move_gap (BEG);
bcopy (BEG_ADDR, *str, coding->produced);
coding->src_multibyte
= ! NILP (current_buffer->enable_multibyte_characters);
set_buffer_internal (cur);
}
Lisp_Object
decode_coding_string (str, coding, nocopy)
Lisp_Object str;
@ -7539,6 +7614,9 @@ init_coding_once ()
void
syms_of_coding ()
{
staticpro (&Vcode_conversion_workbuf_name);
Vcode_conversion_workbuf_name = build_string (" *code-conversion-work*");
Qtarget_idx = intern ("target-idx");
staticpro (&Qtarget_idx);