Function: sort-charsets
sort-charsets is a function defined in charset.c.
Signature
(sort-charsets CHARSETS)
Documentation
Sort charset list CHARSETS by a priority of each charset.
Return the sorted list. CHARSETS is modified by side effects.
See also charset-priority-list and set-charset-priority.
Source Code
// Defined in /usr/src/emacs/src/charset.c
{
ptrdiff_t n = list_length (charsets), i, j;
int done;
Lisp_Object tail, elt, attrs;
struct charset_sort_data *sort_data;
int id, min_id = INT_MAX, max_id = INT_MIN;
USE_SAFE_ALLOCA;
if (n == 0)
return Qnil;
SAFE_NALLOCA (sort_data, 1, n);
for (tail = charsets, i = 0; CONSP (tail); tail = XCDR (tail), i++)
{
elt = XCAR (tail);
CHECK_CHARSET_GET_ATTR (elt, attrs);
sort_data[i].charset = elt;
sort_data[i].id = id = XFIXNUM (CHARSET_ATTR_ID (attrs));
if (id < min_id)
min_id = id;
if (id > max_id)
max_id = id;
}
for (done = 0, tail = Vcharset_ordered_list, i = 0;
done < n && CONSP (tail); tail = XCDR (tail), i++)
{
elt = XCAR (tail);
id = XFIXNAT (elt);
if (id >= min_id && id <= max_id)
for (j = 0; j < n; j++)
if (sort_data[j].id == id)
{
sort_data[j].priority = i;
done++;
}
}
qsort (sort_data, n, sizeof *sort_data, charset_compare);
for (i = 0, tail = charsets; CONSP (tail); tail = XCDR (tail), i++)
XSETCAR (tail, sort_data[i].charset);
SAFE_FREE ();
return charsets;
}