From 25ff2f8e2bd4b8567d8a921e478204759e0e942c Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Mon, 15 Apr 2013 12:35:11 +0200 Subject: [PATCH] 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). --- src/Length.cpp | 13 +++++++++++-- src/lengthcommon.cpp | 10 ++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Length.cpp b/src/Length.cpp index f8eb920c0f..bb9ec6a3b9 100644 --- a/src/Length.cpp +++ b/src/Length.cpp @@ -19,6 +19,7 @@ #include "LyXRC.h" #include "support/docstream.h" +#include "support/lassert.h" #include #include @@ -67,7 +68,8 @@ void Length::swap(Length & rhs) 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 +77,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(); } @@ -102,6 +105,9 @@ string const Length::asLatexString() const case PPH: os << val_ / 100.0 << "\\paperheight"; break; + case UNIT_NONE: + // One should not try to ouput latex code for an empty length + LASSERT(false, break); default: os << val_ << unit_name[unit_]; break; @@ -363,6 +369,9 @@ GlueLength::GlueLength(string const & data) string const GlueLength::asString() const { + if (len_.empty()) + return string(); + ostringstream buffer; buffer << len_.value(); diff --git a/src/lengthcommon.cpp b/src/lengthcommon.cpp index 217c22b604..72f5bbf88f 100644 --- a/src/lengthcommon.cpp +++ b/src/lengthcommon.cpp @@ -236,8 +236,11 @@ bool isValidGlueLength(string const & data, GlueLength * result) // forward approach leads to very long, tedious code that would be // much harder to understand and maintain. (AS) - if (data.empty()) + if (data.empty()) { + if (result) + *result = GlueLength(); return true; + } string buffer = ltrim(data); // 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 // glue, but since we already have it, using it is // easier than writing something from scratch. - if (data.empty()) + if (data.empty()) { + if (result) + *result = Length(); return true; + } string buffer = data; int pattern_index = 0; -- 2.39.2