]> git.lyx.org Git - lyx.git/blobdiff - src/ParagraphList.C
The "I want this in now" patch.
[lyx.git] / src / ParagraphList.C
index d9c66152d4e0df10cb9fb260d5483bd278cbe398..deba8829c5de265fabfaa7e72259e2286a7eca0c 100644 (file)
@@ -176,6 +176,68 @@ void ParagraphList::assign(iterator beg, iterator end)
 }
 
 
+void ParagraphList::splice(iterator pos, ParagraphList & pl)
+{
+       if (pl.parlist == 0)
+               return;
+
+       Paragraph * first = pl.parlist;
+       Paragraph * last = first;
+#ifndef NO_NEXT
+       while (last->next_)
+               last = last->next_;
+
+       if (pos == end()) {
+               if (parlist == 0) {
+                       parlist = first;
+               } else {
+                       Paragraph * last_par = &back();
+                       last_par->next_ = first;
+                       first->previous_ = last_par;
+               }
+       } else if (pos == begin()) {
+               last->next_ = parlist;
+               parlist->previous_ = last;
+               parlist = first;
+       } else {
+               Paragraph * pos_par = &*pos;
+               Paragraph * before_pos = pos_par->previous_;
+
+               before_pos->next_ = first;
+               first->previous_ = before_pos;
+               last->next_ = pos_par;
+               pos_par->previous_ = last;
+       }
+       pl.parlist = 0;
+#else
+       while (last->next_par_)
+               last = last->next_par_;
+
+       if (pos == end()) {
+               if (parlist == 0) {
+                       parlist = first;
+               } else {
+                       Paragraph * last_par = &back();
+                       last_par->next_par_ = first;
+                       first->prev_par_ = last_par;
+               }
+       } else if (pos == begin()) {
+               last->next_par_ = parlist;
+               parlist->prev_par_ = last;
+               parlist = first;
+       } else {
+               Paragraph * pos_par = &*pos;
+               Paragraph * before_pos = pos_par->prev_par_;
+
+               before_pos->next_par_ = first;
+               first->prev_par_ = before_pos;
+               last->next_par_ = pos_par;
+               pos_par->prev_par_ = last;
+       }
+       pl.parlist = 0;
+#endif
+}
+
 
 void ParagraphList::clear()
 {
@@ -195,7 +257,7 @@ void ParagraphList::clear()
 }
 
 
-void ParagraphList::erase(ParagraphList::iterator it)
+ParagraphList::iterator ParagraphList::erase(ParagraphList::iterator it)
 {
 #ifndef NO_NEXT
        Paragraph * prev = it->previous_;
@@ -212,6 +274,7 @@ void ParagraphList::erase(ParagraphList::iterator it)
        it->previous_ = 0;
        it->next_ = 0;
        delete &*it;
+       return next;
 #else
        Paragraph * prev = it->prev_par_;
        Paragraph * next = it->next_par_;
@@ -225,10 +288,21 @@ void ParagraphList::erase(ParagraphList::iterator it)
                next->prev_par_ = prev;
 
        delete &*it;
+       return next;
 #endif
 }
 
 
+ParagraphList::iterator ParagraphList::erase(ParagraphList::iterator first,
+                             ParagraphList::iterator last)
+{
+       while (first != last) {
+               erase(first++);
+       }
+       return last;
+}
+
+
 ParagraphList::iterator ParagraphList::begin()
 {
        return iterator(parlist);