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