X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftexrow.C;h=01c60fc96ef7d1742427b81587dd619dcec3753c;hb=e72ef278b8c4b4bc1b0009cb00a1a56c7b02d2e8;hp=f6325ffc4e117376be19cbff24c2e692815329ce;hpb=2889b5fd3e8987d0c265ff4726a7fb6c6cb6c034;p=lyx.git diff --git a/src/texrow.C b/src/texrow.C index f6325ffc4e..01c60fc96e 100644 --- a/src/texrow.C +++ b/src/texrow.C @@ -10,6 +10,8 @@ #include +#include + #ifdef __GNUG__ #pragma implementation #endif @@ -18,6 +20,8 @@ #include "lyxparagraph.h" #include "debug.h" +using std::find_if; +using std::endl; // Delete linked list void TexRow::reset() @@ -51,29 +55,73 @@ void TexRow::newline() } -void TexRow::getIdFromRow(int row, int & id, int & pos) -{ - RowList::const_iterator cit = rowlist.begin(); - for (; cit != rowlist.end(); ++cit) { - if ((*cit).rownumber() == row) break; +class same_rownumber { +public: + same_rownumber(TexRow::RowList::value_type const & v):vt(v){} + bool operator()(TexRow::RowList::value_type const & vt1) const { + return vt.rownumber() == vt1.rownumber(); } +private: + TexRow::RowList::value_type const & vt; +}; + + + +bool TexRow::getIdFromRow(int row, int & id, int & pos) const +{ + RowList::value_type vt; + vt.rownumber(row); + RowList::const_iterator cit = + find_if(rowlist.begin(), rowlist.end(), same_rownumber(vt)); + if (cit != rowlist.end()) { +#if 0 RowList::iterator kit = rowlist.begin(); + RowList::iterator end = rowlist.end(); // Increase the pos of all rows with the // same id (and where the pos is larger) // to avoid putting errorinsets at the // same pos. - for(; kit != rowlist.end(); ++kit) { + for (; kit != end; ++kit) { if (&(*kit) != &(*cit) && (*kit).id() == (*cit).id() && (*kit).pos() >= (*cit).pos()) (*kit).pos((*kit).pos() + 1); } +#endif id = (*cit).id(); pos = (*cit).pos(); - } else { - id = -1; - pos = 0; + return true; + } + id = -1; + pos = 0; + return false; +} + + +// should perhaps have a better name... +// Increase the pos of all rows with the +// same id (and where the pos is larger) +// to avoid putting errorinsets at the +// same pos. +void TexRow::increasePos(int id, int pos) const +{ + RowList::iterator kit = rowlist.begin(); + RowList::iterator end = rowlist.end(); + for (; kit != end; ++kit) { + if (id == (*kit).id() + && pos < (*kit).pos()) { + (*kit).pos((*kit).pos() + 1); + lyxerr << "TeXRow::increasePos: ideally this " + "should never happen..." << endl; + } + // When verified to work this clause should be deleted. + if (id == (*kit).id() + && pos == (*kit).pos()) { + lyxerr << "TexRow::increasePos: this should happen " + "maximum one time for each run of " + "increasePos!" << endl; + } } }