X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxgluelength.C;h=c38c814d22c5d957143f008b350ab33d62fe48aa;hb=33243f70037b067f90d1574b74b34f90a2ef2aa1;hp=1342bbf7dbf8acbaae124b3505c3de8e3805f3e3;hpb=33a28bdc9cdf978601d5d40b693f13924801ad9e;p=lyx.git diff --git a/src/lyxgluelength.C b/src/lyxgluelength.C index 1342bbf7db..c38c814d22 100644 --- a/src/lyxgluelength.C +++ b/src/lyxgluelength.C @@ -1,38 +1,25 @@ -/* This file is part of - * ====================================================== +/** + * \file lyxgluelength.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. + * \author Lars Gullik Bjønnes + * \author Matthias Ettrich + * \author John Levon * - * ====================================================== */ + * Full author contact details are available in file CREDITS. + */ #include -#ifdef __GNUG__ -#pragma implementation -#endif - #include "lyxgluelength.h" #include "lengthcommon.h" -#include "Lsstream.h" - -#if 0 -namespace { -// this is now here and in lyxlenght.h - -int const num_units = LyXLength::UNIT_NONE; +#include "support/std_sstream.h" -// I am not sure if "mu" should be possible to select (Lgb) -char const * unit_name[num_units] = { "sp", "pt", "bp", "dd", - "mm", "pc", "cc", "cm", - "in", "ex", "em", "mu", - "%", "c%", "p%", "l%" }; +using std::ostringstream; +using std::string; -} -#endif LyXGlueLength::LyXGlueLength(LyXLength const & len) : len_(len) @@ -55,53 +42,49 @@ string const LyXGlueLength::asString() const { 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 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 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 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 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 buffer.str(); } @@ -109,26 +92,13 @@ string const LyXGlueLength::asLatexString() const { 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 buffer.str(); } @@ -153,8 +123,8 @@ LyXLength const & LyXGlueLength::minus() const bool operator==(LyXGlueLength const & l1, LyXGlueLength const & l2) { return l1.len() == l2.len() - && l1.plus() == l2.plus() - && l1.minus() == l2.minus(); + && l1.plus() == l2.plus() + && l1.minus() == l2.minus(); }