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