]> git.eshelyaron.com Git - emacs.git/commitdiff
(char_table_ref_and_index): New function.
authorKenichi Handa <handa@m17n.org>
Thu, 27 Jul 2000 06:02:29 +0000 (06:02 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 27 Jul 2000 06:02:29 +0000 (06:02 +0000)
src/fns.c

index 6106599a6ba4954c3582c63d04096030300c9b75..542a613a4182d40609f6d7a1fd91b69ccc3f975e 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -2427,6 +2427,41 @@ The key is always a possible IDX argument to `aref'.")
   map_char_table (NULL, function, char_table, char_table, 0, indices);
   return Qnil;
 }
+
+/* Return a value for character C in char-table TABLE.  Store the
+   actual index for that value in *IDX.  Ignore the default value of
+   TABLE.  */
+
+Lisp_Object
+char_table_ref_and_index (table, c, idx)
+     Lisp_Object table;
+     int c, *idx;
+{
+  int charset, c1, c2;
+  Lisp_Object elt;
+
+  if (SINGLE_BYTE_CHAR_P (c))
+    {
+      *idx = c;
+      return XCHAR_TABLE (table)->contents[c];
+    }
+  SPLIT_CHAR (c, charset, c1, c2);
+  elt = XCHAR_TABLE (table)->contents[charset + 128];
+  *idx = MAKE_CHAR (charset, 0, 0);
+  if (!SUB_CHAR_TABLE_P (elt))
+    return elt;
+  if (c1 < 32 || NILP (XCHAR_TABLE (elt)->contents[c1]))
+    return XCHAR_TABLE (elt)->defalt;
+  elt = XCHAR_TABLE (elt)->contents[c1];
+  *idx = MAKE_CHAR (charset, c1, 0);
+  if (!SUB_CHAR_TABLE_P (elt))
+    return elt;
+  if (c2 < 32 || NILP (XCHAR_TABLE (elt)->contents[c2]))
+    return XCHAR_TABLE (elt)->defalt;
+  *idx = c;
+  return XCHAR_TABLE (elt)->contents[c2];
+}
+
 \f
 /* ARGSUSED */
 Lisp_Object