X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FVSpace.cpp;h=da9133a4c090727525e11a413a82550439bd9c92;hb=f3711d8a651445a61e1a759ac7493a9c5c7800e2;hp=d720589eef6b6a136177c5c2122d2ad0025d354c;hpb=8c622e4ff04765c786cbe9ccc9824f4429aee4e7;p=lyx.git diff --git a/src/VSpace.cpp b/src/VSpace.cpp index d720589eef..da9133a4c0 100644 --- a/src/VSpace.cpp +++ b/src/VSpace.cpp @@ -11,37 +11,40 @@ #include #include "VSpace.h" + #include "Buffer.h" #include "BufferParams.h" #include "BufferView.h" -#include "gettext.h" -#include "lengthcommon.h" -#include "LyXText.h" +#include "support/gettext.h" +#include "Length.h" +#include "Text.h" +#include "TextMetrics.h" // for defaultRowHeight() #include "support/convert.h" #include "support/lstrings.h" +#include "support/lassert.h" -namespace lyx { +#include -using support::compare; -using support::isStrDbl; -using support::ltrim; -using support::prefixIs; -using support::rtrim; +using namespace std; +using namespace lyx::support; -using std::string; +namespace lyx { namespace { /// used to return numeric values in parsing vspace double number[4] = { 0, 0, 0, 0 }; + /// used to return unit types in parsing vspace -Length::UNIT unit[4] = { Length::UNIT_NONE, - Length::UNIT_NONE, - Length::UNIT_NONE, - Length::UNIT_NONE }; +Length::UNIT unit[4] = { + Length::UNIT_NONE, + Length::UNIT_NONE, + Length::UNIT_NONE, + Length::UNIT_NONE +}; /// the current position in the number array int number_index; @@ -49,16 +52,14 @@ int number_index; int unit_index; /// skip n characters of input -inline -void lyx_advance(string & data, string::size_type n) +inline void lyx_advance(string & data, size_t n) { data.erase(0, n); } /// return true when the input is at the end -inline -bool isEndOfData(string const & data) +inline bool isEndOfData(string const & data) { return ltrim(data).empty(); } @@ -103,7 +104,7 @@ char nextToken(string & data) return '-'; } - string::size_type i = data.find_first_not_of("0123456789."); + size_t i = data.find_first_not_of("0123456789."); if (i != 0) { if (number_index > 3) @@ -115,8 +116,9 @@ char nextToken(string & data) if (i == string::npos) { buffer = data; i = data.size() + 1; - } else + } else { buffer = data.substr(0, i); + } lyx_advance(data, i); @@ -139,8 +141,9 @@ char nextToken(string & data) if (i == string::npos) { buffer = data; i = data.size() + 1; - } else + } else { buffer = data.substr(0, i); + } // possibly we have "mmplus" string or similar if (buffer.size() > 5 && @@ -241,25 +244,23 @@ bool isValidGlueLength(string const & data, GlueLength * result) } // end of hack - int pattern_index = 0; - int table_index = 0; - char pattern[20]; - - number_index = 1; - unit_index = 1; // entries at index 0 are sentinels + number_index = unit_index = 1; // entries at index 0 are sentinels // construct "pattern" from "data" - while (!isEndOfData (buffer)) { - if (pattern_index > 20) return false; - pattern[pattern_index] = nextToken (buffer); - if (pattern[pattern_index] == 'E') return false; - ++pattern_index; + size_t const pattern_max_size = 20; + string pattern; + while (!isEndOfData(buffer)) { + if (pattern.size() > pattern_max_size) + return false; + char const c = nextToken(buffer); + if (c == 'E') + return false; + pattern.push_back(c); } - pattern[pattern_index] = '\0'; // search "pattern" in "table" - table_index = 0; - while (compare(pattern, table[table_index].pattern)) { + size_t table_index = 0; + while (pattern != table[table_index].pattern) { ++table_index; if (!*table[table_index].pattern) return false; @@ -324,7 +325,8 @@ bool isValidLength(string const & data, Length * result) pattern[pattern_index] = '\0'; // only the most basic pattern is accepted here - if (compare(pattern, "nu") != 0) return false; + if (strcmp(pattern, "nu") != 0) + return false; // It _was_ a correct length string. // Store away the values we found. @@ -345,7 +347,7 @@ VSpace::VSpace() {} -VSpace::VSpace(vspace_kind k) +VSpace::VSpace(VSpaceKind k) : kind_(k), len_(), keep_(false) {} @@ -368,7 +370,7 @@ VSpace::VSpace(string const & data) string input = rtrim(data); - string::size_type const length = input.length(); + size_t const length = input.length(); if (length > 1 && input[length - 1] == '*') { keep_ = true; @@ -397,30 +399,6 @@ VSpace::VSpace(string const & data) } -VSpace::vspace_kind VSpace::kind() const -{ - return kind_; -} - - -GlueLength const & VSpace::length() const -{ - return len_; -} - - -bool VSpace::keep() const -{ - return keep_; -} - - -void VSpace::setKeep(bool val) -{ - keep_ = val; -} - - bool VSpace::operator==(VSpace const & other) const { if (kind_ != other.kind_) @@ -476,7 +454,7 @@ string const VSpace::asLatexCommand(BufferParams const & params) const : "\\vspace{" + len_.asLatexString() + '}'; default: - BOOST_ASSERT(false); + LASSERT(false, /**/); return string(); } } @@ -511,6 +489,24 @@ docstring const VSpace::asGUIName() const } +string VSpace::asHTMLLength() const +{ + string result; + switch (kind_) { + case DEFSKIP: result = "2ex"; break; + case SMALLSKIP: result = "1ex"; break; + case MEDSKIP: result = "3ex"; break; + case BIGSKIP: result = "5ex"; break; + case LENGTH: { + Length tmp = len_.len(); + if (tmp.value() > 0) + result = tmp.asHTMLString(); + } + case VFILL: break; + } + return result; +} + int VSpace::inPixels(BufferView const & bv) const { // Height of a normal line in pixels (zoom factor considered) @@ -519,7 +515,7 @@ int VSpace::inPixels(BufferView const & bv) const switch (kind_) { case DEFSKIP: - return bv.buffer()->params().getDefSkip().inPixels(bv); + return bv.buffer().params().getDefSkip().inPixels(bv); // This is how the skips are normally defined by LateX. // But there should be some way to change this per document. @@ -540,7 +536,7 @@ int VSpace::inPixels(BufferView const & bv) const return len_.len().inPixels(bv.workWidth()); default: - BOOST_ASSERT(false); + LASSERT(false, /**/); return 0; } }