parlist-9-a.diff

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6787 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2003-04-13 02:23:30 +00:00
parent cc46c4b975
commit 3b8f3462ed
5 changed files with 80 additions and 66 deletions

View File

@ -1,5 +1,10 @@
2003-04-13 Lars Gullik Bjønnes <larsbj@gullik.net>
* text.C, text2.C: exchange all usage of Paragraph::next with
boost::next(ParagraphList::iterator)
* CutAndPaste.C (cutSelection): change 2. arg to a Paragraph*
* text2.C (cursorTop): simplify implementation
(cursorBottom): ditto
(setParagraph): use ParagraphList::iterator

View File

@ -62,7 +62,7 @@ textclass_type textclass = 0;
} // namespace anon
bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph ** endpar,
bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph * endpar,
int start, int & end, textclass_type tc,
bool doclear, bool realcut)
{
@ -70,10 +70,10 @@ bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph ** endpar,
return false;
if (realcut) {
copySelection(startpar, *endpar, start, end, tc);
copySelection(startpar, endpar, start, end, tc);
}
if (!endpar || startpar == *endpar) {
if (!endpar || startpar == endpar) {
if (startpar->erase(start, end)) {
// Some chars were erased, go to start to be safe
end = start;
@ -85,7 +85,7 @@ bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph ** endpar,
// clear end/begin fragments of the first/last par in selection
actually_erased |= (startpar)->erase(start, startpar->size());
if ((*endpar)->erase(0, end)) {
if (endpar->erase(0, end)) {
actually_erased = true;
end = 0;
}
@ -102,7 +102,7 @@ bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph ** endpar,
Paragraph * next = pit->next();
// "erase" the contents of the par
if (pit != *endpar) {
if (pit != endpar) {
actually_erased |= pit->erase(0, pit->size());
// remove the par if it's now empty
@ -116,7 +116,7 @@ bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph ** endpar,
}
}
if (pit == *endpar)
if (pit == endpar)
break;
pit = next;
@ -152,7 +152,7 @@ bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph ** endpar,
// the insets paragraphs, and not the buffers. (Lgb)
mergeParagraph(buffer->params, buffer->paragraphs, startpar);
// this because endpar gets deleted here!
(*endpar) = startpar;
endpar = startpar;
}
return true;

View File

@ -21,7 +21,7 @@ class LyXTextClass;
namespace CutAndPaste {
/// realcut == false is we actually want a delete
bool cutSelection(Paragraph * startpar, Paragraph ** endpar,
bool cutSelection(Paragraph * startpar, Paragraph * endpar,
int start, int & end, lyx::textclass_type tc,
bool doclear = false, bool realcut = true);

View File

@ -1248,7 +1248,7 @@ void LyXText::setHeightOfRow(RowList::iterator rit)
// a section, or between the items of a itemize or enumerate
// environment
if (!firstpit->params().pagebreakBottom()
&& rit->par()->next()) {
&& boost::next(rit->par()) != ownerParagraphs().end()) {
ParagraphList::iterator nextpit = boost::next(rit->par());
ParagraphList::iterator comparepit = rit->par();
float usual = 0;
@ -1485,7 +1485,7 @@ void LyXText::breakParagraph(ParagraphList & paragraphs, char keep_layout)
cursor.par()->applyLayout(tclass.defaultLayout());
else
// set to standard-layout
cursor.par()->next()->applyLayout(tclass.defaultLayout());
boost::next(cursor.par())->applyLayout(tclass.defaultLayout());
}
// if the cursor is at the beginning of a row without prior newline,
@ -1522,17 +1522,18 @@ void LyXText::breakParagraph(ParagraphList & paragraphs, char keep_layout)
// When ::breakParagraph is called from within an inset we must
// ensure that the correct ParagraphList is used. Today that is not
// the case and the Buffer::paragraphs is used. Not good. (Lgb)
while (!cursor.par()->next()->empty()
&& cursor.par()->next()->isNewline(0))
cursor.par()->next()->erase(0);
ParagraphList::iterator next_par = boost::next(cursor.par());
insertParagraph(cursor.par()->next(), boost::next(cursor.row()));
while (!next_par->empty() && next_par->isNewline(0))
next_par->erase(0);
insertParagraph(next_par, boost::next(cursor.row()));
updateCounters();
// This check is necessary. Otherwise the new empty paragraph will
// be deleted automatically. And it is more friendly for the user!
if (cursor.pos() || isempty)
setCursor(boost::next(cursor.par()), 0);
setCursor(next_par, 0);
else
setCursor(cursor.par(), 0);
@ -1955,8 +1956,8 @@ void LyXText::cursorRightOneWord()
// CHECK See comment on top of text.C
if (tmpcursor.pos() == tmpcursor.par()->size()
&& tmpcursor.par()->next()) {
tmpcursor.par(tmpcursor.par()->next());
&& boost::next(tmpcursor.par()) != ownerParagraphs().end()) {
tmpcursor.par(boost::next(tmpcursor.par()));
tmpcursor.pos(0);
} else {
int steps = 0;
@ -2133,7 +2134,7 @@ void LyXText::rejectChange()
startc.par()->rejectChange(startc.pos(), endc.pos());
finishUndo();
clearSelection();
redoParagraphs(startc, startc.par()->next());
redoParagraphs(startc, boost::next(startc.par()));
setCursorIntern(startc.par(), 0);
}
#warning handle multi par selection
@ -2154,9 +2155,9 @@ LyXText::selectNextWordToSpellcheck(float & value)
}
// we have to go on checking so move cursor to the next char
if (cursor.pos() == cursor.par()->size()) {
if (!cursor.par()->next())
if (boost::next(cursor.par()) == ownerParagraphs().end())
return word;
cursor.par(cursor.par()->next());
cursor.par(boost::next(cursor.par()));
cursor.pos(0);
} else
cursor.pos(cursor.pos() + 1);

View File

@ -389,19 +389,22 @@ LyXText::setLayout(LyXCursor & cur, LyXCursor & sstart_cur,
LyXCursor & send_cur,
string const & layout)
{
Paragraph * endpar = send_cur.par()->next();
Paragraph * undoendpar = endpar;
ParagraphList::iterator endpit = boost::next(send_cur.par());
ParagraphList::iterator undoendpit = endpit;
if (endpar && endpar->getDepth()) {
while (endpar && endpar->getDepth()) {
endpar = endpar->next();
undoendpar = endpar;
if (endpit != ownerParagraphs().end() &&
endpit->getDepth()) {
while (endpit != ownerParagraphs().end() &&
endpit->getDepth()) {
++endpit;
undoendpit = endpit;
}
} else if (endpar) {
endpar = endpar->next(); // because of parindents etc.
} else if (endpit != ownerParagraphs().end()) {
// because of parindents etc.
++endpit;
}
setUndo(bv(), Undo::EDIT, &*sstart_cur.par(), undoendpar);
setUndo(bv(), Undo::EDIT, &*sstart_cur.par(), &*undoendpit);
// ok we have a selection. This is always between sstart_cur
// and sel_end cursor
@ -428,7 +431,7 @@ LyXText::setLayout(LyXCursor & cur, LyXCursor & sstart_cur,
++pit;
} while (pit != epit);
return endpar;
return endpit;
}
@ -591,12 +594,12 @@ void LyXText::setFont(LyXFont const & font, bool toggleall)
cursor.pos(cursor.pos() + 1);
} else {
cursor.pos(0);
cursor.par(cursor.par()->next());
cursor.par(boost::next(cursor.par()));
}
}
unFreezeUndo();
redoParagraphs(selection.start, selection.end.par()->next());
redoParagraphs(selection.start, boost::next(selection.end.par()));
// we have to reset the selection, because the
// geometry could have changed, but we keep
@ -830,7 +833,7 @@ string const LyXText::selectionAsString(Buffer const * buffer,
#warning FIXME Why isnt ParagraphList::iterator used here?
// as loop variable.
LyXCursor tmpcur(selection.start);
tmpcur.par(tmpcur.par()->next());
tmpcur.par(boost::next(tmpcur.par()));
while (tmpcur.par() != endpit) {
result += tmpcur.par()->asString(buffer, 0,
tmpcur.par()->size(),
@ -1339,51 +1342,53 @@ void LyXText::cutSelection(bool doclear, bool realcut)
// and selection.end
// make sure that the depth behind the selection are restored, too
Paragraph * endpar = selection.end.par()->next();
Paragraph * undoendpar = endpar;
ParagraphList::iterator endpit = boost::next(selection.end.par());
ParagraphList::iterator undoendpit = endpit;
if (endpar && endpar->getDepth()) {
while (endpar && endpar->getDepth()) {
endpar = endpar->next();
undoendpar = endpar;
if (endpit != ownerParagraphs().end() &&
endpit->getDepth()) {
while (endpit != ownerParagraphs().end() &&
endpit->getDepth()) {
++endpit;
undoendpit = endpit;
}
} else if (endpar) {
endpar = endpar->next(); // because of parindents etc.
} else if (endpit != ownerParagraphs().end()) {
// because of parindents etc.
++endpit;
}
setUndo(bv(), Undo::DELETE,
&*selection.start.par(), undoendpar);
setUndo(bv(), Undo::DELETE, &*selection.start.par(), &*undoendpit);
// there are two cases: cut only within one paragraph or
// more than one paragraph
if (selection.start.par() == selection.end.par()) {
// only within one paragraph
endpar = &*selection.end.par();
endpit = selection.end.par();
int pos = selection.end.pos();
CutAndPaste::cutSelection(&*selection.start.par(), &endpar,
CutAndPaste::cutSelection(&*selection.start.par(), &*endpit,
selection.start.pos(), pos,
bv()->buffer()->params.textclass,
doclear, realcut);
selection.end.pos(pos);
} else {
endpar = &*selection.end.par();
endpit = selection.end.par();
int pos = selection.end.pos();
CutAndPaste::cutSelection(&*selection.start.par(), &endpar,
CutAndPaste::cutSelection(&*selection.start.par(), &*endpit,
selection.start.pos(), pos,
bv()->buffer()->params.textclass,
doclear, realcut);
cursor.par(endpar);
selection.end.par(endpar);
cursor.par(endpit);
selection.end.par(endpit);
selection.end.pos(pos);
cursor.pos(selection.end.pos());
}
endpar = endpar->next();
++endpit;
// sometimes necessary
if (doclear)
selection.start.par()->stripLeadingSpaces();
redoParagraphs(selection.start, endpar);
redoParagraphs(selection.start, endpit);
// cutSelection can invalidate the cursor so we need to set
// it anew. (Lgb)
@ -2076,8 +2081,8 @@ void LyXText::cursorRight(bool internal)
if (!internal &&
isBoundary(bv()->buffer(), *cursor.par(), cursor.pos()))
setCursor(cursor.par(), cursor.pos(), true, true);
} else if (cursor.par()->next())
setCursor(cursor.par()->next(), 0);
} else if (boost::next(cursor.par()) != ownerParagraphs().end())
setCursor(boost::next(cursor.par()), 0);
}
@ -2142,8 +2147,8 @@ void LyXText::cursorUpParagraph()
void LyXText::cursorDownParagraph()
{
if (cursor.par()->next()) {
setCursor(cursor.par()->next(), 0);
if (boost::next(cursor.par()) != ownerParagraphs().end()) {
setCursor(boost::next(cursor.par()), 0);
} else {
setCursor(cursor.par(), cursor.par()->size());
}
@ -2219,7 +2224,7 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
&& old_cursor.par()->isLineSeparator(old_cursor.pos())
&& old_cursor.par()->isLineSeparator(old_cursor.pos() - 1)) {
old_cursor.par()->erase(old_cursor.pos() - 1);
redoParagraphs(old_cursor, old_cursor.par()->next());
redoParagraphs(old_cursor, boost::next(old_cursor.par()));
#ifdef WITH_WARNINGS
#warning This will not work anymore when we have multiple views of the same buffer
@ -2273,12 +2278,14 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
const_cast<LyXText *>(this)->postPaint(old_cursor.y() - old_cursor.row()->baseline() - prevrow->height());
tmpcursor = cursor;
cursor = old_cursor; // that undo can restore the right cursor position
Paragraph * endpar = old_cursor.par()->next();
while (endpar && endpar->getDepth()) {
endpar = endpar->next();
#warning FIXME. --end() iterator is usable here
ParagraphList::iterator endpit = boost::next(old_cursor.par());
while (endpit != ownerParagraphs().end() &&
endpit->getDepth()) {
++endpit;
}
setUndo(bv(), Undo::DELETE, &*old_cursor.par(), endpar);
setUndo(bv(), Undo::DELETE, &*old_cursor.par(), &*endpit);
cursor = tmpcursor;
// delete old row
@ -2306,12 +2313,14 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
tmpcursor = cursor;
cursor = old_cursor; // that undo can restore the right cursor position
Paragraph * endpar = old_cursor.par()->next();
while (endpar && endpar->getDepth()) {
endpar = endpar->next();
#warning FIXME. --end() iterator is usable here
ParagraphList::iterator endpit = boost::next(old_cursor.par());
while (endpit != ownerParagraphs().end() &&
endpit->getDepth()) {
++endpit;
}
setUndo(bv(), Undo::DELETE, &*old_cursor.par(), endpar);
setUndo(bv(), Undo::DELETE, &*old_cursor.par(), &*endpit);
cursor = tmpcursor;
// delete old row
@ -2344,8 +2353,7 @@ bool LyXText::deleteEmptyParagraphMechanism(LyXCursor const & old_cursor)
}
if (!deleted) {
if (old_cursor.par()->stripLeadingSpaces()) {
redoParagraphs(old_cursor,
old_cursor.par()->next());
redoParagraphs(old_cursor, boost::next(old_cursor.par()));
// correct cursor y
setCursorIntern(cursor.par(), cursor.pos());
selection.cursor = cursor;