]> git.lyx.org Git - lyx.git/blobdiff - src/support/lstrings.cpp
Complete the removal of the embedding stuff. Maybe. It's hard to be sure we got every...
[lyx.git] / src / support / lstrings.cpp
index 16d7946ef623fbc6aa09fb52ba41671f4e50d44b..19c49d6d668320c42ef588f3461211eb34c64ebb 100644 (file)
 
 #include "support/lstrings.h"
 
-#include "support/lyxlib.h"
 #include "support/convert.h"
 #include "support/qstring_helpers.h"
 #include "support/textutils.h"
 
-#include "debug.h"
-
 #include <boost/tokenizer.hpp>
-#include <boost/assert.hpp>
-
-#include <cctype>
-#include <cstdlib>
+#include "support/assert.h"
 
 #include <algorithm>
-#include <sstream>
 
+using namespace std;
 
-using std::transform;
-using std::string;
-using std::vector;
-
-#ifndef CXX_GLOBAL_CSTD
-using std::isdigit;
-using std::tolower;
-using std::toupper;
-#endif
+namespace lyx {
 
+// Using this allows us to have docstring default arguments in headers
+// without #include "support/docstring" there.
+docstring const & empty_docstring()
+{
+       static docstring s;
+       return s;
+}
 
-namespace lyx {
+// Using this allows us to have string default arguments in headers
+// without #include <string>
+string const & empty_string()
+{
+       static string s;
+       return s;
+}
 
 /**
  * Convert a QChar into a UCS4 character.
@@ -52,7 +51,7 @@ namespace lyx {
  */
 static inline char_type qchar_to_ucs4(QChar const & qchar)
 {
-       BOOST_ASSERT(is_utf16(static_cast<char_type>(qchar.unicode())));
+       LASSERT(is_utf16(static_cast<char_type>(qchar.unicode())), /**/);
        return static_cast<char_type>(qchar.unicode());
 }
 
@@ -66,7 +65,7 @@ static inline char_type qchar_to_ucs4(QChar const & qchar)
  */
 static inline QChar const ucs4_to_qchar(char_type const ucs4)
 {
-       BOOST_ASSERT(is_utf16(ucs4));
+       LASSERT(is_utf16(ucs4), /**/);
        return QChar(static_cast<unsigned short>(ucs4));
 }
 
@@ -233,73 +232,77 @@ int compare_ascii_no_case(docstring const & s, docstring const & s2)
 
 bool isStrInt(string const & str)
 {
-       if (str.empty()) return false;
+       if (str.empty())
+               return false;
 
        // Remove leading and trailing white space chars.
        string const tmpstr = trim(str);
-       if (tmpstr.empty()) return false;
+       if (tmpstr.empty())
+               return false;
 
        string::const_iterator cit = tmpstr.begin();
-       if ((*cit) == '-') ++cit;
+       if ((*cit) == '-')
+               ++cit;
+
        string::const_iterator end = tmpstr.end();
-       for (; cit != end; ++cit) {
-               if (!isdigit((*cit))) return false;
-       }
+       for (; cit != end; ++cit)
+               if (!isdigit((*cit)))
+                       return false;
+
        return true;
 }
 
 
 bool isStrUnsignedInt(string const & str)
 {
-       if (str.empty()) return false;
+       if (str.empty())
+               return false;
 
        // Remove leading and trailing white space chars.
        string const tmpstr = trim(str);
-       if (tmpstr.empty()) return false;
+       if (tmpstr.empty())
+               return false;
 
        string::const_iterator cit = tmpstr.begin();
        string::const_iterator end = tmpstr.end();
-       for (; cit != end; ++cit) {
-               if (!isdigit((*cit))) return false;
-       }
+       for (; cit != end; ++cit)
+               if (!isdigit((*cit)))
+                       return false;
+
        return true;
 }
 
 
 bool isStrDbl(string const & str)
 {
-       if (str.empty()) return false;
+       if (str.empty())
+               return false;
 
        // Remove leading and trailing white space chars.
        string const tmpstr = trim(str);
-       if (tmpstr.empty()) return false;
-       //      if (1 < tmpstr.count('.')) return false;
+       if (tmpstr.empty())
+               return false;
+       //      if (tmpstr.count('.') > 1) return false;
 
        string::const_iterator cit = tmpstr.begin();
-       bool found_dot(false);
-       if ((*cit) == '-') ++cit;
+       bool found_dot = false;
+       if (*cit == '-')
+               ++cit;
        string::const_iterator end = tmpstr.end();
        for (; cit != end; ++cit) {
-               if (!isdigit((*cit))
-                   && '.' != (*cit)) {
+               if (!isdigit(*cit) && *cit != '.')
                        return false;
-               }
                if ('.' == (*cit)) {
-                       if (found_dot) {
+                       if (found_dot)
                                return false;
-                       } else {
-                               found_dot = true;
-                       }
+                       found_dot = true;
                }
        }
        return true;
 }
 
 
-namespace {
-
-inline
-bool isHexChar(char_type c)
+static bool isHexChar(char_type c)
 {
        return c == '0' ||
                c == '1' ||
@@ -319,8 +322,6 @@ bool isHexChar(char_type c)
                c == 'f' || c == 'F';
 }
 
-} // anon namespace
-
 
 bool isHex(docstring const & str)
 {
@@ -371,14 +372,14 @@ bool isAscii(string const & str)
 
 char lowercase(char c)
 {
-       BOOST_ASSERT(static_cast<unsigned char>(c) < 0x80);
+       LASSERT(static_cast<unsigned char>(c) < 0x80, /**/);
        return char(tolower(c));
 }
 
 
 char uppercase(char c)
 {
-       BOOST_ASSERT(static_cast<unsigned char>(c) < 0x80);
+       LASSERT(static_cast<unsigned char>(c) < 0x80, /**/);
        return char(toupper(c));
 }
 
@@ -403,8 +404,8 @@ char_type uppercase(char_type c)
 
 namespace {
 
-// since we cannot use std::tolower and std::toupper directly in the
-// calls to std::transform yet, we use these helper clases. (Lgb)
+// since we cannot use tolower and toupper directly in the
+// calls to transform yet, we use these helper clases. (Lgb)
 
 struct local_lowercase {
        char_type operator()(char_type c) const {
@@ -476,14 +477,7 @@ bool prefixIs(string const & a, string const & pre)
 {
        size_t const prelen = pre.length();
        size_t const alen = a.length();
-
-       if (prelen > alen || a.empty())
-               return false;
-#if defined(STD_STRING_IS_GOOD)
-       return a.compare(0, prelen, pre) == 0;
-#else
-       return ::strncmp(a.c_str(), pre.c_str(), prelen) == 0;
-#endif
+       return prelen <= alen && !a.empty() && a.compare(0, prelen, pre) == 0;
 }
 
 
@@ -491,11 +485,7 @@ bool prefixIs(docstring const & a, docstring const & pre)
 {
        size_t const prelen = pre.length();
        size_t const alen = a.length();
-
-       if (prelen > alen || a.empty())
-               return false;
-       else
-               return a.compare(0, prelen, pre) == 0;
+       return prelen <= alen && !a.empty() && a.compare(0, prelen, pre) == 0;
 }
 
 
@@ -518,16 +508,7 @@ bool suffixIs(string const & a, string const & suf)
 {
        size_t const suflen = suf.length();
        size_t const alen = a.length();
-
-       if (suflen > alen)
-               return false;
-
-#if !defined(USE_INCLUDED_STRING) && !defined(STD_STRING_IS_GOOD)
-       string tmp(a, alen - suflen);
-       return ::strncmp(tmp.c_str(), suf.c_str(), suflen) == 0;
-#else
-       return a.compare(alen - suflen, suflen, suf) == 0;
-#endif
+       return suflen <= alen && a.compare(alen - suflen, suflen, suf) == 0;
 }
 
 
@@ -568,7 +549,8 @@ string const token(string const & a, char delim, int n)
 
 docstring const token(docstring const & a, char_type delim, int n)
 {
-       if (a.empty()) return docstring();
+       if (a.empty())
+               return docstring();
 
        size_t k = 0;
        size_t i = 0;
@@ -610,14 +592,32 @@ int tokenPos(string const & a, char delim, string const & tok)
 }
 
 
+// this could probably be faster and/or cleaner, but it seems to work (JMarc)
+// rewritten to use new string (Lgb)
+int tokenPos(docstring const & a, char_type delim, docstring const & tok)
+{
+       int i = 0;
+       docstring str = a;
+       docstring tmptok;
+
+       while (!str.empty()) {
+               str = split(str, tmptok, delim);
+               if (tok == tmptok)
+                       return i;
+               ++i;
+       }
+       return -1;
+}
+
+
 namespace {
 
 /// Substitute all \a oldchar with \a newchar
 template<typename Ch> inline
-std::basic_string<Ch> const subst_char(std::basic_string<Ch> const & a,
+basic_string<Ch> const subst_char(basic_string<Ch> const & a,
                Ch oldchar, Ch newchar)
 {
-       typedef std::basic_string<Ch> String;
+       typedef basic_string<Ch> String;
        String tmp(a);
        typename String::iterator lit = tmp.begin();
        typename String::iterator end = tmp.end();
@@ -646,7 +646,7 @@ template<typename String> inline
 String const subst_string(String const & a,
                String const & oldstr, String const & newstr)
 {
-       BOOST_ASSERT(!oldstr.empty());
+       LASSERT(!oldstr.empty(), /**/);
        String lstr = a;
        size_t i = 0;
        size_t const olen = oldstr.length();
@@ -661,7 +661,7 @@ String const subst_string(String const & a,
 docstring const subst_string(docstring const & a,
                docstring const & oldstr, docstring const & newstr)
 {
-       BOOST_ASSERT(!oldstr.empty());
+       LASSERT(!oldstr.empty(), /**/);
        docstring lstr = a;
        size_t i = 0;
        size_t const olen = oldstr.length();
@@ -705,7 +705,7 @@ docstring const subst(docstring const & a,
 
 docstring const trim(docstring const & a, char const * p)
 {
-       BOOST_ASSERT(p);
+       LASSERT(p, /**/);
 
        if (a.empty() || !*p)
                return a;
@@ -724,7 +724,7 @@ docstring const trim(docstring const & a, char const * p)
 
 string const trim(string const & a, char const * p)
 {
-       BOOST_ASSERT(p);
+       LASSERT(p, /**/);
 
        if (a.empty() || !*p)
                return a;
@@ -742,7 +742,7 @@ string const trim(string const & a, char const * p)
 
 string const rtrim(string const & a, char const * p)
 {
-       BOOST_ASSERT(p);
+       LASSERT(p, /**/);
 
        if (a.empty() || !*p)
                return a;
@@ -759,7 +759,7 @@ string const rtrim(string const & a, char const * p)
 
 docstring const rtrim(docstring const & a, char const * p)
 {
-       BOOST_ASSERT(p);
+       LASSERT(p, /**/);
 
        if (a.empty() || !*p)
                return a;
@@ -776,7 +776,7 @@ docstring const rtrim(docstring const & a, char const * p)
 
 string const ltrim(string const & a, char const * p)
 {
-       BOOST_ASSERT(p);
+       LASSERT(p, /**/);
        if (a.empty() || !*p)
                return a;
        size_t l = a.find_first_not_of(p);
@@ -788,7 +788,7 @@ string const ltrim(string const & a, char const * p)
 
 docstring const ltrim(docstring const & a, char const * p)
 {
-       BOOST_ASSERT(p);
+       LASSERT(p, /**/);
        if (a.empty() || !*p)
                return a;
        size_t l = a.find_first_not_of(from_ascii(p));
@@ -890,7 +890,7 @@ docstring const escape(docstring const & lab)
                        // encode bigger values. Test for 2^24 because we
                        // can encode that with the 6 hex digits that are
                        // needed for 21 bits anyway.
-                       BOOST_ASSERT(c < (1 << 24));
+                       LASSERT(c < (1 << 24), /**/);
                        enc += '=';
                        enc += hexdigit[(c>>20) & 15];
                        enc += hexdigit[(c>>16) & 15];
@@ -1013,7 +1013,7 @@ docstring const internalLineEnding(docstring const & str)
 template<>
 docstring bformat(docstring const & fmt, int arg1)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$d")));
+       LASSERT(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("%"));
 }
@@ -1022,7 +1022,7 @@ docstring bformat(docstring const & fmt, int arg1)
 template<>
 docstring bformat(docstring const & fmt, long arg1)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$d")));
+       LASSERT(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("%"));
 }
@@ -1031,7 +1031,7 @@ docstring bformat(docstring const & fmt, long arg1)
 template<>
 docstring bformat(docstring const & fmt, unsigned int arg1)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$d")));
+       LASSERT(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("%"));
 }
@@ -1040,7 +1040,7 @@ docstring bformat(docstring const & fmt, unsigned int arg1)
 template<>
 docstring bformat(docstring const & fmt, docstring arg1)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$s")));
+       LASSERT(contains(fmt, from_ascii("%1$s")), /**/);
        docstring const str = subst(fmt, from_ascii("%1$s"), arg1);
        return subst(str, from_ascii("%%"), from_ascii("%"));
 }
@@ -1049,7 +1049,7 @@ docstring bformat(docstring const & fmt, docstring arg1)
 template<>
 docstring bformat(docstring const & fmt, char * arg1)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$s")));
+       LASSERT(contains(fmt, from_ascii("%1$s")), /**/);
        docstring const str = subst(fmt, from_ascii("%1$s"), from_ascii(arg1));
        return subst(str, from_ascii("%%"), from_ascii("%"));
 }
@@ -1058,8 +1058,8 @@ docstring bformat(docstring const & fmt, char * arg1)
 template<>
 docstring bformat(docstring const & fmt, docstring arg1, docstring arg2)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$s")));
-       BOOST_ASSERT(contains(fmt, from_ascii("%2$s")));
+       LASSERT(contains(fmt, from_ascii("%1$s")), /**/);
+       LASSERT(contains(fmt, from_ascii("%2$s")), /**/);
        docstring str = subst(fmt, from_ascii("%1$s"), arg1);
        str = subst(str, from_ascii("%2$s"), arg2);
        return subst(str, from_ascii("%%"), from_ascii("%"));
@@ -1069,8 +1069,8 @@ docstring bformat(docstring const & fmt, docstring arg1, docstring arg2)
 template<>
 docstring bformat(docstring const & fmt, char const * arg1, docstring arg2)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$s")));
-       BOOST_ASSERT(contains(fmt, from_ascii("%2$s")));
+       LASSERT(contains(fmt, from_ascii("%1$s")), /**/);
+       LASSERT(contains(fmt, from_ascii("%2$s")), /**/);
        docstring str = subst(fmt, from_ascii("%1$s"), from_ascii(arg1));
        str = subst(fmt, from_ascii("%2$s"), arg2);
        return subst(str, from_ascii("%%"), from_ascii("%"));
@@ -1080,8 +1080,8 @@ docstring bformat(docstring const & fmt, char const * arg1, docstring arg2)
 template<>
 docstring bformat(docstring const & fmt, int arg1, int arg2)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$d")));
-       BOOST_ASSERT(contains(fmt, from_ascii("%2$d")));
+       LASSERT(contains(fmt, from_ascii("%1$d")), /**/);
+       LASSERT(contains(fmt, from_ascii("%2$d")), /**/);
        docstring str = subst(fmt, from_ascii("%1$d"), convert<docstring>(arg1));
        str = subst(str, from_ascii("%2$d"), convert<docstring>(arg2));
        return subst(str, from_ascii("%%"), from_ascii("%"));
@@ -1091,9 +1091,9 @@ docstring bformat(docstring const & fmt, int arg1, int arg2)
 template<>
 docstring bformat(docstring const & fmt, docstring arg1, docstring arg2, docstring arg3)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$s")));
-       BOOST_ASSERT(contains(fmt, from_ascii("%2$s")));
-       BOOST_ASSERT(contains(fmt, from_ascii("%3$s")));
+       LASSERT(contains(fmt, from_ascii("%1$s")), /**/);
+       LASSERT(contains(fmt, from_ascii("%2$s")), /**/);
+       LASSERT(contains(fmt, from_ascii("%3$s")), /**/);
        docstring str = subst(fmt, from_ascii("%1$s"), arg1);
        str = subst(str, from_ascii("%2$s"), arg2);
        str = subst(str, from_ascii("%3$s"), arg3);
@@ -1105,10 +1105,10 @@ template<>
 docstring bformat(docstring const & fmt,
               docstring arg1, docstring arg2, docstring arg3, docstring arg4)
 {
-       BOOST_ASSERT(contains(fmt, from_ascii("%1$s")));
-       BOOST_ASSERT(contains(fmt, from_ascii("%2$s")));
-       BOOST_ASSERT(contains(fmt, from_ascii("%3$s")));
-       BOOST_ASSERT(contains(fmt, from_ascii("%4$s")));
+       LASSERT(contains(fmt, from_ascii("%1$s")), /**/);
+       LASSERT(contains(fmt, from_ascii("%2$s")), /**/);
+       LASSERT(contains(fmt, from_ascii("%3$s")), /**/);
+       LASSERT(contains(fmt, from_ascii("%4$s")), /**/);
        docstring str = subst(fmt, from_ascii("%1$s"), arg1);
        str = subst(str, from_ascii("%2$s"), arg2);
        str = subst(str, from_ascii("%3$s"), arg3);