#include "debug.h"
#include "encoding.h"
#include "gettext.h"
-#include "iterators.h"
#include "language.h"
#include "lyxtext.h"
#include "outputparams.h"
#include "paragraph_pimpl.h"
+#include "pariterator.h"
#include "sgml.h"
#include "texrow.h"
#include "vspace.h"
if (from.getInset(i)) {
// the inset is not in a paragraph anymore
tmpinset = from.insetlist.release(i);
+ from.insetlist.erase(i);
}
- if (!to.insetAllowed(tmpinset->lyxCode()))
+ if (!to.insetAllowed(tmpinset->lyxCode())) {
+ delete tmpinset;
return false;
- to.insertInset(j, tmpinset, tmpfont);
+ }
+ if (tmpinset)
+ to.insertInset(j, tmpinset, tmpfont);
} else {
if (!to.checkInsertChar(tmpfont))
return false;
// copy everything behind the break-position
// to the new paragraph
-#ifdef WITH_WARNINGS
-#warning this seems wrong
-#endif
- /* FIXME: if !keepempty, empty() == true, then we reach
- * here with size() == 0. So pos_end becomes - 1. Why
- * doesn't this cause problems ???
+ /* Note: if !keepempty, empty() == true, then we reach
+ * here with size() == 0. So pos_end becomes - 1. This
+ * doesn't cause problems because both loops below
+ * enforce pos <= pos_end and 0 <= pos
*/
pos_type pos_end = pars[par].size() - 1;
- pos_type i = pos;
- pos_type j = pos;
- for (; i <= pos_end; ++i) {
+ for (pos_type i = pos, j = pos; i <= pos_end; ++i) {
Change::Type change = pars[par].lookupChange(i);
if (moveItem(pars[par], *tmp, bparams, i, j - pos)) {
tmp->setChange(j - pos, change);
}
}
- for (i = pos_end; i >= pos; --i)
+ for (pos_type i = pos_end; i >= pos; --i)
pars[par].eraseIntern(i);
}
}
-/// return the range of pars [beg, end[ owning the range of y [ystart, yend]
+/// return the range of pars [beg, end[ owning the range of y [ystart, yend]
void getParsInRange(ParagraphList & pars, int ystart, int yend,
par_type & beg, par_type & end)
{