]> git.lyx.org Git - features.git/commitdiff
parlist-13-c.diff
authorLars Gullik Bjønnes <larsbj@gullik.org>
Wed, 16 Apr 2003 08:12:22 +0000 (08:12 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Wed, 16 Apr 2003 08:12:22 +0000 (08:12 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6824 a592a061-630c-0410-9148-cb99ea01b6c8

src/ChangeLog
src/CutAndPaste.C
src/buffer.C
src/buffer.h
src/paragraph.C
src/paragraph_funcs.C
src/paragraph_funcs.h
src/rowpainter.C
src/text.C
src/text2.C

index ae5100dd8fb434550c322747cb47d135f33a1c5f..ae2765d6a92aaa3e215591efc6cc741cf23ba2e2 100644 (file)
@@ -1,3 +1,30 @@
+2003-04-16  Lars Gullik Bjønnes  <larsbj@gullik.net>
+
+       * text2.C (setCharFont): adjust
+       (setCounter): adjust
+       (insertStringAsLines): adjust
+
+       * text.C (leftMargin): adjust
+       (setHeightOfRow): adjust
+
+       * rowpainter.C (paintFirst): adjust
+       (paintLast): adjust
+
+       * paragraph_funcs.C (depthHook): ParagraphList::iterators
+       (outerHook): ditto
+       (isFirstInSequence): ditto
+       (getEndLabel): ditto
+       (outerFont): adjust
+
+       * paragraph.C (getParLanguage): comment out some hard stuff.
+
+       * buffer.C (insertStringAsLines): take a ParagraphList as arg
+       (sgmlError): ditto
+       (simpleDocBookOnePar): ditto
+       (makeDocBookFile): use ParagraphList::iterator
+
+       * CutAndPaste.C (pasteSelection): adjust
+
 2003-04-16  Lars Gullik Bjønnes  <larsbj@gullik.net>
 
        * text2.C (getFont): adjust
index 0b3499746aa9653d6b7860b993e415c31ae6b4c7..8d76ec1df356c1f4e7f18bdfe7a3879873a35f20 100644 (file)
@@ -282,7 +282,7 @@ bool CutAndPaste::pasteSelection(Paragraph ** par, Paragraph ** endpar,
                                        tmpbuf->erase(i--);
                                }
                        } else {
-                               LyXFont f1 = tmpbuf->getFont(current_view->buffer()->params, i, outerFont(tmpbuf, current_view->text->ownerParagraphs()));
+                               LyXFont f1 = tmpbuf->getFont(current_view->buffer()->params, i, outerFont(tmpbuf, current_view->buffer()->paragraphs));
                                LyXFont f2 = f1;
                                if (!(*par)->checkInsertChar(f1)) {
                                        tmpbuf->erase(i--);
index aa177d7d4b2b1011bc6d8f46d23233459b7a46b7..f7b0aae7623405cf549ea55a39b3fe0f09193ad3 100644 (file)
@@ -434,7 +434,7 @@ Buffer::readParagraph(LyXLex & lex, string const & token,
 
 
 // needed to insert the selection
-void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos,
+void Buffer::insertStringAsLines(ParagraphList::iterator & par, pos_type & pos,
                                 LyXFont const & fn,string const & str)
 {
        LyXLayout_ptr const & layout = par->layout();
@@ -452,7 +452,7 @@ void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos,
                        if (autobreakrows && (!par->empty() || layout->keepempty)) {
                                breakParagraph(params, paragraphs, par, pos,
                                               layout->isEnvironment());
-                               par = par->next();
+                               ++par;
                                pos = 0;
                                space_inserted = true;
                        } else {
@@ -1596,7 +1596,7 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
 
 
 // Print an error message.
-void Buffer::sgmlError(Paragraph * /*par*/, int /*pos*/,
+void Buffer::sgmlError(ParagraphList::iterator /*par*/, int /*pos*/,
        string const & /*message*/) const
 {
 #ifdef WITH_WARNINGS
@@ -1634,8 +1634,6 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                return;
        }
 
-       Paragraph * par = &*(paragraphs.begin());
-
        niceFile = nice; // this will be used by Insetincludes.
 
        LaTeXFeatures features(params);
@@ -1689,7 +1687,10 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
        string item_name;
        string command_name;
 
-       while (par) {
+       ParagraphList::iterator par = paragraphs.begin();
+       ParagraphList::iterator pend = paragraphs.end();
+
+       for (; par != pend; ++par) {
                string sgmlparam;
                string c_depth;
                string c_params;
@@ -1843,7 +1844,6 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
 
                simpleDocBookOnePar(ofs, par, desc_on,
                                    depth + 1 + command_depth);
-               par = par->next();
 
                string end_tag;
                // write closing SGML tags
@@ -1907,7 +1907,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
 
 
 void Buffer::simpleDocBookOnePar(ostream & os,
-                                Paragraph * par, int & desc_on,
+                                ParagraphList::iterator par, int & desc_on,
                                 Paragraph::depth_type depth) const
 {
        bool emph_flag = false;
index 9f749f4969b0bd5c8cd9e1156c89095ea54e41e7..ea66fe9ca494916b476e6f4ead269f341b9f992d 100644 (file)
@@ -117,7 +117,7 @@ public:
                      Paragraph::depth_type & depth);
 
        ///
-       void insertStringAsLines(Paragraph *&, lyx::pos_type &,
+       void insertStringAsLines(ParagraphList::iterator &, lyx::pos_type &,
                                 LyXFont const &, string const &);
        ///
        Paragraph * getParFromID(int id) const;
@@ -153,7 +153,7 @@ public:
                           bool only_preamble = false);
        ///
        void simpleDocBookOnePar(std::ostream &,
-                                Paragraph * par, int & desc_on,
+                                ParagraphList::iterator par, int & desc_on,
                                 Paragraph::depth_type depth) const ;
        ///
        void simpleLinuxDocOnePar(std::ostream & os, Paragraph * par,
@@ -165,7 +165,7 @@ public:
        void makeDocBookFile(string const & filename,
                             bool nice, bool only_body = false);
        ///
-       void sgmlError(Paragraph * par, int pos, string const & message) const;
+       void sgmlError(ParagraphList::iterator par, int pos, string const & message) const;
 
        /// returns the main language for the buffer (document)
        Language const * getLanguage() const;
index dd71347f4968979fe45df599b6677243c4719fe9..6f21d609c2c6aec28a212aed3be506a9306ae644 100644 (file)
@@ -1187,9 +1187,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;
 }
 
index 2a3994f38cc8867aeb1c6b8366a7e810b02169a1..306afd958ba56722e3f28c67cc161b78cdc142dc 100644 (file)
@@ -196,66 +196,72 @@ void mergeParagraph(BufferParams const & bparams,
 }
 
 
-Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth)
+ParagraphList::iterator depthHook(ParagraphList::iterator pit,
+                                 ParagraphList const & plist,
+                                 Paragraph::depth_type depth)
 {
-       Paragraph * newpar = par;
+       ParagraphList::iterator newpit = pit;
+       ParagraphList::iterator beg = plist.begin();
 
-       do {
-               newpar = newpar->previous();
-       } while (newpar && newpar->getDepth() > depth);
-
-       if (!newpar) {
-               if (par->previous() || par->getDepth())
-                       lyxerr << "ERROR (Paragraph::DepthHook): "
-                               "no hook." << endl;
-               newpar = par;
+       if (newpit != beg)
+               --newpit;
+
+       while (newpit !=  beg && newpit->getDepth() > depth) {
+               --newpit;
        }
 
-       return newpar;
+       if (newpit->getDepth() > depth)
+               return pit;
+
+       return newpit;
 }
 
 
-Paragraph * outerHook(Paragraph * par)
+ParagraphList::iterator outerHook(ParagraphList::iterator pit,
+                                 ParagraphList const & plist)
 {
-       if (!par->getDepth())
-               return 0;
-       return depthHook(par, Paragraph::depth_type(par->getDepth() - 1));
+       if (!pit->getDepth())
+               return plist.end();
+       return depthHook(pit, plist,
+                        Paragraph::depth_type(pit->getDepth() - 1));
 }
 
 
-bool isFirstInSequence(Paragraph * par)
+bool isFirstInSequence(ParagraphList::iterator pit,
+                      ParagraphList const & plist)
 {
-       Paragraph const * dhook = depthHook(par, par->getDepth());
-       return (dhook == par
-               || dhook->layout() != par->layout()
-               || dhook->getDepth() != par->getDepth());
+       ParagraphList::iterator dhook = depthHook(pit, plist, pit->getDepth());
+       return (dhook == pit
+               || dhook->layout() != pit->layout()
+               || dhook->getDepth() != pit->getDepth());
 }
 
 
-int getEndLabel(Paragraph * p)
+int getEndLabel(ParagraphList::iterator p,
+               ParagraphList const & plist)
 {
-       Paragraph * par = p;
+       ParagraphList::iterator pit = p;
        Paragraph::depth_type par_depth = p->getDepth();
-       while (par) {
-               LyXLayout_ptr const & layout = par->layout();
+       while (pit != plist.end()) {
+               LyXLayout_ptr const & layout = pit->layout();
                int const endlabeltype = layout->endlabeltype;
 
                if (endlabeltype != END_LABEL_NO_LABEL) {
-                       if (!p->next())
+                       if (boost::next(p) == plist.end())
                                return endlabeltype;
 
-                       Paragraph::depth_type const next_depth = p->next()->getDepth();
+                       Paragraph::depth_type const next_depth = boost::next(p)->getDepth();
                        if (par_depth > next_depth ||
-                           (par_depth == next_depth
-                            && layout != p->next()->layout()))
+                           (par_depth == next_depth &&
+                            layout != boost::next(p)->layout()))
                                return endlabeltype;
                        break;
                }
                if (par_depth == 0)
                        break;
-               par = outerHook(par);
-               if (par)
-                       par_depth = par->getDepth();
+               pit = outerHook(pit, plist);
+               if (pit != plist.end())
+                       par_depth = pit->getDepth();
        }
        return END_LABEL_NO_LABEL;
 }
@@ -1031,18 +1037,18 @@ int readParagraph(Buffer & buf, Paragraph & par, LyXLex & lex)
 
 
 LyXFont const outerFont(ParagraphList::iterator pit,
-                       ParagraphList const & /*plist*/)
+                       ParagraphList const & plist)
 {
        Paragraph::depth_type par_depth = pit->getDepth();
        LyXFont tmpfont(LyXFont::ALL_INHERIT);
 
        // Resolve against environment font information
-       Paragraph * par = &*pit;
-       while (par && par_depth && !tmpfont.resolved()) {
-               par = outerHook(par);
-               if (par) {
-                       tmpfont.realize(par->layout()->font);
-                       par_depth = par->getDepth();
+       while (pit != plist.end() &&
+              par_depth && !tmpfont.resolved()) {
+               pit = outerHook(pit, plist);
+               if (pit != plist.end()) {
+                       tmpfont.realize(pit->layout()->font);
+                       par_depth = pit->getDepth();
                }
        }
 
index 433c5a04b2e9bc35b988c57b1cbf7c5d1b340b40..3270494e658c20e832b3209872b28d550967a7d5 100644 (file)
@@ -42,17 +42,23 @@ void mergeParagraph(BufferParams const & bparams,
                    ParagraphList & paragraphs,
                    ParagraphList::iterator par);
 
+
 /// for the environments
-Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth);
+ParagraphList::iterator depthHook(ParagraphList::iterator pit,
+                                 ParagraphList const & plist,
+                                 Paragraph::depth_type depth);
 
-Paragraph * outerHook(Paragraph * par);
+ParagraphList::iterator outerHook(ParagraphList::iterator pit,
+                                 ParagraphList const & plist);
 
 /// Is it the first par with same depth and layout?
-bool isFirstInSequence(Paragraph * par);
+bool isFirstInSequence(ParagraphList::iterator par,
+                      ParagraphList const & plist);
 
 /** Check if the current paragraph is the last paragraph in a
     proof environment */
-int getEndLabel(Paragraph * para);
+int getEndLabel(ParagraphList::iterator pit,
+               ParagraphList const & plist);
 
 
 void latexParagraphs(Buffer const * buf,
index 4e10bb0ab7df5d4615f7c71b79825e7cf1581ee4..708059be9dcedfc81190bf28f63c9eea5791a460 100644 (file)
@@ -674,7 +674,7 @@ void RowPainter::paintFirst()
        if (layout->labeltype >= LABEL_STATIC
            && (layout->labeltype != LABEL_STATIC
                || layout->latextype != LATEX_ENVIRONMENT
-               || isFirstInSequence(&*pit_))) {
+               || isFirstInSequence(pit_, text_.ownerParagraphs()))) {
 
                LyXFont font = getLabelFont();
                if (!pit_->getLabelstring().empty()) {
@@ -722,7 +722,7 @@ void RowPainter::paintFirst()
 
        // the labels at the top of an environment.
        // More or less for bibliography
-       } else if (isFirstInSequence(&*pit_) &&
+       } else if (isFirstInSequence(pit_, text_.ownerParagraphs()) &&
                (layout->labeltype == LABEL_TOP_ENVIRONMENT ||
                layout->labeltype == LABEL_BIBLIO ||
                layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)) {
@@ -797,7 +797,7 @@ void RowPainter::paintLast()
        }
 
        bool const is_rtl = pit_->isRightToLeftPar(bv_.buffer()->params);
-       int const endlabel = getEndLabel(&*pit_);
+       int const endlabel = getEndLabel(pit_, text_.ownerParagraphs());
 
        // draw an endlabel
        switch (endlabel) {
index 228f46c4f49d5a1e5afd13a6132f919c6ad660d2..e6e6bec91a322f080bc4b346dbcad289b8b88676 100644 (file)
@@ -538,29 +538,33 @@ int LyXText::leftMargin(Row const & row) const
                if (row.par()->layout() == tclass.defaultLayout()) {
                        // find the previous same level paragraph
                        if (row.par() != ownerParagraphs().begin()) {
-                               Paragraph * newpar =
-                                       depthHook(&*row.par(), row.par()->getDepth());
-                               if (newpar &&
-                                   newpar->layout()->nextnoindent)
+                               ParagraphList::iterator newpit =
+                                       depthHook(row.par(), ownerParagraphs(),
+                                                 row.par()->getDepth());
+                               if (newpit == row.par() &&
+                                   newpit->layout()->nextnoindent)
                                        parindent.erase();
                        }
                }
        } else {
                // find the next level paragraph
 
-               Paragraph * newpar = outerHook(&*row.par());
+               ParagraphList::iterator newpar = outerHook(row.par(),
+                                                          ownerParagraphs());
 
                // make a corresponding row. Needed to call leftMargin()
 
                // check wether it is a sufficent paragraph
-               if (newpar && newpar->layout()->isEnvironment()) {
+               if (newpar != ownerParagraphs().end() &&
+                   newpar->layout()->isEnvironment()) {
                        Row dummyrow;
                        dummyrow.par(newpar);
                        dummyrow.pos(newpar->size());
                        x = leftMargin(dummyrow);
                }
 
-               if (newpar && row.par()->layout() == tclass.defaultLayout()) {
+               if (newpar != ownerParagraphs().end() &&
+                   row.par()->layout() == tclass.defaultLayout()) {
                        if (newpar->params().noindent())
                                parindent.erase();
                        else {
@@ -614,7 +618,7 @@ int LyXText::leftMargin(Row const & row) const
                           // theorems (JMarc)
                           || (layout->labeltype == LABEL_STATIC
                               && layout->latextype == LATEX_ENVIRONMENT
-                              && !isFirstInSequence(&*row.par()))) {
+                              && !isFirstInSequence(row.par(), ownerParagraphs()))) {
                        x += font_metrics::signedWidth(layout->leftmargin,
                                                  labelfont);
                } else if (layout->labeltype != LABEL_TOP_ENVIRONMENT
@@ -679,7 +683,7 @@ int LyXText::leftMargin(Row const & row) const
                     || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT
                     || (layout->labeltype == LABEL_STATIC
                         && layout->latextype == LATEX_ENVIRONMENT
-                        && !isFirstInSequence(&*row.par())))
+                        && !isFirstInSequence(row.par(), ownerParagraphs())))
                    && align == LYX_ALIGN_BLOCK
                    && !row.par()->params().noindent()
                        // in tabulars and ert paragraphs are never indented!
@@ -1153,7 +1157,7 @@ void LyXText::setHeightOfRow(RowList::iterator rit)
                if ((layout->labeltype == LABEL_TOP_ENVIRONMENT
                     || layout->labeltype == LABEL_BIBLIO
                     || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)
-                   && isFirstInSequence(&*pit)
+                   && isFirstInSequence(pit, ownerParagraphs())
                    && !pit->getLabelstring().empty())
                {
                        float spacing_val = 1.0;
@@ -1174,14 +1178,15 @@ void LyXText::setHeightOfRow(RowList::iterator rit)
                                + layout->labelbottomsep * defaultRowHeight());
                }
 
-               // and now the layout spaces, for example before and after a section,
-               // or between the items of a itemize or enumerate environment
+               // And now the layout spaces, for example before and after
+               // a section, or between the items of a itemize or enumerate
+               // environment.
 
                if (!pit->params().pagebreakTop()) {
-                       Paragraph * prev = pit->previous();
-                       if (prev)
-                               prev = depthHook(&*pit, pit->getDepth());
-                       if (prev && prev->layout() == layout &&
+                       ParagraphList::iterator prev =
+                               depthHook(pit, ownerParagraphs(),
+                                         pit->getDepth());
+                       if (prev != pit && prev->layout() == layout &&
                                prev->getDepth() == pit->getDepth() &&
                                prev->getLabelWidthString() == pit->getLabelWidthString())
                        {
@@ -1201,8 +1206,8 @@ void LyXText::setHeightOfRow(RowList::iterator rit)
                                        layoutasc = (tmptop * defaultRowHeight());
                        }
 
-                       prev = outerHook(&*pit);
-                       if (prev)  {
+                       prev = outerHook(pit, ownerParagraphs());
+                       if (prev != ownerParagraphs().end())  {
                                maxasc += int(prev->layout()->parsep * defaultRowHeight());
                        } else if (pit != ownerParagraphs().begin()) {
                                ParagraphList::iterator prior_pit = boost::prior(pit);
@@ -1250,7 +1255,7 @@ void LyXText::setHeightOfRow(RowList::iterator rit)
 
                        if (comparepit->getDepth() > nextpit->getDepth()) {
                                usual = (comparepit->layout()->bottomsep * defaultRowHeight());
-                               comparepit = depthHook(&*comparepit, nextpit->getDepth());
+                               comparepit = depthHook(comparepit, ownerParagraphs(), nextpit->getDepth());
                                if (comparepit->layout()!= nextpit->layout()
                                        || nextpit->getLabelWidthString() !=
                                        comparepit->getLabelWidthString())
index 32c8f0c1b268cdad2624985a8de430d1c3d80f15..2cbbe8077cf8c2531f04a469ea1281d6a21906f0 100644 (file)
@@ -230,11 +230,12 @@ void LyXText::setCharFont(Buffer const * buf, ParagraphList::iterator pit,
 
        // Realize against environment font information
        if (pit->getDepth()) {
-#warning FIXME I think I hate this outerHood stuff.
-               Paragraph * tp = &*pit;
-               while (!layoutfont.resolved() && tp && tp->getDepth()) {
-                       tp = outerHook(tp);
-                       if (tp)
+               ParagraphList::iterator tp = pit;
+               while (!layoutfont.resolved() &&
+                      tp != ownerParagraphs().end() &&
+                      tp->getDepth()) {
+                       tp = outerHook(tp, ownerParagraphs());
+                       if (tp != ownerParagraphs().end())
                                layoutfont.realize(tp->layout()->font);
                }
        }
@@ -1073,7 +1074,8 @@ void LyXText::setCounter(Buffer const * buf, ParagraphList::iterator pit)
        if (pit != ownerParagraphs().begin()
            && boost::prior(pit)->getDepth() > pit->getDepth()
            && layout->labeltype != LABEL_BIBLIO) {
-               pit->enumdepth = depthHook(&*pit, pit->getDepth())->enumdepth;
+               pit->enumdepth = depthHook(pit, ownerParagraphs(),
+                                          pit->getDepth())->enumdepth;
        }
 
        if (!pit->params().labelString().empty()) {
@@ -1492,8 +1494,7 @@ void LyXText::insertStringAsLines(string const & str)
        // only to be sure, should not be neccessary
        clearSelection();
 
-       Paragraph * par = &*pit;
-       bv()->buffer()->insertStringAsLines(par, pos, current_font, str);
+       bv()->buffer()->insertStringAsLines(pit, pos, current_font, str);
 
        redoParagraphs(cursor, endpit);
        setCursor(cursor.par(), cursor.pos());