Jürgen Spitzmüller wrote:
> This patch adds those sizes and makes the function differentiate its output
> for different purposes (xdvi, dvips, dvipdfm), each one from whom knows a
> different subset. Xdvi knows all sizes, so the patch fixes also this bug:  
>
> http://bugzilla.lyx.org/show_bug.cgi?id=4432

Update: I think it is wrong to pass "letter" to dvips and friends for the 
default paper size, just because the standard classes happen to use that. Cf.
http://bugzilla.lyx.org/show_bug.cgi?id=2098

The attached updated patch fixes this as well.

Jürgen
Index: src/BufferParams.h
===================================================================
--- src/BufferParams.h	(Revision 22625)
+++ src/BufferParams.h	(Arbeitskopie)
@@ -275,7 +275,7 @@
 	///
 	std::string const dvips_options() const;
 	///
-	std::string const paperSizeName() const;
+	std::string const paperSizeName(std::string const & purpose = std::string()) const;
 	/// set up if and how babel is called
 	std::string const babelCall(std::string const & lang_opts) const;
 	/// handle inputenc etc.
Index: src/Converter.cpp
===================================================================
--- src/Converter.cpp	(Revision 22625)
+++ src/Converter.cpp	(Arbeitskopie)
@@ -65,8 +65,8 @@
 	string result;
 
 	if (bp.papersize != PAPER_CUSTOM) {
-		string const paper_size = bp.paperSizeName();
-		if (paper_size != "b5" && paper_size != "foolscap")
+		string const paper_size = bp.paperSizeName("dvipdfm");
+		if (!paper_size.empty())
 			result = "-p "+ paper_size;
 
 		if (bp.orientation == ORIENTATION_LANDSCAPE)
Index: src/Format.cpp
===================================================================
--- src/Format.cpp	(Revision 22625)
+++ src/Format.cpp	(Arbeitskopie)
@@ -279,13 +279,14 @@
 
 	if (format_name == "dvi" &&
 	    !lyxrc.view_dvi_paper_option.empty()) {
-		command += ' ' + lyxrc.view_dvi_paper_option;
-		string paper_size = buffer.params().paperSizeName();
-		if (paper_size == "letter")
-			paper_size = "us";
-		command += ' ' + paper_size;
-		if (buffer.params().orientation == ORIENTATION_LANDSCAPE)
-			command += 'r';
+		string paper_size = buffer.params().paperSizeName("xdvi");
+		if (!paper_size.empty()) {
+			command += ' ' + lyxrc.view_dvi_paper_option;
+			command += ' ' + paper_size;
+			if (buffer.params().orientation == ORIENTATION_LANDSCAPE &&
+			    buffer.params().papersize != PAPER_CUSTOM)
+				command += 'r';
+		}
 	}
 
 	if (!contains(command, token_from_format))
Index: src/BufferParams.cpp
===================================================================
--- src/BufferParams.cpp	(Revision 22629)
+++ src/BufferParams.cpp	(Arbeitskopie)
@@ -1576,27 +1576,62 @@
 }
 
 
-string const BufferParams::paperSizeName() const
+string const BufferParams::paperSizeName(string const & purpose) const
 {
 	char real_papersize = papersize;
 	if (real_papersize == PAPER_DEFAULT)
 		real_papersize = lyxrc.default_papersize;
 
 	switch (real_papersize) {
+	case PAPER_DEFAULT:
+		// could be anything, so don't guess
+		return string();
+	case PAPER_CUSTOM: {
+		if (purpose == "xdvi" && !paperwidth.empty() &&
+		    !paperheight.empty()) {
+			// heightxwidth<unit>
+			string first = paperwidth;
+			string second = paperheight;
+			if (orientation == ORIENTATION_LANDSCAPE)
+				first.swap(second);
+			// cut off unit.
+			return first.erase(first.length() - 2)
+				+ "x" + second;
+		}
+		return string();
+	}
 	case PAPER_A3:
 		return "a3";
 	case PAPER_A4:
 		return "a4";
 	case PAPER_A5:
 		return "a5";
+	case PAPER_B3:
+		// dvips and dvipdfm do not know this
+		if (purpose == "dvips" || purpose == "dvipdfm")
+			return string();
+		return "b3";
+	case PAPER_B4:
+		// dvipdfm does not know this
+		if (purpose == "dvipdfm")
+			return string();
+		return "b4";
 	case PAPER_B5:
+		// dvipdfm does not know this
+		if (purpose == "dvipdfm")
+			return string();
 		return "b5";
 	case PAPER_USEXECUTIVE:
+		// dvipdfm does not know this
+		if (purpose == "dvipdfm")
+			return string();
 		return "foolscap";
 	case PAPER_USLEGAL:
 		return "legal";
 	case PAPER_USLETTER:
 	default:
+		if (purpose == "xdvi")
+			return "us";
 		return "letter";
 	}
 }
@@ -1616,9 +1651,9 @@
 		result += ' ' + paperwidth;
 		result += ',' + paperheight;
 	} else {
-		string const paper_option = paperSizeName();
-		if (paper_option != "letter" ||
-		    orientation != ORIENTATION_LANDSCAPE) {
+		string const paper_option = paperSizeName("dvips");
+		if (!paper_option.empty() && (paper_option != "letter" ||
+		    orientation != ORIENTATION_LANDSCAPE)) {
 			// dvips won't accept -t letter -t landscape.
 			// In all other cases, include the paper size
 			// explicitly.

Reply via email to