The last one. Please have a look at the changes in Spacing.C, especially at the #if 0 clause.
This patch also fixes an undetected bug (custom document spacing was broken). There are still some float values in lyxlayout.C (parsep, labelbottomsep, bottomsep, topsep, itemsep and parskip). I didn't change them because they are not used by the frontends. OK? Regards, Jürgen
Index: ParagraphParameters.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ParagraphParameters.C,v retrieving revision 1.44 diff -u -r1.44 ParagraphParameters.C --- ParagraphParameters.C 5 Oct 2004 12:56:20 -0000 1.44 +++ ParagraphParameters.C 5 Jan 2005 21:17:03 -0000 @@ -223,7 +223,7 @@ } else if (tmp == "other") { lex.next(); spacing(Spacing(Spacing::Other, - lex.getFloat())); + lex.getString())); } else { lex.printError("Unknown spacing token: '$$Token'"); } Index: Spacing.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/Spacing.C,v retrieving revision 1.37 diff -u -r1.37 Spacing.C --- Spacing.C 16 Sep 2004 20:37:33 -0000 1.37 +++ Spacing.C 5 Jan 2005 21:17:03 -0000 @@ -12,12 +12,15 @@ #include <config.h> #include "Spacing.h" +#include "support/lstrings.h" +#include "support/tostr.h" #include <sstream> #include <string> +using lyx::support::strToDbl; + using std::ios; -using std::istringstream; using std::ostream; using std::ostringstream; using std::string; @@ -26,24 +29,37 @@ string const Spacing::spacing_string[] = {"single", "onehalf", "double", "other"}; -float Spacing::getValue() const + +string const Spacing::getValueAsString() const { switch (space) { case Default: // nothing special should happen with this... - case Single: return 1.0; - case Onehalf: return 1.25; - case Double: return 1.667; + case Single: return "1.0"; + case Onehalf: return "1.25"; + case Double: return "1.667"; case Other: return value; } - return 1.0; + return "1.0"; +} + + +double Spacing::getValue() const +{ + return strToDbl(getValueAsString()); } void Spacing::set(Spacing::Space sp, float val) { + set(sp, tostr(val)); +} + + +void Spacing::set(Spacing::Space sp, string const & val) +{ space = sp; if (sp == Other) { - switch (int(val * 1000 + 0.5)) { + switch (int(strToDbl(val) * 1000 + 0.5)) { case 1000: space = Single; break; case 1250: space = Onehalf; break; case 1667: space = Double; break; @@ -53,15 +69,6 @@ } -void Spacing::set(Spacing::Space sp, string const & val) -{ - float fval = 0.0; - istringstream istr(val); - istr >> fval; - set(sp, fval); -} - - void Spacing::writeFile(ostream & os, bool para) const { if (space == Default) return; @@ -69,10 +76,16 @@ string cmd = para ? "\\paragraph_spacing " : "\\spacing "; if (getSpace() == Spacing::Other) { + #if 0 os.setf(ios::showpoint|ios::fixed); os.precision(2); os << cmd << spacing_string[getSpace()] << ' ' << getValue() << "\n"; + #else + // should be sufficient, no? + os << cmd << spacing_string[getSpace()] + << ' ' << getValueAsString() << "\n"; + #endif } else { os << cmd << spacing_string[getSpace()] << "\n"; } @@ -93,7 +106,7 @@ { ostringstream ost; ost << "\\begin{spacing}{" - << getValue() << '}'; + << getValueAsString() << '}'; return ost.str(); } } Index: Spacing.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/Spacing.h,v retrieving revision 1.27 diff -u -r1.27 Spacing.h --- Spacing.h 25 Jul 2004 12:59:12 -0000 1.27 +++ Spacing.h 5 Jan 2005 21:17:03 -0000 @@ -33,7 +33,7 @@ Default }; /// - Spacing() : space(Default), value(1.0) {} + Spacing() : space(Default), value("1.0") {} /// Spacing(Spacing::Space sp, float val = 1.0) { set(sp, val); @@ -46,13 +46,15 @@ return space == Default; } /// - float getValue() const; + std::string const getValueAsString() const; + /// + double getValue() const; /// Spacing::Space getSpace() const { return space; } /// void set(Spacing::Space sp, float val = 1.0); /// - void set(Spacing::Space sp, std::string const & val) ; + void set(Spacing::Space sp, std::string const & val); /// void writeFile(std::ostream &, bool para = false) const; /// @@ -64,7 +66,7 @@ /// Space space; /// - float value; + std::string value; /// names of line spacing static std::string const spacing_string[]; }; @@ -75,7 +77,7 @@ bool operator==(Spacing const & a, Spacing const & b) { return a.getSpace() == b.getSpace() - && a.getValue() == b.getValue(); + && a.getValueAsString() == b.getValueAsString(); } /// Index: bufferparams.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/bufferparams.C,v retrieving revision 1.92 diff -u -r1.92 bufferparams.C --- bufferparams.C 5 Jan 2005 20:21:24 -0000 1.92 +++ bufferparams.C 5 Jan 2005 21:17:06 -0000 @@ -263,6 +263,7 @@ translator.addPair("single", Spacing::Single); translator.addPair("onehalf", Spacing::Onehalf); translator.addPair("double", Spacing::Double); + translator.addPair("other", Spacing::Other); return translator; } @@ -583,7 +584,7 @@ } else if (token == "\\spacing") { string nspacing; lex >> nspacing; - float tmp_val = 0.0; + string tmp_val; if (nspacing == "other") { lex >> tmp_val; } Index: lyxlayout.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxlayout.C,v retrieving revision 1.24 diff -u -r1.24 lyxlayout.C --- lyxlayout.C 25 Nov 2003 17:23:33 -0000 1.24 +++ lyxlayout.C 5 Jan 2005 21:17:07 -0000 @@ -785,7 +785,7 @@ break; case ST_OTHER: lexrc.next(); - spacing.set(Spacing::Other, lexrc.getFloat()); + spacing.set(Spacing::Other, lexrc.getString()); break; } } Index: rowpainter.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/rowpainter.C,v retrieving revision 1.137 diff -u -r1.137 rowpainter.C --- rowpainter.C 30 Nov 2004 01:59:36 -0000 1.137 +++ rowpainter.C 5 Jan 2005 21:17:09 -0000 @@ -509,7 +509,7 @@ // the top. if (layout->counter == "chapter") { if (buffer.params().secnumdepth >= 0) { - float spacing_val = 1.0; + double spacing_val = 1.0; if (!parparams.spacing().isDefault()) { spacing_val = parparams.spacing().getValue(); } else { @@ -550,7 +550,7 @@ LyXFont font = getLabelFont(); if (!par_.getLabelstring().empty()) { string const str = par_.getLabelstring(); - float spacing_val = 1.0; + double spacing_val = 1.0; if (!parparams.spacing().isDefault()) { spacing_val = parparams.spacing().getValue(); } else { Index: text.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v retrieving revision 1.588 diff -u -r1.588 text.C --- text.C 30 Nov 2004 01:59:37 -0000 1.588 +++ text.C 5 Jan 2005 21:17:13 -0000 @@ -2134,7 +2134,7 @@ os << _("Double"); break; case Spacing::Other: - os << _("Other (") << spacing.getValue() << ')'; + os << _("Other (") << spacing.getValueAsString() << ')'; break; case Spacing::Default: // should never happen, do nothing Index: text3.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text3.C,v retrieving revision 1.276 diff -u -r1.276 text3.C --- text3.C 4 Jan 2005 09:18:48 -0000 1.276 +++ text3.C 5 Jan 2005 21:17:16 -0000 @@ -753,15 +753,15 @@ case LFUN_PARAGRAPH_SPACING: { Paragraph & par = cur.paragraph(); Spacing::Space cur_spacing = par.params().spacing().getSpace(); - float cur_value = 1.0; + string cur_value = "1.0"; if (cur_spacing == Spacing::Other) - cur_value = par.params().spacing().getValue(); + cur_value = par.params().spacing().getValueAsString(); istringstream is(cmd.argument); string tmp; is >> tmp; Spacing::Space new_spacing = cur_spacing; - float new_value = cur_value; + string new_value = cur_value; if (tmp.empty()) { lyxerr << "Missing argument to `paragraph-spacing'" << endl; @@ -773,10 +773,10 @@ new_spacing = Spacing::Double; } else if (tmp == "other") { new_spacing = Spacing::Other; - float tmpval = 0.0; + string tmpval = "0.0"; is >> tmpval; lyxerr << "new_value = " << tmpval << endl; - if (tmpval != 0.0) + if (tmpval != "0.0") new_value = tmpval; } else if (tmp == "default") { new_spacing = Spacing::Default; Index: frontends/qt2/QDocument.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QDocument.C,v retrieving revision 1.76 diff -u -r1.76 QDocument.C --- frontends/qt2/QDocument.C 3 Dec 2004 11:02:06 -0000 1.76 +++ frontends/qt2/QDocument.C 5 Jan 2005 21:17:19 -0000 @@ -316,9 +316,7 @@ break; case 3: params.spacing().set(Spacing::Other, - dialog_->textLayoutModule-> - lspacingLE->text().toFloat() - ); + fromqstr(dialog_->textLayoutModule->lspacingLE->text())); break; } @@ -567,9 +565,9 @@ dialog_->textLayoutModule->lspacingCO->setCurrentItem(nitem); if (params.spacing().getSpace() == Spacing::Other) { dialog_->textLayoutModule->lspacingLE->setText( - toqstr(tostr(params.spacing().getValue()))); - dialog_->setLSpacing(3); + toqstr(params.spacing().getValueAsString())); } + dialog_->setLSpacing(nitem); if (params.paragraph_separation == BufferParams::PARSEP_INDENT) { Index: frontends/qt2/QParagraph.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QParagraph.C,v retrieving revision 1.35 diff -u -r1.35 QParagraph.C --- frontends/qt2/QParagraph.C 20 May 2004 09:36:27 -0000 1.35 +++ frontends/qt2/QParagraph.C 5 Jan 2005 21:17:19 -0000 @@ -172,8 +172,7 @@ } dialog_->linespacing->setCurrentItem(linespacing); if (space.getSpace() == Spacing::Other) { - string const sp = tostr(space.getValue()); - dialog_->linespacingValue->setText(toqstr(sp)); + dialog_->linespacingValue->setText(toqstr(space.getValueAsString())); dialog_->linespacingValue->setEnabled(true); } else { dialog_->linespacingValue->setText(""); Index: frontends/xforms/FormDocument.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormDocument.C,v retrieving revision 1.174 diff -u -r1.174 FormDocument.C --- frontends/xforms/FormDocument.C 5 Oct 2004 10:11:40 -0000 1.174 +++ frontends/xforms/FormDocument.C 5 Jan 2005 21:17:23 -0000 @@ -1173,7 +1173,7 @@ bool const spacing_input = pos == 4; setEnabled(class_->input_spacing, spacing_input); - string const input = spacing_input ? tostr(params.spacing().getValue()) : string(); + string const input = spacing_input ? params.spacing().getValueAsString() : string(); fl_set_input(class_->input_spacing, input.c_str()); } Index: frontends/xforms/FormParagraph.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormParagraph.C,v retrieving revision 1.102 diff -u -r1.102 FormParagraph.C --- frontends/xforms/FormParagraph.C 19 May 2004 15:11:35 -0000 1.102 +++ frontends/xforms/FormParagraph.C 5 Jan 2005 21:17:24 -0000 @@ -266,8 +266,8 @@ bool const spacing_other = space.getSpace() == Spacing::Other; setEnabled(dialog_->input_linespacing, spacing_other); if (spacing_other) { - string const sp = tostr(space.getValue()); - fl_set_input(dialog_->input_linespacing, sp.c_str()); + fl_set_input(dialog_->input_linespacing, + space.getValueAsString().c_str()); } else { fl_set_input(dialog_->input_linespacing, ""); } Index: tex2lyx/Spacing.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/tex2lyx/Spacing.h,v retrieving revision 1.4 diff -u -r1.4 Spacing.h --- tex2lyx/Spacing.h 8 Oct 2003 11:31:51 -0000 1.4 +++ tex2lyx/Spacing.h 5 Jan 2005 21:17:25 -0000 @@ -16,6 +16,8 @@ #ifndef SPACING_H #define SPACING_H +#include <string> + class Spacing { public: /// @@ -26,8 +28,10 @@ Other, Default }; - + /// void set(Spacing::Space, float = 1.0) {} + /// + void set(Spacing::Space sp, std::string const & val) {} }; #endif // NOT SPACING_H