Mercurial > emacs
changeset 30352:63f82aef9860
(lisp_data_to_selection_data): Use x_encode_text.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Fri, 21 Jul 2000 02:07:14 +0000 |
parents | a67fcab978bb |
children | ff13c4812848 |
files | src/xselect.c |
diffstat | 1 files changed, 13 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xselect.c Fri Jul 21 02:06:49 2000 +0000 +++ b/src/xselect.c Fri Jul 21 02:07:14 2000 +0000 @@ -1648,56 +1648,21 @@ { /* Since we are now handling multilingual text, we must consider sending back compound text. */ - unsigned char *ptr = XSTRING (obj)->data; - int nbytes = STRING_BYTES (XSTRING (obj)); - int charset_info = find_charset_in_text (ptr, XSTRING (obj)->size, - nbytes, NULL, Qnil); - *format_ret = 8; + int latin1_p; - if (charset_info == 0) - { - /* No multibyte character in OBJ. We need not encode it. */ - *size_ret = nbytes; - *data_ret = ptr; - *nofree_ret = 1; - if (NILP (type)) type = QSTRING; - Vlast_coding_system_used = Qraw_text; - } - else - { - /* We must encode contents of OBJ to compound text format. - The format is compatible with what the target `STRING' - expects if OBJ contains only ASCII and Latin-1 - characters. */ - int bufsize; - unsigned char *buf; - struct coding_system coding; + if (NILP (Vnext_selection_coding_system)) + Vnext_selection_coding_system = Vselection_coding_system; - if (NILP (Vnext_selection_coding_system)) - Vnext_selection_coding_system = Vselection_coding_system; - setup_coding_system - (Fcheck_coding_system (Vnext_selection_coding_system), &coding); - coding.src_multibyte = 1; - coding.dst_multibyte = 0; - Vnext_selection_coding_system = Qnil; - coding.mode |= CODING_MODE_LAST_BLOCK; - bufsize = encoding_buffer_size (&coding, nbytes); - buf = (unsigned char *) xmalloc (bufsize); - encode_coding (&coding, ptr, buf, nbytes, bufsize); - *size_ret = coding.produced; - *data_ret = buf; - if (charset_info == 1) - { - /* Ok, we can return it as `STRING'. */ - if (NILP (type)) type = QSTRING; - } - else - { - /* We must return it as `COMPOUND_TEXT'. */ - if (NILP (type)) type = QCOMPOUND_TEXT; - } - Vlast_coding_system_used = coding.symbol; - } + *format_ret = 8; + *data_ret = x_encode_text (obj, Vnext_selection_coding_system, + (int *) size_ret, &latin1_p); + *nofree_ret = (*data_ret == XSTRING (obj)->data); + if (NILP (type)) + type = (latin1_p ? QSTRING : QCOMPOUND_TEXT); + Vlast_coding_system_used = (*nofree_ret + ? Qraw_text + : Vnext_selection_coding_system); + Vnext_selection_coding_system = Qnil; } else if (SYMBOLP (obj)) {