# HG changeset patch # User Richard M. Stallman # Date 739491455 0 # Node ID 5f9688c0b7048906dcd1a4540da133028ebc78d6 # Parent 84fded047f223d00a9631d418abdd014062dca40 (Fadd_text_properties): Don't treat the initial interval specially, aside from splitting off the part starting where we want to start changing things. (Fremove_text_properties): Likewise. For ending interval, split it left as in Fadd_text_properties. (Fset_text_properties): Don't set starting interval if it goes past END. Instead, split it left and set the left part. diff -r 84fded047f22 -r 5f9688c0b704 src/textprop.c --- a/src/textprop.c Mon Jun 07 20:06:34 1993 +0000 +++ b/src/textprop.c Mon Jun 07 22:17:35 1993 +0000 @@ -649,22 +649,10 @@ unchanged = i; i = split_interval_right (unchanged, s - unchanged->position + 1); copy_properties (unchanged, i); - if (LENGTH (i) > len) - { - i = split_interval_left (i, len + 1); - copy_properties (unchanged, i); - add_properties (properties, i, object); - return Qt; - } - - add_properties (properties, i, object); - modified = 1; - len -= LENGTH (i); - i = next_interval (i); } } - /* We are at the beginning of an interval, with len to scan */ + /* We are at the beginning of interval I, with LEN chars to scan. */ for (;;) { if (i == 0) @@ -742,15 +730,17 @@ { unchanged = i; i = split_interval_right (unchanged, s - unchanged->position + 1); - set_properties (props, i, object); if (LENGTH (i) > len) { - i = split_interval_right (i, len); copy_properties (unchanged, i); + i = split_interval_left (i, len + 1); + set_properties (props, i, object); return Qt; } + set_properties (props, i, object); + if (LENGTH (i) == len) return Qt; @@ -828,25 +818,13 @@ return Qnil; len -= got; } - /* Remove the properties from this interval. If it's short - enough, return, splitting it if it's too short. */ + /* Split away the beginning of this interval; what we don't + want to modify. */ else { unchanged = i; i = split_interval_right (unchanged, s - unchanged->position + 1); copy_properties (unchanged, i); - if (LENGTH (i) > len) - { - i = split_interval_left (i, len + 1); - copy_properties (unchanged, i); - remove_properties (props, i, object); - return Qt; - } - - remove_properties (props, i, object); - modified = 1; - len -= LENGTH (i); - i = next_interval (i); } } @@ -868,7 +846,8 @@ } /* i has the properties, and goes past the change limit */ - unchanged = split_interval_right (i, len + 1); + unchanged = i; + i = split_interval_left (i, len + 1); copy_properties (unchanged, i); remove_properties (props, i, object); return Qt;