X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fvspace.C;h=d12ecb820a497080a57fba93f34d1ffd60d2b6c5;hb=f448e22d483e1370bcbfbb7be8cb47ad7251ed77;hp=565a9e4ca5ee1228442a4994747d97a4c648d4dd;hpb=1c9a8d27a26b5f76562914f0e81aa98334f8c06a;p=lyx.git diff --git a/src/vspace.C b/src/vspace.C index 565a9e4ca5..d12ecb820a 100644 --- a/src/vspace.C +++ b/src/vspace.C @@ -55,68 +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); - if (sscanf (buffer.c_str(), - "%f", &number[number_index]) == 1) { - 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 } } @@ -172,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; @@ -229,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; @@ -289,25 +310,11 @@ LyXLength::LyXLength(string const & data) } -bool LyXLength::operator== (LyXLength const & other) const +string const LyXLength::asString() const { - return (val == other.val && - uni == other.uni); -} - - -string LyXLength::asString() const -{ -#ifdef HAVE_SSTREAM - ostringstream buffer; + 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 } @@ -331,25 +338,10 @@ LyXGlueLength::LyXGlueLength (string const & data) } -bool LyXGlueLength::operator== (LyXGlueLength const & other) const +string const LyXGlueLength::asString() const { - return (val == other.val && - uni == other.uni && - plus_val == other.plus_val && - plus_uni == other.plus_uni && - minus_val == other.minus_val && - minus_uni == other.minus_uni); -} - + std::ostringstream buffer; -string LyXGlueLength::asString() const -{ -#ifdef HAVE_SSTREAM - 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)) @@ -395,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 - ostringstream buffer; -#else - char tbuf[40]; - ostrstream buffer(tbuf, 40); -#endif + std::ostringstream buffer; if (plus_val != 0.0) if (minus_val != 0.0) @@ -431,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 } @@ -466,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. @@ -491,7 +470,7 @@ bool VSpace::operator==(VSpace const & other) const } -string VSpace::asLyXCommand() const +string const VSpace::asLyXCommand() const { string result; @@ -511,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(); @@ -536,7 +515,18 @@ int VSpace::inPixels(BufferView * bv) const { // Height of a normal line in pixels (zoom factor considered) int height = bv->text->DefaultHeight(); // [pixels] + int skip = 0; + if (kin == DEFSKIP) + skip = bv->buffer()->params.getDefSkip().inPixels(bv); + return inPixels(height, skip); +} + +int VSpace::inPixels(int default_height, int default_skip) const +{ + // Height of a normal line in pixels (zoom factor considered) + int height = default_height; // [pixels] + // Zoom factor specified by user in percent float const zoom = lyxrc.zoom / 100.0; // [percent] @@ -550,15 +540,15 @@ int VSpace::inPixels(BufferView * bv) const case NONE: return 0; case DEFSKIP: - return bv->buffer()->params.getDefSkip().inPixels(bv); + return default_skip; // This is how the skips are normally defined by // LateX. But there should be some way to change // this per document. - case SMALLSKIP: return height/4; - case MEDSKIP: return height/2; + case SMALLSKIP: return height / 4; + case MEDSKIP: return height / 2; case BIGSKIP: return height; - case VFILL: return 3*height; + case VFILL: return 3 * height; // leave space for the vfill symbol case LENGTH: // Pixel values are scaled so that the ratio