]> git.lyx.org Git - lyx.git/blobdiff - src/lyxgluelength.C
clean code to export between different flavours, output different code for sgml to...
[lyx.git] / src / lyxgluelength.C
index 1342bbf7dbf8acbaae124b3505c3de8e3805f3e3..c38c814d22c5d957143f008b350ab33d62fe48aa 100644 (file)
@@ -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 <config.h>
 
-#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();
 }