From 0df54152bc6115ad813d48fe4e73cc82ede1bce3 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Tue, 22 Jan 2008 08:41:45 +0000 Subject: [PATCH] Move spacing code around (and fix a bug) * LaTeXFeatures.cpp (getPackages): remove some specific spacing code; move listings support to simplefeatures array. * src/Spacing.cpp (writeEnvirBegin, writeEnvirEnd): code factorization (writePreamble): new method containing former code from LaTeXFeatures; use \setSpacing instead of \setSingleSpacing. * src/BufferParams.cpp (validate, writeLaTeX): handle spacing here. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22644 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/BufferParams.cpp | 7 ++++ src/LaTeXFeatures.cpp | 30 ++---------------- src/Spacing.cpp | 74 ++++++++++++++++++++++++------------------- src/Spacing.h | 5 ++- 4 files changed, 55 insertions(+), 61 deletions(-) diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 5e884e638a..757ec2a35c 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -863,6 +863,10 @@ void BufferParams::validate(LaTeXFeatures & features) const if (use_esint == package_on) features.require("esint"); + // Document-level line spacing + if (spacing().getSpace() != Spacing::Single && !spacing().isDefault()) + features.require("setspace"); + // the bullet shapes are buffer level not paragraph level // so they are tested here for (int i = 0; i < 4; ++i) { @@ -1206,6 +1210,9 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, // The optional packages; docstring lyxpreamble(from_ascii(features.getPackages())); + // Line spacing + lyxpreamble += from_utf8(spacing().writePreamble(tclass.provides("SetSpace"))); + // We try to load babel late, in case it interferes // with other packages. But some packages also need babel to be loaded // before, e.g. jurabib has to be called after babel. diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index d523c2a5a1..f192813d73 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -544,7 +544,8 @@ char const * simplefeatures[] = { "enumitem", "endnotes", "ifthen", - "amsthm" + "amsthm", + "listings" }; int const nb_simplefeatures = sizeof(simplefeatures) / sizeof(char const *); @@ -652,30 +653,8 @@ string const LaTeXFeatures::getPackages() const } // setspace.sty - if ((isRequired("setspace") - || ((params_.spacing().getSpace() != Spacing::Single - && !params_.spacing().isDefault()))) - && !tclass.provides("SetSpace")) { + if (mustProvide("setspace") && !tclass.provides("SetSpace")) packages << "\\usepackage{setspace}\n"; - } - bool const upcase = tclass.provides("SetSpace"); - switch (params_.spacing().getSpace()) { - case Spacing::Default: - case Spacing::Single: - // we dont use setspace.sty so dont print anything - //packages += "\\singlespacing\n"; - break; - case Spacing::Onehalf: - packages << (upcase ? "\\OnehalfSpacing\n" : "\\onehalfspacing\n"); - break; - case Spacing::Double: - packages << (upcase ? "\\DoubleSpacing\n" : "\\doublespacing\n"); - break; - case Spacing::Other: - packages << (upcase ? "\\setSingleSpace{" : "\\setstretch{") - << params_.spacing().getValue() << "}\n"; - break; - } // amssymb.sty if (mustProvide("amssymb") @@ -724,9 +703,6 @@ string const LaTeXFeatures::getPackages() const "\\makenomenclature\n"; } - if (mustProvide("listings")) - packages << "\\usepackage{listings}\n"; - return packages.str(); } diff --git a/src/Spacing.cpp b/src/Spacing.cpp index 1f226cae41..2b8a326dc0 100644 --- a/src/Spacing.cpp +++ b/src/Spacing.cpp @@ -15,8 +15,7 @@ #include "support/lstrings.h" #include "support/convert.h" -#include -#include +#include using namespace std; @@ -89,50 +88,59 @@ void Spacing::writeFile(ostream & os, bool para) const } +namespace { + +string envName(Spacing::Space space, bool useSetSpace) +{ + static char const * const env_names[] + = { "SingleSpace", "OnehalfSpace", "DoubleSpace", "Spacing", ""}; + string const name = env_names[space]; + + return useSetSpace ? name : support::ascii_lowercase(name); +} + +} + string const Spacing::writeEnvirBegin(bool useSetSpace) const { - switch (space) { - case Default: break; // do nothing - case Single: - return (useSetSpace ? "\\begin{SingleSpace}" - : "\\begin{singlespace}"); - case Onehalf: - return (useSetSpace ? "\\begin{OnehalfSpace}" - : "\\begin{onehalfspace}"); - case Double: - return (useSetSpace ? "\\begin{DoubleSpace}" - : "\\begin{doublespace}"); - case Other: - { - ostringstream ost; - ost << (useSetSpace ? "\\begin{Spacing}{" - : "\\begin{spacing}{" ) - << getValueAsString() << '}'; - return ost.str(); - } - } - return string(); + string const name = envName(space, useSetSpace); + if (space == Other) + return "\\begin{" + name + "}{" + getValueAsString() + '}'; + else + return name.empty() ? string() : "\\begin{" + name + '}'; } string const Spacing::writeEnvirEnd(bool useSetSpace) const { + string const name = envName(space, useSetSpace); + return name.empty() ? string() : "\\end{" + name + '}'; +} + + +string const Spacing::writePreamble(bool useSetSpace) const +{ + string preamble; switch (space) { - case Default: break; // do nothing + case Default: case Single: - return (useSetSpace ? "\\end{SingleSpace}" - : "\\end{singlespace}"); + // we dont use setspace.sty so dont print anything + //return "\\singlespacing\n"; + break; case Onehalf: - return (useSetSpace ? "\\end{OnehalfSpace}" - : "\\end{onehalfspace}"); + preamble = useSetSpace ? "\\OnehalfSpacing\n" + : "\\onehalfspacing\n"; + break; case Double: - return (useSetSpace ? "\\end{DoubleSpace}" - : "\\end{doublespace}"); + preamble = useSetSpace ? "\\DoubleSpacing\n" + : "\\doublespacing\n"; + break; case Other: - return (useSetSpace ? "\\end{Spacing}" : "\\end{spacing}") ; + preamble = (useSetSpace ? "\\setSpacing{" : "\\setstretch{") + + getValueAsString() + "}\n"; + break; } - return string(); + return preamble; } - } // namespace lyx diff --git a/src/Spacing.h b/src/Spacing.h index 689c79355a..a78abb6c5a 100644 --- a/src/Spacing.h +++ b/src/Spacing.h @@ -17,8 +17,8 @@ #else #include "support/strfwd.h" -#include +#include namespace lyx { @@ -64,6 +64,9 @@ public: /// useSetSpace is true when using the variant supported by /// the memoir class. std::string const writeEnvirEnd(bool useSetSpace) const; + /// useSetSpace is true when using the variant supported by + /// the memoir class. + std::string const writePreamble(bool useSetSpace) const; private: /// -- 2.39.5