Mercurial > hg > xemacs-beta
diff src/extents.c @ 468:20ae8821c23d
[xemacs-hg @ 2001-04-13 09:11:17 by michaels]
The Great Trunk Move from release-21-2.
author | michaels |
---|---|
date | Fri, 13 Apr 2001 09:11:46 +0000 |
parents | c33ae14dd6d0 |
children | 183866b06e0b |
line wrap: on
line diff
--- a/src/extents.c Thu Apr 12 18:25:01 2001 +0000 +++ b/src/extents.c Fri Apr 13 09:11:46 2001 +0000 @@ -3843,6 +3843,7 @@ get_buffer_or_string_range_byte (buffer_or_string, start, end, &s, &e, GB_ALLOW_PAST_ACCESSIBLE); + buffer_or_string_extent_info_force (buffer_or_string); set_extent_endpoints (ext, s, e, buffer_or_string); return extent; } @@ -4574,27 +4575,36 @@ #endif /* The extent-adjustment code adjusted the extent's endpoints as if - they were markers -- endpoints at the gap (i.e. the insertion - point) go to the left of the insertion point, which is correct - for [) extents. We need to fix the other kinds of extents. - - Note that both conditions below will hold for zero-length (] - extents at the gap. Zero-length () extents would get adjusted - such that their start is greater than their end; we treat them - as [) extents. This is unfortunately an inelegant part of the - extent model, but there is no way around it. */ + all extents were closed-open -- endpoints at the insertion point + remain unchanged. We need to fix the other kinds of extents: + + 1. Start position of start-open extents needs to be moved. + + 2. End position of end-closed extents needs to be moved. + + Note that both conditions hold for zero-length (] extents at the + insertion point. But under these rules, zero-length () extents + would get adjusted such that their start is greater than their + end; instead of allowing that, we treat them as [) extents by + modifying condition #1 to not fire nothing when dealing with a + zero-length open-open extent. + + Existence of zero-length open-open extents is unfortunately an + inelegant part of the extent model, but there is no way around + it. */ { - Memind new_start, new_end; - - new_start = extent_start (extent); - new_end = extent_end (extent); - if (indice == extent_start (extent) && extent_start_open_p (extent) && - /* coerce zero-length () extents to [) */ - new_start != new_end) + Memind new_start = extent_start (extent); + Memind new_end = extent_end (extent); + + if (indice == extent_start (extent) && extent_start_open_p (extent) + /* zero-length () extents are exempt; see comment above. */ + && !(new_start == new_end && extent_end_open_p (extent)) + ) new_start += closure->length; if (indice == extent_end (extent) && !extent_end_open_p (extent)) new_end += closure->length; + set_extent_endpoints_1 (extent, new_start, new_end); }