]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph.C
Fixed/Disabled code inserting InsetError in the wrong way (fix #129)
[lyx.git] / src / paragraph.C
index 618504e9408393b0587adaa7f67358eb47dfe524..b2d361acd794dcb420fe75a2b734dbf2a0f3360c 100644 (file)
@@ -86,6 +86,7 @@ Paragraph::Paragraph()
        enumdepth = 0;
        itemdepth = 0;
        bibkey = 0; // ale970302
+       params().clear();
 }
 
 
@@ -106,7 +107,8 @@ Paragraph::Paragraph(Paragraph * par)
        previous_->next_ = this;
        // end
 
-       bibkey = 0; // ale970302        
+       bibkey = 0; // ale970302
+       params().clear();
 }
 
 
@@ -187,6 +189,11 @@ void Paragraph::writeFile(Buffer const * buf, ostream & os,
        }
        
        // First write the layout
+       string lay = layout();
+       if (lay.empty()) {
+               lay = textclasslist[bparams.textclass].defaultLayoutName();
+       }
+       
        os << "\n\\layout " << layout() << "\n";
        
        // Maybe some vertical spaces.
@@ -339,19 +346,20 @@ void Paragraph::validate(LaTeXFeatures & features) const
 
        // then the fonts
        Language const * doc_language = bparams.language;
-       
-       for (Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
-            cit != pimpl_->fontlist.end(); ++cit) {
-               if (cit->font().noun() == LyXFont::ON) {
+
+       Pimpl::FontList::const_iterator fcit = pimpl_->fontlist.begin();
+       Pimpl::FontList::const_iterator fend = pimpl_->fontlist.end();
+       for (; fcit != fend; ++fcit) {
+               if (fcit->font().noun() == LyXFont::ON) {
                        lyxerr[Debug::LATEX] << "font.noun: "
-                                            << cit->font().noun()
+                                            << fcit->font().noun()
                                             << endl;
                        features.require("noun");
                        lyxerr[Debug::LATEX] << "Noun enabled. Font: "
-                                            << cit->font().stateText(0)
+                                            << fcit->font().stateText(0)
                                             << endl;
                }
-               switch (cit->font().color()) {
+               switch (fcit->font().color()) {
                case LColor::none:
                case LColor::inherit:
                case LColor::ignore:
@@ -363,11 +371,11 @@ void Paragraph::validate(LaTeXFeatures & features) const
                default:
                        features.require("color");
                        lyxerr[Debug::LATEX] << "Color enabled. Font: "
-                                            << cit->font().stateText(0)
+                                            << fcit->font().stateText(0)
                                             << endl;
                }
 
-               Language const * language = cit->font().language();
+               Language const * language = fcit->font().language();
                if (language->babel() != doc_language->babel() &&
                    language != ignore_language &&
 #ifdef INHERIT_LANGUAGE
@@ -384,12 +392,13 @@ void Paragraph::validate(LaTeXFeatures & features) const
        // then the insets
        LyXLayout const & lout = textclasslist[bparams.textclass][layout()];
 
-       for (InsetList::const_iterator cit = insetlist.begin();
-            cit != insetlist.end(); ++cit) {
-               if (cit->inset) {
-                       cit->inset->validate(features);
+       InsetList::const_iterator icit = insetlist.begin();
+       InsetList::const_iterator iend = insetlist.end();
+       for (; icit != iend; ++icit) {
+               if (icit->inset) {
+                       icit->inset->validate(features);
                        if (lout.needprotect &&
-                           cit->inset->lyxCode() == Inset::FOOT_CODE)
+                           icit->inset->lyxCode() == Inset::FOOT_CODE)
                                features.require("NeedLyXFootnoteCode");
                }
        }
@@ -428,12 +437,14 @@ void Paragraph::cutIntoMinibuffer(BufferParams const & bparams, pos_type pos)
                        // the inset, not just a clone. Otherwise
                        // the inset would be deleted when calling Erase(pos)
                        // find the entry
-                       InsetTable search_elem(pos, 0);
-                       InsetList::iterator it =
-                               lower_bound(insetlist.begin(),
-                                           insetlist.end(),
-                                           search_elem, Pimpl::matchIT());
-                       if (it != insetlist.end() && it->pos == pos)
+                       InsetList::iterator it = insetlist.begin();
+                       InsetList::iterator end = insetlist.end();
+                       for (; it != end; ++it) {
+                               if (it->pos == pos)
+                                       break;
+                       }
+
+                       if (it != end && it->pos == pos)
                                it->inset = 0;
                        // the inset is not in a paragraph anymore
                        minibuffer_inset->parOwner(0);
@@ -525,15 +536,18 @@ Inset * Paragraph::getInset(pos_type pos)
        lyx::Assert(pos < size());
 
        // Find the inset.
-       InsetTable search_inset(pos, 0);
-       InsetList::iterator it = lower_bound(insetlist.begin(),
-                                            insetlist.end(),
-                                            search_inset, Pimpl::matchIT());
-       if (it != insetlist.end() && it->pos == pos)
+       InsetList::iterator it = insetlist.begin();
+       InsetList::iterator end = insetlist.end();
+       for (; it != end; ++it) {
+               if (it->pos == pos)
+                       break;
+       }
+
+       if (it != end && it->pos == pos)
                return it->inset;
 
        lyxerr << "ERROR (Paragraph::getInset): "
-               "Inset does not exist: " << pos << endl;
+              << "Inset does not exist: " << pos << endl;
        //::raise(SIGSTOP);
        
        // text[pos] = ' '; // WHY!!! does this set the pos to ' '????
@@ -550,15 +564,18 @@ Inset const * Paragraph::getInset(pos_type pos) const
        lyx::Assert(pos < size());
 
        // Find the inset.
-       InsetTable search_inset(pos, 0);
-       InsetList::const_iterator cit = lower_bound(insetlist.begin(),
-                                                   insetlist.end(),
-                                                   search_inset, Pimpl::matchIT());
-       if (cit != insetlist.end() && cit->pos == pos)
+       InsetList::const_iterator cit = insetlist.begin();
+       InsetList::const_iterator end = insetlist.end();
+       for (; cit != end; ++cit) {
+               if (cit->pos == pos)
+                       break;
+       }
+
+       if (cit != end && cit->pos == pos)
                return cit->inset;
 
-       lyxerr << "ERROR (Paragraph::GetInset): "
-               "Inset does not exist: " << pos << endl;
+       lyxerr << "ERROR (Paragraph::getInset): "
+              << "Inset does not exist: " << pos << endl;
        //::raise(SIGSTOP);
        //text[pos] = ' '; // WHY!!! does this set the pos to ' '????
        // Did this commenting out introduce a bug? So far I have not
@@ -574,13 +591,16 @@ LyXFont const Paragraph::getFontSettings(BufferParams const & bparams,
                                          pos_type pos) const
 {
        lyx::Assert(pos <= size());
-       
-       Pimpl::FontTable search_font(pos, LyXFont());
-       Pimpl::FontList::const_iterator cit = lower_bound(pimpl_->fontlist.begin(),
-                                                  pimpl_->fontlist.end(),
-                                                  search_font, Pimpl::matchFT());
+
+       Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
+       Pimpl::FontList::const_iterator end = pimpl_->fontlist.end();
+       for (; cit != end; ++cit) {
+               if (cit->pos() >= pos)
+                       break;
+       }
+
        LyXFont retfont;
-       if (cit != pimpl_->fontlist.end()) {
+       if (cit != end) {
                retfont = cit->font();
        } else if (pos == size() && size()) {
                retfont = getFontSettings(bparams, pos - 1);
@@ -672,21 +692,23 @@ Paragraph::highestFontInRange(pos_type startpos, pos_type endpos,
        if (pimpl_->fontlist.empty())
                return def_size;
 
-       LyXFont::FONT_SIZE maxsize = LyXFont::SIZE_TINY;
-       Pimpl::FontTable end_search(endpos, LyXFont());
-       Pimpl::FontList::const_iterator end_it =
-               lower_bound(pimpl_->fontlist.begin(),
-                           pimpl_->fontlist.end(),
-                           end_search, Pimpl::matchFT());
-       if (end_it != pimpl_->fontlist.end())
+       Pimpl::FontList::const_iterator end_it = pimpl_->fontlist.begin();
+       Pimpl::FontList::const_iterator end = pimpl_->fontlist.end();
+       for (; end_it != end; ++end_it) {
+               if (end_it->pos() >= endpos)
+                       break;
+       }
+
+       if (end_it != end)
                ++end_it;
 
-       Pimpl::FontTable start_search(startpos, LyXFont());
-       Pimpl::FontList::const_iterator cit =
-               lower_bound(pimpl_->fontlist.begin(),
-                           pimpl_->fontlist.end(),
-                           start_search, Pimpl::matchFT());
-       
+       Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
+       for (; cit != end; ++cit) {
+               if (cit->pos() >= startpos)
+                       break;
+       }
+
+       LyXFont::FONT_SIZE maxsize = LyXFont::SIZE_TINY;
        for (; cit != end_it; ++cit) {
                LyXFont::FONT_SIZE size = cit->font().size();
                if (size == LyXFont::INHERIT_SIZE)
@@ -750,18 +772,21 @@ void Paragraph::setFont(pos_type pos, LyXFont const & font)
        // in a new kernel. (Asger)
        // Next search font table
 
-       Pimpl::FontTable search_font(pos, LyXFont());
-       Pimpl::FontList::iterator it = lower_bound(pimpl_->fontlist.begin(),
-                                           pimpl_->fontlist.end(),
-                                           search_font, Pimpl::matchFT());
-       unsigned int i = it - pimpl_->fontlist.begin();
-       bool notfound = it == pimpl_->fontlist.end();
+       Pimpl::FontList::iterator beg = pimpl_->fontlist.begin();
+       Pimpl::FontList::iterator it = beg;
+       Pimpl::FontList::iterator endit = pimpl_->fontlist.end();
+       for (; it != endit; ++it) {
+               if (it->pos() >= pos)
+                       break;
+       }
+       unsigned int i = std::distance(beg, it);
+       bool notfound = (it == endit);
 
        if (!notfound && pimpl_->fontlist[i].font() == font)
                return;
 
        bool begin = pos == 0 || notfound ||
-               (i > 0 && pimpl_->fontlist[i-1].pos() == pos - 1);
+               (i > 0 && pimpl_->fontlist[i - 1].pos() == pos - 1);
        // Is position pos is a beginning of a font block?
        bool end = !notfound && pimpl_->fontlist[i].pos() == pos;
        // Is position pos is the end of a font block?
@@ -845,7 +870,7 @@ void Paragraph::breakParagraph(BufferParams const & bparams,
 {
        // create a new paragraph
        Paragraph * tmp = new Paragraph(this);
-       tmp->layout(layout());
+       tmp->layout(textclasslist[bparams.textclass].defaultLayoutName());
        
        // remember to set the inset_owner
        tmp->setInsetOwner(inInset());
@@ -1184,10 +1209,13 @@ Paragraph const * Paragraph::outerHook() const
 Paragraph::inset_iterator
 Paragraph::InsetIterator(pos_type pos)
 {
-       InsetTable search_inset(pos, 0);
-       InsetList::iterator it = lower_bound(insetlist.begin(),
-                                            insetlist.end(),
-                                            search_inset, Pimpl::matchIT());
+       InsetList::iterator it = insetlist.begin();
+       InsetList::iterator end = insetlist.end();
+       for (; it != end; ++it) {
+               if (it->pos == pos)
+                       break;
+       }
+
        return inset_iterator(it);
 }
 
@@ -1196,8 +1224,9 @@ Paragraph::InsetIterator(pos_type pos)
 int Paragraph::getPositionOfInset(Inset const * inset) const
 {
        // Find the entry.
-       for (InsetList::const_iterator cit = insetlist.begin();
-            cit != insetlist.end(); ++cit) {
+       InsetList::const_iterator cit = insetlist.begin();
+       InsetList::const_iterator end = insetlist.end();
+       for (; cit != end; ++cit) {
                if (cit->inset == inset) {
                        return cit->pos;
                }
@@ -1892,7 +1921,8 @@ bool Paragraph::isLineSeparator(pos_type pos) const
 {
        value_type const c = getChar(pos);
        return IsLineSeparatorChar(c)
-               || (IsInsetChar(c) && getInset(pos)->isLineSeparator());
+               || (IsInsetChar(c) && getInset(pos) &&
+               getInset(pos)->isLineSeparator());
 }
 
 
@@ -1967,8 +1997,10 @@ void Paragraph::changeLanguage(BufferParams const & bparams,
 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)
+       Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
+       Pimpl::FontList::const_iterator end = pimpl_->fontlist.end();
+       
+       for (; cit != end; ++cit)
                if (cit->font().language() != ignore_language &&
                    cit->font().language() != latex_language &&
 #ifdef INHERIT_LANGUAGE
@@ -2037,8 +2069,9 @@ string const Paragraph::asString(Buffer const * buffer,
 void Paragraph::setInsetOwner(Inset * i)
 {
        pimpl_->inset_owner = i;
-       for (InsetList::const_iterator cit = insetlist.begin();
-            cit != insetlist.end(); ++cit) {
+       InsetList::const_iterator cit = insetlist.begin();
+       InsetList::const_iterator end = insetlist.end();
+       for (; cit != end; ++cit) {
                if (cit->inset)
                        cit->inset->setOwner(i);
        }
@@ -2048,13 +2081,12 @@ void Paragraph::setInsetOwner(Inset * i)
 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()) {
-                               static_cast<UpdatableInset *>
-                                       (cit->inset)->deleteLyXText(bv, true);
-                       }
+       InsetList::const_iterator cit = insetlist.begin();
+       InsetList::const_iterator end = insetlist.end();
+       for (; cit != end; ++cit) {
+               if (cit->inset && cit->inset->isTextInset()) {
+                       static_cast<UpdatableInset *>
+                               (cit->inset)->deleteLyXText(bv, true);
                }
        }
 }
@@ -2063,9 +2095,9 @@ void Paragraph::deleteInsetsLyXText(BufferView * bv)
 void Paragraph::resizeInsetsLyXText(BufferView * bv)
 {
        // then the insets
-       for (InsetList::const_iterator cit = insetlist.begin();
-            cit != insetlist.end(); ++cit)
-       {
+       InsetList::const_iterator cit = insetlist.begin();
+       InsetList::const_iterator end = insetlist.end();
+       for (; cit != end; ++cit) {
                if (cit->inset) {
                        if (cit->inset->isTextInset()) {
                                static_cast<UpdatableInset *>