Sync up with r21-4-15-chise-0_21-30-ccs-props. r21-4-15-u2km-0_21-30-ccs-props
authortomo <tomo>
Sun, 25 Jul 2004 00:51:00 +0000 (00:51 +0000)
committertomo <tomo>
Sun, 25 Jul 2004 00:51:00 +0000 (00:51 +0000)
ChangeLog
Makefile.in.in
lisp/ChangeLog
lisp/mule/mule-conf.el
lisp/utf-2000/ChangeLog
lisp/utf-2000/update-cdb.el
src/ChangeLog
src/chartab.c
src/mule-charset.c

index efffe4c..bf896a1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-07-20  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+       * Makefile.in.in (COPYDIR): Delete ${srcdir}/lib-src/chise-db.
+       (COPYDESTS): Delete ${archlibdir}/chise-db.
+       - Use ${etcdir}/chise-db instead of ${archlibdir}/char-db as the
+         target to create symbolic link for chise-db-directory.
+
 2003-10-12  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
 
        * Makefile.in.in: Use chise-db/ instead of char-db/.
index dfc5bc5..fbd73f9 100644 (file)
@@ -241,8 +241,8 @@ INSTALL_ARCH_DEP_SUBDIR = @INSTALL_ARCH_DEP_SUBDIR@
 ## avoid nuking an existing dir file, so we don't do that here;
 ## instead, we have written out explicit code in the `install' targets.
 #ifdef HAVE_CHISE
-COPYDIR = ${srcdir}/etc ${srcdir}/lisp ${srcdir}/lib-src/chise-db
-COPYDESTS = ${etcdir} ${lispdir} ${archlibdir}/chise-db
+COPYDIR = ${srcdir}/etc ${srcdir}/lisp
+COPYDESTS = ${etcdir} ${lispdir}
 #else
 COPYDIR = ${srcdir}/etc ${srcdir}/lisp
 COPYDESTS = ${etcdir} ${lispdir}
@@ -518,7 +518,7 @@ install-arch-indep: mkdir info
            chmod 0644 ${mandir}/$${page}${manext} ; \
          done
 #ifdef HAVE_LIBCHISE
-       ${LN_S} ${archlibdir}/chise-db `${blddir}/src/${PROGNAME} -batch -vanilla -eval "\
+       ${LN_S} ${etcdir}/chise-db `${blddir}/src/${PROGNAME} -batch -vanilla -eval "\
 (let ((path (expand-file-name \"db\" chise-db-directory)))\
   (if (file-exists-p chise-db-directory)\
       (if (file-exists-p path)\
index 30e35ef..3a85bc8 100644 (file)
@@ -1,3 +1,39 @@
+2004-07-23  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+       * mule/mule-conf.el (=big5-cdp): Swap DOC-string and long-name.
+       (=gt): Likewise.
+       (=gt-k): Likewise.
+       (=gt-pj-*): Likewise.
+       (=gt-pj-k1): Likewise.
+       (=gt-pj-k2): Likewise.
+       (=daikanwa): Likewise.
+       (=daikanwa-rev1): Likewise.
+       (=daikanwa-rev2): Likewise.
+       (=big5-pua): Likewise.
+       (=big5-eten): Likewise.
+       (chinese-big5-eten-a): Likewise.
+       (chinese-big5-eten-b): Likewise.
+       (=hanziku-*): Likewise.
+       (=cbeta): Likewise.
+       (=jef-china3): Likewise.
+       (=ruimoku-v6): Likewise.
+       (=ucs@iso): Likewise.
+       (=ucs@unicode): Likewise.
+       (=ucs@gb): Likewise.
+       (=ucs@cns): Likewise.
+       (=ucs@jis): Likewise.
+       (=ucs@jis-1990): Likewise.
+       (=ucs@jis-2000): Likewise.
+       (=ucs@jp): Likewise.
+       (=ucs@ks): Likewise.
+       (=ucs@big5): Likewise.
+       (=ucs-radicals): Likewise.
+       (=ucs-radicals@unicode): Likewise.
+       (=ucs-bmp-cjk): Likewise.
+       (=ucs-bmp-cjk@unicode): Likewise.
+       (=ucs-sip-ext-b): Likewise.
+       (=ucs-sip-ext-b@iso): Likewise.
+
 2004-04-08  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
 
        * mule/mule-coding.el (coded-charset-entity-reference-alist): Add
index 839fca2..d2887cd 100644 (file)
   (define-charset-alias 'japanese-jisx0208-1990 '=jis-x0208-1990)
 
   (make-charset '=big5-cdp
-               "Big5-CDP"
-               `(long-name     "Big5 with CDP extension"
+               "Big5 with CDP extension"
+               `(long-name     "Big5-CDP"
                  chars         256
                  dimension     2
                  columns       2
   (define-charset-alias 'chinese-big5-cdp '=big5-cdp)
 
   (make-charset '=gt
-               "GT"
-               `(long-name     "GT 2000"
+               "GT 2000"
+               `(long-name     "GT"
                  chars         256
                  dimension     3
                  columns       2
                  code-offset   ,(lsh #x6100 16)))
   (define-charset-alias 'ideograph-gt '=gt)
   (make-charset '=gt-k
-               "GT parts"
-               `(long-name     "Ideographic parts of GT"
+               "Ideographic components of GT"
+               `(long-name     "GT components"
                  chars         256
                  dimension     2
                  columns       2
     (while (<= i 11)
       (make-charset
        (intern (format "=gt-pj-%d" i))
-       (format "GT PJ %d" i)
-       `(long-name ,(format "GT 2000 (pseudo JIS encoding) part %d" i)
+       (format "GT 2000 (pseudo JIS encoding) part %d" i)
+       `(long-name ,(format "GT PJ %d" i)
                   chars 94
                   dimension 2
                   columns 2
       (setq i (1+ i))))
   (make-charset
    '=gt-pj-k1
-   "GT K1"
-   `(long-name "Ideographic parts of GT (pseudo JIS encoding) part 1"
+   "Ideographic parts of GT (pseudo JIS encoding) part 1"
+   `(long-name "GT K1"
               chars 94
               dimension 2
               columns 2
   (define-charset-alias 'ideograph-gt-pj-k1 '=gt-pj-k1)
   (make-charset
    '=gt-pj-k2
-   "GT K2"
-   `(long-name "Ideographic parts of GT (pseudo JIS encoding) part 2"
+   "Ideographic parts of GT (pseudo JIS encoding) part 2"
+   `(long-name "GT K2"
               chars 94
               dimension 2
               columns 2
   (define-charset-alias 'ideograph-gt-pj-k2 '=gt-pj-k2)
 
   (make-charset '=daikanwa
-               "Daikanwa"
-               `(long-name     "Daikanwa dictionary (revised version 2)"
+               "Daikanwa dictionary (revised version 2)"
+               `(long-name     "Daikanwa"
                  chars         256
                  dimension     2
                  columns       2
   (define-charset-alias 'ideograph-daikanwa '=daikanwa)
 
   (make-charset '=daikanwa-rev1
-               "Daikanwa Rev."
-               `(long-name     "Daikanwa dictionary (revised version)"
+               "Daikanwa dictionary (revised version)"
+               `(long-name     "Daikanwa Rev."
                  chars         256
                  dimension     2
                  columns       2
   (define-charset-alias 'ideograph-daikanwa-2 '=daikanwa-rev1)
 
   (make-charset '=daikanwa-rev2
-               "Daikanwa"
-               `(long-name     "Daikanwa dictionary (revised version 2)"
+               "Daikanwa dictionary (revised version 2)"
+               `(long-name     "Daikanwa"
                  chars         256
                  dimension     2
                  columns       2
                  code-offset   #xE00000))
 
   (make-charset '=big5-pua
-               "Big5-PUA"
-               `(long-name     "Big5 with private used area"
+               "Big5 with private used area"
+               `(long-name     "Big5-PUA"
                  chars         256
                  dimension     2
                  columns       2
                  registry      "Big5\\.ETEN"))
   (define-charset-alias 'chinese-big5-pua '=big5-pua)
   (make-charset '=big5-eten
-               "Big5-ETEN"
-               `(long-name     "Big5 ETEN"
+               "Big5 ETEN"
+               `(long-name     "Big5-ETEN"
                  chars         256
                  dimension     2
                  columns       2
                  registry      "Big5\\.ETEN"))
   (define-charset-alias 'chinese-big5-eten '=big5-eten)
   (make-charset 'chinese-big5-eten-a
-               "Big5-ETEN-a"
-               `(long-name     "Big5 ETEN (#xF9D6 .. #xF9FE)"
+               "Big5 ETEN (#xF9D6 .. #xF9FE)"
+               `(long-name     "Big5-ETEN-a"
                  chars         256
                  dimension     2
                  columns       2
                  max-code      #xF9FE
                  registry      "Big5\\.ETEN"))
   (make-charset 'chinese-big5-eten-b
-               "Big5-ETEN-b"
-               `(long-name     "Big5 ETEN (#xC6A1 .. #xC8FE)"
+               "Big5 ETEN (#xC6A1 .. #xC8FE)"
+               `(long-name     "Big5-ETEN-b"
                  chars         256
                  dimension     2
                  columns       2
     (while (<= i 12)
       (make-charset
        (intern (format "=hanziku-%d" i))
-       (format "HANZIKU-%d" i)
-       `(long-name ,(format "HANZIKU (pseudo BIG5 encoding) part %d" i)
+       (format "HANZIKU (pseudo BIG5 encoding) part %d" i)
+       `(long-name ,(format "HANZIKU-%d" i)
                   chars 256
                   dimension 2
                   columns 2
            hzk-max (+ hzk-min 65535))
       (setq i (1+ i))))
 
-  (make-charset '=cbeta "CBETA PUA"
-               '(long-name     "CBETA private characters"
+  (make-charset '=cbeta "CBETA private characters"
+               '(long-name     "CBETA PUA"
                  chars         256
                  dimension     2
                  registry      "cbeta-0"
   (define-charset-alias 'ideograph-cbeta '=cbeta)
 
   (make-charset '=jef-china3
-               "JEF + CHINA3"
-               `(long-name     "JEF + CHINA3 private characters"
+               "JEF + CHINA3 private characters"
+               `(long-name     "JEF + CHINA3"
                  chars         256
                  dimension     2
                  columns       2
   (define-charset-alias 'china3-jef '=jef-china3)
 
   (make-charset '=ruimoku-v6
-               "RUI6"
-               `(long-name     "private characters used in RUIMOKU"
+               "private characters used in RUIMOKU Version.6"
+               `(long-name     "RUI6"
                  chars         256
                  dimension     2
                  columns       2
                  code-offset   ,(- #xE90000 #xE000)))
 
   (make-charset '=ucs@iso
-               "UCS for ISO"
-               `(long-name     "ISO/IEC 10646 for its representative glyphs"
+               "ISO/IEC 10646 for its representative glyphs"
+               `(long-name     "UCS for ISO"
                  chars         256
                  dimension     3
                  columns       2
                  direction     l2r
                  mother        =ucs))
   (make-charset '=ucs@unicode
-               "UCS for Unicode"
-               `(long-name     "Unicode for its representative glyphs"
+               "Unicode for its representative glyphs"
+               `(long-name     "UCS for Unicode"
                  chars         256
                  dimension     3
                  columns       2
                  direction     l2r
                  mother        =ucs@iso))
   (make-charset '=ucs@gb
-               "UCS for GB"
-               `(long-name     "ISO/IEC 10646 for GB"
+               "ISO/IEC 10646 for GB"
+               `(long-name     "UCS for GB"
                  chars         256
                  dimension     3
                  columns       2
                  mother        =ucs@unicode))
   (define-charset-alias 'ucs-gb '=ucs@gb)
   (make-charset '=ucs@cns
-               "UCS for CNS"
-               `(long-name     "ISO/IEC 10646 for CNS 11643"
+               "ISO/IEC 10646 for CNS 11643"
+               `(long-name     "UCS for CNS"
                  chars         256
                  dimension     3
                  columns       2
                  mother        =ucs@unicode))
   (define-charset-alias 'ucs-cns '=ucs@cns)
   (make-charset '=ucs@jis
-               "UCS for JIS"
-               `(long-name     "ISO/IEC 10646 for JIS X0208/0212/0213"
+               "ISO/IEC 10646 for JIS X0208/0212/0213"
+               `(long-name     "UCS for JIS"
                  chars         256
                  dimension     3
                  columns       2
                  mother        =ucs@unicode))
   (define-charset-alias 'ucs-jis '=ucs@jis)
   (make-charset '=ucs@jis-1990
-               "UCS for JIS:1990"
-               `(long-name     "ISO/IEC 10646 for JIS X 0208/0212:1990"
+               "ISO/IEC 10646 for JIS X 0208/0212:1990"
+               `(long-name     "UCS for JIS:1990"
                  chars         256
                  dimension     3
                  columns       2
                  mother        ucs-jis))
   (define-charset-alias '=ucs-jis-1990 '=ucs@jis-1990)
   (make-charset '=ucs@jis-2000
-               "UCS for JIS:2000"
-               `(long-name     "ISO/IEC 10646 for JIS X 0213:2000"
+               "ISO/IEC 10646 for JIS X 0213:2000"
+               `(long-name     "UCS for JIS:2000"
                  chars         256
                  dimension     3
                  columns       2
                  mother        ucs-jis))
   (define-charset-alias '=ucs-jis-2000 '=ucs@jis-2000)
   (make-charset '=ucs@jp
-               "UCS for Japan"
-               `(long-name     "UCS for common glyphs used in Japan"
+               "UCS for common glyphs used in Japan"
+               `(long-name     "UCS for Japan"
                  chars         256
                  dimension     3
                  columns       2
                  direction     l2r
                  mother        =ucs@jis-2000))
   (make-charset '=ucs@ks
-               "UCS for KS"
-               `(long-name     "ISO/IEC 10646 for Korean Standards"
+               "ISO/IEC 10646 for Korean Standards"
+               `(long-name     "UCS for KS"
                  chars         256
                  dimension     3
                  columns       2
                  mother        =ucs@unicode))
   (define-charset-alias 'ucs-ks '=ucs@ks)
   (make-charset '=ucs@big5
-               "UCS for Big5"
-               `(long-name     "ISO/IEC 10646 for Big5"
+               "ISO/IEC 10646 for Big5"
+               `(long-name     "UCS for Big5"
                  chars         256
                  dimension     3
                  columns       2
 
   (make-charset
    '=ucs-radicals
-   "UCS-Radicals"
-   `(long-name "CJK Radicals of UCS"
+   "CJK Radicals of UCS"
+   `(long-name "UCS-Radicals"
               chars 256
               dimension 2
               columns 2
               min-code #x2E00 max-code #x2FFF))
   (make-charset
    '=ucs-radicals@unicode
-   "UCS-Radicals"
-   `(long-name "CJK Radicals of UCS"
+   "CJK Radicals of UCS"
+   `(long-name "UCS-Radicals"
               chars 256
               dimension 2
               columns 2
               min-code #x2E00 max-code #x2FFF))
   (make-charset
    '=ucs-bmp-cjk
-   "UCS-BMP-CJK"
-   `(long-name "CJK Characters in BMP of UCS"
+   "CJK Characters in BMP of UCS"
+   `(long-name "UCS-BMP-CJK"
               chars 256
               dimension 2
               columns 2
               min-code #x2E00 max-code #xA4CF))
   (make-charset
    '=ucs-bmp-cjk@unicode
-   "Unicode-BMP-CJK"
-   `(long-name "CJK Characters in BMP of Unicode"
+   "CJK Characters in BMP of Unicode"
+   `(long-name "Unicode-BMP-CJK"
               chars 256
               dimension 2
               columns 2
               min-code #x2E00 max-code #xA4CF))
   (make-charset
    '=ucs-sip-ext-b
-   "UCS CJK Ext-B"
-   `(long-name "CJK Ideographs Extension B"
+   "CJK Ideographs Extension B"
+   `(long-name "UCS CJK Ext-B"
               chars 256
               dimension 2
               columns 2
               code-offset #x20000))
   (make-charset
    '=ucs-sip-ext-b@iso
-   "UCS CJK Ext-B"
-   `(long-name "CJK Ideographs Extension B (ISO/IEC 10646-2)"
+   "CJK Ideographs Extension B (ISO/IEC 10646-2)"
+   `(long-name "UCS CJK Ext-B"
               chars 256
               dimension 2
               columns 2
index 3d26202..469800b 100644 (file)
@@ -1,3 +1,13 @@
+2004-07-21  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+       * update-cdb.el: Use `save-charset-properties' for all
+       coded-charsets when building CHISE database.
+
+2004-07-20  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+       * update-cdb.el (system-char-database-directory): Use
+       `data-directory' instead of `exec-directory'.
+
 2004-07-16  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
 
        * Ideograph-R121-Jar.el: Add mappings for Big5 code points.
index c011b87..7998799 100644 (file)
@@ -40,8 +40,8 @@
  ((featurep 'chise)
   (defvar system-char-database-directory
     (expand-file-name "chise-db"
-                     (or exec-directory
-                         "../lib-src/")))
+                     (or data-directory
+                         "../etc/")))
 
   (defun file-name-char-attribute-name (filename)
     (let ((i 0)
@@ -75,6 +75,7 @@
       (save-char-attribute-table attribute))
 
     (dolist (ccs (charset-list))
+      (save-charset-properties ccs)
       (save-charset-mapping-table ccs))
 
     (with-temp-buffer
index 03b581d..d5e55e1 100644 (file)
@@ -1,3 +1,46 @@
+2004-07-23  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+       * mule-charset.c (Fsave_charset_properties): Use `true-name' only
+       for aliases; write `description'; write
+       `mother-code-{min|max|offset|conversion}' if CHARSET_MAX_CODE is
+       not 0.
+
+2004-07-21  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+       * chartab.c (Fsave_char_attribute_table): Don't use
+       `save_charset_properties'.
+
+       * mule-charset.c (Fsave_charset_properties): Renamed from
+       `save_charset_properties' and changed to Lisp function again;
+       write property `type' as `CCS'; write properties `final-byte' and
+       `mother' if they exists.
+       (syms_of_mule_charset): Revive builtin function
+       `save-charset-properties' when HAVE_LIBCHISE is defined.
+
+2004-07-21  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+       * chartab.c (open_chise_data_source_maybe): Use Vdata_directory
+       instead of Vexec_directory.
+       (char_attribute_system_db_file): Likewise.
+
+2004-07-17  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+       * chartab.c (Fsave_char_attribute_table): Use
+       `save_charset_properties' for CCS features when HAVE_LIBCHISE is
+       defined.
+
+       * mule-charset.c (save_charset_properties): Renamed from
+       `Fsave_charset_properties'; changed to non-Lisp function.
+       (syms_of_mule_charset): Abolish builtin function
+       `save-charset-properties'.
+
+2004-07-15  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+       * mule-charset.c (Fsave_charset_properties): New function when
+       HAVE_LIBCHISE is defined.
+       (syms_of_mule_charset): Add new builtin function
+       `save-charset-properties' when HAVE_LIBCHISE is defined.
+
 2004-06-26  MORIOKA Tomohiko  <tomo@kanji.zinbun.kyoto-u.ac.jp>
 
        * chartab.c (Fput_char_attribute): Convert char-specs in value of
index 65000a0..d955a1a 100644 (file)
@@ -3635,11 +3635,11 @@ open_chise_data_source_maybe ()
 {
   if (default_chise_data_source == NULL)
     {
-      Lisp_Object db_dir = Vexec_directory;
+      Lisp_Object db_dir = Vdata_directory;
       int modemask = 0755;             /* rwxr-xr-x */
 
       if (NILP (db_dir))
-       db_dir = build_string ("../lib-src");
+       db_dir = build_string ("../etc");
       db_dir = Fexpand_file_name (build_string ("chise-db"), db_dir);
 
       default_chise_data_source
@@ -3743,10 +3743,10 @@ Lisp_Object
 char_attribute_system_db_file (Lisp_Object key_type, Lisp_Object attribute,
                               int writing_mode)
 {
-  Lisp_Object db_dir = Vexec_directory;
+  Lisp_Object db_dir = Vdata_directory;
 
   if (NILP (db_dir))
-    db_dir = build_string ("../lib-src");
+    db_dir = build_string ("../etc");
 
   db_dir = Fexpand_file_name (build_string ("chise-db"), db_dir);
   if (writing_mode && NILP (Ffile_exists_p (db_dir)))
@@ -3829,7 +3829,9 @@ Save values of ATTRIBUTE into database file.
     {
       Lisp_Object (*filter)(Lisp_Object value);
 
-      if ( EQ (attribute, Qideographic_structure)
+      if ( !NILP (Ffind_charset (attribute)) )
+       filter = NULL;
+      else if ( EQ (attribute, Qideographic_structure)
           || EQ (attribute, Q_identical)
           || EQ (attribute, Q_identical_from)
           || !NILP (Fstring_match
index 6c07d63..0958674 100644 (file)
@@ -2363,6 +2363,170 @@ load_char_decoding_entry_maybe (Lisp_Object ccs, int code_point)
   return -1;
 #endif /* not HAVE_LIBCHISE */
 }
+
+#ifdef HAVE_LIBCHISE
+DEFUN ("save-charset-properties", Fsave_charset_properties, 1, 1, 0, /*
+Save properties of CHARSET.
+*/
+       (charset))
+{
+  struct Lisp_Charset *cs;
+  CHISE_Property property;
+  Lisp_Object ccs;
+  unsigned char* feature_name;
+
+  ccs = Fget_charset (charset);
+  cs = XCHARSET (ccs);
+
+  if ( open_chise_data_source_maybe () )
+    return -1;
+
+  if ( SYMBOLP (charset) && !EQ (charset, XCHARSET_NAME (ccs)) )
+    {
+      property = chise_ds_get_property (default_chise_data_source,
+                                       "true-name");
+      feature_name = XSTRING_DATA (Fsymbol_name (charset));
+      chise_feature_set_property_value
+       (chise_ds_get_feature (default_chise_data_source, feature_name),
+        property, XSTRING_DATA (Fprin1_to_string (CHARSET_NAME (cs),
+                                                  Qnil)));
+      chise_property_sync (property);
+    }
+  charset = XCHARSET_NAME (ccs);
+  feature_name = XSTRING_DATA (Fsymbol_name (charset));
+
+  property = chise_ds_get_property (default_chise_data_source,
+                                   "description");
+  chise_feature_set_property_value
+    (chise_ds_get_feature (default_chise_data_source, feature_name),
+     property, XSTRING_DATA (Fprin1_to_string
+                            (CHARSET_DOC_STRING (cs), Qnil)));
+  chise_property_sync (property);
+
+  property = chise_ds_get_property (default_chise_data_source, "type");
+  chise_feature_set_property_value
+    (chise_ds_get_feature (default_chise_data_source, feature_name),
+     property, "CCS");
+  chise_property_sync (property);
+
+  property = chise_ds_get_property (default_chise_data_source, "chars");
+  chise_feature_set_property_value
+    (chise_ds_get_feature (default_chise_data_source, feature_name),
+     property, XSTRING_DATA (Fprin1_to_string (make_int
+                                              (CHARSET_CHARS (cs)),
+                                              Qnil)));
+  chise_property_sync (property);
+
+  property = chise_ds_get_property (default_chise_data_source, "dimension");
+  chise_feature_set_property_value
+    (chise_ds_get_feature (default_chise_data_source, feature_name),
+     property, XSTRING_DATA (Fprin1_to_string (make_int
+                                              (CHARSET_DIMENSION (cs)),
+                                              Qnil)));
+  chise_property_sync (property);
+
+  if ( CHARSET_FINAL (cs) != 0 )
+    {
+      property = chise_ds_get_property (default_chise_data_source,
+                                       "final-byte");
+      chise_feature_set_property_value
+       (chise_ds_get_feature (default_chise_data_source, feature_name),
+        property, XSTRING_DATA (Fprin1_to_string (make_int
+                                                  (CHARSET_FINAL (cs)),
+                                                  Qnil)));
+      chise_property_sync (property);
+    }
+
+  if ( !NILP (CHARSET_MOTHER (cs)) )
+    {
+      Lisp_Object mother = CHARSET_MOTHER (cs);
+
+      if ( CHARSETP (mother) )
+       mother = XCHARSET_NAME (mother);
+
+      property = chise_ds_get_property (default_chise_data_source,
+                                       "mother");
+      chise_feature_set_property_value
+       (chise_ds_get_feature (default_chise_data_source, feature_name),
+        property, XSTRING_DATA (Fprin1_to_string (mother, Qnil)));
+      chise_property_sync (property);
+    }
+
+  if ( CHARSET_MAX_CODE (cs) != 0 )
+    {
+      char str[16];
+
+      property = chise_ds_get_property (default_chise_data_source,
+                                       "mother-code-min");
+      if ( CHARSET_MIN_CODE (cs) == 0 )
+       chise_feature_set_property_value
+         (chise_ds_get_feature (default_chise_data_source, feature_name),
+          property, "0");
+      else
+       {
+         sprintf (str, "#x%X", CHARSET_MIN_CODE (cs));
+         chise_feature_set_property_value
+           (chise_ds_get_feature (default_chise_data_source, feature_name),
+            property, str);
+       }
+      chise_property_sync (property);
+
+      property = chise_ds_get_property (default_chise_data_source,
+                                       "mother-code-max");
+      sprintf (str, "#x%X", CHARSET_MAX_CODE (cs));
+      chise_feature_set_property_value
+       (chise_ds_get_feature (default_chise_data_source, feature_name),
+        property, str);
+      chise_property_sync (property);
+
+      property = chise_ds_get_property (default_chise_data_source,
+                                       "mother-code-offset");
+      if ( CHARSET_CODE_OFFSET (cs) == 0 )
+       chise_feature_set_property_value
+         (chise_ds_get_feature (default_chise_data_source, feature_name),
+          property, "0");
+      else
+       {
+         sprintf (str, "#x%X", CHARSET_CODE_OFFSET (cs));
+         chise_feature_set_property_value
+           (chise_ds_get_feature (default_chise_data_source, feature_name),
+            property, str);
+       }
+      chise_property_sync (property);
+
+      property = chise_ds_get_property (default_chise_data_source,
+                                       "mother-code-conversion");
+      if ( CHARSET_CONVERSION (cs) == CONVERSION_IDENTICAL )
+       chise_feature_set_property_value
+         (chise_ds_get_feature (default_chise_data_source, feature_name),
+          property, "identical");
+      else
+       {
+         Lisp_Object sym = Qnil;
+
+         if ( CHARSET_CONVERSION (cs) == CONVERSION_94x60 )
+           sym = Q94x60;
+         else if ( CHARSET_CONVERSION (cs) == CONVERSION_94x94x60 )
+           sym = Q94x94x60;
+         else if ( CHARSET_CONVERSION (cs) == CONVERSION_BIG5_1 )
+           sym = Qbig5_1;
+         else if ( CHARSET_CONVERSION (cs) == CONVERSION_BIG5_2 )
+           sym = Qbig5_2;
+         if ( !NILP (sym) )
+           chise_feature_set_property_value
+             (chise_ds_get_feature (default_chise_data_source, feature_name),
+              property, XSTRING_DATA (Fprin1_to_string (sym, Qnil)));
+         else
+           chise_feature_set_property_value
+             (chise_ds_get_feature (default_chise_data_source, feature_name),
+              property, "unknown");
+       }
+      chise_property_sync (property);
+    }
+  return Qnil;
+}
+#endif /* HAVE_LIBCHISE */
+
 #endif /* HAVE_CHISE */
 #endif /* UTF2000 */
 
@@ -2704,6 +2868,9 @@ syms_of_mule_charset (void)
 #ifdef HAVE_CHISE
   DEFSUBR (Fsave_charset_mapping_table);
   DEFSUBR (Freset_charset_mapping_table);
+#ifdef HAVE_LIBCHISE
+  DEFSUBR (Fsave_charset_properties);
+#endif /* HAVE_LIBCHISE */
 #endif /* HAVE_CHISE */
   DEFSUBR (Fdecode_char);
   DEFSUBR (Fdecode_builtin_char);