commit 0b7305024a33e6616ef3ae73a0df63c5a62e3d10
Author: Juergen Spitzmueller <[email protected]>
Date: Wed Aug 7 16:44:11 2019 +0200
Use generic paper size names rather than LaTeXisms such as "letterpaper"
This allows to support classes that don't use the Xpaper wording.
Add support for KOMA font (keyval) syntax on top of that.
Also support class-specific font and paper sizes in tex2lyx.
File and layout format change.
---
development/FORMAT | 4 ++
lib/doc/Customization.lyx | 119 ++++++++++++++++++++++++++++++------------
lib/doc/de/Customization.lyx | 107 ++++++++++++++++++++++++++------------
lib/layouts/memoir.layout | 4 +-
lib/layouts/scrclass.inc | 5 +-
lib/lyx2lyx/lyx_2_4.py | 38 +++++++++++++-
lib/scripts/layout2layout.py | 5 ++-
src/BufferParams.cpp | 22 +++++---
src/TextClass.cpp | 16 ++++--
src/TextClass.h | 4 ++
src/tex2lyx/Preamble.cpp | 86 ++++++++++++++++++++++--------
src/version.h | 4 +-
12 files changed, 303 insertions(+), 111 deletions(-)
diff --git a/development/FORMAT b/development/FORMAT
index 340d009..77d6813 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -8,6 +8,10 @@ changes happened in particular if possible. A good example
would be
-----------------------
2019-08-07 Jürgen Spitzmüller <[email protected]>
+ * Format incremented to 587: Use more generic paper names as LyX names
+ (rather than LaTeXisms; e.g., "a4" rather than "a4paper").
+
+2019-08-07 Jürgen Spitzmüller <[email protected]>
* Format incremented to 586: Allow for duplicate keys in qualified
citation lists
2019-08-06 Jürgen Spitzmüller <[email protected]>
diff --git a/lib/doc/Customization.lyx b/lib/doc/Customization.lyx
index 9525358..4f4b1e4 100644
--- a/lib/doc/Customization.lyx
+++ b/lib/doc/Customization.lyx
@@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/
-\lyxformat 585
+\lyxformat 587
\begin_document
\begin_header
\save_transient_properties true
@@ -10531,10 +10531,8 @@ status collapsed
\emph on
custom
\emph default
-, letterpaper, legalpaper, executivepaper, a0paper, a1paper, a2paper, a3paper,
- a4paper, a5paper, a6paper, b0paper, b1paper, b2paper, b3paper, b4paper,
- b5paper, b6paper, c0paper, c1paper, c2paper, c3paper, c4paper, c5paper,
- c6paper, b0j, b1j, b2j, b3j, b4j, b5j, b6j
+, letter, legal, executive, a0, a1, a2, a3, a4, a5, a6, b0, b1, b2, b3,
+ b4, b5, b6, c0, c1, c2, c3, c4, c5, c6, b0j, b1j, b2j, b3j, b4j, b5j, b6j
\end_layout
\end_inset
@@ -11629,7 +11627,7 @@ g.: PUBLIC
\begin_layout Description
-\change_inserted -712698321 1565105413
+\change_inserted -712698321 1565180598
\begin_inset Flex Code
status collapsed
@@ -11648,40 +11646,38 @@ status collapsed
\begin_layout Plain Layout
\change_inserted -712698321 1565105399
-string="letterpaper|\SpecialChar allowbreak
-legalpaper|\SpecialChar allowbreak
-executivepaper|\SpecialChar allowbreak
-a0paper|\SpecialChar allowbreak
-a1paper|\SpecialChar allowbreak
-a2paper|\SpecialChar allowbreak
-a3paper|\SpecialChar allowbreak
-a4
-paper|\SpecialChar allowbreak
-a5paper|\SpecialChar allowbreak
-a6paper|\SpecialChar allowbreak
-b0paper|\SpecialChar allowbreak
-b1paper|\SpecialChar allowbreak
-b2paper|\SpecialChar allowbreak
-b3paper|\SpecialChar allowbreak
-b4paper|\SpecialChar allowbreak
-b5paper|\SpecialChar allowbreak
-b6paper|\SpecialChar allowbreak
-c0
-paper|\SpecialChar allowbreak
-c1paper|\SpecialChar allowbreak
-c2paper|\SpecialChar allowbreak
-c3paper|\SpecialChar allowbreak
-c4paper|\SpecialChar allowbreak
-c5paper|\SpecialChar allowbreak
-c6paper|\SpecialChar allowbreak
+string="letter|\SpecialChar allowbreak
+legal|\SpecialChar allowbreak
+executive|\SpecialChar allowbreak
+a0|\SpecialChar allowbreak
+a1|\SpecialChar allowbreak
+a2|\SpecialChar allowbreak
+a3|\SpecialChar allowbreak
+a4|\SpecialChar allowbreak
+a5|\SpecialChar allowbreak
+a6|\SpecialChar allowbreak
+b0|\SpecialChar allowbreak
+b1|\SpecialChar allowbreak
+b2|\SpecialChar allowbreak
+b3|\SpecialChar allowbreak
+b4|\SpecialChar allowbreak
+b5|\SpecialChar allowbreak
+b6|\SpecialChar allowbreak
+c0|\SpecialChar allowbreak
+c1|\SpecialChar allowbreak
+c
+2|\SpecialChar allowbreak
+c3|\SpecialChar allowbreak
+c4|\SpecialChar allowbreak
+c5|\SpecialChar allowbreak
+c6|\SpecialChar allowbreak
b0j|\SpecialChar allowbreak
b1j|\SpecialChar allowbreak
b2j|\SpecialChar allowbreak
b3j|\SpecialChar allowbreak
b4j|\SpecialChar allowbreak
b5j|\SpecialChar allowbreak
-b6
-j"
+b6j"
\end_layout
\end_inset
@@ -11709,6 +11705,61 @@ status collapsed
.
Currently, only the listed sizes are supported.
Other sizes might be entered as custom class option.
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -712698321 1565180623
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1565180605
+PageSizeFormat
+\end_layout
+
+\end_inset
+
+ [
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1565180601
+string
+\end_layout
+
+\end_inset
+
+] The format for the page size option.
+ Default:
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1565180618
+$$spaper
+\end_layout
+
+\end_inset
+
+.
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+
+\change_inserted -712698321 1565180601
+$$s
+\end_layout
+
+\end_inset
+
+ is a placeholder for the paper size.
\change_unchanged
\end_layout
diff --git a/lib/doc/de/Customization.lyx b/lib/doc/de/Customization.lyx
index 27ad41f..9e33b41 100644
--- a/lib/doc/de/Customization.lyx
+++ b/lib/doc/de/Customization.lyx
@@ -1,5 +1,5 @@
#LyX 2.4 created this file. For more info see https://www.lyx.org/
-\lyxformat 585
+\lyxformat 587
\begin_document
\begin_header
\save_transient_properties true
@@ -8750,10 +8750,8 @@ status collapsed
\emph on
custom
\emph default
-, letterpaper, legalpaper, executivepaper, a0paper, a1paper, a2paper, a3paper,
- a4paper, a5paper, a6paper, b0paper, b1paper, b2paper, b3paper, b4paper,
- b5paper, b6paper, c0paper, c1paper, c2paper, c3paper, c4paper, c5paper,
- c6paper, b0j, b1j, b2j, b3j, b4j, b5j, b6j
+, letter, legal, executive, a0, a1, a2, a3, a4, a5, a6, b0, b1, b2, b3,
+ b4, b5, b6, c0, c1, c2, c3, c4, c5, c6, b0j, b1j, b2j, b3j, b4j, b5j, b6j
\end_layout
\end_inset
@@ -9795,40 +9793,38 @@ PageSize
status collapsed
\begin_layout Plain Layout
-string="letterpaper|\SpecialChar allowbreak
-legalpaper|\SpecialChar allowbreak
-executivepaper|\SpecialChar allowbreak
-a0paper|\SpecialChar allowbreak
-a1paper|\SpecialChar allowbreak
-a2paper|\SpecialChar allowbreak
-a3paper|\SpecialChar allowbreak
-a4
-paper|\SpecialChar allowbreak
-a5paper|\SpecialChar allowbreak
-a6paper|\SpecialChar allowbreak
-b0paper|\SpecialChar allowbreak
-b1paper|\SpecialChar allowbreak
-b2paper|\SpecialChar allowbreak
-b3paper|\SpecialChar allowbreak
-b4paper|\SpecialChar allowbreak
-b5paper|\SpecialChar allowbreak
-b6paper|\SpecialChar allowbreak
-c0
-paper|\SpecialChar allowbreak
-c1paper|\SpecialChar allowbreak
-c2paper|\SpecialChar allowbreak
-c3paper|\SpecialChar allowbreak
-c4paper|\SpecialChar allowbreak
-c5paper|\SpecialChar allowbreak
-c6paper|\SpecialChar allowbreak
+string="letter|\SpecialChar allowbreak
+legal|\SpecialChar allowbreak
+executive|\SpecialChar allowbreak
+a0|\SpecialChar allowbreak
+a1|\SpecialChar allowbreak
+a2|\SpecialChar allowbreak
+a3|\SpecialChar allowbreak
+a4|\SpecialChar allowbreak
+a5|\SpecialChar allowbreak
+a6|\SpecialChar allowbreak
+b0|\SpecialChar allowbreak
+b1|\SpecialChar allowbreak
+b2|\SpecialChar allowbreak
+b3|\SpecialChar allowbreak
+b4|\SpecialChar allowbreak
+b5|\SpecialChar allowbreak
+b6|\SpecialChar allowbreak
+c0|\SpecialChar allowbreak
+c1|\SpecialChar allowbreak
+c
+2|\SpecialChar allowbreak
+c3|\SpecialChar allowbreak
+c4|\SpecialChar allowbreak
+c5|\SpecialChar allowbreak
+c6|\SpecialChar allowbreak
b0j|\SpecialChar allowbreak
b1j|\SpecialChar allowbreak
b2j|\SpecialChar allowbreak
b3j|\SpecialChar allowbreak
b4j|\SpecialChar allowbreak
b5j|\SpecialChar allowbreak
-b6
-j"
+b6j"
\end_layout
\end_inset
@@ -9862,6 +9858,51 @@ status collapsed
status collapsed
\begin_layout Plain Layout
+PageSizeFormat
+\end_layout
+
+\end_inset
+
+ [
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+string
+\end_layout
+
+\end_inset
+
+] Das Format der Seitengrößen-Option.
+ Voreinstellung:
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+$$spaper
+\end_layout
+
+\end_inset
+
+.
+
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
+$$s
+\end_layout
+
+\end_inset
+
+ ist ein Platzhalter für die Papiergröße.
+\end_layout
+
+\begin_layout Description
+\begin_inset Flex Code
+status collapsed
+
+\begin_layout Plain Layout
PageStyle
\end_layout
diff --git a/lib/layouts/memoir.layout b/lib/layouts/memoir.layout
index 5c8de8d..e51feb0 100644
--- a/lib/layouts/memoir.layout
+++ b/lib/layouts/memoir.layout
@@ -14,7 +14,7 @@ SecNumDepth 1
TocDepth 1
DefaultStyle Standard
PageStyle Headings
-PageSize letterpaper
+PageSize letter
Provides makeidx 1
Provides framed 1
Provides subscript 1
@@ -28,7 +28,7 @@ Provides SetSpace 1
ClassOptions
FontSize 9|10|11|12|14|17
- PageSize
a3paper|a4paper|a5paper|a6paper|b3paper|b4paper|b5paper|b6paper|executivepaper|legalpaper|letterpaper
+ PageSize a3|a4|a5|a6|b3|b4|b5|b6|executive|legal|letter
PageStyle
empty|plain|headings|myheadings|ruled|Ruled|companion
Other oldfontcommands
End
diff --git a/lib/layouts/scrclass.inc b/lib/layouts/scrclass.inc
index 927eb60..6a55923 100644
--- a/lib/layouts/scrclass.inc
+++ b/lib/layouts/scrclass.inc
@@ -12,13 +12,14 @@ Format 78
SecNumDepth 2
TocDepth 2
DefaultStyle Standard
-PageSize a4paper
+PageSize a4
Provides subscript 1
ClassOptions
FontSize 9|10|11|12|13|14|15|16|17|18|19|20
FontSizeFormat fontsize=$$s
- PageSize
a0paper|a1paper|a2paper|a3paper|a4paper|a5paper|a6paper|b0paper|b1paper|b2paper|b3paper|b4paper|b5paper|b6paper|c0paper|c1paper|c2paper|c3paper|c4paper|c5paper|c6paper|executivepaper|legalpaper|letterpaper
+ PageSize
a0|a1|a2|a3|a4|a5|a6|b0|b1|b2|b3|b4|b5|b6|c0|c1|c2|c3|c4|c5|c6|executive|legal|letter
+ PageSizeFormat paper=$$s
End
Style Standard
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index 3869e07..90ce08e 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -3357,6 +3357,38 @@ def revert_dupqualicites(document):
res += "{" + kk + "}"
document.body[i:j+1] = put_cmd_in_ert([res])
+
+def convert_pagesizenames(document):
+ " Convert LyX page sizes names "
+
+ i = find_token(document.header, "\\papersize", 0)
+ if i == -1:
+ document.warning("Malformed LyX document! Missing \\papersize header.")
+ return
+ oldnames = ["letterpaper", "legalpaper", "executivepaper", \
+ "a0paper", "a1paper", "a2paper", "a3paper", "a4paper",
"a5paper", "a6paper", \
+ "b0paper", "b1paper", "b2paper", "b3paper", "b4paper",
"b5paper", "b6paper", \
+ "c0paper", "c1paper", "c2paper", "c3paper", "c4paper",
"c5paper", "c6paper"]
+ val = get_value(document.header, "\\papersize", i)
+ if val in oldnames:
+ newval = val.replace("paper", "")
+ document.header[i] = "\\papersize " + newval
+
+def revert_pagesizenames(document):
+ " Convert LyX page sizes names "
+
+ i = find_token(document.header, "\\papersize", 0)
+ if i == -1:
+ document.warning("Malformed LyX document! Missing \\papersize header.")
+ return
+ newnames = ["letter", "legal", "executive", \
+ "a0", "a1", "a2", "a3", "a4", "a5", "a6", \
+ "b0", "b1", "b2", "b3", "b4", "b5", "b6", \
+ "c0", "c1", "c2", "c3", "c4", "c5", "c6"]
+ val = get_value(document.header, "\\papersize", i)
+ if val in newnames:
+ newval = val + "paper"
+ document.header[i] = "\\papersize " + newval
##
@@ -3406,10 +3438,12 @@ convert = [
[583,
[convert_ChivoFont,convert_Semibolds,convert_NotoRegulars,convert_CrimsonProFont]],
[584, []],
[585, [convert_pagesizes]],
- [586, []]
+ [586, []],
+ [587, [convert_pagesizenames]]
]
-revert = [[585, [revert_dupqualicites]],
+revert = [[586, [revert_pagesizenames]],
+ [585, [revert_dupqualicites]],
[584, [revert_pagesizes,revert_komafontsizes]],
[583, [revert_vcsinfo_rev_abbrev]],
[582, [revert_ChivoFont,revert_CrimsonProFont]],
diff --git a/lib/scripts/layout2layout.py b/lib/scripts/layout2layout.py
index 0009c54..cd73489 100644
--- a/lib/scripts/layout2layout.py
+++ b/lib/scripts/layout2layout.py
@@ -11,7 +11,7 @@
# This script will update a .layout file to current format
# The latest layout format is also defined in src/TextClass.cpp
-currentFormat = 78
+currentFormat = 79
# Incremented to format 4, 6 April 2007, lasgouttes
@@ -262,6 +262,9 @@ currentFormat = 78
# Incremented to format 78, 6 August 2019 by spitz
# New textclass tag FontsizeFormat
+# Incremented to format 79, 7 August 2019 by spitz
+# New textclass tag PagesizeFormat
+
# Do not forget to document format change in Customization
# Manual (section "Declaring a new text class").
diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index f964c80..3952c86 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -79,12 +79,20 @@ static char const * const string_quotes_style[] = {
static char const * const string_papersize[] = {
+ "default", "custom", "letter", "legal", "executive",
+ "a0", "a1", "a2", "a3", "a4", "a5", "a6",
+ "b0", "b1", "b2", "b3", "b4", "b5", "b6",
+ "c0", "c1", "c2", "c3", "c4", "c5", "c6",
+ "b0j", "b1j", "b2j", "b3j", "b4j", "b5j", "b6j", ""
+};
+
+
+static char const * const string_papersize_geometry[] = {
"default", "custom", "letterpaper", "legalpaper", "executivepaper",
- "a0paper", "a1paper", "a2paper", "a3paper", "a4paper", "a5paper",
- "a6paper", "b0paper", "b1paper", "b2paper", "b3paper", "b4paper",
- "b5paper", "b6paper", "c0paper", "c1paper", "c2paper", "c3paper",
- "c4paper", "c5paper", "c6paper", "b0j", "b1j", "b2j", "b3j", "b4j",
"b5j",
- "b6j", ""
+ "a0paper", "a1paper", "a2paper", "a3paper", "a4paper", "a5paper",
"a6paper",
+ "b0paper", "b1paper", "b2paper", "b3paper", "b4paper", "b5paper",
"b6paper",
+ "c0paper", "c1paper", "c2paper", "c3paper", "c4paper", "c5paper",
"c6paper",
+ "b0j", "b1j", "b2j", "b3j", "b4j", "b5j", "b6j", ""
};
@@ -1628,7 +1636,7 @@ bool BufferParams::writeLaTeX(otexstream & os,
LaTeXFeatures & features,
if ((!use_geometry || features.isProvided("geometry-light"))
&& class_supported_papersize)
- clsoptions << string_papersize[papersize] << ",";
+ clsoptions << subst(tclass.pagesizeformat(), "$$s",
string_papersize[papersize]) << ",";
// if needed
if (sides != tclass.sides()) {
@@ -1849,7 +1857,7 @@ bool BufferParams::writeLaTeX(otexstream & os,
LaTeXFeatures & features,
case PAPER_JISB4:
case PAPER_JISB5:
case PAPER_JISB6:
- ods << "," << from_ascii(string_papersize[papersize]);
+ ods << "," <<
from_ascii(string_papersize_geometry[papersize]);
break;
case PAPER_DEFAULT:
break;
diff --git a/src/TextClass.cpp b/src/TextClass.cpp
index 8b54a4c..c11331e 100644
--- a/src/TextClass.cpp
+++ b/src/TextClass.cpp
@@ -62,7 +62,7 @@ namespace lyx {
// You should also run the development/tools/updatelayouts.py script,
// to update the format of all of our layout files.
//
-int const LAYOUT_FORMAT = 78; // spitz: FontsizeFormat
+int const LAYOUT_FORMAT = 79; // spitz: PagesizeFormat
// Layout format for the current lyx file format. Controls which format is
@@ -150,11 +150,11 @@ docstring const TextClass::plain_layout_ =
from_ascii(N_("Plain Layout"));
TextClass::TextClass()
: loaded_(false), tex_class_avail_(false),
opt_enginetype_("authoryear|numerical"), opt_fontsize_("10|11|12"),
-
opt_pagesize_("default|a4paper|a5paper|b5paper|letterpaper|legalpaper|executivepaper"),
+ opt_pagesize_("default|a4|a5|b5|letter|legal|executive"),
opt_pagestyle_("empty|plain|headings|fancy"),
fontsize_format_("$$spt"), pagesize_("default"),
- pagestyle_("default"), tablestyle_("default"), columns_(1),
sides_(OneSide), secnumdepth_(3),
- tocdepth_(3), outputType_(LATEX), outputFormat_("latex"),
- has_output_format_(false), defaultfont_(sane_font),
+ pagesize_format_("$$spaper"), pagestyle_("default"),
tablestyle_("default"),
+ columns_(1), sides_(OneSide), secnumdepth_(3), tocdepth_(3),
outputType_(LATEX),
+ outputFormat_("latex"), has_output_format_(false),
defaultfont_(sane_font),
titletype_(TITLE_COMMAND_AFTER), titlename_("maketitle"),
min_toclevel_(0), max_toclevel_(0), maxcitenames_(2),
cite_full_author_list_(true), bibintoc_(false)
@@ -1006,6 +1006,7 @@ void TextClass::readClassOptions(Lexer & lexrc)
CO_FONTSIZE = 1,
CO_FONTSIZE_FORMAT,
CO_PAGESIZE,
+ CO_PAGESIZE_FORMAT,
CO_PAGESTYLE,
CO_OTHER,
CO_HEADER,
@@ -1019,6 +1020,7 @@ void TextClass::readClassOptions(Lexer & lexrc)
{"header", CO_HEADER },
{"other", CO_OTHER },
{"pagesize", CO_PAGESIZE },
+ {"pagesizeformat", CO_PAGESIZE_FORMAT },
{"pagestyle", CO_PAGESTYLE }
};
@@ -1046,6 +1048,10 @@ void TextClass::readClassOptions(Lexer & lexrc)
lexrc.next();
opt_pagesize_ = rtrim(lexrc.getString());
break;
+ case CO_PAGESIZE_FORMAT:
+ lexrc.next();
+ pagesize_format_ = rtrim(lexrc.getString());
+ break;
case CO_PAGESTYLE:
lexrc.next();
opt_pagestyle_ = rtrim(lexrc.getString());
diff --git a/src/TextClass.h b/src/TextClass.h
index 1e8582b..3d06345 100644
--- a/src/TextClass.h
+++ b/src/TextClass.h
@@ -280,6 +280,8 @@ protected:
std::string fontsize_format_;
/// Default page size
std::string pagesize_;
+ /// Format of the papersize option
+ std::string pagesize_format_;
///
std::string pagestyle_;
///
@@ -467,6 +469,8 @@ public:
///
std::string const & pagesize() const { return pagesize_; }
///
+ std::string const & pagesizeformat() const { return pagesize_format_; }
+ ///
std::string const & pagestyle() const { return pagestyle_; }
///
std::string const & tablestyle() const { return tablestyle_; }
diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp
index 21d081c..3e2fa67 100644
--- a/src/tex2lyx/Preamble.cpp
+++ b/src/tex2lyx/Preamble.cpp
@@ -158,15 +158,12 @@ const char * const known_typewriter_font_packages[] = {
"beramono", "cmtl", "cmt
const char * const known_math_font_packages[] = { "eulervm", "newtxmath", 0};
-const char * const known_paper_sizes[] = { "a0paper", "b0paper", "c0paper",
+const char * const known_latex_paper_sizes[] = { "a0paper", "b0paper",
"c0paper",
"a1paper", "b1paper", "c1paper", "a2paper", "b2paper", "c2paper", "a3paper",
"b3paper", "c3paper", "a4paper", "b4paper", "c4paper", "a5paper", "b5paper",
"c5paper", "a6paper", "b6paper", "c6paper", "executivepaper", "legalpaper",
"letterpaper", "b0j", "b1j", "b2j", "b3j", "b4j", "b5j", "b6j", 0};
-const char * const known_class_paper_sizes[] = { "a4paper", "a5paper",
-"executivepaper", "legalpaper", "letterpaper", 0};
-
const char * const known_paper_margins[] = { "lmargin", "tmargin", "rmargin",
"bmargin", "headheight", "headsep", "footskip", "columnsep", 0};
@@ -709,13 +706,18 @@ void Preamble::handle_geometry(vector<string> & options)
options.erase(it);
}
// paper size
- // keyval version: "paper=letter"
+ // keyval version: "paper=letter" or "paper=letterpaper"
string paper = process_keyval_opt(options, "paper");
if (!paper.empty())
- h_papersize = paper + "paper";
+ if (suffixIs(paper, "paper"))
+ paper = subst(paper, "paper", "");
// alternative version: "letterpaper"
- handle_opt(options, known_paper_sizes, h_papersize);
- delete_opt(options, known_paper_sizes);
+ handle_opt(options, known_latex_paper_sizes, paper);
+ if (suffixIs(paper, "paper"))
+ paper = subst(paper, "paper", "");
+ delete_opt(options, known_latex_paper_sizes);
+ if (!paper.empty())
+ h_papersize = paper;
// page margins
char const * const * margin = known_paper_margins;
for (; *margin; ++margin) {
@@ -2543,12 +2545,41 @@ void Preamble::parse(Parser & p, string const &
forceclass,
if (t.cs() == "documentclass") {
vector<string>::iterator it;
vector<string> opts = split_options(p.getArg('[', ']'));
+ // FIXME This does not work for classes that have a
+ // different name in LyX than in LaTeX
+ h_textclass = p.getArg('{', '}');
+ p.skip_spaces();
+ // Force textclass if the user wanted it
+ if (!forceclass.empty())
+ h_textclass = forceclass;
+ tc.setName(h_textclass);
+ if (!LayoutFileList::get().haveClass(h_textclass) ||
!tc.load()) {
+ cerr << "Error: Could not read layout file for
textclass \"" << h_textclass << "\"." << endl;
+ exit(EXIT_FAILURE);
+ }
+
+ // Font sizes.
+ // Try those who are (most likely) known to all
packages first
handle_opt(opts, known_fontsizes, h_paperfontsize);
delete_opt(opts, known_fontsizes);
// delete "pt" at the end
string::size_type i = h_paperfontsize.find("pt");
if (i != string::npos)
h_paperfontsize.erase(i);
+ // Now those known specifically to the class
+ string fsize;
+ vector<string> class_fsizes =
getVectorFromString(tc.opt_fontsize(), "|");
+ string const fsize_format = tc.fontsizeformat();
+ for (auto const fsize : class_fsizes) {
+ string latexsize = subst(fsize_format, "$$s",
fsize);
+ vector<string>::iterator it =
find(opts.begin(), opts.end(), latexsize);
+ if (it != opts.end()) {
+ h_paperfontsize = fsize;
+ opts.erase(it);
+ break;
+ }
+ }
+
// The documentclass options are always parsed before
the options
// of the babel call so that a language cannot
overwrite the babel
// options.
@@ -2601,16 +2632,33 @@ void Preamble::parse(Parser & p, string const &
forceclass,
opts.erase(it);
}
// paper sizes
- // some size options are known to any document classes,
other sizes
+ // some size options are known by the document class,
other sizes
// are handled by the \geometry command of the geometry
package
- handle_opt(opts, known_class_paper_sizes, h_papersize);
- delete_opt(opts, known_class_paper_sizes);
+ string paper;
+ vector<string> class_psizes =
getVectorFromString(tc.opt_pagesize(), "|");
+ string const psize_format = tc.pagesizeformat();
+ for (auto const psize : class_psizes) {
+ string latexsize = subst(psize_format, "$$s",
psize);
+ vector<string>::iterator it =
find(opts.begin(), opts.end(), latexsize);
+ if (it != opts.end()) {
+ h_papersize = psize;
+ opts.erase(it);
+ break;
+ }
+ if (psize_format == "$$spaper")
+ continue;
+ // Also try with the default format since this
is understood by
+ // most classes
+ latexsize = psize + "paper";
+ it = find(opts.begin(), opts.end(), latexsize);
+ if (it != opts.end()) {
+ h_papersize = psize;
+ opts.erase(it);
+ break;
+ }
+ }
// the remaining options
h_options = join(opts, ",");
- // FIXME This does not work for classes that have a
- // different name in LyX than in LaTeX
- h_textclass = p.getArg('{', '}');
- p.skip_spaces();
continue;
}
@@ -2935,14 +2983,6 @@ void Preamble::parse(Parser & p, string const &
forceclass,
// remove the whitespace
p.skip_spaces();
- // Force textclass if the user wanted it
- if (!forceclass.empty())
- h_textclass = forceclass;
- tc.setName(h_textclass);
- if (!LayoutFileList::get().haveClass(h_textclass) || !tc.load()) {
- cerr << "Error: Could not read layout file for textclass \"" <<
h_textclass << "\"." << endl;
- exit(EXIT_FAILURE);
- }
if (h_papersides.empty()) {
ostringstream ss;
ss << tc.sides();
diff --git a/src/version.h b/src/version.h
index ca5e63d..13f06a3 100644
--- a/src/version.h
+++ b/src/version.h
@@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 586 // spitz: allow duplicate keys in qualified
citation lists
-#define LYX_FORMAT_TEX2LYX 586
+#define LYX_FORMAT_LYX 587 // spitz: generic paper size names
+#define LYX_FORMAT_TEX2LYX 587
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER