Since Vincent has kindly fixed that setting a longtable caption destroyed the table, other caption bugs were uncovered.

The attached patch fixes the most urgent one:
http://bugzilla.lyx.org/show_bug.cgi?id=5772

I tested it this time heavily will all the nasty longtable examples I have in the manuals and with the testcases from the lyx-users list complaint.

OK for branch?

Is http://www.lyx.org/trac/changeset/28464 also OK for branch?

regards Uwe
Index: InsetTabular.cpp
===================================================================
--- InsetTabular.cpp	(revision 28459)
+++ InsetTabular.cpp	(working copy)
@@ -2083,44 +2083,55 @@
 		return 0;
 
 	int ret = 0;
-	// output header info
-	if (haveLTHead()) {
-		if (endhead.topDL) {
+	// caption handling
+	// the caption must be output befrore the headers
+	if (haveLTCaption()) {
+		for (row_type i = 0; i < row_info.size(); ++i) {
+			if (row_info[i].caption) {
+				ret += TeXRow(os, i, runparams);
+			}
+		}
+	}
+	// output first header info
+	// first header must be output before the header, otherwise the
+	// correct caption placement becomes really wierd
+	if (haveLTFirstHead()) {
+		if (endfirsthead.topDL) {
 			os << "\\hline\n";
 			++ret;
 		}
 		for (row_type i = 0; i < row_info.size(); ++i) {
-			if (row_info[i].endhead) {
+			if (row_info[i].endfirsthead) {
 				ret += TeXRow(os, i, runparams);
 			}
 		}
-		if (endhead.bottomDL) {
+		if (endfirsthead.bottomDL) {
 			os << "\\hline\n";
 			++ret;
 		}
-		os << "\\endhead\n";
+		os << "\\endfirsthead\n";
 		++ret;
-		if (endfirsthead.empty) {
+	}
+	// output header info
+	if (haveLTHead()) {
+		if (!haveLTFirstHead()) {
 			os << "\\endfirsthead\n";
 			++ret;
 		}
-	}
-	// output firstheader info
-	if (haveLTFirstHead()) {
-		if (endfirsthead.topDL) {
+		if (endhead.topDL) {
 			os << "\\hline\n";
 			++ret;
 		}
 		for (row_type i = 0; i < row_info.size(); ++i) {
-			if (row_info[i].endfirsthead) {
+			if (row_info[i].endhead) {
 				ret += TeXRow(os, i, runparams);
 			}
 		}
-		if (endfirsthead.bottomDL) {
+		if (endhead.bottomDL) {
 			os << "\\hline\n";
 			++ret;
 		}
-		os << "\\endfirsthead\n";
+		os << "\\endhead\n";
 		++ret;
 	}
 	// output footer info
@@ -2171,8 +2182,9 @@
 {
 	if (!is_long_tabular)
 		return true;
-	return !row_info[row].endhead && !row_info[row].endfirsthead &&
-			!row_info[row].endfoot && !row_info[row].endlastfoot;
+	return !row_info[row].endhead && !row_info[row].endfirsthead
+		&& !row_info[row].endfoot && !row_info[row].endlastfoot
+		&& !row_info[row].caption;
 }
 
 

Reply via email to