summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2009-07-07 01:41:29 +0000
committerKenichi Handa <handa@m17n.org>2009-07-07 01:41:29 +0000
commite2a70cbe701b43c16c731d3f2df69dc5c4bfa59c (patch)
tree8616f5548799862ef9249e24acee527b1d2a95b8
parentcab7a8e29062c9682caeecc875216431785e79dd (diff)
downloademacs-e2a70cbe701b43c16c731d3f2df69dc5c4bfa59c.tar.gz
(unibyte_has_multibyte_table): Delete it.
(charset_unibyte_decoder): New variable. (multibyte_char_to_unibyte): Use CHAR_TO_BYTE8 instead of checking charset_unibyte. (multibyte_char_to_unibyte_safe): Likewise. (Funibyte_char_to_multibyte): Don't check charset_unibyte.
-rw-r--r--src/character.c35
1 files changed, 13 insertions, 22 deletions
diff --git a/src/character.c b/src/character.c
index 50ca6521262..d230d5f36b1 100644
--- a/src/character.c
+++ b/src/character.c
@@ -90,9 +90,9 @@ Lisp_Object Vunicode_category_table;
/* Mapping table from unibyte chars to multibyte chars. */
int unibyte_to_multibyte_table[256];
-/* Nth element is 1 iff unibyte char N can be mapped to a multibyte
- char. */
-char unibyte_has_multibyte_table[256];
+/* Decoding table for 8-bit byte codes of the charset charset_unibyte.
+ Nth element is for the code (N-0x80). */
+int charset_unibyte_decoder[128];
@@ -270,9 +270,8 @@ translate_char (table, c)
return c;
}
-/* Convert the multibyte character C to unibyte 8-bit character based
- on the current value of charset_unibyte. If dimension of
- charset_unibyte is more than one, return (C & 0xFF).
+/* Convert ASCII or 8-bit character C to unibyte. If C is none of
+ them, return (C & 0xFF).
The argument REV_TBL is now ignored. It will be removed in the
future. */
@@ -282,14 +281,11 @@ multibyte_char_to_unibyte (c, rev_tbl)
int c;
Lisp_Object rev_tbl;
{
- struct charset *charset;
- unsigned c1;
-
+ if (c < 0x80)
+ return c;
if (CHAR_BYTE8_P (c))
return CHAR_TO_BYTE8 (c);
- charset = CHARSET_FROM_ID (charset_unibyte);
- c1 = ENCODE_CHAR (charset, c);
- return ((c1 != CHARSET_INVALID_CODE (charset)) ? c1 : c & 0xFF);
+ return (c & 0xFF);
}
/* Like multibyte_char_to_unibyte, but return -1 if C is not supported
@@ -299,14 +295,11 @@ int
multibyte_char_to_unibyte_safe (c)
int c;
{
- struct charset *charset;
- unsigned c1;
-
+ if (c < 0x80)
+ return c;
if (CHAR_BYTE8_P (c))
return CHAR_TO_BYTE8 (c);
- charset = CHARSET_FROM_ID (charset_unibyte);
- c1 = ENCODE_CHAR (charset, c);
- return ((c1 != CHARSET_INVALID_CODE (charset)) ? c1 : -1);
+ return -1;
}
DEFUN ("characterp", Fcharacterp, Scharacterp, 1, 2, 0,
@@ -337,10 +330,8 @@ DEFUN ("unibyte-char-to-multibyte", Funibyte_char_to_multibyte,
c = XFASTINT (ch);
if (c >= 0400)
error ("Invalid unibyte character: %d", c);
- charset = CHARSET_FROM_ID (charset_unibyte);
- c = DECODE_CHAR (charset, c);
- if (c < 0)
- c = BYTE8_TO_CHAR (XFASTINT (ch));
+ if (c >= 0x80)
+ c = BYTE8_TO_CHAR (c);
return make_number (c);
}