* Licence details can be found in the file COPYING.
*
* \author Matthias Ettrich
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
* \author Jean-Marc Lasgouttes
* \author Angus Leeming
* \author John Levon
#include <config.h>
#include "Length.h"
-
-#include "gettext.h"
#include "LyXRC.h"
#include "support/docstream.h"
#include <sstream>
#include <iomanip>
+using namespace std;
namespace lyx {
-using std::ostringstream;
-using std::string;
-
-// FIXME: I am not sure if "mu" should be possible to select (Lgb)
-char const * const unit_name[] = {
- "sp", "pt", "bp", "dd", "mm", "pc",
- "cc", "cm", "in", "ex", "em", "mu",
- "text%", "col%", "page%", "line%",
- "theight%", "pheight%", "" };
-
-
-int const num_units = int(sizeof(unit_name) / sizeof(unit_name[0]) - 1);
-
-
-char const * const unit_name_gui[] = {
- N_("sp"), N_("pt"), N_("bp"), N_("dd"), N_("mm"), N_("pc"),
- N_("cc[[unit of measure]]"), N_("cm"), N_("in"), N_("ex"), N_("em"), N_("mu"),
- N_("Text Width %"), N_("Column Width %"), N_("Page Width %"), N_("Line Width %"),
- N_("Text Height %"), N_("Page Height %"), "" };
-
-
-Length::UNIT unitFromString(string const & data)
-{
- int i = 0;
- while (i < num_units && data != unit_name[i])
- ++i;
- return static_cast<Length::UNIT>(i);
-}
-
/////////////////////////////////////////////////////////////////////
//
}
+string const Length::asHTMLString() const
+{
+ ostringstream os;
+ switch (unit_) {
+ case PT:
+ case BP:
+ case DD:
+ // close enough
+ os << val_ << "pt";
+ break;
+ case MM:
+ case CM:
+ case PC:
+ case IN:
+ case EX:
+ case EM:
+ os << val_ << unit_name[unit_];
+ break;
+ case CC:
+ os << val_/12.0 << "pt";
+ break;
+ case MU:
+ os << val_/18.0 << "em";
+ break;
+ case PTW:
+ case PPW:
+ case PLW:
+ case PCW:
+ case PTH:
+ case PPH:
+ // what it's a percentage of probably won't make sense for HTML,
+ // so we'll assume people have chosen these appropriately
+ os << val_ << '%';
+ break;
+ case SP:
+ case UNIT_NONE:
+ break;
+ }
+ return os.str();
+}
+
+
double Length::value() const
{
return val_;
}
+Length::UNIT Length::defaultUnit()
+{
+ // FIXME user a proper pref, since we should get rid of
+ // default_papersize in lyxrc.
+ UNIT u = Length::CM;
+ switch (lyxrc.default_papersize) {
+ case PAPER_USLETTER:
+ case PAPER_USLEGAL:
+ case PAPER_USEXECUTIVE:
+ u = Length::IN;
+ break;
+ default:
+ break;
+ }
+
+ return u;
+}
+
+
+
bool operator==(Length const & l1, Length const & l2)
{
return l1.value() == l2.value() && l1.unit() == l2.unit();
string const GlueLength::asLatexString() const
{
ostringstream buffer;
-
- buffer << len_.value() << unit_name[len_.unit()];
-
+ // use Length::asLatexString() to handle also the percent lengths
+ buffer << len_.Length::asLatexString();
if (!plus_.zero())
- buffer << " plus " << plus_.value() << unit_name[plus_.unit()];
+ buffer << " plus " << plus_.Length::asLatexString();
if (!minus_.zero())
- buffer << " minus " << minus_.value() << unit_name[minus_.unit()];
+ buffer << " minus " << minus_.Length::asLatexString();
return buffer.str();
}