X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FSpacing.C;h=832fe8f1e3d1897884a731aadfdb63e5e21ba08d;hb=c90c5e6386ce69c34c99b3594d6fa452e6a13161;hp=8db1f3caab297b3350f04ce76cc309611e6e28c5;hpb=c52895023e231587208b5c9257ae7825dc493ef0;p=lyx.git diff --git a/src/Spacing.C b/src/Spacing.C index 8db1f3caab..832fe8f1e3 100644 --- a/src/Spacing.C +++ b/src/Spacing.C @@ -1,21 +1,121 @@ +/* This file is part of + * ====================================================== + * + * LyX, The Document Processor + * + * Copyright 1995 Matthias Ettrich + * Copyright 1995-2000 The LyX Team. + * + * ====================================================== */ + #include +#ifdef __GNUG__ +#pragma implementation +#endif + +#include "Lsstream.h" #include "Spacing.h" +#include "LString.h" + using std::ios; +using std::ostream; /// how can I put this inside of Spacing (class) -static -char const * spacing_string[] = {"single", "onehalf", "double", "other"}; +namespace { + +char const * const spacing_string[] = {"single", "onehalf", "double", "other"}; + +} // namespace anon + + +float Spacing::getValue() 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::set(Spacing::Space sp, float val) +{ + space = sp; + if (sp == Other) { + switch (int(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) const +void Spacing::set(Spacing::Space sp, string const & val) { + float fval; + istringstream istr(val.c_str()); + istr >> fval; + set(sp, fval); +} + + +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()] + os << cmd << spacing_string[getSpace()] << " " << getValue() << " \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}{" + << getValue() << "}"; + return ost.str().c_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(); +}