return hash;
}
+static const struct lrecord_description uint8_byte_table_description[] = {
+ { XD_END }
+};
+
DEFINE_LRECORD_IMPLEMENTATION ("uint8-byte-table", uint8_byte_table,
mark_uint8_byte_table,
print_uint8_byte_table,
0, uint8_byte_table_equal,
uint8_byte_table_hash,
- 0 /* uint8_byte_table_description */,
+ uint8_byte_table_description,
Lisp_Uint8_Byte_Table);
static Lisp_Object
return hash;
}
+static const struct lrecord_description uint16_byte_table_description[] = {
+ { XD_END }
+};
+
DEFINE_LRECORD_IMPLEMENTATION ("uint16-byte-table", uint16_byte_table,
mark_uint16_byte_table,
print_uint16_byte_table,
0, uint16_byte_table_equal,
uint16_byte_table_hash,
- 0 /* uint16_byte_table_description */,
+ uint16_byte_table_description,
Lisp_Uint16_Byte_Table);
static Lisp_Object
return obj;
}
-Lisp_Object
-get_char_id_table (Lisp_Char_Table* cit, Emchar ch)
-{
- Lisp_Object val = get_byte_table (get_byte_table
- (get_byte_table
- (get_byte_table
- (cit->table,
- (unsigned char)(ch >> 24)),
- (unsigned char) (ch >> 16)),
- (unsigned char) (ch >> 8)),
- (unsigned char) ch);
- if (UNBOUNDP (val))
- return cit->default_value;
- else
- return val;
-}
-
Lisp_Object Vcharacter_composition_table;
Lisp_Object Vcharacter_variant_table;
return obj;
}
+INLINE_HEADER int XCHARSET_CELL_RANGE (Lisp_Object ccs);
+INLINE_HEADER int
+XCHARSET_CELL_RANGE (Lisp_Object ccs)
+{
+ switch (XCHARSET_CHARS (ccs))
+ {
+ case 94:
+ return (33 << 8) | 126;
+ case 96:
+ return (32 << 8) | 127;
+#ifdef UTF2000
+ case 128:
+ return (0 << 8) | 127;
+ case 256:
+ return (0 << 8) | 255;
+#endif
+ default:
+ abort ();
+ return 0;
+ }
+}
+
#ifndef UTF2000
static
#endif
{
Lisp_Vector *vec = XVECTOR (range);
Lisp_Object *elts = vector_data (vec);
- if (vector_length (vec) != 2)
- signal_simple_error ("Length of charset row vector must be 2",
- range);
+ int cell_min, cell_max;
+
outrange->type = CHARTAB_RANGE_ROW;
outrange->charset = Fget_charset (elts[0]);
CHECK_INT (elts[1]);
outrange->row = XINT (elts[1]);
- if (XCHARSET_DIMENSION (outrange->charset) >= 2)
+ if (XCHARSET_DIMENSION (outrange->charset) < 2)
+ signal_simple_error ("Charset in row vector must be multi-byte",
+ outrange->charset);
+ else
{
- switch (XCHARSET_CHARS (outrange->charset))
- {
- case 94:
- check_int_range (outrange->row, 33, 126);
- break;
- case 96:
- check_int_range (outrange->row, 32, 127);
- break;
- default:
- abort ();
- }
+ int ret = XCHARSET_CELL_RANGE (outrange->charset);
+
+ cell_min = ret >> 8;
+ cell_max = ret & 0xFF;
+ }
+ if (XCHARSET_DIMENSION (outrange->charset) == 2)
+ check_int_range (outrange->row, cell_min, cell_max);
+#ifdef UTF2000
+ else if (XCHARSET_DIMENSION (outrange->charset) == 3)
+ {
+ check_int_range (outrange->row >> 8 , cell_min, cell_max);
+ check_int_range (outrange->row & 0xFF, cell_min, cell_max);
+ }
+ else if (XCHARSET_DIMENSION (outrange->charset) == 4)
+ {
+ check_int_range ( outrange->row >> 16 , cell_min, cell_max);
+ check_int_range ((outrange->row >> 8) & 0xFF, cell_min, cell_max);
+ check_int_range ( outrange->row & 0xFF, cell_min, cell_max);
}
+#endif
else
- signal_simple_error ("Charset in row vector must be multi-byte",
- outrange->charset);
+ abort ();
}
else
{
get_char_table (Emchar ch, Lisp_Char_Table *ct)
{
#ifdef UTF2000
- Lisp_Object val = get_byte_table (get_byte_table
- (get_byte_table
- (get_byte_table
- (ct->table,
- (unsigned char)(ch >> 24)),
- (unsigned char) (ch >> 16)),
- (unsigned char) (ch >> 8)),
- (unsigned char) ch);
- if (UNBOUNDP (val))
- return ct->default_value;
- else
- return val;
+ return get_char_id_table (ct, ch);
#elif defined(MULE)
{
Lisp_Object charset;
{
int cell_min, cell_max, i;
- /* printf ("put-char-table: range = charset-row: %d, 0x%x\n",
- XCHARSET_LEADING_BYTE (range->charset), range->row); */
- if (XCHARSET_DIMENSION (range->charset) < 2)
- signal_simple_error ("Charset in row vector must be multi-byte",
- range->charset);
- else
- {
- switch (XCHARSET_CHARS (range->charset))
- {
- case 94:
- cell_min = 33; cell_max = 126;
- break;
- case 96:
- cell_min = 32; cell_max = 127;
- break;
- case 128:
- cell_min = 0; cell_max = 127;
- break;
- case 256:
- cell_min = 0; cell_max = 255;
- break;
- default:
- abort ();
- }
- }
- if (XCHARSET_DIMENSION (range->charset) == 2)
- check_int_range (range->row, cell_min, cell_max);
- else if (XCHARSET_DIMENSION (range->charset) == 3)
- {
- check_int_range (range->row >> 8 , cell_min, cell_max);
- check_int_range (range->row & 0xFF, cell_min, cell_max);
- }
- else if (XCHARSET_DIMENSION (range->charset) == 4)
- {
- check_int_range ( range->row >> 16 , cell_min, cell_max);
- check_int_range ((range->row >> 8) & 0xFF, cell_min, cell_max);
- check_int_range ( range->row & 0xFF, cell_min, cell_max);
- }
- else
- abort ();
-
+ i = XCHARSET_CELL_RANGE (range->charset);
+ cell_min = i >> 8;
+ cell_max = i & 0xFF;
for (i = cell_min; i <= cell_max; i++)
{
Emchar ch = DECODE_CHAR (range->charset, (range->row << 8) | i);
+
if ( charset_code_point (range->charset, ch) >= 0 )
put_char_id_table_0 (ct, ch, val);
}
int retval;
struct chartab_range rainj;
- if (XCHARSET_DIMENSION (range->charset) < 2)
- signal_simple_error ("Charset in row vector must be multi-byte",
- range->charset);
- else
- {
- switch (XCHARSET_CHARS (range->charset))
- {
- case 94:
- cell_min = 33; cell_max = 126;
- break;
- case 96:
- cell_min = 32; cell_max = 127;
- break;
- case 128:
- cell_min = 0; cell_max = 127;
- break;
- case 256:
- cell_min = 0; cell_max = 255;
- break;
- default:
- abort ();
- }
- }
- if (XCHARSET_DIMENSION (range->charset) == 2)
- check_int_range (range->row, cell_min, cell_max);
- else if (XCHARSET_DIMENSION (range->charset) == 3)
- {
- check_int_range (range->row >> 8 , cell_min, cell_max);
- check_int_range (range->row & 0xFF, cell_min, cell_max);
- }
- else if (XCHARSET_DIMENSION (range->charset) == 4)
- {
- check_int_range ( range->row >> 16 , cell_min, cell_max);
- check_int_range ((range->row >> 8) & 0xFF, cell_min, cell_max);
- check_int_range ( range->row & 0xFF, cell_min, cell_max);
- }
- else
- abort ();
-
+ i = XCHARSET_CELL_RANGE (range->charset);
+ cell_min = i >> 8;
+ cell_max = i & 0xFF;
rainj.type = CHARTAB_RANGE_CHAR;
for (retval =0, i = cell_min; i <= cell_max && retval == 0; i++)
{
*/
(character))
{
+ struct gcpro gcpro1;
+ struct char_attribute_alist_closure char_attribute_alist_closure;
Lisp_Object alist = Qnil;
- int i;
CHECK_CHAR (character);
- {
- struct gcpro gcpro1;
- struct char_attribute_alist_closure char_attribute_alist_closure;
-
- GCPRO1 (alist);
- char_attribute_alist_closure.char_id = XCHAR (character);
- char_attribute_alist_closure.char_attribute_alist = &alist;
- elisp_maphash (add_char_attribute_alist_mapper,
- Vchar_attribute_hash_table,
- &char_attribute_alist_closure);
- UNGCPRO;
- }
-
- for (i = 0; i < countof (chlook->charset_by_leading_byte); i++)
- {
- Lisp_Object ccs = chlook->charset_by_leading_byte[i];
- if (!NILP (ccs))
- {
- Lisp_Object encoding_table = XCHARSET_ENCODING_TABLE (ccs);
- Lisp_Object cpos;
+ GCPRO1 (alist);
+ char_attribute_alist_closure.char_id = XCHAR (character);
+ char_attribute_alist_closure.char_attribute_alist = &alist;
+ elisp_maphash (add_char_attribute_alist_mapper,
+ Vchar_attribute_hash_table,
+ &char_attribute_alist_closure);
+ UNGCPRO;
- if ( CHAR_TABLEP (encoding_table)
- && INTP (cpos
- = get_char_id_table (XCHAR_TABLE(encoding_table),
- XCHAR (character))) )
- {
- alist = Fcons (Fcons (ccs, cpos), alist);
- }
- }
- }
return alist;
}
*/
(character, attribute, default_value))
{
- Lisp_Object ccs;
+ Lisp_Object table;
CHECK_CHAR (character);
- if (!NILP (ccs = Ffind_charset (attribute)))
- {
- Lisp_Object encoding_table = XCHARSET_ENCODING_TABLE (ccs);
- if (CHAR_TABLEP (encoding_table))
- return get_char_id_table (XCHAR_TABLE(encoding_table),
- XCHAR (character));
- }
- else
+ if (CHARSETP (attribute))
+ attribute = XCHARSET_NAME (attribute);
+
+ table = Fgethash (attribute, Vchar_attribute_hash_table,
+ Qunbound);
+ if (!UNBOUNDP (table))
{
- Lisp_Object table = Fgethash (attribute,
- Vchar_attribute_hash_table,
- Qunbound);
- if (!UNBOUNDP (table))
- {
- Lisp_Object ret = get_char_id_table (XCHAR_TABLE(table),
- XCHAR (character));
- if (!UNBOUNDP (ret))
- return ret;
- }
+ Lisp_Object ret = get_char_id_table (XCHAR_TABLE(table),
+ XCHAR (character));
+ if (!UNBOUNDP (ret))
+ return ret;
}
return default_value;
}
*/
(character, attribute, value))
{
- Lisp_Object ccs;
+ Lisp_Object ccs = Ffind_charset (attribute);
- ccs = Ffind_charset (attribute);
if (!NILP (ccs))
{
CHECK_CHAR (character);
- return put_char_ccs_code_point (character, ccs, value);
+ value = put_char_ccs_code_point (character, ccs, value);
}
else if (EQ (attribute, Q_decomposition))
{
return slarg.retval;
}
-EXFUN (Fmake_char, 3);
-EXFUN (Fdecode_char, 2);
-
DEFUN ("define-char", Fdefine_char, 1, 1, 0, /*
Store character's ATTRIBUTES.
*/
signal_simple_error ("Invalid argument", attributes);
if (!NILP (ccs = Ffind_charset (Fcar (cell)))
&& ((XCHARSET_FINAL (ccs) != 0) ||
- (XCHARSET_UCS_MAX (ccs) > 0)) )
+ (XCHARSET_MAX_CODE (ccs) > 0) ||
+ (EQ (ccs, Vcharset_chinese_big5))) )
{
cell = Fcdr (cell);
if (CONSP (cell))
character = Fmake_char (ccs, Fcar (cell), Fcar (Fcdr (cell)));
else
- character = Fdecode_char (ccs, cell);
+ character = Fdecode_char (ccs, cell, Qnil);
if (!NILP (character))
goto setup_attributes;
}
if (CONSP (cell))
return Fmake_char (ccs, Fcar (cell), Fcar (Fcdr (cell)));
else
- return Fdecode_char (ccs, cell);
+ return Fdecode_char (ccs, cell, Qnil);
}
rest = Fcdr (rest);
}
int
check_category_char (Emchar ch, Lisp_Object table,
- unsigned int designator, unsigned int not)
+ unsigned int designator, unsigned int not_p)
{
REGISTER Lisp_Object temp;
Lisp_Char_Table *ctbl;
ctbl = XCHAR_TABLE (table);
temp = get_char_table (ch, ctbl);
if (NILP (temp))
- return not;
+ return not_p;
designator -= ' ';
- return bit_vector_bit (XBIT_VECTOR (temp), designator) ? !not : not;
+ return bit_vector_bit (XBIT_VECTOR (temp), designator) ? !not_p : not_p;
}
DEFUN ("check-category-at", Fcheck_category_at, 2, 4, 0, /*