/[emacs]/emacs/src/chartab.c
ViewVC logotype

Diff of /emacs/src/chartab.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.2.8 by handa, Mon Jan 6 13:26:04 2003 UTC revision 1.1.2.9 by handa, Tue May 6 23:24:36 2003 UTC
# Line 707  DEFUN ("optimize-char-table", Foptimize_ Line 707  DEFUN ("optimize-char-table", Foptimize_
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);
# Line 722  map_sub_char_table (c_function, function Line 722  map_sub_char_table (c_function, function
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;
# Line 770  map_char_table (c_function, function, ta Line 776  map_char_table (c_function, function, ta
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      {      {
# Line 778  map_char_table (c_function, function, ta Line 786  map_char_table (c_function, function, ta
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,
# Line 800  DEFUN ("map-char-table", Fmap_char_table Line 823  DEFUN ("map-char-table", Fmap_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  {  {

Legend:
Removed from v.1.1.2.8  
changed lines
  Added in v.1.1.2.9

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26