]> git.lyx.org Git - lyx.git/blob - src/Spacing.cpp
Embedding: saving inzip name to .lyx file so that embedded files can always be found...
[lyx.git] / src / Spacing.cpp
1 /**
2  * \file Spacing.cpp
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Lars Gullik Bjønnes
7  * \author Jean-Marc Lasgouttes
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #include <config.h>
13
14 #include "Spacing.h"
15 #include "support/lstrings.h"
16 #include "support/convert.h"
17
18 #include <sstream>
19 #include <string>
20
21 using namespace std;
22
23 namespace lyx {
24
25
26 string const Spacing::spacing_string[]
27         = {"single", "onehalf", "double", "other"};
28
29
30 string const Spacing::getValueAsString() const
31 {
32         switch (space) {
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;
38         }
39         return "1.0";
40 }
41
42
43 double Spacing::getValue() const
44 {
45         return convert<double>(getValueAsString());
46 }
47
48
49 void Spacing::set(Spacing::Space sp, double val)
50 {
51         set(sp, convert<string>(val));
52 }
53
54
55 void Spacing::set(Spacing::Space sp, string const & val)
56 {
57         space = sp;
58         if (sp == Other) {
59                 switch (int(convert<double>(val) * 1000 + 0.5)) {
60                 case 1000:
61                         space = Single;
62                         break;
63                 case 1250:
64                         space = Onehalf;
65                         break;
66                 case 1667:
67                         space = Double;
68                         break;
69                 default:
70                         value = val;
71                         break;
72                 }
73         }
74 }
75
76
77 void Spacing::writeFile(ostream & os, bool para) const
78 {
79         if (space == Default) return;
80
81         string cmd = para ? "\\paragraph_spacing " : "\\spacing ";
82
83         if (getSpace() == Spacing::Other) {
84                 os << cmd << spacing_string[getSpace()]
85                    << ' ' << getValueAsString() << "\n";
86         } else {
87                 os << cmd << spacing_string[getSpace()] << "\n";
88         }
89 }
90
91
92 string const Spacing::writeEnvirBegin() const
93 {
94         switch (space) {
95         case Default: break; // do nothing
96         case Single:
97                 return "\\begin{singlespace}";
98         case Onehalf:
99                 return "\\begin{onehalfspace}";
100         case Double:
101                 return "\\begin{doublespace}";
102         case Other:
103         {
104                 ostringstream ost;
105                 ost << "\\begin{spacing}{"
106                     << getValueAsString() << '}';
107                 return ost.str();
108         }
109         }
110         return string();
111 }
112
113
114 string const Spacing::writeEnvirEnd() const
115 {
116         switch (space) {
117         case Default: break; // do nothing
118         case Single:
119                 return "\\end{singlespace}";
120         case Onehalf:
121                 return "\\end{onehalfspace}";
122         case Double:
123                 return "\\end{doublespace}";
124         case Other:
125                 return "\\end{spacing}";
126         }
127         return string();
128 }
129
130
131 } // namespace lyx