#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
#include "lyxgluelength.h"
#include "lengthcommon.h"
{
ostringstream buffer;
- if (!plus_.zero())
- if (!minus_.zero())
- if (len_.unit() == plus_.unit() && len_.unit() == minus_.unit())
- if (plus_.value() == minus_.value())
- buffer << len_.value() << "+-"
- << plus_.value() << unit_name[len_.unit()];
- else
- buffer << len_.value()
- << '+' << plus_.value()
- << '-' << minus_.value()
- << unit_name[len_.unit()];
- else
- if (plus_.unit() == minus_.unit()
- && plus_.value() == minus_.value())
- buffer << len_.value() << unit_name[len_.unit()]
- << "+-" << plus_.value()
- << unit_name[plus_.unit()];
-
- else
- buffer << len_.value() << unit_name[len_.unit()]
- << '+' << plus_.value()
- << unit_name[plus_.unit()]
- << '-' << minus_.value()
- << unit_name[minus_.unit()];
- else
- if (len_.unit() == plus_.unit())
- buffer << len_.value() << '+' << plus_.value()
- << unit_name[len_.unit()];
- else
- buffer << len_.value() << unit_name[len_.unit()]
- << '+' << plus_.value()
- << unit_name[plus_.unit()];
-
- else
- if (!minus_.zero())
- if (len_.unit() == minus_.unit())
- buffer << len_.value() << '-' << minus_.value()
- << unit_name[len_.unit()];
-
- else
- buffer << len_.value() << unit_name[len_.unit()]
- << '-' << minus_.value()
- << unit_name[minus_.unit()];
- else
- buffer << len_.value() << unit_name[len_.unit()];
-
- return buffer.str().c_str();
+ buffer << len_.value();
+
+ if (plus_.zero() && minus_.zero()) {
+ buffer << unit_name[len_.unit()];
+ return STRCONV(buffer.str());
+ }
+
+ // just len and plus
+ if (minus_.zero()) {
+ if (len_.unit() != plus_.unit())
+ buffer << unit_name[len_.unit()];
+ buffer << '+' << plus_.value();
+ buffer << unit_name[plus_.unit()];
+ return STRCONV(buffer.str());
+ }
+
+ // just len and minus
+ if (plus_.zero()) {
+ if (len_.unit() != minus_.unit())
+ buffer << unit_name[len_.unit()];
+ buffer << '-' << minus_.value();
+ buffer << unit_name[minus_.unit()];
+ return STRCONV(buffer.str());
+ }
+
+ // ok, len, plus AND minus
+
+ // len+-
+ if (minus_ == plus_) {
+ if (len_.unit() != minus_.unit())
+ buffer << unit_name[len_.unit()];
+ buffer << "+-" << minus_.value();
+ buffer << unit_name[minus_.unit()];
+ return STRCONV(buffer.str());
+ }
+
+ // this is so rare a case, why bother minimising units ?
+
+ buffer << unit_name[len_.unit()];
+ buffer << '+' << plus_.value() << unit_name[plus_.unit()];
+ buffer << '-' << minus_.value() << unit_name[minus_.unit()];
+
+ return STRCONV(buffer.str());
}
{
ostringstream buffer;
+ buffer << len_.value() << unit_name[len_.unit()];
+
if (!plus_.zero())
- if (!minus_.zero())
- buffer << len_.value() << unit_name[len_.unit()]
- << " plus "
- << plus_.value() << unit_name[plus_.unit()]
- << " minus "
- << minus_.value() << unit_name[minus_.unit()];
- else
- buffer << len_.value() << unit_name[len_.unit()]
- << " plus "
- << plus_.value() << unit_name[plus_.unit()];
- else
- if (!minus_.zero())
- buffer << len_.value() << unit_name[len_.unit()]
- << " minus "
- << minus_.value() << unit_name[minus_.unit()];
- else
- buffer << len_.value() << unit_name[len_.unit()];
-
- return buffer.str().c_str();
+ buffer << " plus " << plus_.value() << unit_name[plus_.unit()];
+ if (!minus_.zero())
+ buffer << " minus " << minus_.value() << unit_name[minus_.unit()];
+ return STRCONV(buffer.str());
}