- tmpbuf = tmpbuf->next();
- }
- // now reset it to 0
- buf->previous(0);
-
- // make the buf exactly the same layout than
- // the cursor paragraph
- buf->makeSameLayout(*par);
-
- // find the end of the buffer
- Paragraph * lastbuffer = buf;
- while (lastbuffer->next())
- lastbuffer = lastbuffer->next();
-
- bool paste_the_end = false;
-
- // open the paragraph for inserting the buf
- // if necessary
- if (((*par)->size() > pos) || !(*par)->next()) {
- breakParagraphConservative(
- current_view->buffer()->params, current_view->buffer()->paragraphs, *par, pos);
- paste_the_end = true;
- }
- // set the end for redoing later
- *endpar = (*par)->next()->next();
-
- // paste it!
- lastbuffer->next((*par)->next());
- (*par)->next()->previous(lastbuffer);
-
- (*par)->next(buf);
- buf->previous(*par);
-
- if ((*par)->next() == lastbuffer)
- lastbuffer = *par;
-
- mergeParagraph(current_view->buffer()->params,
- current_view->buffer()->paragraphs, *par);
- // store the new cursor position
- *par = lastbuffer;
- pos = lastbuffer->size();
- // maybe some pasting
- if (lastbuffer->next() && paste_the_end) {
- if (lastbuffer->next()->hasSameLayout(lastbuffer)) {
- mergeParagraph(current_view->buffer()->params,
- current_view->buffer()->paragraphs, lastbuffer);
- } else if (!lastbuffer->next()->size()) {
- lastbuffer->next()->makeSameLayout(lastbuffer);
- mergeParagraph(current_view->buffer()->params, current_view->buffer()->paragraphs, lastbuffer);
- } else if (!lastbuffer->size()) {
- lastbuffer->makeSameLayout(lastbuffer->next());
- mergeParagraph(current_view->buffer()->params,
- current_view->buffer()->paragraphs, lastbuffer);
- } else
- lastbuffer->next()->stripLeadingSpaces();