lyx_mirror/src/TexRow.cpp
Jürgen Spitzmüller a70e21a34e Patch by John McCabe-Dansted to fix bug #6502:
Wrong line count with parent math macros:

* TeXRow.{cpp,h}:
	- new helper function to insert multiple newline at once.

* mathed/MacroTable.{cpp,h}:
* mathed/MacroTemplate.{cpp,h}:
	- make write() an int, returning number of newlines

* Buffer.cpp (writeLaTeXSource):
	- update texrow's newline on parent macro output.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33367 a592a061-630c-0410-9148-cb99ea01b6c8
2010-02-08 17:39:55 +00:00

92 lines
1.6 KiB
C++

/**
* \file TexRow.cpp
* 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>
#include "TexRow.h"
#include "support/debug.h"
#include <algorithm>
namespace lyx {
void TexRow::reset()
{
rowlist.clear();
lastid = -1;
lastpos = -1;
}
void TexRow::start(int id, int pos)
{
lastid = id;
lastpos = pos;
}
void TexRow::newline()
{
int const id = lastid;
RowList::value_type tmp(id, lastpos);
rowlist.push_back(tmp);
}
void TexRow::newlines(int num_lines)
{
for (int i = 0; i < num_lines; ++i) {
newline();
}
}
bool TexRow::getIdFromRow(int row, int & id, int & pos) const
{
if (row <= 0 || row > int(rowlist.size())) {
id = -1;
pos = 0;
return false;
}
id = rowlist[row - 1].id();
pos = rowlist[row - 1].pos();
return true;
}
int TexRow::getRowFromIdPos(int id, int pos) const
{
bool foundid = false;
// this loop finds the last *nonempty* row with the same id
// and position <= pos
RowList::const_iterator bestrow = rowlist.begin();
RowList::const_iterator it = rowlist.begin();
RowList::const_iterator const end = rowlist.end();
for (; it != end; ++it) {
if (it->id() == id && it->pos() <= pos) {
foundid = true;
if (bestrow->id() != id || it->pos() > bestrow->pos())
bestrow = it;
} else if (foundid)
break;
}
if (!foundid)
return rowlist.size();
return distance(rowlist.begin(), bestrow);
}
} // namespace lyx