- // Start and end is inside same paragraph
- if (endpit == pit_type(pars.size()) ||
- startpit == endpit) {
- endpos -= pars[startpit].erase(startpos, endpos);
- return PitPosPair(endpit, endpos);
- }
-
- bool all_erased = true;
-
- // Clear fragments of the first par in selection
- pars[startpit].erase(startpos, pars[startpit].size());
- if (pars[startpit].size() != startpos)
- all_erased = false;
-
- // Clear fragments of the last par in selection
- endpos -= pars[endpit].erase(0, endpos);
- if (endpos != 0)
- all_erased = false;
-
- // Erase all the "middle" paragraphs.
- if (params.tracking_changes) {
- // Look through the deleted pars if any, erasing as needed
- for (pit_type pit = startpit + 1; pit != endpit;) {
- // "erase" the contents of the par
- pars[pit].erase(0, pars[pit].size());
- if (pars[pit].empty()) {
- // remove the par if it's now empty
- pars.erase(pars.begin() + pit);
- --endpit;
- } else {
- ++pit;
- all_erased = false;
- }
- }
- } else {
- pars.erase(pars.begin() + startpit + 1, pars.begin() + endpit);
- endpit = startpit + 1;
- }
-
-#if 0 // FIXME: why for cut but not copy ?
- // the cut selection should begin with standard layout
- if (realcut) {
- buf->params().clear();
- buf->bibkey = 0;
- buf->layout(textclasslist[buffer->params.textclass].defaultLayoutName());
- }
-#endif
-
- if (startpit + 1 == pit_type(pars.size()))
+ // Start and end is inside same paragraph
+ if (endpit == pit_type(pars.size()) || startpit == endpit) {
+ endpos -= pars[startpit].eraseChars(startpos, endpos, params.trackChanges);