X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxlength.h;h=1fc9e6f79cfa594d2a9fa6a2f07b043528399a94;hb=ba62665f966508db5a4de6864f4aa7374c5a5356;hp=86fc8867690fae2c44a173b9ff93a280ef9e3ec4;hpb=09f334338a789ce5dbef20a8beb95c0ed86cc2ee;p=lyx.git diff --git a/src/lyxlength.h b/src/lyxlength.h index 86fc886769..1fc9e6f79c 100644 --- a/src/lyxlength.h +++ b/src/lyxlength.h @@ -1,21 +1,29 @@ // -*- C++ -*- /** * \file lyxlength.h - * Copyright 1995-2002 the LyX Team - * Read the file COPYING + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * * \author Matthias Ettrich + * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes + * \author John Levon + * + * Full author contact details are available in file CREDITS. */ - #ifndef LYX_LENGTH_H #define LYX_LENGTH_H -#ifdef __GNUG__ -#pragma interface -#endif +#include "support/docstring.h" + + +namespace lyx { + +// Solaris/x86 version 9 and earlier define these +#undef PC +#undef SP -#include "LString.h" /** * LyXLength - Represents latex length measurement @@ -36,10 +44,12 @@ public: EX, ///< Height of a small "x" for the current font. EM, ///< Width of capital "M" in current font. MU, ///< Math unit (18mu = 1em) for positioning in math mode - PW, ///< Percent of columnwidth both "%" or "%c" - PE, ///< FIXME - PP, ///< Percent of pagewidth - PL, ///< Percent of linewidth + PTW, //< Percent of TextWidth + PCW, //< Percent of ColumnWidth + PPW, //< Percent of PageWidth + PLW, //< Percent of LineWidth + PTH, //< Percent of TextHeight // Herbert 2002-05-16 + PPH, //< Percent of PaperHeight // Herbert 2002-05-16 UNIT_NONE ///< no unit }; @@ -49,7 +59,13 @@ public: LyXLength(double v, LyXLength::UNIT u); /// "data" must be a decimal number, followed by a unit - explicit LyXLength(string const & data); + explicit LyXLength(std::string const & data); + + void swap(LyXLength & rhs) + { + std::swap(val_, rhs.val_); + std::swap(unit_, rhs.unit_); + } /// double value() const; @@ -61,18 +77,20 @@ public: void unit(LyXLength::UNIT unit); /// bool zero() const; + /// + bool empty() const; + /// return string representation + std::string const asString() const; /// return string representation - string const asString() const; + docstring const asDocstring() const; /// return string representation for LaTeX - string const asLatexString() const; + std::string const asLatexString() const; /// return the on-screen size of this length - int inPixels(int default_width, int default_height) const; + int inPixels(int text_width, int em_width = 0) const; /// return the on-screen size of this length of an image int inBP() const; - /** If "data" is valid, the length represented by it is - stored into "result", if that is not 0. */ - friend bool isValidLength(string const & data, LyXLength * result = 0); + friend bool isValidLength(std::string const & data, LyXLength * result); private: /// @@ -85,9 +103,21 @@ private: bool operator==(LyXLength const & l1, LyXLength const & l2); /// bool operator!=(LyXLength const & l1, LyXLength const & l2); -/// -bool isValidLength(string const & data, LyXLength * result); -/// return the name of the given unit number +/** Test whether \p data represents a valid length. + * + * \returns whether \p data is a valid length + * \param data Length in LyX format. Since the only difference between LyX + * and LaTeX format is the representation of length variables as units (e.g. + * \c text% vs. \c \\textwidth) you can actually use this function as well + * for testing LaTeX lengths as long as they only contain real units like pt. + * \param result Pointer to a LyXLength variable. If \p result is not 0 and + * \p data is valid, the length represented by it is stored into \p result. + */ +bool isValidLength(std::string const & data, LyXLength * result = 0); +/// return the LyX name of the given unit number char const * stringFromUnit(int unit); + +} // namespace lyx + #endif // LYXLENGTH_H