emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/xdisp.c


From: Kim F . Storm
Subject: [Emacs-diffs] Changes to emacs/src/xdisp.c
Date: Fri, 26 Nov 2004 09:44:58 -0500

Index: emacs/src/xdisp.c
diff -c emacs/src/xdisp.c:1.942 emacs/src/xdisp.c:1.943
*** emacs/src/xdisp.c:1.942     Wed Nov 24 11:29:46 2004
--- emacs/src/xdisp.c   Fri Nov 26 14:38:55 2004
***************
*** 807,813 ****
  
  /* Function prototypes.  */
  
! static void setup_for_ellipsis P_ ((struct it *));
  static void mark_window_display_accurate_1 P_ ((struct window *, int));
  static int single_display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
  static int display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
--- 807,813 ----
  
  /* Function prototypes.  */
  
! static void setup_for_ellipsis P_ ((struct it *, int));
  static void mark_window_display_accurate_1 P_ ((struct window *, int));
  static int single_display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
  static int display_prop_string_p P_ ((Lisp_Object, Lisp_Object));
***************
*** 3227,3233 ****
              it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p;
            }
          else if (display_ellipsis_p)
!           setup_for_ellipsis (it);
        }
      }
  
--- 3227,3233 ----
              it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p;
            }
          else if (display_ellipsis_p)
!           setup_for_ellipsis (it, 0);
        }
      }
  
***************
*** 3235,3248 ****
  }
  
  
! /* Make iterator IT return `...' next.  */
  
  static void
! setup_for_ellipsis (it)
       struct it *it;
  {
!   if (it->dp
!       && VECTORP (DISP_INVIS_VECTOR (it->dp)))
      {
        struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));
        it->dpvec = v->contents;
--- 3235,3251 ----
  }
  
  
! /* Make iterator IT return `...' next.
!    Replaces LEN characters from buffer.  */
  
  static void
! setup_for_ellipsis (it, len)
       struct it *it;
+      int len;
  {
!   /* Use the display table definition for `...'.  Invalid glyphs
!      will be handled by the method returning elements from dpvec.  */
!   if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp)))
      {
        struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));
        it->dpvec = v->contents;
***************
*** 3255,3266 ****
        it->dpend = default_invis_vector + 3;
      }
  
!   /* The ellipsis display does not replace the display of the
!      character at the new position.  Indicate this by setting
!      IT->dpvec_char_len to zero.  */
!   it->dpvec_char_len = 0;
! 
    it->current.dpvec_index = 0;
    it->method = next_element_from_display_vector;
  }
  
--- 3258,3269 ----
        it->dpend = default_invis_vector + 3;
      }
  
!   it->dpvec_char_len = len;
    it->current.dpvec_index = 0;
+ 
+   /* Remember the current face id in case glyphs specify faces.
+      IT's face is restored in set_iterator_to_next.  */
+   it->saved_face_id = it->face_id;
    it->method = next_element_from_display_vector;
  }
  
***************
*** 4048,4054 ****
        /* If we have to display `...' for invisible text, set
         the iterator up for that.  */
        if (display_ellipsis_p)
!       setup_for_ellipsis (it);
      }
    else
      {
--- 4051,4057 ----
        /* If we have to display `...' for invisible text, set
         the iterator up for that.  */
        if (display_ellipsis_p)
!       setup_for_ellipsis (it, 0);
      }
    else
      {
***************
*** 4840,4846 ****
       we hit the end of what we iterate over.  Performance note: the
       function pointer `method' used here turns out to be faster than
       using a sequence of if-statements.  */
!   int success_p = (*it->method) (it);
  
    if (it->what == IT_CHARACTER)
      {
--- 4843,4852 ----
       we hit the end of what we iterate over.  Performance note: the
       function pointer `method' used here turns out to be faster than
       using a sequence of if-statements.  */
!   int success_p;
! 
!  get_next:
!   success_p = (*it->method) (it);
  
    if (it->what == IT_CHARACTER)
      {
***************
*** 4872,4885 ****
                  it->dpvec = v->contents;
                  it->dpend = v->contents + v->size;
                  it->current.dpvec_index = 0;
                  it->method = next_element_from_display_vector;
-                 success_p = get_next_display_element (it);
                }
              else
                {
                  set_iterator_to_next (it, 0);
-                 success_p = get_next_display_element (it);
                }
            }
  
          /* Translate control characters into `\003' or `^C' form.
--- 4878,4891 ----
                  it->dpvec = v->contents;
                  it->dpend = v->contents + v->size;
                  it->current.dpvec_index = 0;
+                 it->saved_face_id = it->face_id;
                  it->method = next_element_from_display_vector;
                }
              else
                {
                  set_iterator_to_next (it, 0);
                }
+             goto get_next;
            }
  
          /* Translate control characters into `\003' or `^C' form.
***************
*** 4915,4920 ****
--- 4921,4927 ----
                 IT->ctl_chars with glyphs for what we have to
                 display.  Then, set IT->dpvec to these glyphs.  */
              GLYPH g;
+             int ctl_len;
  
              if (it->c < 128 && it->ctl_arrow_p)
                {
***************
*** 4929,4942 ****
  
                  g = FAST_MAKE_GLYPH (it->c ^ 0100, 0);
                  XSETINT (it->ctl_chars[1], g);
! 
!                 /* Set up IT->dpvec and return first character from it.  */
!                 it->dpvec_char_len = it->len;
!                 it->dpvec = it->ctl_chars;
!                 it->dpend = it->dpvec + 2;
!                 it->current.dpvec_index = 0;
!                 it->method = next_element_from_display_vector;
!                 get_next_display_element (it);
                }
              else
                {
--- 4936,4942 ----
  
                  g = FAST_MAKE_GLYPH (it->c ^ 0100, 0);
                  XSETINT (it->ctl_chars[1], g);
!                 ctl_len = 2;
                }
              else
                {
***************
*** 4985,5000 ****
                      g = FAST_MAKE_GLYPH ((str[i] & 7) + '0', 0);
                      XSETINT (it->ctl_chars[i * 4 + 3], g);
                    }
! 
!                 /* Set up IT->dpvec and return the first character
!                      from it.  */
!                 it->dpvec_char_len = it->len;
!                 it->dpvec = it->ctl_chars;
!                 it->dpend = it->dpvec + len * 4;
!                 it->current.dpvec_index = 0;
!                 it->method = next_element_from_display_vector;
!                 get_next_display_element (it);
                }
            }
        }
  
--- 4985,5001 ----
                      g = FAST_MAKE_GLYPH ((str[i] & 7) + '0', 0);
                      XSETINT (it->ctl_chars[i * 4 + 3], g);
                    }
!                 ctl_len = len * 4;
                }
+ 
+             /* Set up IT->dpvec and return first character from it.  */
+             it->dpvec_char_len = it->len;
+             it->dpvec = it->ctl_chars;
+             it->dpend = it->dpvec + ctl_len;
+             it->current.dpvec_index = 0;
+             it->saved_face_id = it->face_id;
+             it->method = next_element_from_display_vector;
+             goto get_next;
            }
        }
  
***************
*** 5184,5194 ****
               && IT_STRING_CHARPOS (*it) >= 0));
  }
  
- 
  /* Load IT's display element fields with information about the next
     display element which comes from a display table entry or from the
     result of translating a control character to one of the forms `^C'
!    or `\003'.  IT->dpvec holds the glyphs to return as characters.  */
  
  static int
  next_element_from_display_vector (it)
--- 5185,5198 ----
               && IT_STRING_CHARPOS (*it) >= 0));
  }
  
  /* Load IT's display element fields with information about the next
     display element which comes from a display table entry or from the
     result of translating a control character to one of the forms `^C'
!    or `\003'.
! 
!    IT->dpvec holds the glyphs to return as characters.
!    IT->saved_face_id holds the face id before the display vector--
!    it is restored into IT->face_idin set_iterator_to_next.  */
  
  static int
  next_element_from_display_vector (it)
***************
*** 5197,5206 ****
    /* Precondition.  */
    xassert (it->dpvec && it->current.dpvec_index >= 0);
  
-   /* Remember the current face id in case glyphs specify faces.
-      IT's face is restored in set_iterator_to_next.  */
-   it->saved_face_id = it->face_id;
- 
    if (INTEGERP (*it->dpvec)
        && GLYPH_CHAR_VALID_P (XFASTINT (*it->dpvec)))
      {
--- 5201,5206 ----
***************
*** 5384,5411 ****
       struct it *it;
  {
    if (it->selective_display_ellipsis_p)
!     {
!       if (it->dp && VECTORP (DISP_INVIS_VECTOR (it->dp)))
!       {
!         /* Use the display table definition for `...'.  Invalid glyphs
!            will be handled by the method returning elements from dpvec.  */
!         struct Lisp_Vector *v = XVECTOR (DISP_INVIS_VECTOR (it->dp));
!         it->dpvec_char_len = it->len;
!         it->dpvec = v->contents;
!         it->dpend = v->contents + v->size;
!         it->current.dpvec_index = 0;
!         it->method = next_element_from_display_vector;
!       }
!       else
!       {
!         /* Use default `...' which is stored in default_invis_vector.  */
!         it->dpvec_char_len = it->len;
!         it->dpvec = default_invis_vector;
!         it->dpend = default_invis_vector + 3;
!         it->current.dpvec_index = 0;
!         it->method = next_element_from_display_vector;
!       }
!     }
    else
      {
        /* The face at the current position may be different from the
--- 5384,5390 ----
       struct it *it;
  {
    if (it->selective_display_ellipsis_p)
!     setup_for_ellipsis (it, it->len);
    else
      {
        /* The face at the current position may be different from the
***************
*** 5776,5783 ****
                                  result = MOVE_NEWLINE_OR_CR;
                                  break;
                                }
-                             if (it->method == 
next_element_from_display_vector)
-                               it->face_id = it->saved_face_id;
                            }
  #endif /* HAVE_WINDOW_SYSTEM */
                        }
--- 5755,5760 ----
***************
*** 5862,5869 ****
                  result = MOVE_NEWLINE_OR_CR;
                  break;
                }
-             if (it->method == next_element_from_display_vector)
-               it->face_id = it->saved_face_id;
            }
  #endif /* HAVE_WINDOW_SYSTEM */
          result = MOVE_LINE_TRUNCATED;
--- 5839,5844 ----
***************
*** 14633,14640 ****
      {
        move_it_in_display_line_to (it, ZV, it->first_visible_x,
                                  MOVE_TO_POS | MOVE_TO_X);
-       if (it->method == next_element_from_display_vector)
-       it->face_id = it->saved_face_id;
      }
  
    /* Get the initial row height.  This is either the height of the
--- 14608,14613 ----
***************
*** 14794,14801 ****
                                  row->continued_p = 0;
                                  row->exact_window_width_line_p = 1;
                                }
-                             else if (it->method == 
next_element_from_display_vector)
-                               it->face_id = it->saved_face_id;
                            }
  #endif /* HAVE_WINDOW_SYSTEM */
                        }
--- 14767,14772 ----
***************
*** 14976,14983 ****
                      row->exact_window_width_line_p = 1;
                      goto at_end_of_line;
                    }
-                 if (it->method == next_element_from_display_vector)
-                   it->face_id = it->saved_face_id;
                }
            }
  #endif /* HAVE_WINDOW_SYSTEM */
--- 14947,14952 ----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]