X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FSpacing.C;h=35eecde79e0d2b268d4e26fdaa1ea6cb8f9ecb56;hb=27a777ccc624b19c5d1961a6279c0db97594c0fb;hp=8db1f3caab297b3350f04ce76cc309611e6e28c5;hpb=c52895023e231587208b5c9257ae7825dc493ef0;p=lyx.git diff --git a/src/Spacing.C b/src/Spacing.C index 8db1f3caab..35eecde79e 100644 --- a/src/Spacing.C +++ b/src/Spacing.C @@ -1,21 +1,135 @@ +/** + * \file Spacing.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes + * + * Full author contact details are available in file CREDITS. + */ + #include #include "Spacing.h" -using std::ios; +#include "support/lstrings.h" +#include "support/convert.h" + +#include +#include + + +namespace lyx { + + +using std::ostream; +using std::ostringstream; +using std::string; + + +string const Spacing::spacing_string[] + = {"single", "onehalf", "double", "other"}; + -/// how can I put this inside of Spacing (class) -static -char const * spacing_string[] = {"single", "onehalf", "double", "other"}; +string const Spacing::getValueAsString() const +{ + switch (space) { + case Default: // nothing special should happen with this... + case Single: return "1.0"; + case Onehalf: return "1.25"; + case Double: return "1.667"; + case Other: return value; + } + return "1.0"; +} -void Spacing::writeFile(ostream & os) const +double Spacing::getValue() const { + return convert(getValueAsString()); +} + + +void Spacing::set(Spacing::Space sp, double val) +{ + set(sp, convert(val)); +} + + +void Spacing::set(Spacing::Space sp, string const & val) +{ + space = sp; + if (sp == Other) { + switch (int(convert(val) * 1000 + 0.5)) { + case 1000: + space = Single; + break; + case 1250: + space = Onehalf; + break; + case 1667: + space = Double; + break; + default: + value = val; + break; + } + } +} + + +void Spacing::writeFile(ostream & os, bool para) const +{ + if (space == Default) return; + + string cmd = para ? "\\paragraph_spacing " : "\\spacing "; + if (getSpace() == Spacing::Other) { - os.setf(ios::showpoint|ios::fixed); - os.precision(2); - os << "\\spacing " << spacing_string[getSpace()] - << " " << getValue() << " \n"; + os << cmd << spacing_string[getSpace()] + << ' ' << getValueAsString() << "\n"; } else { - os << "\\spacing " << spacing_string[getSpace()] << " \n"; - } + os << cmd << spacing_string[getSpace()] << "\n"; + } } + + +string const Spacing::writeEnvirBegin() const +{ + switch (space) { + case Default: break; // do nothing + case Single: + return "\\begin{singlespace}"; + case Onehalf: + return "\\begin{onehalfspace}"; + case Double: + return "\\begin{doublespace}"; + case Other: + { + ostringstream ost; + ost << "\\begin{spacing}{" + << getValueAsString() << '}'; + return ost.str(); + } + } + return string(); +} + + +string const Spacing::writeEnvirEnd() const +{ + switch (space) { + case Default: break; // do nothing + case Single: + return "\\end{singlespace}"; + case Onehalf: + return "\\end{onehalfspace}"; + case Double: + return "\\end{doublespace}"; + case Other: + return "\\end{spacing}"; + } + return string(); +} + + +} // namespace lyx