Function: unify-charset
unify-charset is a function defined in charset.c.
Signature
(unify-charset CHARSET &optional UNIFY-MAP DEUNIFY)
Documentation
Unify characters of CHARSET with Unicode.
This means reading the relevant file and installing the table defined by CHARSET's :unify-map property.
Optional second arg UNIFY-MAP is a file name string or a vector. It has
the same meaning as the :unify-map attribute in the function
define-charset (which see).
Optional third argument DEUNIFY, if non-nil, means to de-unify CHARSET.
Source Code
// Defined in /usr/src/emacs/src/charset.c
{
int id;
struct charset *cs;
CHECK_CHARSET_GET_ID (charset, id);
cs = CHARSET_FROM_ID (id);
if (NILP (deunify)
? CHARSET_UNIFIED_P (cs) && ! NILP (CHARSET_DEUNIFIER (cs))
: ! CHARSET_UNIFIED_P (cs))
return Qnil;
CHARSET_UNIFIED_P (cs) = 0;
if (NILP (deunify))
{
if (CHARSET_METHOD (cs) != CHARSET_METHOD_OFFSET
|| CHARSET_CODE_OFFSET (cs) < 0x110000)
error ("Can't unify charset: %s", SDATA (SYMBOL_NAME (charset)));
if (NILP (unify_map))
unify_map = CHARSET_UNIFY_MAP (cs);
else
{
if (! STRINGP (unify_map) && ! VECTORP (unify_map))
signal_error ("Bad unify-map", unify_map);
set_charset_attr (cs, charset_unify_map, unify_map);
}
if (NILP (Vchar_unify_table))
Vchar_unify_table = Fmake_char_table (Qnil, Qnil);
char_table_set_range (Vchar_unify_table,
cs->min_char, cs->max_char, charset);
CHARSET_UNIFIED_P (cs) = 1;
}
else if (CHAR_TABLE_P (Vchar_unify_table))
{
unsigned min_code = CHARSET_MIN_CODE (cs);
unsigned max_code = CHARSET_MAX_CODE (cs);
int min_char = DECODE_CHAR (cs, min_code);
int max_char = DECODE_CHAR (cs, max_code);
char_table_set_range (Vchar_unify_table, min_char, max_char, Qnil);
}
return Qnil;
}