]> git.lyx.org Git - features.git/blobdiff - src/paragraph_funcs.C
add ParagraphList::erase, make mergeParagraph take a Buffer* arg, adjust other funcs...
[features.git] / src / paragraph_funcs.C
index ea8cf627ddb15e453295935464e131e33b54da6f..77462f1e936dcc2c5e0fe2e4f7f151297edd5893 100644 (file)
@@ -30,12 +30,12 @@ using std::endl;
 using std::ostream;
 
 void breakParagraph(BufferParams const & bparams,
-                   Paragraph * par,
+                   ParagraphList::iterator par,
                    pos_type pos,
                    int flag)
 {
-       // create a new paragraph
-       Paragraph * tmp = new Paragraph(par);
+       // create a new paragraph, and insert into the list
+       Paragraph * tmp = new Paragraph(&*par);
        // without doing that we get a crash when typing <Return> at the
        // end of a paragraph
        tmp->layout(bparams.getLyXTextClass().defaultLayout());
@@ -89,12 +89,12 @@ void breakParagraph(BufferParams const & bparams,
                        Change::Type change(par->lookupChange(i));
                        par->cutIntoMinibuffer(bparams, i);
                        if (tmp->insertFromMinibuffer(j - pos)) {
-                               tmp->pimpl_->setChange(j - pos, change);
+                               tmp->setChange(j - pos, change);
                                ++j;
                        }
                }
                for (i = pos_end; i >= pos; --i) {
-                       par->pimpl_->eraseIntern(i);
+                       par->eraseIntern(i);
                }
        }
 
@@ -127,12 +127,12 @@ void breakParagraph(BufferParams const & bparams,
 
 
 void breakParagraphConservative(BufferParams const & bparams,
-                               Paragraph * par,
+                               ParagraphList::iterator par,
                                pos_type pos)
 {
        // create a new paragraph
-       Paragraph * tmp = new Paragraph(par);
-       tmp->makeSameLayout(par);
+       Paragraph * tmp = new Paragraph(&*par);
+       tmp->makeSameLayout(&*par);
 
        // When can pos > Last()?
        // I guess pos == Last() is possible.
@@ -154,9 +154,11 @@ void breakParagraphConservative(BufferParams const & bparams,
 }
 
 
-void mergeParagraph(BufferParams const & bparams, Paragraph * par)
+void mergeParagraph(Buffer * buf, ParagraphList::iterator par)
 {
-       Paragraph * the_next = par->next();
+       BufferParams const & bparams = buf->params;
+
+       ParagraphList::iterator the_next = boost::next(par);
 
        // first the DTP-stuff
        par->params().lineBottom(the_next->params().lineBottom());
@@ -173,11 +175,7 @@ void mergeParagraph(BufferParams const & bparams, Paragraph * par)
                        ++j;
        }
 
-       // delete the next paragraph
-       Paragraph * ppar = the_next->previous();
-       Paragraph * npar = the_next->next();
-       delete the_next;
-       ppar->next(npar);
+       buf->paragraphs.erase(the_next);
 }
 
 
@@ -247,15 +245,16 @@ int getEndLabel(Paragraph * para, BufferParams const & bparams)
 #endif
 
 
-Paragraph * TeXDeeper(Buffer const * buf,
-                     BufferParams const & bparams,
-                     Paragraph * pit,
-                     ostream & os, TexRow & texrow)
+ParagraphList::iterator
+TeXDeeper(Buffer const * buf,
+         BufferParams const & bparams,
+         ParagraphList::iterator pit,
+         ostream & os, TexRow & texrow)
 {
-       lyxerr[Debug::LATEX] << "TeXDeeper...     " << pit << endl;
-       Paragraph * par = pit;
+       lyxerr[Debug::LATEX] << "TeXDeeper...     " << &*pit << endl;
+       ParagraphList::iterator par = pit;
 
-       while (par && par->params().depth() == pit->params().depth()) {
+       while (par != buf->paragraphs.end()&& par->params().depth() == pit->params().depth()) {
                if (par->layout()->isEnvironment()) {
                        par = TeXEnvironment(buf, bparams, par,
                                                  os, texrow);
@@ -264,18 +263,19 @@ Paragraph * TeXDeeper(Buffer const * buf,
                                             os, texrow, false);
                }
        }
-       lyxerr[Debug::LATEX] << "TeXDeeper...done " << par << endl;
+       lyxerr[Debug::LATEX] << "TeXDeeper...done " << &*par << endl;
 
        return par;
 }
 
 
-Paragraph * TeXEnvironment(Buffer const * buf,
-                          BufferParams const & bparams,
-                          Paragraph * pit,
-                          ostream & os, TexRow & texrow)
+ParagraphList::iterator
+TeXEnvironment(Buffer const * buf,
+              BufferParams const & bparams,
+              ParagraphList::iterator pit,
+              ostream & os, TexRow & texrow)
 {
-       lyxerr[Debug::LATEX] << "TeXEnvironment...     " << pit << endl;
+       lyxerr[Debug::LATEX] << "TeXEnvironment...     " << &*pit << endl;
 
        LyXLayout_ptr const & style = pit->layout();
 
@@ -327,11 +327,11 @@ Paragraph * TeXEnvironment(Buffer const * buf,
                           << style->latexparam() << '\n';
                texrow.newline();
        }
-       Paragraph * par = pit;
+       ParagraphList::iterator par = pit;
        do {
                par = TeXOnePar(buf, bparams, par, os, texrow, false);
 
-               if (par && par->params().depth() > pit->params().depth()) {
+               if (par != buf->paragraphs.end()&& par->params().depth() > pit->params().depth()) {
                            if (par->layout()->isParagraph()) {
 
                            // Thinko!
@@ -353,7 +353,7 @@ Paragraph * TeXEnvironment(Buffer const * buf,
                        }
                        par = TeXDeeper(buf, bparams, par, os, texrow);
                }
-       } while (par
+       } while (par != buf->paragraphs.end()
                 && par->layout() == pit->layout()
                 && par->params().depth() == pit->params().depth()
                 && par->params().leftIndent() == pit->params().leftIndent());
@@ -368,7 +368,7 @@ Paragraph * TeXEnvironment(Buffer const * buf,
                texrow.newline();
        }
 
-       lyxerr[Debug::LATEX] << "TeXEnvironment...done " << par << endl;
+       lyxerr[Debug::LATEX] << "TeXEnvironment...done " << &*par << endl;
        return par;  // ale970302
 }
 
@@ -392,13 +392,14 @@ InsetOptArg * optArgInset(Paragraph const & par)
 } // end namespace
 
 
-Paragraph * TeXOnePar(Buffer const * buf,
-                     BufferParams const & bparams,
-                     Paragraph * pit,
-                     ostream & os, TexRow & texrow,
-                     bool moving_arg)
+ParagraphList::iterator
+TeXOnePar(Buffer const * buf,
+         BufferParams const & bparams,
+         ParagraphList::iterator pit,
+         ostream & os, TexRow & texrow,
+         bool moving_arg)
 {
-       lyxerr[Debug::LATEX] << "TeXOnePar...     " << pit << endl;
+       lyxerr[Debug::LATEX] << "TeXOnePar...     " << &*pit << endl;
        Inset const * in = pit->inInset();
        bool further_blank_line = false;
        LyXLayout_ptr style;
@@ -416,7 +417,7 @@ Paragraph * TeXOnePar(Buffer const * buf,
                }
 
                if (!pit->params().spacing().isDefault()
-                       && (!pit->previous() || !pit->previous()->hasSameLayout(pit))) {
+                       && (!pit->previous() || !pit->previous()->hasSameLayout(&*pit))) {
                        os << pit->params().spacing().writeEnvirBegin() << '\n';
                        texrow.newline();
                }
@@ -586,7 +587,7 @@ Paragraph * TeXOnePar(Buffer const * buf,
                }
 
                if (!pit->params().spacing().isDefault()
-                       && (!pit->next() || !pit->next()->hasSameLayout(pit))) {
+                       && (!pit->next() || !pit->next()->hasSameLayout(&*pit))) {
                        os << pit->params().spacing().writeEnvirEnd() << '\n';
                        texrow.newline();
                }
@@ -617,5 +618,5 @@ Paragraph * TeXOnePar(Buffer const * buf,
        }
 
        lyxerr[Debug::LATEX] << "TeXOnePar...done " << pit->next() << endl;
-       return pit->next();
+       return ++pit;
 }