diff options
| author | Kenichi Handa | 2003-05-06 23:24:36 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2003-05-06 23:24:36 +0000 |
| commit | 2f76e15edacb544de71cab4b2c3ae14b90a4da90 (patch) | |
| tree | b9a005c0ef22938e7cee7ca4d5113e3074598f25 /src | |
| parent | fd12904bd6af753b311eb2b89bc13a7e20daf660 (diff) | |
| download | emacs-2f76e15edacb544de71cab4b2c3ae14b90a4da90.tar.gz emacs-2f76e15edacb544de71cab4b2c3ae14b90a4da90.zip | |
(map_sub_char_table): New argument DEFAULT_VAL.
(map_char_table): Don't inherit the value from the parent on
initializing VAL. Adjusted for the above change.
Diffstat (limited to 'src')
| -rw-r--r-- | src/chartab.c | 88 |
1 files changed, 56 insertions, 32 deletions
diff --git a/src/chartab.c b/src/chartab.c index 2b4c37755fa..1aae0969e6c 100644 --- a/src/chartab.c +++ b/src/chartab.c | |||
| @@ -707,9 +707,9 @@ DEFUN ("optimize-char-table", Foptimize_char_table, Soptimize_char_table, | |||
| 707 | 707 | ||
| 708 | 708 | ||
| 709 | static Lisp_Object | 709 | static Lisp_Object |
| 710 | map_sub_char_table (c_function, function, table, arg, val, range) | 710 | map_sub_char_table (c_function, function, table, arg, val, range, default_val) |
| 711 | void (*c_function) P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); | 711 | void (*c_function) P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); |
| 712 | Lisp_Object function, table, arg, val, range; | 712 | Lisp_Object function, table, arg, val, range, default_val; |
| 713 | { | 713 | { |
| 714 | struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table); | 714 | struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table); |
| 715 | int depth = XINT (tbl->depth); | 715 | int depth = XINT (tbl->depth); |
| @@ -722,30 +722,36 @@ map_sub_char_table (c_function, function, table, arg, val, range) | |||
| 722 | 722 | ||
| 723 | this = tbl->contents[i]; | 723 | this = tbl->contents[i]; |
| 724 | if (SUB_CHAR_TABLE_P (this)) | 724 | if (SUB_CHAR_TABLE_P (this)) |
| 725 | val = map_sub_char_table (c_function, function, this, arg, val, range); | 725 | val = map_sub_char_table (c_function, function, this, arg, val, range, |
| 726 | else if (NILP (Fequal (val, this))) | 726 | default_val); |
| 727 | else | ||
| 727 | { | 728 | { |
| 728 | if (! NILP (val)) | 729 | if (NILP (this)) |
| 730 | this = default_val; | ||
| 731 | if (NILP (Fequal (val, this))) | ||
| 729 | { | 732 | { |
| 730 | XCDR (range) = make_number (c - 1); | 733 | if (! NILP (val)) |
| 731 | if (depth == 3 | ||
| 732 | && EQ (XCAR (range), XCDR (range))) | ||
| 733 | { | ||
| 734 | if (c_function) | ||
| 735 | (*c_function) (arg, XCAR (range), val); | ||
| 736 | else | ||
| 737 | call2 (function, XCAR (range), val); | ||
| 738 | } | ||
| 739 | else | ||
| 740 | { | 734 | { |
| 741 | if (c_function) | 735 | XCDR (range) = make_number (c - 1); |
| 742 | (*c_function) (arg, range, val); | 736 | if (depth == 3 |
| 737 | && EQ (XCAR (range), XCDR (range))) | ||
| 738 | { | ||
| 739 | if (c_function) | ||
| 740 | (*c_function) (arg, XCAR (range), val); | ||
| 741 | else | ||
| 742 | call2 (function, XCAR (range), val); | ||
| 743 | } | ||
| 743 | else | 744 | else |
| 744 | call2 (function, range, val); | 745 | { |
| 746 | if (c_function) | ||
| 747 | (*c_function) (arg, range, val); | ||
| 748 | else | ||
| 749 | call2 (function, range, val); | ||
| 750 | } | ||
| 745 | } | 751 | } |
| 752 | val = this; | ||
| 753 | XCAR (range) = make_number (c); | ||
| 746 | } | 754 | } |
| 747 | val = this; | ||
| 748 | XCAR (range) = make_number (c); | ||
| 749 | } | 755 | } |
| 750 | } | 756 | } |
| 751 | return val; | 757 | return val; |
| @@ -770,7 +776,9 @@ map_char_table (c_function, function, table, arg, depth, indices) | |||
| 770 | int c, i; | 776 | int c, i; |
| 771 | 777 | ||
| 772 | range = Fcons (make_number (0), Qnil); | 778 | range = Fcons (make_number (0), Qnil); |
| 773 | val = char_table_ref (table, 0); | 779 | val = XCHAR_TABLE (table)->ascii; |
| 780 | if (SUB_CHAR_TABLE_P (val)) | ||
| 781 | val = XSUB_CHAR_TABLE (val)->contents[0]; | ||
| 774 | 782 | ||
| 775 | for (i = 0, c = 0; i < chartab_size[0]; i++, c += chartab_chars[0]) | 783 | for (i = 0, c = 0; i < chartab_size[0]; i++, c += chartab_chars[0]) |
| 776 | { | 784 | { |
| @@ -778,21 +786,36 @@ map_char_table (c_function, function, table, arg, depth, indices) | |||
| 778 | 786 | ||
| 779 | this = XCHAR_TABLE (table)->contents[i]; | 787 | this = XCHAR_TABLE (table)->contents[i]; |
| 780 | if (SUB_CHAR_TABLE_P (this)) | 788 | if (SUB_CHAR_TABLE_P (this)) |
| 781 | val = map_sub_char_table (c_function, function, this, arg, val, range); | 789 | val = map_sub_char_table (c_function, function, this, arg, val, range, |
| 782 | else if (NILP (Fequal (val, this))) | 790 | XCHAR_TABLE (table)->defalt); |
| 791 | else | ||
| 783 | { | 792 | { |
| 784 | if (! NILP (val)) | 793 | if (NILP (this)) |
| 794 | this = XCHAR_TABLE (table)->defalt; | ||
| 795 | if (NILP (Fequal (val, this))) | ||
| 785 | { | 796 | { |
| 786 | XCDR (range) = make_number (c - 1); | 797 | if (! NILP (val)) |
| 787 | if (c_function) | 798 | { |
| 788 | (*c_function) (arg, range, val); | 799 | XCDR (range) = make_number (c - 1); |
| 789 | else | 800 | if (c_function) |
| 790 | call2 (function, range, val); | 801 | (*c_function) (arg, range, val); |
| 802 | else | ||
| 803 | call2 (function, range, val); | ||
| 804 | } | ||
| 805 | val = this; | ||
| 806 | XCAR (range) = make_number (c); | ||
| 791 | } | 807 | } |
| 792 | val = this; | ||
| 793 | XCAR (range) = make_number (c); | ||
| 794 | } | 808 | } |
| 795 | } | 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 | } | ||
| 796 | } | 819 | } |
| 797 | 820 | ||
| 798 | DEFUN ("map-char-table", Fmap_char_table, Smap_char_table, | 821 | DEFUN ("map-char-table", Fmap_char_table, Smap_char_table, |
| @@ -800,7 +823,8 @@ DEFUN ("map-char-table", Fmap_char_table, Smap_char_table, | |||
| 800 | doc: /* | 823 | doc: /* |
| 801 | Call FUNCTION for each character in CHAR-TABLE. | 824 | Call FUNCTION for each character in CHAR-TABLE. |
| 802 | FUNCTION is called with two arguments--a key and a value. | 825 | FUNCTION is called with two arguments--a key and a value. |
| 803 | The key is always a possible IDX argument to `aref'. */) | 826 | The key is a character code or a cons of character codes specifying a |
| 827 | range of characters that have the same value. */) | ||
| 804 | (function, char_table) | 828 | (function, char_table) |
| 805 | Lisp_Object function, char_table; | 829 | Lisp_Object function, char_table; |
| 806 | { | 830 | { |