X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fchartab.c;h=33f1ee2d043b0a116f60efdcb7b5a7c22f23202e;hb=1f67acd701578226cd5bbbd1d525f62e667122c0;hp=b8984ea70599afd1a42dc6a59bd1175c85500acc;hpb=483d3fdb6be43da350fee11caec0dbf97a75137b;p=chise%2Fxemacs-chise.git.1 diff --git a/src/chartab.c b/src/chartab.c index b8984ea..33f1ee2 100644 --- a/src/chartab.c +++ b/src/chartab.c @@ -76,7 +76,6 @@ EXFUN (Fchar_refs_simplify_char_specs, 1); extern Lisp_Object Qideographic_structure; Lisp_Object Vnext_defined_char_id; -EXFUN (Fdefine_char, 1); EXFUN (Fmap_char_attribute, 3); @@ -1130,10 +1129,6 @@ make_char_id_table (Lisp_Object initval) } -#if defined(HAVE_CHISE) && !defined(HAVE_LIBCHISE_LIBCHISE) -Lisp_Object Qsystem_char_id; -#endif - Lisp_Object Qcomposition; Lisp_Object Q_decomposition; Lisp_Object Q_identical; @@ -1144,10 +1139,6 @@ Lisp_Object Q_subsumptive; Lisp_Object Q_subsumptive_from; Lisp_Object Q_component; Lisp_Object Q_component_of; -Lisp_Object Q_same; -Lisp_Object Q_same_of; -Lisp_Object Q_vulgar; -Lisp_Object Q_vulgar_of; Lisp_Object Qto_ucs; Lisp_Object Q_ucs_unified; Lisp_Object Qcompat; @@ -1244,15 +1235,16 @@ Return variants of CHARACTER. */ (character)) { - Lisp_Object ret; - CHECK_CHAR (character); - ret = Fchar_feature (character, Q_ucs_unified, Qnil, - Qnil, Qnil); - if (CONSP (ret)) - return Fcopy_list (ret); - else - return Qnil; + return + nconc2 + (Fcopy_list (Fget_char_attribute (character, Q_subsumptive, Qnil)), + (nconc2 + (Fcopy_list (Fget_char_attribute (character, Q_denotational, Qnil)), + (nconc2 + (Fcopy_list (Fget_char_attribute (character, Q_identical, Qnil)), + Fcopy_list (Fchar_feature (character, Q_ucs_unified, Qnil, + Qnil, Qnil))))))); } #endif @@ -3434,7 +3426,7 @@ put_char_composition (Lisp_Object character, Lisp_Object value) if (INTP (v)) { - Emchar c = XINT (v); + Emchar c = DECODE_CHAR (Vcharset_ucs, XINT (v), 0); Lisp_Object ret = Fchar_feature (make_char (c), Q_ucs_unified, Qnil, Qnil, Qnil); @@ -3497,7 +3489,7 @@ Store CHARACTER's ATTRIBUTE with VALUE. if (!INTP (value)) signal_simple_error ("Invalid value for =>ucs", value); - c = XINT (value); + c = DECODE_CHAR (Vcharset_ucs, XINT (value), 0); ret = Fchar_feature (make_char (c), Q_ucs_unified, Qnil, Qnil, Qnil); @@ -3516,13 +3508,12 @@ Store CHARACTER's ATTRIBUTE with VALUE. EQ (attribute, Q_identical_from) || EQ (attribute, Q_component) || EQ (attribute, Q_component_of) || - EQ (attribute, Q_same) || - EQ (attribute, Q_same_of) || - EQ (attribute, Q_vulgar) || - EQ (attribute, Q_vulgar_of) || !NILP (Fstring_match - (build_string ("^<-\\(simplified" - "\\|wrong\\)[^*]*$"), + (build_string ("^\\(<-\\|->\\)\\(" + "fullwidth\\|halfwidth" + "\\|simplified\\|vulgar\\|wrong" + "\\|same\\|original\\|ancient" + "\\)[^*]*$"), Fsymbol_name (attribute), Qnil, Qnil)) ) { @@ -3548,27 +3539,28 @@ Store CHARACTER's ATTRIBUTE with VALUE. rev_feature = Q_component_of; else if (EQ (attribute, Q_component_of)) rev_feature = Q_component; - else if (EQ (attribute, Q_same)) - rev_feature = Q_same_of; - else if (EQ (attribute, Q_same_of)) - rev_feature = Q_same; - else if (EQ (attribute, Q_vulgar)) - rev_feature = Q_vulgar_of; - else if (EQ (attribute, Q_vulgar_of)) - rev_feature = Q_vulgar; else { Lisp_String* name = symbol_name (XSYMBOL (attribute)); Bufbyte *name_str = string_data (name); - if (name_str[0] == '<' && name_str[1] == '-') + if ( (name_str[0] == '<' && name_str[1] == '-') || + (name_str[0] == '-' && name_str[1] == '>') ) { Bytecount length = string_length (name); Bufbyte *rev_name_str = alloca (length + 1); memcpy (rev_name_str + 2, name_str + 2, length - 2); - rev_name_str[0] = '-'; - rev_name_str[1] = '>'; + if (name_str[0] == '<') + { + rev_name_str[0] = '-'; + rev_name_str[1] = '>'; + } + else + { + rev_name_str[0] = '<'; + rev_name_str[1] = '-'; + } rev_name_str[length] = 0; rev_feature = intern (rev_name_str); } @@ -3589,8 +3581,9 @@ Store CHARACTER's ATTRIBUTE with VALUE. if (!CONSP (ffv)) put_char_attribute (ret, rev_feature, list1 (character)); else if (NILP (Fmemq (character, ffv))) - put_char_attribute (ret, rev_feature, - Fcons (character, ffv)); + put_char_attribute + (ret, rev_feature, + nconc2 (Fcopy_sequence (ffv), list1 (character))); Fsetcar (rest, ret); } rest = XCDR (rest); @@ -3643,11 +3636,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 @@ -3751,10 +3744,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))) @@ -3837,14 +3830,16 @@ 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) - || EQ (attribute, Q_same) - || EQ (attribute, Q_same_of) || !NILP (Fstring_match - (build_string ("^\\(<-\\|->\\)\\(" - "simplified\\|wrong\\)[^*]*$"), + (build_string ("^\\(<-\\|->\\)\\(simplified" + "\\|same\\|vulgar\\|wrong" + "\\|original\\|ancient" + "\\)[^*]*$"), Fsymbol_name (attribute), Qnil, Qnil)) ) filter = &Fchar_refs_simplify_char_specs; @@ -4620,10 +4615,6 @@ syms_of_chartab (void) defsymbol (&Q_identical_from, "<-identical"); defsymbol (&Q_component, "->ideographic-component-forms"); defsymbol (&Q_component_of, "<-ideographic-component-forms"); - defsymbol (&Q_same, "->same"); - defsymbol (&Q_same_of, "<-same"); - defsymbol (&Q_vulgar, "->vulgar"); - defsymbol (&Q_vulgar_of, "<-vulgar"); defsymbol (&Qcomposition, "composition"); defsymbol (&Q_decomposition, "->decomposition"); defsymbol (&Qcompat, "compat");