*
* LyX, The Document Processor
*
- * Copyright (C) 1995 Matthias Ettrich
- * Copyright (C) 1995-1999 The LyX Team.
+ * Copyright 1995 Matthias Ettrich
+ * Copyright 1995-2000 The LyX Team.
*
* ====================================================== */
#include <config.h>
+#include <algorithm>
+
#ifdef __GNUG__
#pragma implementation
#endif
#include "lyxparagraph.h"
#include "debug.h"
+using std::find_if;
+using std::endl;
// Delete linked list
void TexRow::reset()
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()) {
+#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).id() == (*cit).id()
+ && (*kit).pos() >= (*cit).pos())
+ (*kit).pos((*kit).pos() + 1);
+ }
+#endif
+ 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()
+ << "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()
+ << "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;
}
}