diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 8767047248..147fe8e10f 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -1577,27 +1577,62 @@ void BufferParams::readModules(Lexer & lex) } -string const BufferParams::paperSizeName() const +string const BufferParams::paperSizeName(Papersize_Purpose 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 + 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"; } } @@ -1617,9 +1652,9 @@ string const BufferParams::dvips_options() const 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. diff --git a/src/BufferParams.h b/src/BufferParams.h index 36ab933e4c..61c8612fae 100644 --- a/src/BufferParams.h +++ b/src/BufferParams.h @@ -274,8 +274,20 @@ public: std::vector author_map; /// std::string const dvips_options() const; + /** The return value of paperSizeName() depends on the + * purpose for which the paper size is needed, since they + * support different subsets of paper sizes. + */ + enum Papersize_Purpose { + /// + DVIPS, + /// + DVIPDFM, + /// + XDVI + }; /// - std::string const paperSizeName() const; + std::string const paperSizeName(Papersize_Purpose const & purpose) const; /// set up if and how babel is called std::string const babelCall(std::string const & lang_opts) const; /// handle inputenc etc. diff --git a/src/Converter.cpp b/src/Converter.cpp index 32afe035e6..e674fc9d48 100644 --- a/src/Converter.cpp +++ b/src/Converter.cpp @@ -65,8 +65,8 @@ string const dvipdfm_options(BufferParams const & bp) 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(BufferParams::DVIPDFM); + if (!paper_size.empty()) result = "-p "+ paper_size; if (bp.orientation == ORIENTATION_LANDSCAPE) diff --git a/src/Format.cpp b/src/Format.cpp index edfdf4135b..ed3ae964c0 100644 --- a/src/Format.cpp +++ b/src/Format.cpp @@ -279,13 +279,14 @@ bool Formats::view(Buffer const & buffer, FileName const & filename, 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(BufferParams::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))