]> git.lyx.org Git - lyx.git/blob - src/TexRow.cpp
MathML for InsetMathBig.
[lyx.git] / src / TexRow.cpp
1 /**
2  * \file TexRow.cpp
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Matthias Ettrich
7  * \author Lars Gullik Bjønnes
8  * \author John Levon
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12
13 #include <config.h>
14
15 #include "TexRow.h"
16
17 #include "support/debug.h"
18
19 #include <algorithm>
20
21
22 namespace lyx {
23
24
25 void TexRow::reset()
26 {
27         rowlist.clear();
28         lastid = -1;
29         lastpos = -1;
30 }
31
32
33 void TexRow::start(int id, int pos)
34 {
35         lastid = id;
36         lastpos = pos;
37 }
38
39
40 void TexRow::newline()
41 {
42         int const id = lastid;
43         RowList::value_type tmp(id, lastpos);
44         rowlist.push_back(tmp);
45 }
46
47
48 bool TexRow::getIdFromRow(int row, int & id, int & pos) const
49 {
50         if (row <= 0 || row > int(rowlist.size())) {
51                 id = -1;
52                 pos = 0;
53                 return false;
54         }
55
56         id = rowlist[row - 1].id();
57         pos = rowlist[row - 1].pos();
58         return true;
59 }
60
61
62 int TexRow::getRowFromIdPos(int id, int pos) const
63 {
64         bool foundid = false;
65
66         // this loop finds the last *nonempty* row with the same id
67         // and position <= pos
68         RowList::const_iterator bestrow = rowlist.begin();
69         RowList::const_iterator it = rowlist.begin();
70         RowList::const_iterator const end = rowlist.end();
71         for (; it != end; ++it) {
72                 if (it->id() == id && it->pos() <= pos) {
73                         foundid = true;
74                         if (bestrow->id() != id || it->pos() > bestrow->pos())
75                                 bestrow = it;
76                 } else if (foundid)
77                         break;
78         }
79         if (!foundid)
80                 return rowlist.size();
81         return distance(rowlist.begin(), bestrow);
82 }
83
84
85 } // namespace lyx