Improve support for empty lengths

Parse empty string as empty length
Output empty length as empty string when it makes sense (not for LaTeX strings, for example).
This commit is contained in:
Jean-Marc Lasgouttes 2013-04-15 12:35:11 +02:00
parent 13b34ae4d8
commit 25ff2f8e2b
2 changed files with 19 additions and 4 deletions

View File

@ -19,6 +19,7 @@
#include "LyXRC.h" #include "LyXRC.h"
#include "support/docstream.h" #include "support/docstream.h"
#include "support/lassert.h"
#include <sstream> #include <sstream>
#include <iomanip> #include <iomanip>
@ -67,7 +68,8 @@ void Length::swap(Length & rhs)
string const Length::asString() const string const Length::asString() const
{ {
ostringstream os; ostringstream os;
os << val_ << unit_name[unit_]; // setw? if (unit_ != UNIT_NONE)
os << val_ << unit_name[unit_]; // setw?
return os.str(); return os.str();
} }
@ -75,7 +77,8 @@ string const Length::asString() const
docstring const Length::asDocstring() const docstring const Length::asDocstring() const
{ {
odocstringstream os; odocstringstream os;
os << val_ << unit_name[unit_]; // setw? if (unit_ != UNIT_NONE)
os << val_ << unit_name[unit_]; // setw?
return os.str(); return os.str();
} }
@ -102,6 +105,9 @@ string const Length::asLatexString() const
case PPH: case PPH:
os << val_ / 100.0 << "\\paperheight"; os << val_ / 100.0 << "\\paperheight";
break; break;
case UNIT_NONE:
// One should not try to ouput latex code for an empty length
LASSERT(false, break);
default: default:
os << val_ << unit_name[unit_]; os << val_ << unit_name[unit_];
break; break;
@ -363,6 +369,9 @@ GlueLength::GlueLength(string const & data)
string const GlueLength::asString() const string const GlueLength::asString() const
{ {
if (len_.empty())
return string();
ostringstream buffer; ostringstream buffer;
buffer << len_.value(); buffer << len_.value();

View File

@ -236,8 +236,11 @@ bool isValidGlueLength(string const & data, GlueLength * result)
// forward approach leads to very long, tedious code that would be // forward approach leads to very long, tedious code that would be
// much harder to understand and maintain. (AS) // much harder to understand and maintain. (AS)
if (data.empty()) if (data.empty()) {
if (result)
*result = GlueLength();
return true; return true;
}
string buffer = ltrim(data); string buffer = ltrim(data);
// To make isValidGlueLength recognize negative values as // To make isValidGlueLength recognize negative values as
@ -306,8 +309,11 @@ bool isValidLength(string const & data, Length * result)
// The parser may seem overkill for lengths without // The parser may seem overkill for lengths without
// glue, but since we already have it, using it is // glue, but since we already have it, using it is
// easier than writing something from scratch. // easier than writing something from scratch.
if (data.empty()) if (data.empty()) {
if (result)
*result = Length();
return true; return true;
}
string buffer = data; string buffer = data;
int pattern_index = 0; int pattern_index = 0;