]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph.C
John's Layout Tabular UI improvements and Martins fixes to clearing the
[lyx.git] / src / paragraph.C
index 76311c25589cc39b6d4d60a381c2fbcea9f640f6..f3d909649e8f03c35b834bf8cb517e8d661d5545 100644 (file)
 #pragma implementation
 #endif
 
-#include <algorithm>
-#include <fstream>
-#include <csignal>
-
 #include "paragraph.h"
 #include "paragraph_pimpl.h"
-#include "support/textutils.h"
 #include "lyxrc.h"
 #include "layout.h"
 #include "language.h"
 #include "tex-strings.h"
 #include "buffer.h"
 #include "bufferparams.h"
-#include "support/FileInfo.h"
-#include "support/LAssert.h"
 #include "debug.h"
 #include "LaTeXFeatures.h"
-#include "insets/insetinclude.h"
-#include "insets/insetbib.h"
-#include "insets/insettext.h"
-#include "support/filetools.h"
-#include "support/lstrings.h"
 #include "lyx_gui_misc.h"
 #include "texrow.h"
-#include "support/lyxmanip.h"
 #include "BufferView.h"
 #include "encoding.h"
 #include "ParameterStruct.h"
 #include "gettext.h"
+#include "lyxtextclasslist.h"
+
+#include "insets/insetinclude.h"
+#include "insets/insetbib.h"
+#include "insets/insettext.h"
+
+#include "support/filetools.h"
+#include "support/lstrings.h"
+#include "support/lyxmanip.h"
+#include "support/FileInfo.h"
+#include "support/LAssert.h"
+#include "support/textutils.h"
+
+#include <algorithm>
+#include <fstream>
+#include <csignal>
 
 using std::ostream;
 using std::endl;
@@ -76,9 +79,10 @@ extern BufferView * current_view;
 
 
 Paragraph::Paragraph()
-               : pimpl_(new Paragraph::Pimpl(this))
+       : layout(0), pimpl_(new Paragraph::Pimpl(this))
 {
-       for (int i = 0; i < 10; ++i) setCounter(i , 0);
+       for (int i = 0; i < 10; ++i)
+               setCounter(i, 0);
        next_ = 0;
        previous_ = 0;
        enumdepth = 0;
@@ -88,9 +92,9 @@ Paragraph::Paragraph()
 }
 
 
-// This konstruktor inserts the new paragraph in a list.
+// This constructor inserts the new paragraph in a list.
 Paragraph::Paragraph(Paragraph * par)
-               : pimpl_(new Paragraph::Pimpl(this))
+       : layout(0), pimpl_(new Paragraph::Pimpl(this))
 {
        for (int i = 0; i < 10; ++i)
                setCounter(i, 0);
@@ -112,7 +116,7 @@ Paragraph::Paragraph(Paragraph * par)
 
 
 Paragraph::Paragraph(Paragraph const & lp, bool same_ids)
-       : pimpl_(new Paragraph::Pimpl(*lp.pimpl_, this, same_ids))
+       : layout(0), pimpl_(new Paragraph::Pimpl(*lp.pimpl_, this, same_ids))
 {
        for (int i = 0; i < 10; ++i)
                setCounter(i, 0);
@@ -139,6 +143,8 @@ Paragraph::Paragraph(Paragraph const & lp, bool same_ids)
             it != insetlist.end(); ++it)
        {
                it->inset = it->inset->clone(*current_view->buffer(), same_ids);
+               // tell the new inset who is the boss now
+               it->inset->parOwner(this);
        }
 }
 
@@ -437,6 +443,8 @@ void Paragraph::cutIntoMinibuffer(BufferParams const & bparams, pos_type pos)
                                            search_elem, Pimpl::matchIT());
                        if (it != insetlist.end() && it->pos == pos)
                                it->inset = 0;
+                       // the inset is not in a paragraph anymore
+                       minibuffer_inset->parOwner(0);
                } else {
                        minibuffer_inset = 0;
                        minibuffer_char = ' ';
@@ -711,8 +719,7 @@ Paragraph::highestFontInRange(pos_type startpos, pos_type endpos,
 
 
 Paragraph::value_type
-Paragraph::getUChar(BufferParams const & bparams,
-                      pos_type pos) const
+Paragraph::getUChar(BufferParams const & bparams, pos_type pos) const
 {
        value_type c = getChar(pos);
        if (!lyxrc.rtl_support)
@@ -752,8 +759,7 @@ Paragraph::getUChar(BufferParams const & bparams,
 }
 
 
-void Paragraph::setFont(pos_type pos,
-                          LyXFont const & font)
+void Paragraph::setFont(pos_type pos, LyXFont const & font)
 {
        lyx::Assert(pos <= size());
 
@@ -926,7 +932,7 @@ void Paragraph::makeSameLayout(Paragraph const * par)
 }
 
 
-int Paragraph::stripLeadingSpaces(LyXTextClassList::size_type tclass) 
+int Paragraph::stripLeadingSpaces(lyx::textclass_type tclass) 
 {
        if (textclasslist.Style(tclass, getLayout()).free_spacing ||
                isFreeSpacing())
@@ -935,8 +941,7 @@ int Paragraph::stripLeadingSpaces(LyXTextClassList::size_type tclass)
        }
        
        int i = 0;
-       while (size()
-              && (isNewline(0) || isLineSeparator(0))){
+       while (size() && (isNewline(0) || isLineSeparator(0))) {
                erase(0);
                ++i;
        }
@@ -1186,22 +1191,6 @@ Paragraph const * Paragraph::outerHook() const
        return depthHook(depth_type(getDepth() - 1));
 }
 
-int Paragraph::autoDeleteInsets()
-{
-       int count = 0;
-       InsetList::size_type index = 0;
-       while (index < insetlist.size()) {
-               if (insetlist[index].inset && insetlist[index].inset->autoDelete()) {
-                       erase(insetlist[index].pos); 
-                       // Erase() calls to insetlist.erase(&insetlist[index])
-                       // so index shouldn't be increased.
-                       ++count;
-               } else
-                       ++index;
-       }
-       return count;
-}
-
 
 Paragraph::inset_iterator
 Paragraph::InsetIterator(pos_type pos)
@@ -1215,7 +1204,7 @@ Paragraph::InsetIterator(pos_type pos)
 
 
 // returns -1 if inset not found
-int Paragraph::getPositionOfInset(Inset * inset) const
+int Paragraph::getPositionOfInset(Inset const * inset) const
 {
        // Find the entry.
        for (InsetList::const_iterator cit = insetlist.begin();
@@ -1473,8 +1462,7 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
                basefont = getLayoutFont(bparams);
        }
 
-       if (main_body >= 0
-           && !pimpl_->size()) {
+       if (main_body >= 0 && !pimpl_->size()) {
                if (style.isCommand()) {
                        os << '{';
                        ++column;
@@ -1799,8 +1787,7 @@ Paragraph * Paragraph::TeXEnvironment(Buffer const * buf,
        }
        Paragraph * par = this;
        do {
-               par = par->TeXOnePar(buf, bparams,
-                                    os, texrow, false);
+               par = par->TeXOnePar(buf, bparams, os, texrow, false);
 
                if (par && par->params().depth() > params().depth()) {
                        if (textclasslist.Style(bparams.textclass,
@@ -1830,6 +1817,7 @@ Paragraph * Paragraph::TeXEnvironment(Buffer const * buf,
  
        if (style.isEnvironment()) {
                os << "\\end{" << style.latexname() << "}\n";
+               texrow.newline();
        }
 
        lyxerr[Debug::LATEX] << "TeXEnvironment...done " << par << endl;