]> git.lyx.org Git - lyx.git/blobdiff - src/texrow.C
Really fix start_of_appendix output
[lyx.git] / src / texrow.C
index 5c41cd90d6179dab743150479ab5bad21410f887..9e1b10e5634be4c4215564b96f0e1d039a0f4d85 100644 (file)
@@ -1,85 +1,85 @@
-/* This file is part of
- * ====================================================== 
- * 
- *           LyX, The Document Processor
- *      
- *         Copyright (C) 1995 Matthias Ettrich
- *          Copyright (C) 1995-1999 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 <config.h>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
 #include "texrow.h"
-#include "lyxparagraph.h"
 #include "debug.h"
 
+#include <algorithm>
+
+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;
-}      
+}