X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flstrings.h;h=ac310c59c43dcc598e6a6016c447e91a0bc274d2;hb=8d640dc77608bedddb5b00982c23665584f52d21;hp=6fb1daf15621e40d690a01c1d424f8eede9b866a;hpb=ec42b2e4c9daa458df1c5c0454d61fbe4987701c;p=lyx.git diff --git a/src/support/lstrings.h b/src/support/lstrings.h index 6fb1daf156..ac310c59c4 100644 --- a/src/support/lstrings.h +++ b/src/support/lstrings.h @@ -266,6 +266,29 @@ docstring const rsplit(docstring const & a, char_type delim); /// problems in latex labels. docstring const escape(docstring const & lab); +/// Truncates a string with an ellipsis at the end. Leaves str unchanged and +/// returns false if it is shorter than len. Otherwise resizes str to len, with +/// U+2026 HORIZONTAL ELLIPSIS at the end, and returns true. +/// +/// Warning (Unicode): The cases where we want to truncate the text and it does +/// not end up converted into a QString for UI display must be really +/// rare. Whenever possible, we should prefer calling QFontMetrics::elidedText() +/// instead, which takes into account the actual length on the screen and the +/// layout direction (RTL or LTR). Or a similar function taking into account the +/// font metrics from the buffer view, which still has to be defined. Or set up +/// the widgets such that Qt elides the string automatically with the exact +/// needed width. Recall that not only graphemes vary greatly in width, but also +/// can be made of several code points. See: +/// +/// +/// What is acceptable is when we know that the string is probably going to be +/// elided by Qt anyway, and len is chosen such that our own ellipsis will only +/// be displayed in worst-case scenarios. +/// +/// FIXME: apply those principles in the current code. +/// +bool truncateWithEllipsis(docstring & str, size_t const len); + /// Word-wraps the provided docstring, returning a line-broken string /// of width no wider than width, with the string broken at spaces. /// If the string cannot be broken appropriately, it returns something @@ -274,6 +297,10 @@ docstring const escape(docstring const & lab); /// If indent is positive, then the first line is indented that many /// spaces. If it is negative, then successive lines are indented, as /// if the first line were "outdented". +/// +/// Warning (Unicode): uses truncateWithEllipsis() internally. Therefore it is +/// subject to the same warning and FIXME as above. +/// docstring wrap(docstring const & str, int const indent = 0, size_t const width = 80); @@ -281,6 +308,10 @@ docstring wrap(docstring const & str, int const indent = 0, /// that may contain embedded newlines. /// \param numlines Don't return more than numlines lines. If numlines /// is 0, we return everything. +/// +/// Warning (Unicode): uses truncateWithEllipsis() internally. Therefore it is +/// subject to the same warning and FIXME as above. +/// docstring wrapParas(docstring const & str, int const indent = 0, size_t const width = 80, size_t const maxlines = 10); @@ -302,6 +333,15 @@ docstring const getStringFromVector(std::vector const & vec, /// found, else -1. The last item in \p str must be "". int findToken(char const * const str[], std::string const & search_token); + +/// Format a floating point number with at least 6 siginificant digits, but +/// without scientific notation. +/// Scientific notation would be invalid in some contexts, such as lengths for +/// LaTeX. Simply using std::ostream with std::fixed would produce results +/// like "1000000.000000", and precision control would not be that easy either. +std::string formatFPNumber(double); + + template docstring bformat(docstring const & fmt, Arg1); @@ -317,6 +357,9 @@ docstring bformat(docstring const & fmt, Arg1, Arg2, Arg3, Arg4); template<> docstring bformat(docstring const & fmt, int arg1); template<> docstring bformat(docstring const & fmt, long arg1); +#ifdef LYX_USE_LONG_LONG +template<> docstring bformat(docstring const & fmt, long long arg1); +#endif template<> docstring bformat(docstring const & fmt, unsigned int arg1); template<> docstring bformat(docstring const & fmt, docstring arg1); template<> docstring bformat(docstring const & fmt, char * arg1); @@ -327,9 +370,6 @@ template<> docstring bformat(docstring const & fmt, int arg1, int arg2); template<> docstring bformat(docstring const & fmt, docstring arg1, docstring arg2, docstring arg3); template<> docstring bformat(docstring const & fmt, docstring arg1, docstring arg2, docstring arg3, docstring arg4); -/// Return a string with Unicode overrides to enforce the writing direction -docstring directedString(docstring const & s, bool rtl); - } // namespace support } // namespace lyx