(Q_identical): New variable.
authortomo <tomo>
Wed, 25 Feb 2004 08:22:42 +0000 (08:22 +0000)
committertomo <tomo>
Wed, 25 Feb 2004 08:22:42 +0000 (08:22 +0000)
(Q_identical_from): New variable.
(Fchar_feature): Regard `->identical' as a feature to find ancestors.
(Fput_char_attribute): Add reversed link for `{->|<-}identical'.
(Fsave_char_attribute_table): Use `Fchar_refs_simplify_char_specs' for
`{->|<-}identical'.
(syms_of_chartab): Add new symbols `{->|<-}identical'.

src/chartab.c

index 1ef4e31..2ec5694 100644 (file)
@@ -1136,6 +1136,8 @@ Lisp_Object Qsystem_char_id;
 
 Lisp_Object Qcomposition;
 Lisp_Object Q_decomposition;
+Lisp_Object Q_identical;
+Lisp_Object Q_identical_from;
 Lisp_Object Q_denotational;
 Lisp_Object Q_denotational_from;
 Lisp_Object Q_subsumptive;
@@ -3313,7 +3315,8 @@ Return DEFAULT-VALUE if the value is not exist.
        }
     }
 
-  if ( !(EQ (attribute, Q_subsumptive_from)) &&
+  if ( !(EQ (attribute, Q_identical)) &&
+       !(EQ (attribute, Q_subsumptive_from)) &&
        !(EQ (attribute, Q_denotational_from)) &&
        ( (NILP (char_rel_max)
          || (INTP (char_rel_max) &&
@@ -3325,7 +3328,11 @@ Return DEFAULT-VALUE if the value is not exist.
       if ( (name_str[0] != '=') || (name_str[1] == '>') )
        {
          Lisp_Object ancestors
-           = Fget_char_attribute (character, Q_subsumptive_from, Qnil);
+           = Fget_char_attribute (character, Q_identical, Qnil);
+
+         if (NILP (ancestors))
+           ancestors
+             = Fget_char_attribute (character, Q_subsumptive_from, Qnil);
 
          if (NILP (ancestors))
            ancestors
@@ -3482,6 +3489,8 @@ Store CHARACTER's ATTRIBUTE with VALUE.
            EQ (attribute, Q_subsumptive_from) ||
            EQ (attribute, Q_denotational) ||
            EQ (attribute, Q_denotational_from) ||
+           EQ (attribute, Q_identical) ||
+           EQ (attribute, Q_identical_from) ||
            !NILP (Fstring_match (build_string ("^<-simplified[^*]*$"),
                                  Fsymbol_name (attribute),
                                  Qnil, Qnil)) )
@@ -3492,7 +3501,11 @@ Store CHARACTER's ATTRIBUTE with VALUE.
       struct gcpro gcpro1;
       GCPRO1 (rev_feature);
 
-      if (EQ (attribute, Q_subsumptive))
+      if (EQ (attribute, Q_identical))
+       rev_feature = Q_identical_from;
+      else if (EQ (attribute, Q_identical_from))
+       rev_feature = Q_identical;
+      else if (EQ (attribute, Q_subsumptive))
        rev_feature = Q_subsumptive_from;
       else if (EQ (attribute, Q_subsumptive_from))
        rev_feature = Q_subsumptive;
@@ -3782,6 +3795,8 @@ Save values of ATTRIBUTE into database file.
       Lisp_Object (*filter)(Lisp_Object value);
 
       if ( EQ (attribute, Qideographic_structure)
+          || EQ (attribute, Q_identical)
+          || EQ (attribute, Q_identical_from)
           || !NILP (Fstring_match
                     (build_string ("^\\(<-\\|->\\)simplified[^*]*$"),
                      Fsymbol_name (attribute),
@@ -4559,6 +4574,8 @@ syms_of_chartab (void)
   defsymbol (&Q_subsumptive_from,      "<-subsumptive");
   defsymbol (&Q_denotational,          "->denotational");
   defsymbol (&Q_denotational_from,     "<-denotational");
+  defsymbol (&Q_identical,             "->identical");
+  defsymbol (&Q_identical_from,                "<-identical");
   defsymbol (&Qcomposition,            "composition");
   defsymbol (&Q_decomposition,         "->decomposition");
   defsymbol (&Qcompat,                 "compat");