- pop_all_properties (plist, from, to);
- xassert (check_plist (plist, 0) == 0);
+ int diff = len2 - len1;
+ MTextPlist *plist;
+
+ for (plist = mt->plist; plist; plist = plist->next)
+ {
+ MInterval *head = find_interval (plist, pos2);
+ MInterval *tail = plist->tail;
+ MTextProperty *prop;
+ int i;
+
+ if (head)
+ {
+ if (head->start == pos2)
+ head = head->prev;
+ while (tail != head)
+ {
+ for (i = 0; i < tail->nprops; i++)
+ {
+ prop = tail->stack[i];
+ if (prop->start == tail->start)
+ prop->start += diff, prop->end += diff;
+ }
+ tail->start += diff;
+ tail->end += diff;
+ tail = tail->prev;
+ }
+ }
+ for (i = 0; i < tail->nprops; i++)
+ tail->stack[i]->end += diff;
+ tail->end += diff;
+ }
+ }
+ else if (len1 > len2)
+ {
+ mtext__adjust_plist_for_delete (mt, pos + len2, len1 - len2);