Lisp_Object Vcharset_latin_viscii_lower;
Lisp_Object Vcharset_latin_viscii_upper;
Lisp_Object Vcharset_ideograph_daikanwa;
+Lisp_Object Vcharset_mojikyo;
Lisp_Object Vcharset_mojikyo_pj_1;
Lisp_Object Vcharset_mojikyo_pj_2;
Lisp_Object Vcharset_mojikyo_pj_3;
Lisp_Object alist
= get_char_code_table (char_code, Vcharacter_attribute_table);
- if (!EQ (attribute, Fcar (Fcar (alist))))
+ if (EQ (attribute, Fcar (Fcar (alist))))
{
alist = Fcdr (alist);
}
return alist;
}
+Lisp_Object Qucs;
+
DEFUN ("put-char-attribute", Fput_char_attribute, 3, 3, 0, /*
Store CHARACTER's ATTRIBUTE with VALUE.
*/
ccs = Ffind_charset (attribute);
if (!NILP (ccs))
{
- Lisp_Object cpos, rest;
- Lisp_Object v = XCHARSET_DECODING_TABLE (ccs);
- Lisp_Object nv;
- int i = -1;
- int ccs_len;
- int dim;
- int code_point;
-
- /* ad-hoc method for `ascii' */
- if ((XCHARSET_CHARS (ccs) == 94) &&
- (XCHARSET_BYTE_OFFSET (ccs) != 33))
- ccs_len = 128 - XCHARSET_BYTE_OFFSET (ccs);
- else
- ccs_len = XCHARSET_CHARS (ccs);
-
- if (CONSP (value))
+ if (!EQ (XCHARSET_NAME (ccs), Qucs)
+ || (XCHAR (character) != XINT (value)))
{
- Lisp_Object ret = Fcar (value);
+ Lisp_Object cpos, rest;
+ Lisp_Object v = XCHARSET_DECODING_TABLE (ccs);
+ Lisp_Object nv;
+ int i = -1;
+ int ccs_len;
+ int dim;
+ int code_point;
+
+ /* ad-hoc method for `ascii' */
+ if ((XCHARSET_CHARS (ccs) == 94) &&
+ (XCHARSET_BYTE_OFFSET (ccs) != 33))
+ ccs_len = 128 - XCHARSET_BYTE_OFFSET (ccs);
+ else
+ ccs_len = XCHARSET_CHARS (ccs);
- if (!INTP (ret))
- signal_simple_error ("Invalid value for coded-charset", value);
- code_point = XINT (ret);
- if (XCHARSET_GRAPHIC (ccs) == 1)
- code_point &= 0x7F;
- rest = Fcdr (value);
- while (!NILP (rest))
+ if (CONSP (value))
{
- int i;
+ Lisp_Object ret = Fcar (value);
- if (!CONSP (rest))
- signal_simple_error ("Invalid value for coded-charset", value);
- ret = Fcar (rest);
if (!INTP (ret))
signal_simple_error ("Invalid value for coded-charset", value);
- i = XINT (ret);
+ code_point = XINT (ret);
if (XCHARSET_GRAPHIC (ccs) == 1)
- i &= 0x7F;
- code_point = (code_point << 8) | i;
- rest = Fcdr (rest);
+ code_point &= 0x7F;
+ rest = Fcdr (value);
+ while (!NILP (rest))
+ {
+ int i;
+
+ if (!CONSP (rest))
+ signal_simple_error ("Invalid value for coded-charset",
+ value);
+ ret = Fcar (rest);
+ if (!INTP (ret))
+ signal_simple_error ("Invalid value for coded-charset",
+ value);
+ i = XINT (ret);
+ if (XCHARSET_GRAPHIC (ccs) == 1)
+ i &= 0x7F;
+ code_point = (code_point << 8) | i;
+ rest = Fcdr (rest);
+ }
+ value = make_int (code_point);
}
- value = make_int (code_point);
- }
- else if (INTP (value))
- {
- if (XCHARSET_GRAPHIC (ccs) == 1)
- value = make_int (XINT (value) & 0x7F7F7F7F);
- }
- else
- signal_simple_error ("Invalid value for coded-charset", value);
+ else if (INTP (value))
+ {
+ if (XCHARSET_GRAPHIC (ccs) == 1)
+ value = make_int (XINT (value) & 0x7F7F7F7F);
+ }
+ else
+ signal_simple_error ("Invalid value for coded-charset", value);
- attribute = ccs;
- cpos = Fget_char_attribute (character, attribute);
- if (VECTORP (v))
- {
- if (!NILP (cpos))
+ attribute = ccs;
+ cpos = Fget_char_attribute (character, attribute);
+ if (VECTORP (v))
{
- dim = XCHARSET_DIMENSION (ccs);
- code_point = XINT (cpos);
- while (dim > 0)
+ if (!NILP (cpos))
{
- dim--;
- i = ((code_point >> (8 * dim)) & 255)
- - XCHARSET_BYTE_OFFSET (ccs);
- nv = XVECTOR_DATA(v)[i];
- if (!VECTORP (nv))
- break;
- v = nv;
+ dim = XCHARSET_DIMENSION (ccs);
+ code_point = XINT (cpos);
+ while (dim > 0)
+ {
+ dim--;
+ i = ((code_point >> (8 * dim)) & 255)
+ - XCHARSET_BYTE_OFFSET (ccs);
+ nv = XVECTOR_DATA(v)[i];
+ if (!VECTORP (nv))
+ break;
+ v = nv;
+ }
+ if (i >= 0)
+ XVECTOR_DATA(v)[i] = Qnil;
+ v = XCHARSET_DECODING_TABLE (ccs);
}
- if (i >= 0)
- XVECTOR_DATA(v)[i] = Qnil;
- v = XCHARSET_DECODING_TABLE (ccs);
}
- }
- else
- {
- XCHARSET_DECODING_TABLE (ccs) = v = make_vector (ccs_len, Qnil);
- }
+ else
+ {
+ XCHARSET_DECODING_TABLE (ccs) = v = make_vector (ccs_len, Qnil);
+ }
- dim = XCHARSET_DIMENSION (ccs);
- code_point = XINT (value);
- i = -1;
- while (dim > 0)
- {
- dim--;
- i = ((code_point >> (8 * dim)) & 255) - XCHARSET_BYTE_OFFSET (ccs);
- nv = XVECTOR_DATA(v)[i];
- if (dim > 0)
+ dim = XCHARSET_DIMENSION (ccs);
+ code_point = XINT (value);
+ i = -1;
+ while (dim > 0)
{
- if (!VECTORP (nv))
- nv = (XVECTOR_DATA(v)[i] = make_vector (ccs_len, Qnil));
- v = nv;
+ dim--;
+ i = ((code_point >> (8 * dim)) & 255)
+ - XCHARSET_BYTE_OFFSET (ccs);
+ nv = XVECTOR_DATA(v)[i];
+ if (dim > 0)
+ {
+ if (!VECTORP (nv))
+ nv = (XVECTOR_DATA(v)[i] = make_vector (ccs_len, Qnil));
+ v = nv;
+ }
+ else
+ break;
}
- else
- break;
+ XVECTOR_DATA(v)[i] = character;
}
- XVECTOR_DATA(v)[i] = character;
+ else
+ attribute = ccs;
}
else if (EQ (attribute, Q_decomposition))
{
return remove_char_attribute (character, attribute);
}
-Lisp_Object Qucs;
-
EXFUN (Fmake_char, 3);
EXFUN (Fdecode_char, 2);
if (!LISTP (cell))
signal_simple_error ("Invalid argument", attributes);
- if (!NILP (ccs = Ffind_charset (Fcar (cell))))
+ if (!NILP (ccs = Ffind_charset (Fcar (cell)))
+ && ((XCHARSET_FINAL (ccs) != 0) ||
+ (XCHARSET_UCS_MAX (ccs) > 0)) )
{
cell = Fcdr (cell);
if (CONSP (cell))
Qvietnamese_viscii_lower,
Qvietnamese_viscii_upper,
Qideograph_daikanwa,
+ Qmojikyo,
Qmojikyo_pj_1,
Qmojikyo_pj_2,
Qmojikyo_pj_3,
defsymbol (&Qvietnamese_viscii_lower, "vietnamese-viscii-lower");
defsymbol (&Qvietnamese_viscii_upper, "vietnamese-viscii-upper");
defsymbol (&Qideograph_daikanwa, "ideograph-daikanwa");
+ defsymbol (&Qmojikyo, "mojikyo");
defsymbol (&Qmojikyo_pj_1, "mojikyo-pj-1");
defsymbol (&Qmojikyo_pj_2, "mojikyo-pj-2");
defsymbol (&Qmojikyo_pj_3, "mojikyo-pj-3");
build_string ("Daikanwa dictionary by MOROHASHI Tetsuji"),
build_string ("Daikanwa"),
Qnil, MIN_CHAR_DAIKANWA, MAX_CHAR_DAIKANWA, 0, 0);
+ staticpro (&Vcharset_mojikyo);
+ Vcharset_mojikyo =
+ make_charset (LEADING_BYTE_MOJIKYO, Qmojikyo, 256, 3,
+ 2, 2, 0, CHARSET_LEFT_TO_RIGHT,
+ build_string ("Mojikyo"),
+ build_string ("Mojikyo"),
+ build_string ("Konjaku-Mojikyo"),
+ build_string (""),
+ Qnil, MIN_CHAR_MOJIKYO, MAX_CHAR_MOJIKYO, 0, 0);
staticpro (&Vcharset_mojikyo_pj_1);
Vcharset_mojikyo_pj_1 =
make_charset (LEADING_BYTE_MOJIKYO_PJ_1, Qmojikyo_pj_1, 94, 2,