X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fvspace.C;h=d12ecb820a497080a57fba93f34d1ffd60d2b6c5;hb=f448e22d483e1370bcbfbb7be8cb47ad7251ed77;hp=5b4e41e625c2369758b49f561e399a017d0a9b02;hpb=7390104c74c57b5b464939a73da9e4f36f7ab441;p=lyx.git diff --git a/src/vspace.C b/src/vspace.C index 5b4e41e625..d12ecb820a 100644 --- a/src/vspace.C +++ b/src/vspace.C @@ -55,69 +55,89 @@ int number_index, unit_index; static inline -void lyx_advance (string & data, unsigned int n) +void lyx_advance(string & data, unsigned int n) { data.erase(0, n); } static inline -bool isEndOfData (string const & data) +bool isEndOfData(string const & data) { - return frontStrip (data).empty(); + return frontStrip(data).empty(); } static -char nextToken (string & data) +char nextToken(string & data) { data = frontStrip(data); if (data.empty()) return '\0'; else if (data[0] == '+') { - lyx_advance (data, 1); + lyx_advance(data, 1); return '+'; - } - else if (prefixIs(data, "plus")) { - lyx_advance (data, 4); + } else if (prefixIs(data, "plus")) { + lyx_advance(data, 4); return '+'; - } - else if (data[0] == '-') { - lyx_advance (data, 1); + } else if (data[0] == '-') { + lyx_advance(data, 1); return '-'; - } - else if (prefixIs(data, "minus")) { - lyx_advance (data, 5); + } else if (prefixIs(data, "minus")) { + lyx_advance(data, 5); return '-'; - } - else { - string::size_type i; - - // I really mean assignment ("=") below, not equality! - if ((i = data.find_last_of("0123456789.")) != string::npos) { - if (number_index > 3) return 'E'; // Error - string buffer = data.substr(0, i + 1).c_str(); - double x = strToDbl(buffer); - if (x) { - number[number_index] = x; - lyx_advance (data, i + 1); + } else { + string::size_type i = data.find_first_not_of("0123456789."); + + if (i != 0) { + if (number_index > 3) return 'E'; + + string buffer; + + // we have found some number + if (i == string::npos) { + buffer = data; + i = data.size() + 1; + } else + buffer = data.substr(0, i); + + lyx_advance(data, i); + + if (isStrDbl(buffer)) { + number[number_index] = strToDbl(buffer); ++number_index; return 'n'; - } else - return 'E'; // Error - } else if ((i = data.find_last_of("abcdefghijklmnopqrstuvwxyz")) - != string::npos) { - if (unit_index > 3) return 'E'; // Error - string buffer = data.substr(0, i + 1); - unit[unit_index] = unitFromString (buffer); + } else return 'E'; + } + + i = data.find_first_not_of("abcdefghijklmnopqrstuvwxyz"); + if (i != 0) { + if (unit_index > 3) return 'E'; + + string buffer; + + // we have found some alphabetical string + if (i == string::npos) { + buffer = data; + i = data.size() + 1; + } else + buffer = data.substr(0, i); + + // possibly we have "mmplus" string or similar + if (buffer.size() > 5 && (buffer.substr(2,4) == string("plus") || buffer.substr(2,5) == string("minus"))) { + lyx_advance(data, 2); + unit[unit_index] = unitFromString(buffer.substr(0, 2)); + } else { + lyx_advance(data, i); + unit[unit_index] = unitFromString(buffer); + } + if (unit[unit_index] != LyXLength::UNIT_NONE) { - lyx_advance (data, i + 1); ++unit_index; return 'u'; - } else - return 'E'; // Error - } else - return 'E'; // Error + } else return 'E'; // Error + } + return 'E'; // Error } } @@ -173,7 +193,7 @@ bool isValidGlueLength (string const & data, LyXGlueLength * result) // To make isValidGlueLength recognize negative values as // the first number this little hack is needed: short val_sign = 1; // positive as default - switch(buffer[0]) { + switch (buffer[0]) { case '-': lyx_advance(buffer, 1); val_sign = -1; @@ -230,14 +250,14 @@ bool isValidLength(string const & data, LyXLength * result) /// glue, but since we already have it, using it is /// easier than writing something from scratch. - string buffer = data; + string buffer(data); int pattern_index = 0; char pattern[3]; // To make isValidLength recognize negative values // this little hack is needed: short val_sign = 1; // positive as default - switch(buffer[0]) { + switch (buffer[0]) { case '-': lyx_advance(buffer, 1); val_sign = -1; @@ -290,18 +310,11 @@ LyXLength::LyXLength(string const & data) } -string LyXLength::asString() const +string const LyXLength::asString() const { -#ifdef HAVE_SSTREAM std::ostringstream buffer; buffer << val << unit_name[uni]; // setw? return buffer.str().c_str(); -#else - char tbuf[20]; - ostrstream buffer(tbuf, 20); - buffer << val << unit_name[uni] << '\0'; // setw? - return buffer.str(); -#endif } @@ -325,14 +338,10 @@ LyXGlueLength::LyXGlueLength (string const & data) } -string LyXGlueLength::asString() const +string const LyXGlueLength::asString() const { -#ifdef HAVE_SSTREAM std::ostringstream buffer; -#else - char tbuf[20]; - ostrstream buffer(tbuf, 20); -#endif + if (plus_val != 0.0) if (minus_val != 0.0) if ((uni == plus_uni) && (uni == minus_uni)) @@ -378,23 +387,14 @@ string LyXGlueLength::asString() const << unit_name[minus_uni]; else buffer << val << unit_name[uni]; -#ifdef HAVE_SSTREAM + return buffer.str().c_str(); -#else - buffer << '\0'; - return buffer.str(); -#endif } -string LyXGlueLength::asLatexString() const +string const LyXGlueLength::asLatexString() const { -#ifdef HAVE_SSTREAM std::ostringstream buffer; -#else - char tbuf[40]; - ostrstream buffer(tbuf, 40); -#endif if (plus_val != 0.0) if (minus_val != 0.0) @@ -414,12 +414,8 @@ string LyXGlueLength::asLatexString() const << minus_val << unit_name[minus_uni]; else buffer << val << unit_name[uni]; -#ifdef HAVE_SSTREAM + return buffer.str().c_str(); -#else - buffer << '\0'; - return buffer.str(); -#endif } @@ -449,7 +445,7 @@ VSpace::VSpace (string const & data) else if (prefixIs (input, "vfill")) kin = VFILL; else if (isValidGlueLength (input, &len)) kin = LENGTH; - else if (sscanf (input.c_str(), "%f", &value) == 1) { + else if (sscanf(input.c_str(), "%f", &value) == 1) { // This last one is for reading old .lyx files // without units in added_space_top/bottom. // Let unit default to centimeters here. @@ -474,7 +470,7 @@ bool VSpace::operator==(VSpace const & other) const } -string VSpace::asLyXCommand() const +string const VSpace::asLyXCommand() const { string result; @@ -494,7 +490,7 @@ string VSpace::asLyXCommand() const } -string VSpace::asLatexCommand(BufferParams const & params) const +string const VSpace::asLatexCommand(BufferParams const & params) const { switch (kin) { case NONE: return string();