From e20c467a988a8dd23eb6a388eecb94978822c26b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lars=20Gullik=20Bj=C3=B8nnes?= Date: Wed, 18 Jun 2003 17:43:49 +0000 Subject: [PATCH] bnext-2.diff + some more boost::next stuff git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7188 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 14 +++++++ src/insets/ChangeLog | 14 +++++++ src/insets/insetert.C | 3 +- src/insets/insettext.C | 87 ++++++++++++++++++++++++------------------ src/rowpainter.C | 6 ++- src/text.C | 27 ++++++++----- src/text2.C | 51 +++++++++++++++++-------- src/text3.C | 7 ++-- 8 files changed, 140 insertions(+), 69 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7753e75af3..007c6b3314 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,19 @@ 2003-06-18 Lars Gullik Bjønnes + * text3.C (cursorNext): add tmp var + + * text2.C (updateCounters): for function calling out of for clause + (replaceSelectionWithString): ditto + (insertStringAsParagraphs): ditto + (getColumnNearX): add tmp var + (setCursorFromCoordinates): add tmp var + (cursorDownParagraph): add tmp var + (deleteEmptyParagraphMechanism): add tmp var + + * text.C (insertChar): add tmp var + + * rowpainter.C (paintDepthBar): add tmp var + * CutAndPaste.C (availableSelections): potentially check all paragraphs in a cut to fill the shown strings. diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index dd3f33084a..d9333fd0dc 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,3 +1,17 @@ +2003-06-18 Lars Gullik Bjønnes + + * insettext.C (update): simplify + (updateLocal): remove commented code + (insetUnlock): simplify + (lockInset): simplify + (updateInsetInInset): simplify + (localDispatch): simplify + (setFont): simplify + (resizeLyXText): simplify + (collapseParagraphs): simplify + + * insetert.C (get_new_label): simplify + 2003-06-17 Lars Gullik Bjønnes * insettext.C (localDispatch): handle arg to LFUN_PASTE, call diff --git a/src/insets/insetert.C b/src/insets/insetert.C index 842ba5df07..f4b142bace 100644 --- a/src/insets/insetert.C +++ b/src/insets/insetert.C @@ -519,8 +519,7 @@ string const InsetERT::get_new_label() const la += inset.paragraphs.begin()->getChar(j); ++i; } - if (boost::next(inset.paragraphs.begin()) != inset.paragraphs.end() || - (i > 0 && j < p_siz)) { + if (p_siz > 1 || (i > 0 && j < p_siz)) { la += "..."; } if (la.empty()) { diff --git a/src/insets/insettext.C b/src/insets/insettext.C index 21a1ee50c5..bd9a60d50b 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -453,8 +453,7 @@ void InsetText::update(BufferView * bv, bool reinit) return; } - if (!autoBreakRows && - boost::next(paragraphs.begin()) != paragraphs.end()) + if (!autoBreakRows && paragraphs.size() > 1) collapseParagraphs(bv); if (the_locking_inset) { @@ -516,14 +515,8 @@ void InsetText::setUpdateStatus(BufferView * bv, int what) const void InsetText::updateLocal(BufferView * bv, int what, bool mark_dirty) { -#if 0 - if (!autoBreakRows && - boost::next(paragraphs.begin()) != paragraphs.end()) - collapseParagraphs(bv); -#else if (!autoBreakRows && paragraphs.size() > 1) collapseParagraphs(bv); -#endif bool clear = false; if (!lt) { @@ -591,10 +584,11 @@ void InsetText::insetUnlock(BufferView * bv) } else bv->owner()->setLayout(bv->text->cursor.par()->layout()->name()); // hack for deleteEmptyParMech - if (!paragraphs.begin()->empty()) { - lt->setCursor(paragraphs.begin(), 0); - } else if (boost::next(paragraphs.begin()) != paragraphs.end()) { - lt->setCursor(boost::next(paragraphs.begin()), 0); + ParagraphList::iterator first_par = paragraphs.begin(); + if (!first_par->empty()) { + lt->setCursor(first_par, 0); + } else if (paragraphs.size() > 1) { + lt->setCursor(boost::next(first_par), 0); } if (clear) lt = 0; @@ -625,8 +619,7 @@ void InsetText::lockInset(BufferView * bv) finishUndo(); // If the inset is empty set the language of the current font to the // language to the surronding text (if different). - if (paragraphs.begin()->empty() && - boost::next(paragraphs.begin()) == paragraphs.end() && + if (paragraphs.begin()->empty() && paragraphs.size() == 1 && bv->getParentLanguage(this) != lt->current_font.language()) { LyXFont font(LyXFont::ALL_IGNORE); font.setLanguage(bv->getParentLanguage(this)); @@ -729,11 +722,12 @@ bool InsetText::unlockInsetInInset(BufferView * bv, UpdatableInset * inset, bool InsetText::updateInsetInInset(BufferView * bv, Inset * inset) { - if (!autoBreakRows && - boost::next(paragraphs.begin()) != paragraphs.end()) + if (!autoBreakRows && paragraphs.size() > 1) collapseParagraphs(bv); + if (inset == this) return true; + bool clear = false; if (!lt) { lt = getLyXText(bv); @@ -1010,8 +1004,8 @@ Inset::RESULT InsetText::localDispatch(FuncRequest const & cmd) // If the inset is empty set the language of the current font to the // language to the surronding text (if different). if (paragraphs.begin()->empty() && - boost::next(paragraphs.begin()) == paragraphs.end()&& - bv->getParentLanguage(this) != lt->current_font.language()) + paragraphs.size() == 1 && + bv->getParentLanguage(this) != lt->current_font.language()) { LyXFont font(LyXFont::ALL_IGNORE); font.setLanguage(bv->getParentLanguage(this)); @@ -1045,7 +1039,8 @@ Inset::RESULT InsetText::localDispatch(FuncRequest const & cmd) } bool was_empty = (paragraphs.begin()->empty() && - boost::next(paragraphs.begin()) == paragraphs.end()); + paragraphs.size() == 1); + no_selection = false; RESULT result = UpdatableInset::localDispatch(cmd); if (result != UNDISPATCHED) @@ -1425,7 +1420,7 @@ Inset::RESULT InsetText::localDispatch(FuncRequest const & cmd) /// If the action has deleted all text in the inset, we need to change the // language to the language of the surronding text. if (!was_empty && paragraphs.begin()->empty() && - boost::next(paragraphs.begin()) == paragraphs.end()) { + paragraphs.size() == 1) { LyXFont font(LyXFont::ALL_IGNORE); font.setLanguage(bv->getParentLanguage(this)); setFont(bv, font, false); @@ -1830,28 +1825,38 @@ void InsetText::setFont(BufferView * bv, LyXFont const & font, bool toggleall, the_locking_inset->setFont(bv, font, toggleall, selectall); return; } - if ((boost::next(paragraphs.begin()) == paragraphs.end() && - paragraphs.begin()->empty()) || cpar(bv)->empty()) { + + if ((paragraphs.size() == 1 && paragraphs.begin()->empty()) + || cpar(bv)->empty()) { getLyXText(bv)->setFont(font, toggleall); return; } + bool clear = false; if (!lt) { lt = getLyXText(bv); clear = true; } + if (lt->selection.set()) { setUndo(bv, Undo::EDIT, lt->cursor.par()); } + if (selectall) selectAll(bv); + lt->toggleFree(font, toggleall); + if (selectall) lt->clearSelection(); + bv->fitCursor(); + bool flag = (selectall || lt->selection.set()); + if (clear) lt = 0; + if (flag) updateLocal(bv, FULL, true); else @@ -2171,8 +2176,8 @@ void InsetText::resizeLyXText(BufferView * bv, bool force) const return; } do_resize = 0; - if (boost::next(paragraphs.begin()) == paragraphs.end() && - paragraphs.begin()->empty()) { // no data, resize not neccessary! + if (paragraphs.size() == 1 && paragraphs.begin()->empty()) { + // no data, resize not neccessary! // we have to do this as a fixed width may have changed! LyXText * t = getLyXText(bv); saveLyXTextState(t); @@ -2180,6 +2185,7 @@ void InsetText::resizeLyXText(BufferView * bv, bool force) const restoreLyXTextState(t); return; } + // one endless line, resize normally not necessary if (!force && getMaxWidth(bv, this) < 0) return; @@ -2188,6 +2194,7 @@ void InsetText::resizeLyXText(BufferView * bv, bool force) const if (it == cache.end()) { return; } + lyx::Assert(it->second.text.get()); LyXText * t = it->second.text.get(); @@ -2199,6 +2206,7 @@ void InsetText::resizeLyXText(BufferView * bv, bool force) const t->init(bv, true); restoreLyXTextState(t); + if (the_locking_inset) { inset_x = cix(bv) - top_x + drawTextXOffset; inset_y = ciy(bv) + drawTextYOffset; @@ -2551,26 +2559,31 @@ void InsetText::collapseParagraphs(BufferView * bv) { LyXText * llt = getLyXText(bv); - while (boost::next(paragraphs.begin()) != paragraphs.end()) { - if (!paragraphs.begin()->empty() && - !boost::next(paragraphs.begin())->empty() && - !paragraphs.begin()->isSeparator(paragraphs.begin()->size() - 1)) - { - paragraphs.begin()->insertChar(paragraphs.begin()->size(), ' '); + while (paragraphs.size() > 1) { + ParagraphList::iterator first_par = paragraphs.begin(); + ParagraphList::iterator next_par = boost::next(first_par); + size_t const first_par_size = first_par->size(); + + if (!first_par->empty() && + !next_par->empty() && + !first_par->isSeparator(first_par_size - 1)) { + first_par->insertChar(first_par_size, ' '); } + if (llt->selection.set()) { - if (llt->selection.start.par() == boost::next(paragraphs.begin())) { - llt->selection.start.par(paragraphs.begin()); + if (llt->selection.start.par() == next_par) { + llt->selection.start.par(first_par); llt->selection.start.pos( - llt->selection.start.pos() + paragraphs.begin()->size()); + llt->selection.start.pos() + first_par_size); } - if (llt->selection.end.par() == boost::next(paragraphs.begin())) { - llt->selection.end.par(paragraphs.begin()); + if (llt->selection.end.par() == next_par) { + llt->selection.end.par(first_par); llt->selection.end.pos( - llt->selection.end.pos() + paragraphs.begin()->size()); + llt->selection.end.pos() + first_par_size); } } - mergeParagraph(bv->buffer()->params, paragraphs, paragraphs.begin()); + + mergeParagraph(bv->buffer()->params, paragraphs, first_par); } reinitLyXText(); } diff --git a/src/rowpainter.C b/src/rowpainter.C index 39745f1ecf..718a1f7ac9 100644 --- a/src/rowpainter.C +++ b/src/rowpainter.C @@ -452,8 +452,10 @@ void RowPainter::paintDepthBar() if (row_ != text_.rows().begin()) prev_depth = boost::prior(row_)->par()->getDepth(); Paragraph::depth_type next_depth = 0; - if (boost::next(row_) != text_.rows().end()) - next_depth = boost::next(row_)->par()->getDepth(); + + RowList::iterator next_row = boost::next(row_); + if (next_row != text_.rows().end()) + next_depth = next_row->par()->getDepth(); for (Paragraph::depth_type i = 1; i <= depth; ++i) { int x = (PAPER_MARGIN / 5) * i + xo_; diff --git a/src/text.C b/src/text.C index 02761b87e3..d416acde64 100644 --- a/src/text.C +++ b/src/text.C @@ -1731,9 +1731,10 @@ void LyXText::insertChar(char c) false, cursor.boundary()); // cursor MUST be in row now. - if (boost::next(row) != rows().end() && - boost::next(row)->par() == row->par()) - need_break_row = boost::next(row); + RowList::iterator next_row = boost::next(row); + if (next_row != rows().end() && + next_row->par() == row->par()) + need_break_row = next_row; else need_break_row = rows().end(); @@ -1757,13 +1758,18 @@ void LyXText::insertChar(char c) if (c == Paragraph::META_INSET || row->fill() < 0) { postPaint(y); breakAgainOneRow(row); + + RowList::iterator next_row = boost::next(row); + // will the cursor be in another row now? if (lastPos(*this, row) <= cursor.pos() + 1 && - boost::next(row) != rows().end()) { - if (boost::next(row) != rows().end() && - boost::next(row)->par() == row->par()) + next_row != rows().end()) { + if (next_row != rows().end() && + next_row->par() == row->par()) { // this should always be true ++row; + } + breakAgainOneRow(row); } current_font = rawtmpfont; @@ -1775,9 +1781,12 @@ void LyXText::insertChar(char c) != cursor.boundary()) setCursor(cursor.par(), cursor.pos(), false, !cursor.boundary()); - if (boost::next(row) != rows().end() && - boost::next(row)->par() == row->par()) - need_break_row = boost::next(row); + + next_row = boost::next(row); + + if (next_row != rows().end() && + next_row->par() == row->par()) + need_break_row = next_row; else need_break_row = rows().end(); } else { diff --git a/src/text2.C b/src/text2.C index 917412bea2..311f6e3458 100644 --- a/src/text2.C +++ b/src/text2.C @@ -1243,14 +1243,16 @@ void LyXText::updateCounters() // CHECK if this is really needed. (Lgb) bv()->buffer()->params.getLyXTextClass().counters().reset(); - for (; pit != ownerParagraphs().end(); ++pit) { + ParagraphList::iterator beg = ownerParagraphs().begin(); + ParagraphList::iterator end = ownerParagraphs().end(); + for (; pit != end; ++pit) { while (rowit->par() != pit) ++rowit; string const oldLabel = pit->params().labelString(); size_t maxdepth = 0; - if (pit != ownerParagraphs().begin()) + if (pit != beg) maxdepth = boost::prior(pit)->getMaxDepthAfter(); if (pit->params().depth() > maxdepth) @@ -1458,7 +1460,9 @@ void LyXText::replaceSelectionWithString(string const & str) selection.start.pos()); // Insert the new string - for (string::const_iterator cit = str.begin(); cit != str.end(); ++cit) { + string::const_iterator cit = str.begin(); + string::const_iterator end = str.end(); + for (; cit != end; ++cit) { selection.end.par()->insertChar(pos, (*cit), font); ++pos; } @@ -1498,7 +1502,9 @@ void LyXText::insertStringAsParagraphs(string const & str) { string linestr(str); bool newline_inserted = false; - for (string::size_type i = 0; i < linestr.length(); ++i) { + string::size_type const siz = linestr.length(); + + for (string::size_type i = 0; i < siz; ++i) { if (linestr[i] == '\n') { if (newline_inserted) { // we know that \r will be ignored by @@ -1920,9 +1926,12 @@ LyXText::getColumnNearX(RowList::iterator rit, int & x, bool & boundary) const boundary = false; // This (rtl_support test) is not needed, but gives // some speedup if rtl_support=false + RowList::iterator next_rit = boost::next(rit); + bool const lastrow = lyxrc.rtl_support && - (boost::next(rit) == rowlist_.end() || - boost::next(rit)->par() != rit_par); + (next_rit == rowlist_.end() || + next_rit->par() != rit_par); + // If lastrow is false, we don't need to compute // the value of rtl. bool const rtl = (lastrow) @@ -1977,10 +1986,12 @@ namespace { * and the next row is filled by an inset that spans an entire * row. */ - bool beforeFullRowInset(LyXText & lt, LyXCursor const & cur) { + bool beforeFullRowInset(LyXText & lt, LyXCursor const & cur) + { RowList::iterator row = cur.row(); if (boost::next(row) == lt.rows().end()) return false; + Row const & next = *boost::next(row); if (next.pos() != cur.pos() || next.par() != cur.par()) @@ -1989,9 +2000,11 @@ namespace { if (cur.pos() == cur.par()->size() || !cur.par()->isInset(cur.pos())) return false; + Inset const * inset = cur.par()->getInset(cur.pos()); if (inset->needFullRow() || inset->display()) return true; + return false; } } @@ -2011,11 +2024,13 @@ void LyXText::setCursorFromCoordinates(LyXCursor & cur, int x, int y) cur.row(row); if (beforeFullRowInset(*this, cur)) { - pos_type last = lastPrintablePos(*this, row); - float x = getCursorX(boost::next(row), cur.pos(), last, bound); + pos_type const last = lastPrintablePos(*this, row); + RowList::iterator next_row = boost::next(row); + + float x = getCursorX(next_row, cur.pos(), last, bound); cur.ix(int(x)); - cur.iy(y + row->height() + boost::next(row)->baseline()); - cur.irow(boost::next(row)); + cur.iy(y + row->height() + next_row->baseline()); + cur.irow(next_row); } else { cur.iy(cur.y()); cur.ix(cur.x()); @@ -2121,10 +2136,13 @@ void LyXText::cursorUpParagraph() void LyXText::cursorDownParagraph() { - if (boost::next(cursor.par()) != ownerParagraphs().end()) { - setCursor(boost::next(cursor.par()), 0); + ParagraphList::iterator par = cursor.par(); + ParagraphList::iterator next_par = boost::next(par); + + if (next_par != ownerParagraphs().end()) { + setCursor(next_par, 0); } else { - setCursor(cursor.par(), cursor.par()->size()); + setCursor(par, par->size()); } } @@ -2276,8 +2294,9 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor) * the parindent that can occur or dissappear. * The next row can change its height, if * there is another layout before */ - if (boost::next(prevrow) != rows().end()) { - breakAgain(boost::next(prevrow)); + RowList::iterator tmprit = boost::next(prevrow); + if (tmprit != rows().end()) { + breakAgain(tmprit); updateCounters(); } setHeightOfRow(prevrow); diff --git a/src/text3.C b/src/text3.C index 4cb6d8a322..8ded18b4d1 100644 --- a/src/text3.C +++ b/src/text3.C @@ -343,10 +343,11 @@ void LyXText::cursorNext() } } bv()->screen().draw(bv()->text, bv(), new_y); - if (boost::next(cursor.row()) != rows().end()) { + + RowList::iterator next_row = boost::next(cursor.row()); + if (next_row != rows().end()) { LyXCursor cur; - setCursor(cur, boost::next(cursor.row())->par(), - boost::next(cursor.row())->pos(), false); + setCursor(cur, next_row->par(), next_row->pos(), false); if (cur.y() < top_y() + bv()->workHeight()) { cursorDown(true); } -- 2.39.2