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