X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLength.cpp;h=0deed7481c915f3e2e70b6f2f100c80d7d993d64;hb=1427b6fe316e257ce40512872c44cd438a51c498;hp=e248d7c4f4e2e918065e4f8801ebae1b6cbd0361;hpb=26751d83eee71188fd5501c557e47d504e79aae8;p=lyx.git diff --git a/src/Length.cpp b/src/Length.cpp index e248d7c4f4..0deed7481c 100644 --- a/src/Length.cpp +++ b/src/Length.cpp @@ -57,17 +57,11 @@ Length::Length(string const & data) } -void Length::swap(Length & rhs) -{ - std::swap(val_, rhs.val_); - std::swap(unit_, rhs.unit_); -} - - string const Length::asString() const { ostringstream os; - os << val_ << unit_name[unit_]; // setw? + if (unit_ != UNIT_NONE) + os << val_ << unit_name[unit_]; // setw? return os.str(); } @@ -75,7 +69,8 @@ string const Length::asString() const docstring const Length::asDocstring() const { odocstringstream os; - os << val_ << unit_name[unit_]; // setw? + if (unit_ != UNIT_NONE) + os << val_ << unit_name[unit_]; // setw? return os.str(); } @@ -96,11 +91,13 @@ string const Length::asLatexString() const case PLW: os << val_ / 100.0 << "\\linewidth"; break; + case PTH: + os << val_ / 100.0 << "\\textheight"; + break; case PPH: os << val_ / 100.0 << "\\paperheight"; break; - case PTH: - os << val_ / 100.0 << "\\textheight"; + case UNIT_NONE: break; default: os << val_ << unit_name[unit_]; @@ -110,6 +107,48 @@ string const Length::asLatexString() const } +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_; @@ -278,20 +317,7 @@ int Length::inBP() const 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; + return lyxrc.default_length_unit; } @@ -334,6 +360,9 @@ GlueLength::GlueLength(string const & data) string const GlueLength::asString() const { + if (len_.empty()) + return string(); + ostringstream buffer; buffer << len_.value(); @@ -385,13 +414,12 @@ string const GlueLength::asString() const 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(); }