changeset 22185:80a2aa51a6e1

Change term "character translation table" to "translation table". (string_to_non_ascii_char): New arg EXCLUDE_TAIL_GARBAGE. Caller changed. (Funibyte_char_to_multibyte): Doc-string fixed. (syms_of_charset): Doc-string fixed.
author Kenichi Handa <handa@m17n.org>
date Fri, 22 May 1998 09:44:27 +0000
parents 003ac1231096
children fc4aaf1b1772
files src/charset.c
diffstat 1 files changed, 22 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/charset.c	Fri May 22 09:44:27 1998 +0000
+++ b/src/charset.c	Fri May 22 09:44:27 1998 +0000
@@ -74,9 +74,9 @@
 /* A list of charset symbols ever defined.  */
 Lisp_Object Vcharset_list;
 
-/* Vector of character translation table ever defined.
-   ID of a character translation table is used to index this vector.  */
-Lisp_Object Vcharacter_translation_table_vector;
+/* Vector of translation table ever defined.
+   ID of a translation table is used to index this vector.  */
+Lisp_Object Vtranslation_table_vector;
 
 /* Tables used by macros BYTES_BY_CHAR_HEAD and WIDTH_BY_CHAR_HEAD.  */
 int bytes_by_char_head[256];
@@ -168,15 +168,18 @@
 
 /* Return a non-ASCII character of which multi-byte form is at STR of
    length LEN.  If ACTUAL_LEN is not NULL, the actual length of the
-   character is set to the address ACTUAL_LEN.
+   multibyte form is set to the address ACTUAL_LEN.
+
+   If exclude_tail_garbage is nonzero, ACTUAL_LEN excludes gabage
+   bytes following the non-ASCII character.
 
    Use macro `STRING_CHAR (STR, LEN)' instead of calling this function
    directly if STR can hold an ASCII character.  */
 
 int
-string_to_non_ascii_char (str, len, actual_len)
+string_to_non_ascii_char (str, len, actual_len, exclude_tail_garbage)
      const unsigned char *str;
-     int len, *actual_len;
+     int len, *actual_len, exclude_tail_garbage;
 {
   int charset;
   unsigned char c1, c2;
@@ -195,20 +198,25 @@
 
 	  if (cmpchar_id >= 0)
 	    c = MAKE_COMPOSITE_CHAR (cmpchar_id);
+	  if (exclude_tail_garbage)
+	    bytes = cmpchar_table[cmpchar_id]->len;
 	}
       else
 	{
 	  int charset = c, c1, c2 = 0;
+	  int char_bytes = BYTES_BY_CHAR_HEAD (c);
 
 	  str++;
 	  if (c >= LEADING_CODE_PRIVATE_11)
 	    charset = *str++;
-	  if (BYTES_BY_CHAR_HEAD (c) <= bytes && CHARSET_DEFINED_P (charset))
+	  if (char_bytes <= bytes && CHARSET_DEFINED_P (charset))
 	    {
 	      c1 = *str++ & 0x7f;
 	      if (CHARSET_DIMENSION (charset) == 2)
 		c2 = *str & 0x7F;
 	      c = MAKE_NON_ASCII_CHAR (charset, c1, c2);
+	      if (exclude_tail_garbage)
+		bytes = char_bytes;
 	    }
 	}
     }
@@ -273,7 +281,7 @@
   return 0;
 }
 
-/* Translate character C by character translation table TABLE.  If C
+/* Translate character C by translation table TABLE.  If C
    is negative, translate a character specified by CHARSET, C1, and C2
    (C1 and C2 are code points of the character).  If no translation is
    found in TABLE, return C.  */
@@ -923,7 +931,7 @@
 DEFUN ("unibyte-char-to-multibyte", Funibyte_char_to_multibyte,
        Sunibyte_char_to_multibyte, 1, 1, 0,
   "Convert the unibyte character CH to multibyte character.\n\
-The conversion is done based on `nonascii-translate-table' (which see)\n\
+The conversion is done based on `nonascii-translation-table' (which see)\n\
  or `nonascii-insert-offset' (which see).")
   (ch)
      Lisp_Object ch;
@@ -1401,7 +1409,7 @@
 	    /* Make `bufp' point normal multi-byte form temporally.  */
 	    *bufp -= 0x20;
 	    cmpcharp->glyph[i]
-	      = FAST_MAKE_GLYPH (string_to_non_ascii_char (bufp, 4, 0), 0);
+	      = FAST_MAKE_GLYPH (string_to_non_ascii_char (bufp, 4, 0, 0), 0);
 	    width = WIDTH_BY_CHAR_HEAD (*bufp);
 	    *bufp += 0x20;
 	    bufp += BYTES_BY_CHAR_HEAD (*bufp - 0x20);
@@ -1761,11 +1769,10 @@
     "List of charsets ever defined.");
   Vcharset_list = Fcons (Qascii, Qnil);
 
-  DEFVAR_LISP ("character-translation-table-vector",
-	       &Vcharacter_translation_table_vector,
+  DEFVAR_LISP ("translation-table-vector",  &Vtranslation_table_vector,
     "Vector of cons cell of a symbol and translation table ever defined.\n\
 An ID of a translation table is an index of this vector.");
-  Vcharacter_translation_table_vector = Fmake_vector (make_number (16), Qnil);
+  Vtranslation_table_vector = Fmake_vector (make_number (16), Qnil);
 
   DEFVAR_INT ("leading-code-composition", &leading_code_composition,
     "Leading-code of composite characters.");
@@ -1795,11 +1802,11 @@
 to the corresponding Emacs multibyte character code.\n\
 Typically the value should be (- (make-char CHARSET 0) 128),\n\
 for your choice of character set.\n\
-If `nonascii-translate-table' is non-nil, it overrides this variable.");
+If `nonascii-translation-table' is non-nil, it overrides this variable.");
   nonascii_insert_offset = 0;
 
   DEFVAR_LISP ("nonascii-translation-table", &Vnonascii_translation_table,
-    "Character translation table to convert non-ASCII unibyte codes to multibyte.\n\
+    "Translation table to convert non-ASCII unibyte codes to multibyte.\n\
 This is used for converting unibyte text to multibyte,\n\
 and for inserting character codes specified by number.\n\n\
 Conversion is performed only when multibyte characters are enabled,\n\