]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph.C
Fix crash when running lyx -dbg insets -e ...
[lyx.git] / src / paragraph.C
index 41dbf70b93ec294583343e5329e8ae2f16f879d7..5e70fda1ec300f62ad0ebcaee94a7e99486f5980 100644 (file)
@@ -107,35 +107,36 @@ Paragraph::Paragraph(Paragraph * par)
 }
 
 
-Paragraph::Paragraph(Paragraph const & lp)
-       : pimpl_(new Paragraph::Pimpl(*lp.pimpl_, this))
+Paragraph::Paragraph(Paragraph const & lp, bool same_ids)
+       : pimpl_(new Paragraph::Pimpl(*lp.pimpl_, this, same_ids))
 {
-       for (int i = 0; i < 10; ++i) setCounter(i , 0);
+       for (int i = 0; i < 10; ++i)
+               setCounter(i , 0);
        enumdepth = 0;
        itemdepth = 0;
        next_ = 0;
        previous_ = 0;
-       clear();
-
-       makeSameLayout(&lp);
 
        // this is because of the dummy layout of the paragraphs that
        // follow footnotes
        layout = lp.layout;
 
         // ale970302
-       if (lp.bibkey)
+       if (lp.bibkey) {
                bibkey = static_cast<InsetBibKey *>
                        (lp.bibkey->clone(*current_view->buffer()));
-       else
+       } else {
                bibkey = 0;
+       }
        
        // copy everything behind the break-position to the new paragraph
 
        insetlist = lp.insetlist;
        for (InsetList::iterator it = insetlist.begin();
             it != insetlist.end(); ++it)
-               it->inset = it->inset->clone(*current_view->buffer());
+       {
+               it->inset = it->inset->clone(*current_view->buffer(), same_ids);
+       }
 }
 
 
@@ -149,7 +150,7 @@ Paragraph::~Paragraph()
 
        for (InsetList::iterator it = insetlist.begin();
             it != insetlist.end(); ++it) {
-               delete (*it).inset;
+               delete it->inset;
        }
 
         // ale970302
@@ -335,16 +336,16 @@ void Paragraph::validate(LaTeXFeatures & features) const
        
        for (Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
             cit != pimpl_->fontlist.end(); ++cit) {
-               if ((*cit).font().noun() == LyXFont::ON) {
+               if (cit->font().noun() == LyXFont::ON) {
                        lyxerr[Debug::LATEX] << "font.noun: "
-                                            << (*cit).font().noun()
+                                            << cit->font().noun()
                                             << endl;
                        features.noun = true;
                        lyxerr[Debug::LATEX] << "Noun enabled. Font: "
-                                            << (*cit).font().stateText(0)
+                                            << cit->font().stateText(0)
                                             << endl;
                }
-               switch ((*cit).font().color()) {
+               switch (cit->font().color()) {
                case LColor::none:
                case LColor::inherit:
                case LColor::ignore:
@@ -352,11 +353,11 @@ void Paragraph::validate(LaTeXFeatures & features) const
                default:
                        features.color = true;
                        lyxerr[Debug::LATEX] << "Color enabled. Font: "
-                                            << (*cit).font().stateText(0)
+                                            << cit->font().stateText(0)
                                             << endl;
                }
 
-               Language const * language = (*cit).font().language();
+               Language const * language = cit->font().language();
                if (language->babel() != doc_language->babel()) {
                        features.UsedLanguages.insert(language);
                        lyxerr[Debug::LATEX] << "Found language "
@@ -367,8 +368,8 @@ void Paragraph::validate(LaTeXFeatures & features) const
        // then the insets
        for (InsetList::const_iterator cit = insetlist.begin();
             cit != insetlist.end(); ++cit) {
-               if ((*cit).inset)
-                       (*cit).inset->validate(features);
+               if (cit->inset)
+                       cit->inset->validate(features);
        }
 }
 
@@ -412,8 +413,8 @@ void Paragraph::cutIntoMinibuffer(BufferParams const & bparams,
                                lower_bound(insetlist.begin(),
                                            insetlist.end(),
                                            search_elem, Pimpl::matchIT());
-                       if (it != insetlist.end() && (*it).pos == pos)
-                               (*it).inset = 0;
+                       if (it != insetlist.end() && it->pos == pos)
+                               it->inset = 0;
                } else {
                        minibuffer_inset = 0;
                        minibuffer_char = ' ';
@@ -429,7 +430,7 @@ void Paragraph::cutIntoMinibuffer(BufferParams const & bparams,
 bool Paragraph::insertFromMinibuffer(Paragraph::size_type pos)
 {
        if ((minibuffer_char == Paragraph::META_INSET) &&
-           !insertInsetAllowed(minibuffer_inset))
+           !insetAllowed(minibuffer_inset->lyxCode()))
                return false;
        if (minibuffer_char == Paragraph::META_INSET)
                insertInset(pos, minibuffer_inset, minibuffer_font);
@@ -488,12 +489,12 @@ void Paragraph::insertInset(Paragraph::size_type pos,
 }
 
 
-bool Paragraph::insertInsetAllowed(Inset * inset)
+bool Paragraph::insetAllowed(Inset::Code code)
 {
        //lyxerr << "Paragraph::InsertInsetAllowed" << endl;
        
        if (pimpl_->inset_owner)
-               return pimpl_->inset_owner->insertInsetAllowed(inset);
+               return pimpl_->inset_owner->insetAllowed(code);
        return true;
 }
 
@@ -507,8 +508,8 @@ Inset * Paragraph::getInset(Paragraph::size_type pos)
        InsetList::iterator it = lower_bound(insetlist.begin(),
                                             insetlist.end(),
                                             search_inset, Pimpl::matchIT());
-       if (it != insetlist.end() && (*it).pos == pos)
-               return (*it).inset;
+       if (it != insetlist.end() && it->pos == pos)
+               return it->inset;
 
        lyxerr << "ERROR (Paragraph::GetInset): "
                "Inset does not exist: " << pos << endl;
@@ -532,8 +533,8 @@ Inset const * Paragraph::getInset(Paragraph::size_type pos) const
        InsetList::const_iterator cit = lower_bound(insetlist.begin(),
                                                    insetlist.end(),
                                                    search_inset, Pimpl::matchIT());
-       if (cit != insetlist.end() && (*cit).pos == pos)
-               return (*cit).inset;
+       if (cit != insetlist.end() && cit->pos == pos)
+               return cit->inset;
 
        lyxerr << "ERROR (Paragraph::GetInset): "
                "Inset does not exist: " << pos << endl;
@@ -558,7 +559,7 @@ LyXFont const Paragraph::getFontSettings(BufferParams const & bparams,
                                                   pimpl_->fontlist.end(),
                                                   search_font, Pimpl::matchFT());
        if (cit != pimpl_->fontlist.end())
-               return (*cit).font();
+               return cit->font();
        
        if (pos == size() && size())
                return getFontSettings(bparams, pos - 1);
@@ -656,7 +657,7 @@ Paragraph::highestFontInRange(Paragraph::size_type startpos,
                                 pimpl_->fontlist.end(),
                                 start_search, Pimpl::matchFT());
             cit != end_it; ++cit) {
-               LyXFont::FONT_SIZE size = (*cit).font().size();
+               LyXFont::FONT_SIZE size = cit->font().size();
                if (size > maxsize && size <= LyXFont::SIZE_HUGER)
                        maxsize = size;
        }
@@ -860,7 +861,7 @@ void Paragraph::breakParagraph(BufferParams const & bparams,
        // create a new paragraph
        Paragraph * tmp = new Paragraph(this);
        // remember to set the inset_owner
-       tmp->setInsetOwner(InInset());
+       tmp->setInsetOwner(inInset());
        
        // this is an idea for a more userfriendly layout handling, I will
        // see what the users say
@@ -921,10 +922,8 @@ void Paragraph::breakParagraph(BufferParams const & bparams,
 void Paragraph::makeSameLayout(Paragraph const * par)
 {
        layout = par->layout;
-       params().makeSame(par->params());
-       
-       // This can be changed after NEW_INSETS is in effect. (Lgb)
-       setLabelWidthString(par->params().labelWidthString());
+       // move to pimpl?
+       params() = par->params();
 }
 
 
@@ -1219,8 +1218,8 @@ int Paragraph::getPositionOfInset(Inset * inset) const
        // Find the entry.
        for (InsetList::const_iterator cit = insetlist.begin();
             cit != insetlist.end(); ++cit) {
-               if ((*cit).inset == inset) {
-                       return (*cit).pos;
+               if (cit->inset == inset) {
+                       return cit->pos;
                }
        }
        if (inset == bibkey)
@@ -1875,7 +1874,7 @@ bool Paragraph::isMultiLingual(BufferParams const & bparams)
        Language const * doc_language = bparams.language;
        for (Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
             cit != pimpl_->fontlist.end(); ++cit)
-               if ((*cit).font().language() != doc_language)
+               if (cit->font().language() != doc_language)
                        return true;
        return false;
 }
@@ -1897,7 +1896,7 @@ string const Paragraph::asString(Buffer const * buffer, bool label)
                        s += c;
                else if (c == META_INSET &&
                         getInset(i)->lyxCode() == Inset::MATH_CODE) {
-                       std::ostringstream ost;
+                       ostringstream ost;
                        getInset(i)->ascii(buffer, ost);
                        s += subst(ost.str().c_str(),'\n',' ');
                }
@@ -1914,7 +1913,7 @@ string const Paragraph::asString(Buffer const * buffer,
                            Paragraph::size_type beg,
                            Paragraph::size_type end)
 {
-       std::ostringstream ost;
+       ostringstream ost;
 
        if (beg == 0 && !params().labelString().empty())
                ost << params().labelString() << ' ';
@@ -1937,8 +1936,8 @@ void Paragraph::setInsetOwner(Inset * i)
        pimpl_->inset_owner = i;
        for (InsetList::const_iterator cit = insetlist.begin();
             cit != insetlist.end(); ++cit) {
-               if ((*cit).inset)
-                       (*cit).inset->setOwner(i);
+               if (cit->inset)
+                       cit->inset->setOwner(i);
        }
 }
 
@@ -1948,10 +1947,10 @@ void Paragraph::deleteInsetsLyXText(BufferView * bv)
        // then the insets
        for (InsetList::const_iterator cit = insetlist.begin();
             cit != insetlist.end(); ++cit) {
-               if ((*cit).inset) {
-                       if ((*cit).inset->isTextInset()) {
+               if (cit->inset) {
+                       if (cit->inset->isTextInset()) {
                                static_cast<UpdatableInset *>
-                                       ((*cit).inset)->deleteLyXText(bv, true);
+                                       (cit->inset)->deleteLyXText(bv, true);
                        }
                }
        }
@@ -1963,10 +1962,10 @@ void Paragraph::resizeInsetsLyXText(BufferView * bv)
        // then the insets
        for (InsetList::const_iterator cit = insetlist.begin();
             cit != insetlist.end(); ++cit) {
-               if ((*cit).inset) {
-                       if ((*cit).inset->isTextInset()) {
+               if (cit->inset) {
+                       if (cit->inset->isTextInset()) {
                                static_cast<UpdatableInset *>
-                                       ((*cit).inset)->resizeLyXText(bv, true);
+                                       (cit->inset)->resizeLyXText(bv, true);
                        }
                }
        }
@@ -2004,7 +2003,7 @@ void  Paragraph::id(int id_arg)
 }
 
 
-LyXTextClass::size_type Paragraph::getLayout() const
+LyXTextClass::LayoutList::size_type Paragraph::getLayout() const
 {
        return layout;
 }
@@ -2019,7 +2018,7 @@ bool Paragraph::isFirstInSequence() const
 }
 
 
-Inset * Paragraph::InInset()
+Inset * Paragraph::inInset() const
 {
        return pimpl_->inset_owner;
 }
@@ -2057,9 +2056,7 @@ void Paragraph::setChar(size_type pos, value_type c)
 
 Paragraph::inset_iterator::inset_iterator(Paragraph::InsetList::iterator const & iter)
  : it(iter) 
-{
-
-}
+{}
 
 
 Paragraph::inset_iterator Paragraph::inset_iterator_begin()
@@ -2079,8 +2076,14 @@ ParagraphParameters & Paragraph::params()
        return pimpl_->params;
 }
 
+
 ParagraphParameters const & Paragraph::params() const
 {
        return pimpl_->params;
 }
 
+
+Paragraph * Paragraph::getParFromID(int id) const
+{
+       return pimpl_->getParFromID(id);
+}