]> git.lyx.org Git - lyx.git/blob - src/Spacing.C
bd0f8818a7309a10fd13f9c1b0feb551e776998f
[lyx.git] / src / Spacing.C
1 #include <config.h>
2
3
4 #ifdef HAVE_SSTREAM
5 #include <sstream>
6 using std::istringstream;
7 #else
8 #include <strstream>
9 #endif
10
11 #include "Spacing.h"
12
13 using std::ios;
14
15 /// how can I put this inside of Spacing (class)
16 static
17 char const * spacing_string[] = {"single", "onehalf", "double", "other"};
18
19
20 float Spacing::getValue() const 
21 {
22         switch(space) {
23         case Single: return 1.0;
24         case Onehalf: return 1.25;
25         case Double: return 1.667;
26         case Other: return value;
27         }
28         return 1.0;
29 }
30
31
32 void Spacing::set(Spacing::Space sp, float val)
33 {
34         space = sp;
35         if (sp == Other) {
36                 switch(int(val * 1000 + 0.5)) {
37                 case 1000: space = Single; break;
38                 case 1250: space = Onehalf; break;
39                 case 1667: space = Double; break;
40                 default: value = val; break;
41                 }
42         }
43 }
44
45
46 void Spacing::set(Spacing::Space sp, char const * val)
47 {
48         float fval;
49 #ifdef HAVE_SSTREAM
50         istringstream istr(val);
51 #else
52         istrstream istr(val);
53 #endif
54         istr >> fval;
55         set(sp, fval);
56 }
57
58
59 void Spacing::writeFile(ostream & os) const
60 {
61         if (getSpace() == Spacing::Other) {
62                 os.setf(ios::showpoint|ios::fixed);
63                 os.precision(2);
64                 os << "\\spacing " << spacing_string[getSpace()]
65                    << " " << getValue() << " \n";
66         } else {
67                 os << "\\spacing " << spacing_string[getSpace()] << " \n";
68         }       
69 }