from = min_char;
i = CHARTAB_IDX (from, depth, min_char);
c = min_char + chars_in_block * i;
- for (; i <= lim; i++, c += chars_in_block)
+ for (; i < lim; i++, c += chars_in_block)
{
if (c > to)
break;
char_table_set_range (Lisp_Object table, int from, int to, Lisp_Object val)
{
struct Lisp_Char_Table *tbl = XCHAR_TABLE (table);
- Lisp_Object *contents = tbl->contents;
if (from == to)
char_table_set (table, from, val);
(Lisp_Object char_table, Lisp_Object n, Lisp_Object value)
{
CHECK_CHAR_TABLE (char_table);
- if (EQ (XCHAR_TABLE (char_table)->purpose, Qchar_code_property_table))
- error ("Can't change extra-slot of char-code-property-table");
CHECK_NUMBER (n);
if (XINT (n) < 0
|| XINT (n) >= CHAR_TABLE_EXTRA_SLOTS (XCHAR_TABLE (char_table)))
Lisp_Object function, Lisp_Object table, Lisp_Object arg, Lisp_Object val,
Lisp_Object range, Lisp_Object top)
{
- /* Pointer to the elements of TABLE. */
- Lisp_Object *contents;
/* Depth of TABLE. */
int depth;
- /* Minimum and maxinum characters covered by TABLE. */
+ /* Minimum and maximum characters covered by TABLE. */
int min_char, max_char;
/* Number of characters covered by one element of TABLE. */
int chars_in_block;
struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
depth = XINT (tbl->depth);
- contents = tbl->contents;
min_char = XINT (tbl->min_char);
max_char = min_char + chartab_chars[depth - 1] - 1;
}
else
{
depth = 0;
- contents = XCHAR_TABLE (table)->contents;
min_char = 0;
max_char = MAX_CHAR;
}
\f
/* Unicode character property tables.
- This section provides a convenient and efficient way to get a
- Unicode character property from C code (from Lisp, you must use
- get-char-code-property).
+ This section provides a convenient and efficient way to get Unicode
+ character properties of characters from C code (from Lisp, you must
+ use get-char-code-property).
- The typical usage is to get a char-table for a specific property at
- a proper initialization time as this:
+ The typical usage is to get a char-table object for a specific
+ property like this (use of the "bidi-class" property below is just
+ an example):
Lisp_Object bidi_class_table = uniprop_table (intern ("bidi-class"));
- and get a property value for character CH as this:
+ (uniprop_table can return nil if it fails to find data for the
+ named property, or if it fails to load the appropriate Lisp support
+ file, so the return value should be tested to be non-nil, before it
+ is used.)
- Lisp_Object bidi_class = CHAR_TABLE_REF (CH, bidi_class_table);
+ To get a property value for character CH use CHAR_TABLE_REF:
+
+ Lisp_Object bidi_class = CHAR_TABLE_REF (bidi_class_table, CH);
In this case, what you actually get is an index number to the
vector of property values (symbols nil, L, R, etc).
+ The full list of Unicode character properties supported by Emacs is
+ documented in the ELisp manual, in the node "Character Properties".
+
A table for Unicode character property has these characteristics:
o The purpose is `char-code-property-table', which implies that the
means that we don't have to decode values.
o The third extra slot is a Lisp function, an index (integer) to
- the array uniprop_enncoder[], or nil. If it is a Lisp function, we
+ the array uniprop_encoder[], or nil. If it is a Lisp function, we
can't use such a table from C (at the moment). If it is nil, it
means that we don't have to encode values. */
Lisp_Object sub = make_sub_char_table (3, min_char, Qnil);
struct Lisp_Sub_Char_Table *subtbl = XSUB_CHAR_TABLE (sub);
const unsigned char *p, *pend;
- int i;
XSUB_CHAR_TABLE (table)->contents[idx] = sub;
p = SDATA (val), pend = p + SBYTES (val);