X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftexrow.C;h=9e1b10e5634be4c4215564b96f0e1d039a0f4d85;hb=530749439472bddf13d9f4ee74ee6184ef76e3f9;hp=702f68b8c057bb42c5fd048fdd5448cf140e38e9;hpb=c36aa67f7bbf964a624be7ced9b3bf03148ab1db;p=lyx.git diff --git a/src/texrow.C b/src/texrow.C index 702f68b8c0..9e1b10e563 100644 --- a/src/texrow.C +++ b/src/texrow.C @@ -1,85 +1,85 @@ -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright (C) 1995 Matthias Ettrich - * Copyright (C) 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) +bool TexRow::getIdFromRow(int row, int & id, int & pos) const { - RowList::const_iterator cit = rowlist.begin(); - for (; cit != rowlist.end(); ++cit) { - if ((*cit).rownumber == row) break; - } + RowList::const_iterator cit = + find_if(rowlist.begin(), rowlist.end(), + same_rownumber(row)); + 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; - } else { - id = -1; - pos = 0; + 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; -} +}