]> git.lyx.org Git - lyx.git/blob - src/TexRow.cpp
* Get rid of LFUN_TOC_INSERT: we use LFUN_INSET_INSERT "toc".
[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 void TexRow::newlines(int num_lines)
48 {
49         for (int i = 0; i < num_lines; ++i) {
50                 newline();
51         }
52 }
53
54 bool TexRow::getIdFromRow(int row, int & id, int & pos) const
55 {
56         if (row <= 0 || row > int(rowlist.size())) {
57                 id = -1;
58                 pos = 0;
59                 return false;
60         }
61
62         id = rowlist[row - 1].id();
63         pos = rowlist[row - 1].pos();
64         return true;
65 }
66
67
68 int TexRow::getRowFromIdPos(int id, int pos) const
69 {
70         bool foundid = false;
71
72         // this loop finds the last *nonempty* row with the same id
73         // and position <= pos
74         RowList::const_iterator bestrow = rowlist.begin();
75         RowList::const_iterator it = rowlist.begin();
76         RowList::const_iterator const end = rowlist.end();
77         for (; it != end; ++it) {
78                 if (it->id() == id && it->pos() <= pos) {
79                         foundid = true;
80                         if (bestrow->id() != id || it->pos() > bestrow->pos())
81                                 bestrow = it;
82                 } else if (foundid)
83                         break;
84         }
85         if (!foundid)
86                 return rowlist.size();
87         return distance(rowlist.begin(), bestrow) + 1;
88 }
89
90
91 } // namespace lyx