707 |
|
|
708 |
|
|
709 |
static Lisp_Object |
static Lisp_Object |
710 |
map_sub_char_table (c_function, function, table, arg, val, range) |
map_sub_char_table (c_function, function, table, arg, val, range, default_val) |
711 |
void (*c_function) P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); |
void (*c_function) P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); |
712 |
Lisp_Object function, table, arg, val, range; |
Lisp_Object function, table, arg, val, range, default_val; |
713 |
{ |
{ |
714 |
struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table); |
struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table); |
715 |
int depth = XINT (tbl->depth); |
int depth = XINT (tbl->depth); |
722 |
|
|
723 |
this = tbl->contents[i]; |
this = tbl->contents[i]; |
724 |
if (SUB_CHAR_TABLE_P (this)) |
if (SUB_CHAR_TABLE_P (this)) |
725 |
val = map_sub_char_table (c_function, function, this, arg, val, range); |
val = map_sub_char_table (c_function, function, this, arg, val, range, |
726 |
else if (NILP (Fequal (val, this))) |
default_val); |
727 |
|
else |
728 |
{ |
{ |
729 |
if (! NILP (val)) |
if (NILP (this)) |
730 |
|
this = default_val; |
731 |
|
if (NILP (Fequal (val, this))) |
732 |
{ |
{ |
733 |
XCDR (range) = make_number (c - 1); |
if (! NILP (val)) |
|
if (depth == 3 |
|
|
&& EQ (XCAR (range), XCDR (range))) |
|
734 |
{ |
{ |
735 |
if (c_function) |
XCDR (range) = make_number (c - 1); |
736 |
(*c_function) (arg, XCAR (range), val); |
if (depth == 3 |
737 |
else |
&& EQ (XCAR (range), XCDR (range))) |
738 |
call2 (function, XCAR (range), val); |
{ |
739 |
} |
if (c_function) |
740 |
else |
(*c_function) (arg, XCAR (range), val); |
741 |
{ |
else |
742 |
if (c_function) |
call2 (function, XCAR (range), val); |
743 |
(*c_function) (arg, range, val); |
} |
744 |
else |
else |
745 |
call2 (function, range, val); |
{ |
746 |
|
if (c_function) |
747 |
|
(*c_function) (arg, range, val); |
748 |
|
else |
749 |
|
call2 (function, range, val); |
750 |
|
} |
751 |
} |
} |
752 |
|
val = this; |
753 |
|
XCAR (range) = make_number (c); |
754 |
} |
} |
|
val = this; |
|
|
XCAR (range) = make_number (c); |
|
755 |
} |
} |
756 |
} |
} |
757 |
return val; |
return val; |
776 |
int c, i; |
int c, i; |
777 |
|
|
778 |
range = Fcons (make_number (0), Qnil); |
range = Fcons (make_number (0), Qnil); |
779 |
val = char_table_ref (table, 0); |
val = XCHAR_TABLE (table)->ascii; |
780 |
|
if (SUB_CHAR_TABLE_P (val)) |
781 |
|
val = XSUB_CHAR_TABLE (val)->contents[0]; |
782 |
|
|
783 |
for (i = 0, c = 0; i < chartab_size[0]; i++, c += chartab_chars[0]) |
for (i = 0, c = 0; i < chartab_size[0]; i++, c += chartab_chars[0]) |
784 |
{ |
{ |
786 |
|
|
787 |
this = XCHAR_TABLE (table)->contents[i]; |
this = XCHAR_TABLE (table)->contents[i]; |
788 |
if (SUB_CHAR_TABLE_P (this)) |
if (SUB_CHAR_TABLE_P (this)) |
789 |
val = map_sub_char_table (c_function, function, this, arg, val, range); |
val = map_sub_char_table (c_function, function, this, arg, val, range, |
790 |
else if (NILP (Fequal (val, this))) |
XCHAR_TABLE (table)->defalt); |
791 |
|
else |
792 |
{ |
{ |
793 |
if (! NILP (val)) |
if (NILP (this)) |
794 |
|
this = XCHAR_TABLE (table)->defalt; |
795 |
|
if (NILP (Fequal (val, this))) |
796 |
{ |
{ |
797 |
XCDR (range) = make_number (c - 1); |
if (! NILP (val)) |
798 |
if (c_function) |
{ |
799 |
(*c_function) (arg, range, val); |
XCDR (range) = make_number (c - 1); |
800 |
else |
if (c_function) |
801 |
call2 (function, range, val); |
(*c_function) (arg, range, val); |
802 |
|
else |
803 |
|
call2 (function, range, val); |
804 |
|
} |
805 |
|
val = this; |
806 |
|
XCAR (range) = make_number (c); |
807 |
} |
} |
|
val = this; |
|
|
XCAR (range) = make_number (c); |
|
808 |
} |
} |
809 |
} |
} |
810 |
|
|
811 |
|
if (! NILP (val)) |
812 |
|
{ |
813 |
|
XCDR (range) = make_number (c - 1); |
814 |
|
if (c_function) |
815 |
|
(*c_function) (arg, range, val); |
816 |
|
else |
817 |
|
call2 (function, range, val); |
818 |
|
} |
819 |
} |
} |
820 |
|
|
821 |
DEFUN ("map-char-table", Fmap_char_table, Smap_char_table, |
DEFUN ("map-char-table", Fmap_char_table, Smap_char_table, |
823 |
doc: /* |
doc: /* |
824 |
Call FUNCTION for each character in CHAR-TABLE. |
Call FUNCTION for each character in CHAR-TABLE. |
825 |
FUNCTION is called with two arguments--a key and a value. |
FUNCTION is called with two arguments--a key and a value. |
826 |
The key is always a possible IDX argument to `aref'. */) |
The key is a character code or a cons of character codes specifying a |
827 |
|
range of characters that have the same value. */) |
828 |
(function, char_table) |
(function, char_table) |
829 |
Lisp_Object function, char_table; |
Lisp_Object function, char_table; |
830 |
{ |
{ |