]> git.lyx.org Git - lyx.git/blob - src/Spacing.C
the convert patch
[lyx.git] / src / Spacing.C
1 /**
2  * \file Spacing.C
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
22 using std::ostream;
23 using std::ostringstream;
24 using std::string;
25
26
27 string const Spacing::spacing_string[]
28         = {"single", "onehalf", "double", "other"};
29
30
31 string const Spacing::getValueAsString() const
32 {
33         switch (space) {
34         case Default: // nothing special should happen with this...
35         case Single: return "1.0";
36         case Onehalf: return "1.25";
37         case Double: return "1.667";
38         case Other: return value;
39         }
40         return "1.0";
41 }
42
43
44 double Spacing::getValue() const
45 {
46         return convert<double>(getValueAsString());
47 }
48
49
50 void Spacing::set(Spacing::Space sp, double val)
51 {
52         set(sp, convert<string>(val));
53 }
54
55
56 void Spacing::set(Spacing::Space sp, string const & val)
57 {
58         space = sp;
59         if (sp == Other) {
60                 switch (int(convert<double>(val) * 1000 + 0.5)) {
61                 case 1000:
62                         space = Single;
63                         break;
64                 case 1250:
65                         space = Onehalf;
66                         break;
67                 case 1667:
68                         space = Double;
69                         break;
70                 default:
71                         value = val;
72                         break;
73                 }
74         }
75 }
76
77
78 void Spacing::writeFile(ostream & os, bool para) const
79 {
80         if (space == Default) return;
81
82         string cmd = para ? "\\paragraph_spacing " : "\\spacing ";
83
84         if (getSpace() == Spacing::Other) {
85                 os << cmd << spacing_string[getSpace()]
86                    << ' ' << getValueAsString() << "\n";
87         } else {
88                 os << cmd << spacing_string[getSpace()] << "\n";
89         }
90 }
91
92
93 string const Spacing::writeEnvirBegin() const
94 {
95         switch (space) {
96         case Default: break; // do nothing
97         case Single:
98                 return "\\begin{singlespace}";
99         case Onehalf:
100                 return "\\begin{onehalfspace}";
101         case Double:
102                 return "\\begin{doublespace}";
103         case Other:
104         {
105                 ostringstream ost;
106                 ost << "\\begin{spacing}{"
107                     << getValueAsString() << '}';
108                 return ost.str();
109         }
110         }
111         return string();
112 }
113
114
115 string const Spacing::writeEnvirEnd() const
116 {
117         switch (space) {
118         case Default: break; // do nothing
119         case Single:
120                 return "\\end{singlespace}";
121         case Onehalf:
122                 return "\\end{onehalfspace}";
123         case Double:
124                 return "\\end{doublespace}";
125         case Other:
126                 return "\\end{spacing}";
127         }
128         return string();
129 }