mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-07 15:21:46 +00:00
Fix decoding of emacs-mule coding system.
This commit is contained in:
parent
cf5314c93a
commit
b84ae58433
@ -1,3 +1,19 @@
|
||||
2010-11-25 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* charset.c (emacs_mule_charset): Make it an array of charset ID;
|
||||
i.e. integer.
|
||||
(Fdefine_charset_internal): Adjusted for the above change.
|
||||
(init_charset_once): Likewise.
|
||||
|
||||
* charset.h (emacs_mule_charset): Adjust the prototype. Delete
|
||||
duplicated extern.
|
||||
|
||||
* coding.c (emacs_mule_char): Adjust for the change of
|
||||
emacs_mule_charset.
|
||||
|
||||
* lread.c (read_emacs_mule_char): Adjust for the change of
|
||||
emacs_mule_charset.
|
||||
|
||||
2010-10-18 Ken Brown <kbrown@cornell.edu>
|
||||
|
||||
* s/cygwin.h (SIGNALS_VIA_CHARACTERS): New define (bug#7225).
|
||||
|
@ -115,7 +115,7 @@ Lisp_Object Viso_2022_charset_list;
|
||||
/* List of emacs-mule charsets. */
|
||||
Lisp_Object Vemacs_mule_charset_list;
|
||||
|
||||
struct charset *emacs_mule_charset[256];
|
||||
int emacs_mule_charset[256];
|
||||
|
||||
/* Mapping table from ISO2022's charset (specified by DIMENSION,
|
||||
CHARS, and FINAL-CHAR) to Emacs' charset. */
|
||||
@ -1248,7 +1248,7 @@ usage: (define-charset-internal ...) */)
|
||||
|
||||
if (charset.emacs_mule_id >= 0)
|
||||
{
|
||||
emacs_mule_charset[charset.emacs_mule_id] = CHARSET_FROM_ID (id);
|
||||
emacs_mule_charset[charset.emacs_mule_id] = id;
|
||||
if (charset.emacs_mule_id < 0xA0)
|
||||
emacs_mule_bytes[charset.emacs_mule_id] = charset.dimension + 1;
|
||||
else
|
||||
@ -2405,7 +2405,7 @@ init_charset_once ()
|
||||
iso_charset_table[i][j][k] = -1;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
emacs_mule_charset[i] = NULL;
|
||||
emacs_mule_charset[i] = -1;
|
||||
|
||||
charset_jisx0201_roman = -1;
|
||||
charset_jisx0208_1978 = -1;
|
||||
|
@ -255,7 +255,7 @@ extern Lisp_Object Vcharset_list;
|
||||
extern Lisp_Object Viso_2022_charset_list;
|
||||
extern Lisp_Object Vemacs_mule_charset_list;
|
||||
|
||||
extern struct charset *emacs_mule_charset[256];
|
||||
extern int emacs_mule_charset[256];
|
||||
|
||||
extern Lisp_Object Vcurrent_iso639_language;
|
||||
|
||||
@ -517,8 +517,6 @@ extern int iso_charset_table[ISO_MAX_DIMENSION][ISO_MAX_CHARS][ISO_MAX_FINAL];
|
||||
#define EMACS_MULE_LEADING_CODE_PRIVATE_21 0x9C /* 2/2 */
|
||||
#define EMACS_MULE_LEADING_CODE_PRIVATE_22 0x9D /* 2/2 */
|
||||
|
||||
extern struct charset *emacs_mule_charset[256];
|
||||
|
||||
|
||||
|
||||
extern Lisp_Object Qcharsetp;
|
||||
|
20
src/coding.c
20
src/coding.c
@ -2078,7 +2078,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
|
||||
const unsigned char *src_end = coding->source + coding->src_bytes;
|
||||
const unsigned char *src_base = src;
|
||||
int multibytep = coding->src_multibyte;
|
||||
struct charset *charset;
|
||||
int charset_id;
|
||||
unsigned code;
|
||||
int c;
|
||||
int consumed_chars = 0;
|
||||
@ -2088,7 +2088,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
|
||||
if (c < 0)
|
||||
{
|
||||
c = -c;
|
||||
charset = emacs_mule_charset[0];
|
||||
charset_id = emacs_mule_charset[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2124,7 +2124,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
|
||||
switch (emacs_mule_bytes[c])
|
||||
{
|
||||
case 2:
|
||||
if (! (charset = emacs_mule_charset[c]))
|
||||
if ((charset_id = emacs_mule_charset[c]) < 0)
|
||||
goto invalid_code;
|
||||
ONE_MORE_BYTE (c);
|
||||
if (c < 0xA0)
|
||||
@ -2137,7 +2137,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
|
||||
|| c == EMACS_MULE_LEADING_CODE_PRIVATE_12)
|
||||
{
|
||||
ONE_MORE_BYTE (c);
|
||||
if (c < 0xA0 || ! (charset = emacs_mule_charset[c]))
|
||||
if (c < 0xA0 || (charset_id = emacs_mule_charset[c]) < 0)
|
||||
goto invalid_code;
|
||||
ONE_MORE_BYTE (c);
|
||||
if (c < 0xA0)
|
||||
@ -2146,7 +2146,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! (charset = emacs_mule_charset[c]))
|
||||
if ((charset_id = emacs_mule_charset[c]) < 0)
|
||||
goto invalid_code;
|
||||
ONE_MORE_BYTE (c);
|
||||
if (c < 0xA0)
|
||||
@ -2161,7 +2161,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
|
||||
|
||||
case 4:
|
||||
ONE_MORE_BYTE (c);
|
||||
if (c < 0 || ! (charset = emacs_mule_charset[c]))
|
||||
if (c < 0 || (charset_id = emacs_mule_charset[c]) < 0)
|
||||
goto invalid_code;
|
||||
ONE_MORE_BYTE (c);
|
||||
if (c < 0xA0)
|
||||
@ -2175,21 +2175,21 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
|
||||
|
||||
case 1:
|
||||
code = c;
|
||||
charset = CHARSET_FROM_ID (ASCII_BYTE_P (code)
|
||||
? charset_ascii : charset_eight_bit);
|
||||
charset_id = ASCII_BYTE_P (code) ? charset_ascii : charset_eight_bit;
|
||||
break;
|
||||
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
CODING_DECODE_CHAR (coding, src, src_base, src_end, charset, code, c);
|
||||
CODING_DECODE_CHAR (coding, src, src_base, src_end,
|
||||
CHARSET_FROM_ID (charset_id), code, c);
|
||||
if (c < 0)
|
||||
goto invalid_code;
|
||||
}
|
||||
*nbytes = src - src_base;
|
||||
*nchars = consumed_chars;
|
||||
if (id)
|
||||
*id = charset->id;
|
||||
*id = charset_id;
|
||||
return (mseq_found ? -c : c);
|
||||
|
||||
no_more_source:
|
||||
|
@ -616,7 +616,7 @@ read_emacs_mule_char (c, readbyte, readcharfun)
|
||||
|
||||
if (len == 2)
|
||||
{
|
||||
charset = emacs_mule_charset[buf[0]];
|
||||
charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
|
||||
code = buf[1] & 0x7F;
|
||||
}
|
||||
else if (len == 3)
|
||||
@ -624,18 +624,18 @@ read_emacs_mule_char (c, readbyte, readcharfun)
|
||||
if (buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_11
|
||||
|| buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_12)
|
||||
{
|
||||
charset = emacs_mule_charset[buf[1]];
|
||||
charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
|
||||
code = buf[2] & 0x7F;
|
||||
}
|
||||
else
|
||||
{
|
||||
charset = emacs_mule_charset[buf[0]];
|
||||
charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
|
||||
code = ((buf[1] << 8) | buf[2]) & 0x7F7F;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
charset = emacs_mule_charset[buf[1]];
|
||||
charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
|
||||
code = ((buf[2] << 8) | buf[3]) & 0x7F7F;
|
||||
}
|
||||
c = DECODE_CHAR (charset, code);
|
||||
|
Loading…
Reference in New Issue
Block a user