]> git.lyx.org Git - lyx.git/blobdiff - src/support/lstrings.cpp
Set correctly the spacing between atoms in MathData
[lyx.git] / src / support / lstrings.cpp
index d06458bd815c9703ac1746216bc5d57c5abfa8e8..9eb9e43d5fbe975367e8b527f313db11f4fdee7e 100644 (file)
 
 #include "support/convert.h"
 #include "support/debug.h"
+#include "support/lyxlib.h"
 #include "support/qstring_helpers.h"
 
 #include "support/lassert.h"
 
 #include <QString>
 
-#include <cmath>
 #include <cstdio>
 #include <cstring>
 #include <algorithm>
@@ -208,24 +208,7 @@ int compare_no_case(docstring const & s, docstring const & s2)
 
 int compare_locale(docstring const & s, docstring const & s2)
 {
-       // FIXME We have a report that this does not work on windows (bug 9030)
-       try
-       {
-               string const l = to_local8bit(s);
-               string const r = to_local8bit(s2);
-               return strcoll(l.c_str(), r.c_str());
-       }
-       catch (bad_cast & e)
-       {
-               // fall back to builtin sorting
-               LYXERR0("Could not compare using the current locale: "
-                       << e.what() << ", using fallback.");
-               if (s < s2)
-                       return -1;
-               if (s > s2)
-                       return 1;
-               return 0;
-       }
+       return QString::localeAwareCompare(toqstr(s), toqstr(s2));
 }
 
 
@@ -734,6 +717,12 @@ bool containsOnly(string const & s, string const & cset)
 }
 
 
+bool containsOnly(docstring const & s, string const & cset)
+{
+       return s.find_first_not_of(from_ascii(cset)) == string::npos;
+}
+
+
 // ale970405+lasgoutt-970425
 // rewritten to use new string (Lgb)
 string const token(string const & a, char delim, int n)
@@ -1400,18 +1389,6 @@ int findToken(char const * const str[], string const & search_token)
 }
 
 
-#ifdef _MSC_VER
-// Replacement for C99 function lround()
-double round(double x)
-{
-       if (x < 0)
-               return ceil(x - 0.5);
-       else
-               return floor(x + 0.5);
-}
-#endif
-
-
 std::string formatFPNumber(double x)
 {
        // Need manual tweaking, QString::number(x, 'f', 16) does not work either
@@ -1420,7 +1397,7 @@ std::string formatFPNumber(double x)
        // Prevent outputs of 23.4200000000000017 but output small numbers
        // with at least 6 significant digits.
        double const logarithm = log10(fabs(x));
-       os << std::setprecision(max(6 - static_cast<int>(round(logarithm)), 0)) << x;
+       os << std::setprecision(max(6 - iround(logarithm), 0)) << x;
        string result = os.str();
        if (result.find('.') != string::npos) {
                result = rtrim(result, "0");
@@ -1449,6 +1426,17 @@ docstring bformat(docstring const & fmt, long arg1)
 }
 
 
+#ifdef LYX_USE_LONG_LONG
+template<>
+docstring bformat(docstring const & fmt, long long arg1)
+{
+       LATTEST(contains(fmt, from_ascii("%1$d")));
+       docstring const str = subst(fmt, from_ascii("%1$d"), convert<docstring>(arg1));
+       return subst(str, from_ascii("%%"), from_ascii("%"));
+}
+#endif
+
+
 template<>
 docstring bformat(docstring const & fmt, unsigned int arg1)
 {