mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
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:
parent
a61eeb1fb2
commit
a70e21a34e
@ -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);
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
///
|
///
|
||||||
|
Loading…
Reference in New Issue
Block a user