3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Lars Gullik Bjønnes
7 * \author Jean-Marc Lasgouttes
9 * Full author contact details are available in file CREDITS.
15 #include "support/convert.h"
16 #include "support/lstrings.h"
17 #include "support/lyxlib.h"
26 string const Spacing::spacing_string[]
27 = {"single", "onehalf", "double", "other"};
30 string const Spacing::getValueAsString() const
33 case Default: // nothing special should happen with this...
34 case Single: return "1.0";
35 case Onehalf: return "1.25";
36 case Double: return "1.667";
37 case Other: return value;
43 double Spacing::getValue() const
45 return convert<double>(getValueAsString());
49 void Spacing::set(Spacing::Space sp, double val)
51 set(sp, convert<string>(val));
55 void Spacing::set(Spacing::Space sp, string const & val)
59 switch (support::iround(convert<double>(val) * 1000)) {
77 void Spacing::writeFile(ostream & os, bool para) const
79 if (space == Default) return;
81 string cmd = para ? "\\paragraph_spacing " : "\\spacing ";
83 if (getSpace() == Spacing::Other) {
84 os << cmd << spacing_string[getSpace()]
85 << ' ' << getValueAsString() << "\n";
87 os << cmd << spacing_string[getSpace()] << "\n";
94 string envName(Spacing::Space space, bool useSetSpace)
96 static char const * const env_names[]
97 = { "SingleSpace", "OnehalfSpace", "DoubleSpace", "Spacing", ""};
98 string const name = env_names[space];
100 return useSetSpace ? name : support::ascii_lowercase(name);
103 string cmdName(Spacing::Space space, bool useSetSpace)
105 static char const * const cmd_names[]
106 = { "SingleSpacing", "OnehalfSpacing", "DoubleSpacing", "SetStretch", ""};
107 string const name = cmd_names[space];
109 if (useSetSpace && name == "SetStretch")
112 return useSetSpace ? name : support::ascii_lowercase(name);
117 string const Spacing::writeEnvirBegin(bool useSetSpace) const
119 string const name = envName(space, useSetSpace);
121 return "\\begin{" + name + "}{" + getValueAsString() + '}';
123 return name.empty() ? string() : "\\begin{" + name + '}';
127 string const Spacing::writeEnvirEnd(bool useSetSpace) const
129 string const name = envName(space, useSetSpace);
130 return name.empty() ? string() : "\\end{" + name + '}';
134 string const Spacing::writeCmd(bool useSetSpace) const
136 string const name = cmdName(space, useSetSpace);
138 return "\\" + name + "{" + getValueAsString() + '}';
140 return name.empty() ? string() : "\\" + name + "{}";
144 string const Spacing::writePreamble(bool useSetSpace) const
150 // we dont use setspace.sty so dont print anything
151 //return "\\singlespacing\n";
154 preamble = useSetSpace ? "\\OnehalfSpacing\n"
155 : "\\onehalfspacing\n";
158 preamble = useSetSpace ? "\\DoubleSpacing\n"
159 : "\\doublespacing\n";
162 preamble = (useSetSpace ? "\\setSpacing{" : "\\setstretch{")
163 + getValueAsString() + "}\n";