X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftexrow.C;h=9e1b10e5634be4c4215564b96f0e1d039a0f4d85;hb=530749439472bddf13d9f4ee74ee6184ef76e3f9;hp=3d9dc4d00d85b4f7bdd4792243aebeddde45859b;hpb=cd694827a934423effc364d82408709d02adb02b;p=lyx.git diff --git a/src/texrow.C b/src/texrow.C index 3d9dc4d00d..9e1b10e563 100644 --- a/src/texrow.C +++ b/src/texrow.C @@ -1,86 +1,85 @@ -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. +/** + * \file texrow.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * ====================================================== */ + * \author Matthias Ettrich + * \author Lars Gullik Bjønnes + * \author John Levon + * + * Full author contact details are available in file CREDITS. + */ #include -#ifdef __GNUG__ -#pragma implementation -#endif - #include "texrow.h" -#include "lyxparagraph.h" #include "debug.h" +#include + +using std::find_if; + + +namespace { + +/// function object returning true when row number is found +class same_rownumber { +public: + same_rownumber(int row) : row_(row) {} + bool operator()(TexRow::RowList::value_type const & vt) const { + return vt.rownumber() == row_; + } + +private: + int row_; +}; + +} // namespace anon + -// Delete linked list void TexRow::reset() { rowlist.clear(); count = 0; - lastpar = 0; + lastid = -1; lastpos = -1; } -// Defines paragraph and position for the beginning of this row -void TexRow::start(LyXParagraph * par, int pos) +void TexRow::start(int id, int pos) { - lastpar = par; + lastid = id; lastpos = pos; } -// Insert node when line is completed void TexRow::newline() { - RowItem tmp; - tmp.pos(lastpos); - if (lastpar) - tmp.id(lastpar->id()); - else - tmp.id(-1); - tmp.rownumber(++count); + int const id = lastid; + RowList::value_type tmp(id, lastpos, ++count); rowlist.push_back(tmp); } -void TexRow::getIdFromRow(int row, int & id, int & pos) const +bool TexRow::getIdFromRow(int row, int & id, int & pos) const { - RowList::iterator cit = rowlist.begin(); - RowList::iterator end = rowlist.end(); - for (; cit != end; ++cit) { - if ((*cit).rownumber() == row) break; - } - if (cit != 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 != end; ++kit) { - if (&(*kit) != &(*cit) - && (*kit).id() == (*cit).id() - && (*kit).pos() >= (*cit).pos()) - (*kit).pos((*kit).pos() + 1); - } - id = (*cit).id(); - pos = (*cit).pos(); - } else { - id = -1; - pos = 0; + RowList::const_iterator cit = + find_if(rowlist.begin(), rowlist.end(), + same_rownumber(row)); + + if (cit != rowlist.end()) { + id = cit->id(); + pos = cit->pos(); + return true; } + id = -1; + pos = 0; + return false; } -TexRow & TexRow::operator+= (TexRow const & tr) +TexRow & TexRow::operator+=(TexRow const & tr) { rowlist.insert(rowlist.end(), tr.rowlist.begin(), tr.rowlist.end()); return *this; -} +}