]> git.lyx.org Git - features.git/blobdiff - src/paragraph.C
parlist-22-a.diff
[features.git] / src / paragraph.C
index 863e37346801ff0b68dc033623c8373c0034bdfd..20ced3064f5c3c1392f988e40e2d2a207272a7b1 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"
@@ -62,15 +67,12 @@ Inset * minibuffer_inset;
 } // namespace anon
 
 
-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,48 +80,26 @@ 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))
+Paragraph::Paragraph(Paragraph const & lp)
+       : pimpl_(new Paragraph::Pimpl(*lp.pimpl_, this))
 {
        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
        layout_ = lp.layout();
+       buffer_ = lp.buffer_;
 
        // copy everything behind the break-position to the new paragraph
        insetlist = lp.insetlist;
        InsetList::iterator it = insetlist.begin();
        InsetList::iterator end = insetlist.end();
        for (; it != end; ++it) {
-               it.setInset(it.getInset()->clone(*current_view->buffer(),
-                                                same_ids));
+               it.setInset(it.getInset()->clone(**buffer_));
                // tell the new inset who is the boss now
                it.getInset()->parOwner(this);
        }
@@ -129,13 +109,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,9 +297,9 @@ 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);
 }
 
 
@@ -623,52 +596,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()
-{
-       return previous_;
-}
-
-
-// This function is able to hide closed footnotes.
-Paragraph const * Paragraph::previous() const
-{
-       return previous_;
-}
-#endif
-
-
-void Paragraph::makeSameLayout(Paragraph const * par)
+void Paragraph::makeSameLayout(Paragraph const & par)
 {
-       layout(par->layout());
+       layout(par.layout());
        // move to pimpl?
-       params() = par->params();
+       params() = par.params();
 }
 
 
@@ -687,11 +619,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 +858,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 +902,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 +912,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 +1004,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,
@@ -1303,7 +1239,7 @@ void Paragraph::resizeInsetsLyXText(BufferView * bv)
 }
 
 
-void Paragraph::setContentsFromPar(Paragraph * par)
+void Paragraph::setContentsFromPar(Paragraph const & par)
 {
        pimpl_->setContentsFromPar(par);
 }
@@ -1402,8 +1338,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_;
 }
 
@@ -1451,3 +1396,10 @@ bool Paragraph::isFreeSpacing() const
                return (pimpl_->inset_owner->owner()->lyxCode() == Inset::ERT_CODE);
        return false;
 }
+
+
+bool operator==(Paragraph const & lhs, Paragraph const & rhs)
+{
+#warning FIXME this implementatoin must be completely wrong...
+       return &lhs == &rhs;
+}