update.
[chise/xemacs-chise.git.1] / src / chartab.h
index 8fa102b..a0c5bd6 100644 (file)
@@ -1,7 +1,8 @@
 /* Declarations having to do with Mule char tables.
    Copyright (C) 1992 Free Software Foundation, Inc.
    Copyright (C) 1995 Sun Microsystems, Inc.
-   Copyright (C) 1999,2000,2001,2002 MORIOKA Tomohiko
+   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2010, 2013, 2016
+     MORIOKA Tomohiko
 
 This file is part of XEmacs.
 
@@ -31,19 +32,43 @@ Boston, MA 02111-1307, USA.  */
 
 #ifdef UTF2000
 
-#ifdef HAVE_CHISE_CLIENT
-#include "database.h"
+#ifdef HAVE_CHISE
+#  ifdef HAVE_LIBCHISE
+#    include <chise.h>
+#  else /* HAVE_LIBCHISE */
+#    include "database.h"
+#  endif /* not HAVE_LIBCHISE */
+#  define USE_CONCORD_OBJECT_SYSTEM 1
+#  define USE_CONCORD_OBJECT_SYSTEM_TO_COMPOSE 1
 #endif
 
 EXFUN (Fmake_char, 3);
-EXFUN (Fdecode_char, 3);
+EXFUN (Fdecode_char, 4);
 
 EXFUN (Fput_char_attribute, 3);
 
+EXFUN (Fdefine_char, 1);
+
 EXFUN (Ffind_char, 1);
 
 extern Lisp_Object Qdowncase, Qflippedcase, Q_lowercase, Q_uppercase;
 
+#ifdef HAVE_LIBCHISE
+extern CHISE_DS *default_chise_data_source;
+
+int open_chise_data_source_maybe (void);
+#endif
+
+#if defined(UTF2000) || defined(HAVE_CONCORD)
+extern Lisp_Object Q_denotational;
+extern Lisp_Object Q_denotational_from;
+extern Lisp_Object Q_subsumptive;
+extern Lisp_Object Q_subsumptive_from;
+#endif
+
+#ifdef HAVE_CONCORD
+extern Lisp_Object Vchise_system_db_directory;
+#endif
 
 /************************************************************************/
 /*                         Char-ID Tables                              */
@@ -170,7 +195,9 @@ struct Lisp_Char_Table
   Lisp_Object table;
   Lisp_Object default_value;
   Lisp_Object name;
+#ifndef HAVE_LIBCHISE
   Lisp_Object db;
+#endif
   unsigned char unloaded;
 #else
   Lisp_Object ascii[NUM_ASCII_CHARS];
@@ -349,15 +376,21 @@ put_char_id_table_0 (Lisp_Char_Table* cit, Emchar code, Lisp_Object value)
   cit->table = put_byte_table (table1, (unsigned char)(code >> 24), table2);
 }
 
-#ifdef HAVE_CHISE_CLIENT
+#ifdef HAVE_CHISE
+Lisp_Object load_char_attribute_maybe (Lisp_Char_Table* cit, Emchar ch);
+
+#ifdef USE_CONCORD_OBJECT_SYSTEM
+COS_object load_char_attribute_maybe_cos (Lisp_Char_Table* cit, Emchar ch);
+#endif
+
+#ifndef HAVE_LIBCHISE
 extern Lisp_Object Qsystem_char_id;
 
 Lisp_Object
 char_attribute_system_db_file (Lisp_Object key_type, Lisp_Object attribute,
                               int writing_mode);
-
-Lisp_Object load_char_attribute_maybe (Lisp_Char_Table* cit, Emchar ch);
-#endif
+#endif /* not HAVE_LIBCHISE */
+#endif /* HAVE_CHISE */
 
 INLINE_HEADER Lisp_Object
 get_char_id_table_0 (Lisp_Char_Table* cit, Emchar ch);
@@ -381,18 +414,47 @@ get_char_id_table (Lisp_Char_Table* cit, Emchar ch)
 {
   Lisp_Object val = get_char_id_table_0 (cit, ch);
 
-#ifdef HAVE_CHISE_CLIENT
+#ifdef HAVE_CHISE
   if (EQ (val, Qunloaded))
     {
       val = load_char_attribute_maybe (cit, ch);
       put_char_id_table_0 (cit, ch, val);
     }
+#endif /* HAVE_CHISE */
+  if (UNBOUNDP (val))
+    return cit->default_value;
+  else
+    return val;
+}
+
+#ifdef USE_CONCORD_OBJECT_SYSTEM
+INLINE_HEADER Lisp_Object
+get_char_id_table_ce (Lisp_Char_Table* cit, Emchar ch);
+INLINE_HEADER Lisp_Object
+get_char_id_table_ce (Lisp_Char_Table* cit, Emchar ch)
+{
+  Lisp_Object val = get_char_id_table_0 (cit, ch);
+
+  if (EQ (val, Qunloaded))
+    {
+#if 0
+      val = load_char_attribute_maybe (cit, ch);
+#else
+      COS_object ret = load_char_attribute_maybe_cos (cit, ch);
+      if ( ret == NULL )
+       return cit->default_value;
+      else
+       return ret;
 #endif
+    }
   if (UNBOUNDP (val))
     return cit->default_value;
   else
     return val;
 }
+#else
+#define get_char_id_table_ce(cit, ch) get_char_id_table(cit, ch)
+#endif
 
 void
 decode_char_table_range (Lisp_Object range, struct chartab_range *outrange);
@@ -412,6 +474,7 @@ put_char_id_table (Lisp_Char_Table* table,
 
 
 EXFUN (Fget_char_attribute, 3);
+EXFUN (Fchar_feature, 5);
 
 #endif
 \f