On Mon, Feb 8, 2010 at 7:43 PM, Jürgen Spitzmüller <sp...@lyx.org> wrote:
> John McCabe-Dansted wrote:
>> Something like the attached then?
>
> Sort of, yes. Although I would, to be in line with what we have, do in
> MathMacroTemplate::write
>
>        int i = 0;
> [...]

see attached.

-- 
John C. McCabe-Dansted
Index: mathed/MacroTable.h
===================================================================
--- mathed/MacroTable.h	(revision 33347)
+++ mathed/MacroTable.h	(working copy)
@@ -81,7 +81,7 @@
 	MacroType & type() { return type_; }
 	
 	/// 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 {
Index: mathed/MathMacroTemplate.h
===================================================================
--- mathed/MathMacroTemplate.h	(revision 33347)
+++ mathed/MathMacroTemplate.h	(working copy)
@@ -49,7 +49,7 @@
 	void write(WriteStream & os) const;
 	/// Output LaTeX code, but assume that the macro is not definied yet
 	/// if overwriteRedefinition is true
-	void write(WriteStream & os, bool overwriteRedefinition) const;
+	int write(WriteStream & os, bool overwriteRedefinition) const;
 	///
 	int plaintext(odocstream &, OutputParams const &) const;
 	///
Index: mathed/MathMacroTemplate.cpp
===================================================================
--- mathed/MathMacroTemplate.cpp	(revision 33347)
+++ mathed/MathMacroTemplate.cpp	(working copy)
@@ -1154,8 +1154,10 @@
 }
 
 
-void MathMacroTemplate::write(WriteStream & os, bool overwriteRedefinition) const
+int MathMacroTemplate::write(WriteStream & os, bool overwriteRedefinition) const
 {
+	int num_lines = 0;
+
 	if (os.latex()) {
 		if (optionals_ > 0) {
 			// macros with optionals use the xargs package, e.g.:
@@ -1218,11 +1220,16 @@
 	if (os.latex()) {
 		// writing .tex. done.
 		os << "\n";
+		++num_lines;
 	} else {
 		// writing .lyx, write special .tex export only if necessary
-		if (!cell(displayIdx()).empty())
+		if (!cell(displayIdx()).empty()) {
 			os << "\n{" << cell(displayIdx()) << '}';
+			++num_lines;
+		}
 	}
+
+	return num_lines;
 }
 
 
Index: mathed/MacroTable.cpp
===================================================================
--- mathed/MacroTable.cpp	(revision 33347)
+++ mathed/MacroTable.cpp	(working copy)
@@ -152,7 +152,7 @@
 }
 	
 
-void MacroData::write(odocstream & os, bool overwriteRedefinition) const
+int MacroData::write(odocstream & os, bool overwriteRedefinition) const
 {
 	updateData();
 
@@ -160,14 +160,14 @@
 	Inset * inset = pos_.nextInset();
 	if (inset == 0 || inset->lyxCode() != MATHMACRO_CODE) {
 		lyxerr << "BUG: No macro template found by MacroData" << endl;
-		return;
+		return 0;
 	}
 		
 	// output template
 	MathMacroTemplate const & tmpl =
 		static_cast<MathMacroTemplate const &>(*inset);
 	WriteStream wi(os, false, true, WriteStream::wsDefault);
-	tmpl.write(wi, overwriteRedefinition);
+	return tmpl.write(wi, overwriteRedefinition);
 }
 
 
Index: TexRow.h
===================================================================
--- TexRow.h	(revision 33347)
+++ TexRow.h	(working copy)
@@ -37,6 +37,9 @@
 	/// Insert node when line is completed
 	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
 	 * @param row row number to find
Index: TexRow.cpp
===================================================================
--- TexRow.cpp	(revision 33347)
+++ TexRow.cpp	(working copy)
@@ -44,6 +44,13 @@
 	rowlist.push_back(tmp);
 }
 
+void TexRow::newlines(int num_lines)
+{
+	int i;
+	for (i=0;i<num_lines;i++) {
+		newline();
+	}
+}
 
 bool TexRow::getIdFromRow(int row, int & id, int & pos) const
 {
Index: Buffer.cpp
===================================================================
--- Buffer.cpp	(revision 33347)
+++ Buffer.cpp	(working copy)
@@ -1341,8 +1341,11 @@
 		// output the parent macros
 		MacroSet::iterator it = parentMacros.begin();
 		MacroSet::iterator end = parentMacros.end();
-		for (; it != end; ++it)
-			(*it)->write(os, true);
+		for (; it != end; ++it) {
+			int num_lines=(*it)->write(os, true);
+			d->texrow.newlines(num_lines);
+		}
+		
 	} // output_preamble
 
 	d->texrow.start(paragraphs().begin()->id(), 0);

Reply via email to