X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxlength.h;h=1fc9e6f79cfa594d2a9fa6a2f07b043528399a94;hb=b01a9dc187d9cd396a57463ad27511379dcdc9cd;hp=8b75cb62ff71a7668242d52ca5458619a58a486b;hpb=3b4ee1725c8911db94b71cef91b92387300875a4;p=lyx.git diff --git a/src/lyxlength.h b/src/lyxlength.h index 8b75cb62ff..1fc9e6f79c 100644 --- a/src/lyxlength.h +++ b/src/lyxlength.h @@ -1,64 +1,56 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== +/** + * \file lyxlength.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. + * \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" -#include "LString.h" -// -/// LyXLength Class -// +namespace lyx { + +// Solaris/x86 version 9 and earlier define these +#undef PC +#undef SP + + +/** + * LyXLength - Represents latex length measurement + */ class LyXLength { public: /// length units enum UNIT { - /// Scaled point (65536sp = 1pt) TeX's smallest unit. - SP, - /// Point = 1/72.27in = 0.351mm - PT, - /// Big point (72bp = 1in), also PostScript point - BP, - /// Didot point = 1/72 of a French inch, = 0.376mm - DD, - /// Millimeter = 2.845pt - MM, - /// Pica = 12pt = 4.218mm - PC, - /// Cicero = 12dd = 4.531mm - CC, - /// Centimeter = 10mm = 2.371pc - CM, - /// Inch = 25.4mm = 72.27pt = 6.022pc - IN, - /// Height of a small "x" for the current font. - EX, - /// Width of capital "M" in current font. - EM, - /// Math unit (18mu = 1em) for positioning in math mode - MU, - /// Percent of columnwidth both "%" or "%c" - PW, - /// - PE, - /// Percent of pagewidth - PP, - /// Percent of linewidth - PL, - /// no unit - UNIT_NONE + SP, ///< Scaled point (65536sp = 1pt) TeX's smallest unit. + PT, ///< Point = 1/72.27in = 0.351mm + BP, ///< Big point (72bp = 1in), also PostScript point + DD, ///< Didot point = 1/72 of a French inch, = 0.376mm + MM, ///< Millimeter = 2.845pt + PC, ///< Pica = 12pt = 4.218mm + CC, ///< Cicero = 12dd = 4.531mm + CM, ///< Centimeter = 10mm = 2.371pc + IN, ///< Inch = 25.4mm = 72.27pt = 6.022pc + 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 + 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 }; /// @@ -67,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; @@ -79,14 +77,20 @@ public: void unit(LyXLength::UNIT unit); /// bool zero() const; - /// conversion - string const asString() const; /// - string const asLatexString() const; + bool empty() const; + /// return string representation + std::string const asString() const; + /// return string representation + docstring const asDocstring() const; + /// return string representation for LaTeX + std::string const asLatexString() const; + /// return the on-screen size of this length + 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: /// @@ -99,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); -/// +/** 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); -#endif + +} // namespace lyx + +#endif // LYXLENGTH_H