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/lstrings.h"
16 #include "support/convert.h"
25 string const Spacing::spacing_string[]
26 = {"single", "onehalf", "double", "other"};
29 string const Spacing::getValueAsString() const
32 case Default: // nothing special should happen with this...
33 case Single: return "1.0";
34 case Onehalf: return "1.25";
35 case Double: return "1.667";
36 case Other: return value;
42 double Spacing::getValue() const
44 return convert<double>(getValueAsString());
48 void Spacing::set(Spacing::Space sp, double val)
50 set(sp, convert<string>(val));
54 void Spacing::set(Spacing::Space sp, string const & val)
58 switch (int(convert<double>(val) * 1000 + 0.5)) {
76 void Spacing::writeFile(ostream & os, bool para) const
78 if (space == Default) return;
80 string cmd = para ? "\\paragraph_spacing " : "\\spacing ";
82 if (getSpace() == Spacing::Other) {
83 os << cmd << spacing_string[getSpace()]
84 << ' ' << getValueAsString() << "\n";
86 os << cmd << spacing_string[getSpace()] << "\n";
93 string envName(Spacing::Space space, bool useSetSpace)
95 static char const * const env_names[]
96 = { "SingleSpace", "OnehalfSpace", "DoubleSpace", "Spacing", ""};
97 string const name = env_names[space];
99 return useSetSpace ? name : support::ascii_lowercase(name);
102 string cmdName(Spacing::Space space, bool useSetSpace)
104 static char const * const cmd_names[]
105 = { "SingleSpacing", "OnehalfSpacing", "DoubleSpacing", "SetStretch", ""};
106 string const name = cmd_names[space];
108 if (useSetSpace && name == "SetStretch")
111 return useSetSpace ? name : support::ascii_lowercase(name);
116 string const Spacing::writeEnvirBegin(bool useSetSpace) const
118 string const name = envName(space, useSetSpace);
120 return "\\begin{" + name + "}{" + getValueAsString() + '}';
122 return name.empty() ? string() : "\\begin{" + name + '}';
126 string const Spacing::writeEnvirEnd(bool useSetSpace) const
128 string const name = envName(space, useSetSpace);
129 return name.empty() ? string() : "\\end{" + name + '}';
133 string const Spacing::writeCmd(bool useSetSpace) const
135 string const name = cmdName(space, useSetSpace);
137 return "\\" + name + "{" + getValueAsString() + '}';
139 return name.empty() ? string() : "\\" + name + "{}";
143 string const Spacing::writePreamble(bool useSetSpace) const
149 // we dont use setspace.sty so dont print anything
150 //return "\\singlespacing\n";
153 preamble = useSetSpace ? "\\OnehalfSpacing\n"
154 : "\\onehalfspacing\n";
157 preamble = useSetSpace ? "\\DoubleSpacing\n"
158 : "\\doublespacing\n";
161 preamble = (useSetSpace ? "\\setSpacing{" : "\\setstretch{")
162 + getValueAsString() + "}\n";