]> git.lyx.org Git - features.git/blobdiff - src/paragraph.C
make ParagraphList::push_back take a reference instead of a pointer.
[features.git] / src / paragraph.C
index 6477b1ad036dc18df04ceb0588da32f888ff454a..f5c2694036f9c3b9460d98e67fae7df44eaf0574 100644 (file)
 
 #include "paragraph.h"
 #include "paragraph_pimpl.h"
-#include "lyxrc.h"
-#include "layout.h"
-#include "language.h"
+
 #include "buffer.h"
 #include "bufferparams.h"
-#include "debug.h"
-#include "texrow.h"
 #include "BufferView.h"
+#include "changes.h"
 #include "encoding.h"
-#include "ParameterStruct.h"
+#include "debug.h"
 #include "gettext.h"
-#include "changes.h"
+#include "language.h"
+#include "latexrunparams.h"
+#include "layout.h"
+#include "lyxrc.h"
 #include "paragraph_funcs.h"
+#include "ParameterStruct.h"
+#include "texrow.h"
+
+#include "Lsstream.h"
 
 #include "insets/insetbibitem.h"
 #include "insets/insetoptarg.h"
+#include "insets/insetenv.h"
 
 #include "support/filetools.h"
 #include "support/lstrings.h"
@@ -68,9 +73,9 @@ extern BufferView * current_view;
 Paragraph::Paragraph()
        : pimpl_(new Paragraph::Pimpl(this))
 {
-#ifndef NO_NEXT
-       next_ = 0;
-       previous_ = 0;
+#ifdef NO_STD_LIST
+       next_par_ = 0;
+       prev_par_ = 0;
 #endif
        enumdepth = 0;
        itemdepth = 0;
@@ -78,36 +83,14 @@ Paragraph::Paragraph()
 }
 
 
-#ifndef NO_NEXT
-// This constructor inserts the new paragraph in a list.
-// It is placed after par.
-Paragraph::Paragraph(Paragraph * par)
-       : pimpl_(new Paragraph::Pimpl(this))
-{
-       enumdepth = 0;
-       itemdepth = 0;
-
-       // double linked list begin
-       next_ = par->next_;
-       if (next_)
-               next_->previous_ = this;
-       previous_ = par;
-       previous_->next_ = this;
-       // end
-
-       params().clear();
-}
-#endif
-
-
 Paragraph::Paragraph(Paragraph const & lp, bool same_ids)
        : pimpl_(new Paragraph::Pimpl(*lp.pimpl_, this, same_ids))
 {
        enumdepth = 0;
        itemdepth = 0;
-#ifndef NO_NEXT
-       next_     = 0;
-       previous_ = 0;
+#ifdef NO_STD_LIST
+       next_par_ = 0;
+       prev_par_ = 0;
 #endif
        // this is because of the dummy layout of the paragraphs that
        // follow footnotes
@@ -129,13 +112,6 @@ Paragraph::Paragraph(Paragraph const & lp, bool same_ids)
 // the destructor removes the new paragraph from the list
 Paragraph::~Paragraph()
 {
-#ifndef NO_NEXT
-       if (previous_)
-               previous_->next_ = next_;
-       if (next_)
-               next_->previous_ = previous_;
-#endif
-
        delete pimpl_;
        //
        //lyxerr << "Paragraph::paragraph_id = "
@@ -324,13 +300,13 @@ void Paragraph::eraseIntern(lyx::pos_type pos)
 }
 
 
-void Paragraph::erase(pos_type pos)
+bool Paragraph::erase(pos_type pos)
 {
-       pimpl_->erase(pos);
+       return pimpl_->erase(pos);
 }
 
 
-bool Paragraph::erase(pos_type start, pos_type end)
+int Paragraph::erase(pos_type start, pos_type end)
 {
        return pimpl_->erase(start, end);
 }
@@ -453,7 +429,7 @@ LyXFont const Paragraph::getFont(BufferParams const & bparams, pos_type pos,
        tmpfont.realize(layoutfont);
        tmpfont.realize(outerfont);
 
-       return realizeFont(tmpfont, bparams, 0, false);
+       return realizeFont(tmpfont, bparams);
 }
 
 
@@ -466,7 +442,7 @@ LyXFont const Paragraph::getLabelFont(BufferParams const & bparams,
        tmpfont.setLanguage(getParLanguage(bparams));
        tmpfont.realize(outerfont);
 
-       return realizeFont(tmpfont, bparams, 0, false);
+       return realizeFont(tmpfont, bparams);
 }
 
 
@@ -479,7 +455,7 @@ LyXFont const Paragraph::getLayoutFont(BufferParams const & bparams,
        tmpfont.setLanguage(getParLanguage(bparams));
        tmpfont.realize(outerfont);
 
-       return realizeFont(tmpfont, bparams, 0, false);
+       return realizeFont(tmpfont, bparams);
 }
 
 
@@ -623,52 +599,11 @@ void Paragraph::setFont(pos_type pos, LyXFont const & font)
 }
 
 
-#ifndef NO_NEXT
-void Paragraph::next(Paragraph * p)
-{
-       next_ = p;
-}
-
-
-// This function is able to hide closed footnotes.
-Paragraph * Paragraph::next()
-{
-       return next_;
-}
-
-
-Paragraph const * Paragraph::next() const
-{
-       return next_;
-}
-
-
-void Paragraph::previous(Paragraph * p)
-{
-       previous_ = p;
-}
-
-
-// This function is able to hide closed footnotes.
-Paragraph * Paragraph::previous()
+void Paragraph::makeSameLayout(Paragraph const & par)
 {
-       return previous_;
-}
-
-
-// This function is able to hide closed footnotes.
-Paragraph const * Paragraph::previous() const
-{
-       return previous_;
-}
-#endif
-
-
-void Paragraph::makeSameLayout(Paragraph const * par)
-{
-       layout(par->layout());
+       layout(par.layout());
        // move to pimpl?
-       params() = par->params();
+       params() = par.params();
 }
 
 
@@ -687,11 +622,11 @@ int Paragraph::stripLeadingSpaces()
 }
 
 
-bool Paragraph::hasSameLayout(Paragraph const * par) const
+bool Paragraph::hasSameLayout(Paragraph const & par) const
 {
        return
-               par->layout() == layout() &&
-               params().sameLayout(par->params());
+               par.layout() == layout() &&
+               params().sameLayout(par.params());
 }
 
 
@@ -926,7 +861,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                                BufferParams const & bparams,
                                LyXFont const & outerfont,
                                ostream & os, TexRow & texrow,
-                               bool moving_arg)
+                               LatexRunParams const & runparams)
 {
        lyxerr[Debug::LATEX] << "SimpleTeXOnePar...     " << this << endl;
 
@@ -970,6 +905,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                basefont = getLayoutFont(bparams, outerfont);
        }
 
+       bool moving_arg = runparams.moving_arg;
        moving_arg |= style->needprotect;
 
        // Which font is currently active?
@@ -979,7 +915,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
 
        Change::Type running_change = Change::UNCHANGED;
 
-       texrow.start(this, 0);
+       texrow.start(id(), 0);
 
        // if the paragraph is empty, the loop will not be entered at all
        if (empty()) {
@@ -1071,8 +1007,11 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                column += Changes::latexMarkChange(os, running_change, change);
                running_change = change;
 
+               LatexRunParams rp = runparams;
+               rp.moving_arg = moving_arg;
+               rp.free_spacing = style->free_spacing;
                pimpl_->simpleTeXSpecialChars(buf, bparams,
-                                             os, texrow, moving_arg,
+                                             os, texrow, runparams,
                                              font, running_font,
                                              basefont, outerfont, open_font,
                                              running_change,
@@ -1187,9 +1126,12 @@ Paragraph::getParLanguage(BufferParams const & bparams) const
 {
        if (!empty()) {
                return getFirstFontSettings().language();
-       } else if (previous_)
+#warning FIXME we should check the prev par as well (Lgb)
+#if 0
+       } else if (previous_) {
                return previous_->getParLanguage(bparams);
-       else
+#endif
+       }else
                return bparams.language;
 }
 
@@ -1300,7 +1242,7 @@ void Paragraph::resizeInsetsLyXText(BufferView * bv)
 }
 
 
-void Paragraph::setContentsFromPar(Paragraph * par)
+void Paragraph::setContentsFromPar(Paragraph const & par)
 {
        pimpl_->setContentsFromPar(par);
 }
@@ -1399,8 +1341,17 @@ int Paragraph::id() const
 }
 
 
+void Paragraph::id(int i)
+{
+       pimpl_->id_ = i;
+}
+
+
 LyXLayout_ptr const & Paragraph::layout() const
 {
+       Inset * inset = inInset();
+       if (inset && inset->lyxCode() == Inset::ENVIRONMENT_CODE)
+               return static_cast<InsetEnvironment*>(inset)->layout();
        return layout_;
 }