2 * \file lyxgluelength.C
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Lars Gullik Bjønnes
7 * \author Matthias Ettrich
10 * Full author contact details are available in file CREDITS.
15 #include "lyxgluelength.h"
16 #include "lengthcommon.h"
20 using std::ostringstream;
24 LyXGlueLength::LyXGlueLength(LyXLength const & len)
29 LyXGlueLength::LyXGlueLength(LyXLength const & len, LyXLength const & plus,
30 LyXLength const & minus)
31 : len_(len), plus_(plus), minus_(minus)
35 LyXGlueLength::LyXGlueLength(string const & data)
37 isValidGlueLength(data, this);
41 string const LyXGlueLength::asString() const
45 buffer << len_.value();
47 if (plus_.zero() && minus_.zero()) {
48 buffer << unit_name[len_.unit()];
54 if (len_.unit() != plus_.unit())
55 buffer << unit_name[len_.unit()];
56 buffer << '+' << plus_.value();
57 buffer << unit_name[plus_.unit()];
63 if (len_.unit() != minus_.unit())
64 buffer << unit_name[len_.unit()];
65 buffer << '-' << minus_.value();
66 buffer << unit_name[minus_.unit()];
70 // ok, len, plus AND minus
73 if (minus_ == plus_) {
74 if (len_.unit() != minus_.unit())
75 buffer << unit_name[len_.unit()];
76 buffer << "+-" << minus_.value();
77 buffer << unit_name[minus_.unit()];
81 // this is so rare a case, why bother minimising units ?
83 buffer << unit_name[len_.unit()];
84 buffer << '+' << plus_.value() << unit_name[plus_.unit()];
85 buffer << '-' << minus_.value() << unit_name[minus_.unit()];
91 string const LyXGlueLength::asLatexString() const
95 buffer << len_.value() << unit_name[len_.unit()];
98 buffer << " plus " << plus_.value() << unit_name[plus_.unit()];
100 buffer << " minus " << minus_.value() << unit_name[minus_.unit()];
105 LyXLength const & LyXGlueLength::len() const
111 LyXLength const & LyXGlueLength::plus() const
117 LyXLength const & LyXGlueLength::minus() const
123 bool operator==(LyXGlueLength const & l1, LyXGlueLength const & l2)
125 return l1.len() == l2.len()
126 && l1.plus() == l2.plus()
127 && l1.minus() == l2.minus();
131 bool operator!=(LyXGlueLength const & l1, LyXGlueLength const & l2)