[Top][All Lists]
[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: |
Wed, 16 Feb 2005 18:45:03 -0500 |
Index: emacs/src/xdisp.c
diff -c emacs/src/xdisp.c:1.980 emacs/src/xdisp.c:1.981
*** emacs/src/xdisp.c:1.980 Tue Feb 15 23:04:45 2005
--- emacs/src/xdisp.c Wed Feb 16 23:45:03 2005
***************
*** 827,833 ****
static int invisible_text_between_p P_ ((struct it *, int, int));
#endif
- static int next_element_from_ellipsis P_ ((struct it *));
static void pint2str P_ ((char *, int, int));
static void pint2hrstr P_ ((char *, int, int));
static struct text_pos run_window_scroll_functions P_ ((Lisp_Object,
--- 827,832 ----
***************
*** 902,907 ****
--- 901,907 ----
static void back_to_previous_visible_line_start P_ ((struct it *));
void reseat_at_previous_visible_line_start P_ ((struct it *));
static void reseat_at_next_visible_line_start P_ ((struct it *, int));
+ static int next_element_from_ellipsis P_ ((struct it *));
static int next_element_from_display_vector P_ ((struct it *));
static int next_element_from_string P_ ((struct it *));
static int next_element_from_c_string P_ ((struct it *));
***************
*** 2043,2049 ****
check_it (it)
struct it *it;
{
! if (it->method == next_element_from_string)
{
xassert (STRINGP (it->string));
xassert (IT_STRING_CHARPOS (*it) >= 0);
--- 2043,2049 ----
check_it (it)
struct it *it;
{
! if (it->method == GET_FROM_STRING)
{
xassert (STRINGP (it->string));
xassert (IT_STRING_CHARPOS (*it) >= 0);
***************
*** 2051,2057 ****
else
{
xassert (IT_STRING_CHARPOS (*it) < 0);
! if (it->method == next_element_from_buffer)
{
/* Check that character and byte positions agree. */
xassert (IT_CHARPOS (*it) == BYTE_TO_CHAR (IT_BYTEPOS (*it)));
--- 2051,2057 ----
else
{
xassert (IT_STRING_CHARPOS (*it) < 0);
! if (it->method == GET_FROM_BUFFER)
{
/* Check that character and byte positions agree. */
xassert (IT_CHARPOS (*it) == BYTE_TO_CHAR (IT_BYTEPOS (*it)));
***************
*** 2561,2567 ****
property for an image, the iterator will be set up for that
image, and we have to undo that setup first before we can
correct the overlay string index. */
! if (it->method == next_element_from_image)
pop_it (it);
/* We already have the first chunk of overlay strings in
--- 2561,2567 ----
property for an image, the iterator will be set up for that
image, and we have to undo that setup first before we can
correct the overlay string index. */
! if (it->method == GET_FROM_IMAGE)
pop_it (it);
/* We already have the first chunk of overlay strings in
***************
*** 2584,2590 ****
it->string = it->overlay_strings[relative_index];
xassert (STRINGP (it->string));
it->current.string_pos = pos->string_pos;
! it->method = next_element_from_string;
}
#if 0 /* This is bogus because POS not having an overlay string
--- 2584,2590 ----
it->string = it->overlay_strings[relative_index];
xassert (STRINGP (it->string));
it->current.string_pos = pos->string_pos;
! it->method = GET_FROM_STRING;
}
#if 0 /* This is bogus because POS not having an overlay string
***************
*** 2600,2606 ****
while (it->sp)
pop_it (it);
it->current.overlay_string_index = -1;
! it->method = next_element_from_buffer;
if (CHARPOS (pos->pos) == ZV)
it->overlay_strings_at_end_processed_p = 1;
}
--- 2600,2606 ----
while (it->sp)
pop_it (it);
it->current.overlay_string_index = -1;
! it->method = GET_FROM_BUFFER;
if (CHARPOS (pos->pos) == ZV)
it->overlay_strings_at_end_processed_p = 1;
}
***************
*** 2714,2720 ****
{
/* Don't check for overlay strings below when set to deliver
characters from a display vector. */
! if (it->method == next_element_from_display_vector)
handle_overlay_change_p = 0;
/* Handle overlay changes. */
--- 2714,2720 ----
{
/* Don't check for overlay strings below when set to deliver
characters from a display vector. */
! if (it->method == GET_FROM_DISPLAY_VECTOR)
handle_overlay_change_p = 0;
/* Handle overlay changes. */
***************
*** 3372,3378 ****
/* 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;
it->ellipsis_p = 1;
}
--- 3372,3378 ----
/* 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 = GET_FROM_DISPLAY_VECTOR;
it->ellipsis_p = 1;
}
***************
*** 3737,3743 ****
it->image_id = -1; /* no image */
it->position = start_pos;
it->object = NILP (object) ? it->w->buffer : object;
! it->method = next_element_from_image;
it->face_id = face_id;
/* Say that we haven't consumed the characters with
--- 3737,3743 ----
it->image_id = -1; /* no image */
it->position = start_pos;
it->object = NILP (object) ? it->w->buffer : object;
! it->method = GET_FROM_IMAGE;
it->face_id = face_id;
/* Say that we haven't consumed the characters with
***************
*** 3820,3826 ****
it->current.overlay_string_index = -1;
IT_STRING_CHARPOS (*it) = IT_STRING_BYTEPOS (*it) = 0;
it->end_charpos = it->string_nchars = SCHARS (it->string);
! it->method = next_element_from_string;
it->stop_charpos = 0;
it->string_from_display_prop_p = 1;
/* Say that we haven't consumed the characters with
--- 3820,3826 ----
it->current.overlay_string_index = -1;
IT_STRING_CHARPOS (*it) = IT_STRING_BYTEPOS (*it) = 0;
it->end_charpos = it->string_nchars = SCHARS (it->string);
! it->method = GET_FROM_STRING;
it->stop_charpos = 0;
it->string_from_display_prop_p = 1;
/* Say that we haven't consumed the characters with
***************
*** 3830,3836 ****
}
else if (CONSP (value) && EQ (XCAR (value), Qspace))
{
! it->method = next_element_from_stretch;
it->object = value;
it->current.pos = it->position = start_pos;
}
--- 3830,3836 ----
}
else if (CONSP (value) && EQ (XCAR (value), Qspace))
{
! it->method = GET_FROM_STRETCH;
it->object = value;
it->current.pos = it->position = start_pos;
}
***************
*** 3841,3847 ****
it->image_id = lookup_image (it->f, value);
it->position = start_pos;
it->object = NILP (object) ? it->w->buffer : object;
! it->method = next_element_from_image;
/* Say that we haven't consumed the characters with
`display' property yet. The call to pop_it in
--- 3841,3847 ----
it->image_id = lookup_image (it->f, value);
it->position = start_pos;
it->object = NILP (object) ? it->w->buffer : object;
! it->method = GET_FROM_IMAGE;
/* Say that we haven't consumed the characters with
`display' property yet. The call to pop_it in
***************
*** 4097,4103 ****
if (id >= 0)
{
! it->method = next_element_from_composition;
it->cmp_id = id;
it->cmp_len = COMPOSITION_LENGTH (prop);
/* For a terminal, draw only the first character of the
--- 4097,4103 ----
if (id >= 0)
{
! it->method = GET_FROM_COMPOSITION;
it->cmp_id = id;
it->cmp_len = COMPOSITION_LENGTH (prop);
/* For a terminal, draw only the first character of the
***************
*** 4172,4178 ****
it->current.overlay_string_index = -1;
SET_TEXT_POS (it->current.string_pos, -1, -1);
it->n_overlay_strings = 0;
! it->method = next_element_from_buffer;
/* If we're at the end of the buffer, record that we have
processed the overlay strings there already, so that
--- 4172,4178 ----
it->current.overlay_string_index = -1;
SET_TEXT_POS (it->current.string_pos, -1, -1);
it->n_overlay_strings = 0;
! it->method = GET_FROM_BUFFER;
/* If we're at the end of the buffer, record that we have
processed the overlay strings there already, so that
***************
*** 4201,4207 ****
it->string = it->overlay_strings[i];
it->multibyte_p = STRING_MULTIBYTE (it->string);
SET_TEXT_POS (it->current.string_pos, 0, 0);
! it->method = next_element_from_string;
it->stop_charpos = 0;
}
--- 4201,4207 ----
it->string = it->overlay_strings[i];
it->multibyte_p = STRING_MULTIBYTE (it->string);
SET_TEXT_POS (it->current.string_pos, 0, 0);
! it->method = GET_FROM_STRING;
it->stop_charpos = 0;
}
***************
*** 4466,4478 ****
xassert (STRINGP (it->string));
it->end_charpos = SCHARS (it->string);
it->multibyte_p = STRING_MULTIBYTE (it->string);
! it->method = next_element_from_string;
}
else
{
it->string = Qnil;
it->current.overlay_string_index = -1;
! it->method = next_element_from_buffer;
}
CHECK_IT (it);
--- 4466,4478 ----
xassert (STRINGP (it->string));
it->end_charpos = SCHARS (it->string);
it->multibyte_p = STRING_MULTIBYTE (it->string);
! it->method = GET_FROM_STRING;
}
else
{
it->string = Qnil;
it->current.overlay_string_index = -1;
! it->method = GET_FROM_BUFFER;
}
CHECK_IT (it);
***************
*** 4850,4856 ****
IT_STRING_CHARPOS (*it) = -1;
IT_STRING_BYTEPOS (*it) = -1;
it->string = Qnil;
! it->method = next_element_from_buffer;
/* RMS: I added this to fix a bug in move_it_vertically_backward
where it->area continued to relate to the starting point
for the backward motion. Bug report from
--- 4850,4856 ----
IT_STRING_CHARPOS (*it) = -1;
IT_STRING_BYTEPOS (*it) = -1;
it->string = Qnil;
! it->method = GET_FROM_BUFFER;
/* RMS: I added this to fix a bug in move_it_vertically_backward
where it->area continued to relate to the starting point
for the backward motion. Bug report from
***************
*** 4916,4922 ****
it->string = string;
it->s = NULL;
it->end_charpos = it->string_nchars = SCHARS (string);
! it->method = next_element_from_string;
it->current.string_pos = string_pos (charpos, string);
}
else
--- 4916,4922 ----
it->string = string;
it->s = NULL;
it->end_charpos = it->string_nchars = SCHARS (string);
! it->method = GET_FROM_STRING;
it->current.string_pos = string_pos (charpos, string);
}
else
***************
*** 4938,4944 ****
it->end_charpos = it->string_nchars = strlen (s);
}
! it->method = next_element_from_c_string;
}
/* PRECISION > 0 means don't return more than PRECISION characters
--- 4938,4944 ----
it->end_charpos = it->string_nchars = strlen (s);
}
! it->method = GET_FROM_C_STRING;
}
/* PRECISION > 0 means don't return more than PRECISION characters
***************
*** 4969,4974 ****
--- 4969,4988 ----
Iteration
***********************************************************************/
+ /* Map enum it_method value to corresponding next_element_from_* function. */
+
+ static int (* get_next_element[NUM_IT_METHODS]) P_ ((struct it *it)) =
+ {
+ next_element_from_buffer,
+ next_element_from_display_vector,
+ next_element_from_composition,
+ next_element_from_string,
+ next_element_from_c_string,
+ next_element_from_image,
+ next_element_from_stretch
+ };
+
+
/* Load IT's display element fields with information about the next
display element from the current position of IT. Value is zero if
end of buffer (or C string) is reached. */
***************
*** 4984,4990 ****
int success_p;
get_next:
! success_p = (*it->method) (it);
if (it->what == IT_CHARACTER)
{
--- 4998,5004 ----
int success_p;
get_next:
! success_p = (*get_next_element[it->method]) (it);
if (it->what == IT_CHARACTER)
{
***************
*** 5018,5024 ****
it->current.dpvec_index = 0;
it->dpvec_face_id = -1;
it->saved_face_id = it->face_id;
! it->method = next_element_from_display_vector;
it->ellipsis_p = 0;
}
else
--- 5032,5038 ----
it->current.dpvec_index = 0;
it->dpvec_face_id = -1;
it->saved_face_id = it->face_id;
! it->method = GET_FROM_DISPLAY_VECTOR;
it->ellipsis_p = 0;
}
else
***************
*** 5176,5182 ****
it->current.dpvec_index = 0;
it->dpvec_face_id = face_id;
it->saved_face_id = it->face_id;
! it->method = next_element_from_display_vector;
it->ellipsis_p = 0;
goto get_next;
}
--- 5190,5196 ----
it->current.dpvec_index = 0;
it->dpvec_face_id = face_id;
it->saved_face_id = it->face_id;
! it->method = GET_FROM_DISPLAY_VECTOR;
it->ellipsis_p = 0;
goto get_next;
}
***************
*** 5238,5245 ****
moving the iterator to a new position might set them. */
it->start_of_box_run_p = it->end_of_box_run_p = 0;
! if (it->method == next_element_from_buffer)
{
/* The current display element of IT is a character from
current_buffer. Advance in the buffer, and maybe skip over
invisible lines that are so because of selective display. */
--- 5252,5260 ----
moving the iterator to a new position might set them. */
it->start_of_box_run_p = it->end_of_box_run_p = 0;
! switch (it->method)
{
+ case GET_FROM_BUFFER:
/* The current display element of IT is a character from
current_buffer. Advance in the buffer, and maybe skip over
invisible lines that are so because of selective display. */
***************
*** 5252,5283 ****
IT_CHARPOS (*it) += 1;
xassert (IT_BYTEPOS (*it) == CHAR_TO_BYTE (IT_CHARPOS (*it)));
}
! }
! else if (it->method == next_element_from_composition)
! {
! xassert (it->cmp_id >= 0 && it ->cmp_id < n_compositions);
if (STRINGP (it->string))
{
IT_STRING_BYTEPOS (*it) += it->len;
IT_STRING_CHARPOS (*it) += it->cmp_len;
! it->method = next_element_from_string;
goto consider_string_end;
}
else
{
IT_BYTEPOS (*it) += it->len;
IT_CHARPOS (*it) += it->cmp_len;
! it->method = next_element_from_buffer;
}
! }
! else if (it->method == next_element_from_c_string)
! {
/* Current display element of IT is from a C string. */
IT_BYTEPOS (*it) += it->len;
IT_CHARPOS (*it) += 1;
! }
! else if (it->method == next_element_from_display_vector)
! {
/* Current display element of IT is from a display table entry.
Advance in the display table definition. Reset it to null if
end reached, and continue with characters from buffers/
--- 5267,5298 ----
IT_CHARPOS (*it) += 1;
xassert (IT_BYTEPOS (*it) == CHAR_TO_BYTE (IT_CHARPOS (*it)));
}
! break;
!
! case GET_FROM_COMPOSITION:
! xassert (it->cmp_id >= 0 && it->cmp_id < n_compositions);
if (STRINGP (it->string))
{
IT_STRING_BYTEPOS (*it) += it->len;
IT_STRING_CHARPOS (*it) += it->cmp_len;
! it->method = GET_FROM_STRING;
goto consider_string_end;
}
else
{
IT_BYTEPOS (*it) += it->len;
IT_CHARPOS (*it) += it->cmp_len;
! it->method = GET_FROM_BUFFER;
}
! break;
!
! case GET_FROM_C_STRING:
/* Current display element of IT is from a C string. */
IT_BYTEPOS (*it) += it->len;
IT_CHARPOS (*it) += 1;
! break;
!
! case GET_FROM_DISPLAY_VECTOR:
/* Current display element of IT is from a display table entry.
Advance in the display table definition. Reset it to null if
end reached, and continue with characters from buffers/
***************
*** 5291,5301 ****
if (it->dpvec + it->current.dpvec_index == it->dpend)
{
if (it->s)
! it->method = next_element_from_c_string;
else if (STRINGP (it->string))
! it->method = next_element_from_string;
else
! it->method = next_element_from_buffer;
it->dpvec = NULL;
it->current.dpvec_index = -1;
--- 5306,5316 ----
if (it->dpvec + it->current.dpvec_index == it->dpend)
{
if (it->s)
! it->method = GET_FROM_C_STRING;
else if (STRINGP (it->string))
! it->method = GET_FROM_STRING;
else
! it->method = GET_FROM_BUFFER;
it->dpvec = NULL;
it->current.dpvec_index = -1;
***************
*** 5312,5320 ****
/* Recheck faces after display vector */
it->stop_charpos = IT_CHARPOS (*it);
}
! }
! else if (it->method == next_element_from_string)
! {
/* Current display element is a character from a Lisp string. */
xassert (it->s == NULL && STRINGP (it->string));
IT_STRING_BYTEPOS (*it) += it->len;
--- 5327,5335 ----
/* Recheck faces after display vector */
it->stop_charpos = IT_CHARPOS (*it);
}
! break;
!
! case GET_FROM_STRING:
/* Current display element is a character from a Lisp string. */
xassert (it->s == NULL && STRINGP (it->string));
IT_STRING_BYTEPOS (*it) += it->len;
***************
*** 5339,5372 ****
&& it->sp > 0)
{
pop_it (it);
! if (!STRINGP (it->string))
! it->method = next_element_from_buffer;
! else
goto consider_string_end;
}
}
! }
! else if (it->method == next_element_from_image
! || it->method == next_element_from_stretch)
! {
/* The position etc with which we have to proceed are on
the stack. The position may be at the end of a string,
if the `display' property takes up the whole string. */
pop_it (it);
it->image_id = 0;
if (STRINGP (it->string))
{
! it->method = next_element_from_string;
goto consider_string_end;
}
! else
! it->method = next_element_from_buffer;
}
- else
- /* There are no other methods defined, so this should be a bug. */
- abort ();
! xassert (it->method != next_element_from_string
|| (STRINGP (it->string)
&& IT_STRING_CHARPOS (*it) >= 0));
}
--- 5354,5388 ----
&& it->sp > 0)
{
pop_it (it);
! if (STRINGP (it->string))
goto consider_string_end;
+ it->method = GET_FROM_BUFFER;
}
}
! break;
!
! case GET_FROM_IMAGE:
! case GET_FROM_STRETCH:
/* The position etc with which we have to proceed are on
the stack. The position may be at the end of a string,
if the `display' property takes up the whole string. */
+ xassert (it->sp > 0);
pop_it (it);
it->image_id = 0;
if (STRINGP (it->string))
{
! it->method = GET_FROM_STRING;
goto consider_string_end;
}
! it->method = GET_FROM_BUFFER;
! break;
!
! default:
! /* There are no other methods defined, so this should be a bug. */
! abort ();
}
! xassert (it->method != GET_FROM_STRING
|| (STRINGP (it->string)
&& IT_STRING_CHARPOS (*it) >= 0));
}
***************
*** 5578,5584 ****
was in IT->saved_face_id, and signal that it's there by
setting face_before_selective_p. */
it->saved_face_id = it->face_id;
! it->method = next_element_from_buffer;
reseat_at_next_visible_line_start (it, 1);
it->face_before_selective_p = 1;
}
--- 5594,5600 ----
was in IT->saved_face_id, and signal that it's there by
setting face_before_selective_p. */
it->saved_face_id = it->face_id;
! it->method = GET_FROM_BUFFER;
reseat_at_next_visible_line_start (it, 1);
it->face_before_selective_p = 1;
}
***************
*** 5823,5830 ****
((op & MOVE_TO_POS) != 0 \
&& BUFFERP (it->object) \
&& IT_CHARPOS (*it) >= to_charpos \
! && (it->method == next_element_from_buffer || \
! (it->method == next_element_from_display_vector && \
it->dpvec + it->current.dpvec_index + 1 >= it->dpend)))
--- 5839,5846 ----
((op & MOVE_TO_POS) != 0 \
&& BUFFERP (it->object) \
&& IT_CHARPOS (*it) >= to_charpos \
! && (it->method == GET_FROM_BUFFER || \
! (it->method == GET_FROM_DISPLAY_VECTOR && \
it->dpvec + it->current.dpvec_index + 1 >= it->dpend)))
***************
*** 6507,6513 ****
in_display_vector_p (it)
struct it *it;
{
! return (it->method == next_element_from_display_vector
&& it->current.dpvec_index > 0
&& it->dpvec + it->current.dpvec_index != it->dpend);
}
--- 6523,6529 ----
in_display_vector_p (it)
struct it *it;
{
! return (it->method == GET_FROM_DISPLAY_VECTOR
&& it->current.dpvec_index > 0
&& it->dpvec + it->current.dpvec_index != it->dpend);
}
***************
*** 15248,15254 ****
/* Record whether this row ends inside an ellipsis. */
row->ends_in_ellipsis_p
! = (it->method == next_element_from_display_vector
&& it->ellipsis_p);
/* Save fringe bitmaps in this row. */
--- 15264,15270 ----
/* Record whether this row ends inside an ellipsis. */
row->ends_in_ellipsis_p
! = (it->method == GET_FROM_DISPLAY_VECTOR
&& it->ellipsis_p);
/* Save fringe bitmaps in this row. */
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2005/02/01
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Richard M . Stallman, 2005/02/03
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2005/02/10
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2005/02/12
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Richard M . Stallman, 2005/02/15
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2005/02/15
- [Emacs-diffs] Changes to emacs/src/xdisp.c,
Kim F . Storm <=
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2005/02/19
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2005/02/21
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2005/02/22
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Kim F . Storm, 2005/02/25
- [Emacs-diffs] Changes to emacs/src/xdisp.c, Richard M . Stallman, 2005/02/27