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
This commit is contained in:
Jürgen Spitzmüller 2010-02-08 17:39:55 +00:00
parent a61eeb1fb2
commit a70e21a34e
7 changed files with 28 additions and 9 deletions

View File

@ -1341,8 +1341,11 @@ void Buffer::writeLaTeXSource(odocstream & os,
// output the parent macros // output the parent macros
MacroSet::iterator it = parentMacros.begin(); MacroSet::iterator it = parentMacros.begin();
MacroSet::iterator end = parentMacros.end(); MacroSet::iterator end = parentMacros.end();
for (; it != end; ++it) for (; it != end; ++it) {
(*it)->write(os, true); int num_lines = (*it)->write(os, true);
d->texrow.newlines(num_lines);
}
} // output_preamble } // output_preamble
d->texrow.start(paragraphs().begin()->id(), 0); d->texrow.start(paragraphs().begin()->id(), 0);

View File

@ -44,6 +44,12 @@ void TexRow::newline()
rowlist.push_back(tmp); 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 bool TexRow::getIdFromRow(int row, int & id, int & pos) const
{ {

View File

@ -37,6 +37,9 @@ public:
/// Insert node when line is completed /// Insert node when line is completed
void newline(); void newline();
/// Insert multiple nodes when zero or more lines are completed
void newlines(int num_lines);
/** /**
* getIdFromRow - find pid and position for a given row * getIdFromRow - find pid and position for a given row
* @param row row number to find * @param row row number to find

View File

@ -152,7 +152,7 @@ void MacroData::updateData() const
} }
void MacroData::write(odocstream & os, bool overwriteRedefinition) const int MacroData::write(odocstream & os, bool overwriteRedefinition) const
{ {
updateData(); updateData();
@ -160,14 +160,14 @@ void MacroData::write(odocstream & os, bool overwriteRedefinition) const
Inset * inset = pos_.nextInset(); Inset * inset = pos_.nextInset();
if (inset == 0 || inset->lyxCode() != MATHMACRO_CODE) { if (inset == 0 || inset->lyxCode() != MATHMACRO_CODE) {
lyxerr << "BUG: No macro template found by MacroData" << endl; lyxerr << "BUG: No macro template found by MacroData" << endl;
return; return 0;
} }
// output template // output template
MathMacroTemplate const & tmpl = MathMacroTemplate const & tmpl =
static_cast<MathMacroTemplate const &>(*inset); static_cast<MathMacroTemplate const &>(*inset);
WriteStream wi(os, false, true, WriteStream::wsDefault); WriteStream wi(os, false, true, WriteStream::wsDefault);
tmpl.write(wi, overwriteRedefinition); return tmpl.write(wi, overwriteRedefinition);
} }

View File

@ -81,7 +81,7 @@ public:
MacroType & type() { return type_; } MacroType & type() { return type_; }
/// output as TeX macro, only works for lazy MacroData!!! /// output as TeX macro, only works for lazy MacroData!!!
void write(odocstream & os, bool overwriteRedefinition) const; int write(odocstream & os, bool overwriteRedefinition) const;
/// ///
bool operator==(MacroData const & x) const { bool operator==(MacroData const & x) const {

View File

@ -1154,8 +1154,10 @@ void MathMacroTemplate::write(WriteStream & os) const
} }
void MathMacroTemplate::write(WriteStream & os, bool overwriteRedefinition) const int MathMacroTemplate::write(WriteStream & os, bool overwriteRedefinition) const
{ {
int num_lines = 0;
if (os.latex()) { if (os.latex()) {
if (optionals_ > 0) { if (optionals_ > 0) {
// macros with optionals use the xargs package, e.g.: // macros with optionals use the xargs package, e.g.:
@ -1218,11 +1220,16 @@ void MathMacroTemplate::write(WriteStream & os, bool overwriteRedefinition) cons
if (os.latex()) { if (os.latex()) {
// writing .tex. done. // writing .tex. done.
os << "\n"; os << "\n";
++num_lines;
} else { } else {
// writing .lyx, write special .tex export only if necessary // writing .lyx, write special .tex export only if necessary
if (!cell(displayIdx()).empty()) if (!cell(displayIdx()).empty()) {
os << "\n{" << cell(displayIdx()) << '}'; os << "\n{" << cell(displayIdx()) << '}';
++num_lines;
} }
}
return num_lines;
} }

View File

@ -49,7 +49,7 @@ public:
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// Output LaTeX code, but assume that the macro is not definied yet /// Output LaTeX code, but assume that the macro is not definied yet
/// if overwriteRedefinition is true /// if overwriteRedefinition is true
void write(WriteStream & os, bool overwriteRedefinition) const; int write(WriteStream & os, bool overwriteRedefinition) const;
/// ///
int plaintext(odocstream &, OutputParams const &) const; int plaintext(odocstream &, OutputParams const &) const;
/// ///