X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftexrow.C;h=c67c88392e8fd7cf000439c2f6888098f7dc7fb0;hb=32ef0d04c48a1751abbb5e3b17d1bec25f22c255;hp=260517cdd75577862e5d207a21a850bccc7e269b;hpb=132fe5e1322fbc86a32692df51eba78d6b4e479c;p=lyx.git diff --git a/src/texrow.C b/src/texrow.C index 260517cdd7..c67c88392e 100644 --- a/src/texrow.C +++ b/src/texrow.C @@ -4,20 +4,24 @@ * LyX, The Document Processor * * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. + * Copyright 1995-2001 The LyX Team. * * ====================================================== */ #include +#include + #ifdef __GNUG__ #pragma implementation #endif #include "texrow.h" -#include "lyxparagraph.h" +#include "paragraph.h" #include "debug.h" +using std::find_if; +using std::endl; // Delete linked list void TexRow::reset() @@ -30,7 +34,7 @@ void TexRow::reset() // Defines paragraph and position for the beginning of this row -void TexRow::start(LyXParagraph * par, int pos) +void TexRow::start(Paragraph * par, int pos) { lastpar = par; lastpos = pos; @@ -41,39 +45,71 @@ void TexRow::start(LyXParagraph * par, int pos) void TexRow::newline() { RowItem tmp; - tmp.pos = lastpos; + tmp.pos(lastpos); if (lastpar) - tmp.id = lastpar->id(); + tmp.id(lastpar->id()); else - tmp.id = -1; - tmp.rownumber = ++count; + tmp.id(-1); + tmp.rownumber(++count); rowlist.push_back(tmp); } -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()) { - RowList::iterator kit = rowlist.begin(); - // 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) { - if (&(*kit) != &(*cit) - && (*kit).id == (*cit).id - && (*kit).pos >= (*cit).pos) - (*kit).pos++; + id = cit->id(); + pos = cit->pos(); + 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[Debug::INFO] + << "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[Debug::INFO] + << "TexRow::increasePos: this should happen " + "maximum one time for each run of " + "increasePos!" << endl; } - id = (*cit).id; - pos = (*cit).pos; - } else { - id = -1; - pos = 0; } }