]> git.lyx.org Git - lyx.git/blobdiff - src/ParagraphList.C
don't rm emergency saves ever
[lyx.git] / src / ParagraphList.C
index 3a579413e1c0259d4b5282e24102cafcc91ef2df..d87634c74cacf79bb25fe34271ef96c12cb465f0 100644 (file)
@@ -158,6 +158,15 @@ ParagraphList::insert(ParagraphList::iterator it, Paragraph * par)
 }
 
 
+
+void ParagraphList::insert(iterator pos, iterator beg, iterator end)
+{
+       for (; beg != end; ++beg) {
+               insert(pos, new Paragraph(*beg, false));
+       }
+}
+
+
 void ParagraphList::assign(iterator beg, iterator end)
 {
        clear();
@@ -167,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()
 {