]> git.lyx.org Git - lyx.git/blobdiff - src/support/lstrings.cpp
listerrors.lyx : Update a link.
[lyx.git] / src / support / lstrings.cpp
index 7fbe6730f8a1595553b0afaa77f6452b57fed301..98249e4e1d0ffef07e1778a0e52d21d30297dd6e 100644 (file)
@@ -15,6 +15,7 @@
 #include "support/lstrings.h"
 
 #include "support/convert.h"
+#include "support/gettext.h"
 #include "support/qstring_helpers.h"
 #include "support/textutils.h"
 
@@ -146,13 +147,13 @@ bool isSpace(char_type c)
 }
 
 
-bool isDigit(char_type c)
+bool isNumber(char_type c)
 {
        if (!is_utf16(c))
-               // assume that no non-utf16 character is a digit
+               // assume that no non-utf16 character is a numeral
                // c outside the UCS4 range is catched as well
                return false;
-       return ucs4_to_qchar(c).isDigit();
+       return ucs4_to_qchar(c).isNumber();
 }
 
 
@@ -164,8 +165,7 @@ bool isDigitASCII(char_type c)
 
 bool isAlnumASCII(char_type c)
 {
-       return ('0' <= c && c <= '9')
-               || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
+       return isAlphaASCII(c) || isDigitASCII(c);
 }
 
 
@@ -265,7 +265,7 @@ bool isStrInt(string const & str)
 
        string::const_iterator end = tmpstr.end();
        for (; cit != end; ++cit)
-               if (!isdigit((*cit)))
+               if (!isDigitASCII(*cit))
                        return false;
 
        return true;
@@ -285,7 +285,7 @@ bool isStrUnsignedInt(string const & str)
        string::const_iterator cit = tmpstr.begin();
        string::const_iterator end = tmpstr.end();
        for (; cit != end; ++cit)
-               if (!isdigit((*cit)))
+               if (!isDigitASCII(*cit))
                        return false;
 
        return true;
@@ -309,7 +309,7 @@ bool isStrDbl(string const & str)
                ++cit;
        string::const_iterator end = tmpstr.end();
        for (; cit != end; ++cit) {
-               if (!isdigit(*cit) && *cit != '.')
+               if (!isDigitASCII(*cit) && *cit != '.')
                        return false;
                if ('.' == (*cit)) {
                        if (found_dot)
@@ -321,24 +321,18 @@ bool isStrDbl(string const & str)
 }
 
 
-bool hasDigit(docstring const & str)
+bool hasDigitASCII(docstring const & str)
 {
-       if (str.empty())
-               return false;
-
        docstring::const_iterator cit = str.begin();
        docstring::const_iterator const end = str.end();
-       for (; cit != end; ++cit) {
-               if (*cit == ' ')
-                       continue;
-               if (isdigit((*cit)))
+       for (; cit != end; ++cit)
+               if (isDigitASCII(*cit))
                        return true;
-       }
        return false;
 }
 
 
-static bool isHexChar(char_type c)
+bool isHexChar(char_type c)
 {
        return c == '0' ||
                c == '1' ||
@@ -1159,6 +1153,7 @@ docstring wrap(docstring const & str, int const ind, size_t const width)
 docstring wrapParas(docstring const & str, int const indent,
                    size_t const width, size_t const maxlines)
 {
+       docstring const dots = from_ascii("...");
        if (str.empty())
                return docstring();
 
@@ -1173,9 +1168,21 @@ docstring wrapParas(docstring const & str, int const indent,
                if (nlines == 0)
                        continue;
                size_t const curlines = retval.size();
-               if (maxlines > 0 && curlines + nlines >= maxlines) {
-                       tmp.resize(maxlines - curlines - 1);
-                       tmp.push_back(from_ascii("..."));
+               if (maxlines > 0 && curlines + nlines > maxlines) {
+                       tmp.resize(maxlines - curlines);
+                       docstring last = tmp.back();
+                       size_t const lsize = last.size();
+                       if (lsize > width - 3) {
+                               size_t const i = last.find_last_of(' ', width - 3);
+                               if (i == docstring::npos || i <= size_t(indent))
+                                       // no space found
+                                       last = last.substr(0, lsize - 3) + dots;
+                               else
+                                       last = last.substr(0, i) + dots;
+                       } else
+                               last += dots;
+                       tmp.pop_back();
+                       tmp.push_back(last);
                }
                retval.insert(retval.end(), tmp.begin(), tmp.end());
                if (maxlines > 0 && retval.size() >= maxlines)
@@ -1283,6 +1290,12 @@ int findToken(char const * const str[], string const & search_token)
 }
 
 
+string const languageTestString()
+{
+       return N_("[[Replace with the code of your language]]");
+}
+
+
 template<>
 docstring bformat(docstring const & fmt, int arg1)
 {