]> git.lyx.org Git - lyx.git/blobdiff - src/support/lstrings.C
some new (not extensive) changes, some fixes, will probably reverto to .la libs later...
[lyx.git] / src / support / lstrings.C
index 06875d2159097c8322a1233b83991582abdf5471..47ee77cdb1b32fc513f982c96bfc8b055ebae5ac 100644 (file)
@@ -1,16 +1,29 @@
 #include <config.h>
 
 #include <algorithm>
+
+#ifdef __GLIBCPP__
+#include <ctype.h>
+#else
 #include <cctype>
-#include <cstdio>
+#endif
 #include <cstdlib>
 
+#ifdef HAVE_SSTREAM
+#include <sstream>
+#else
+#include <strstream>
+#endif
+using std::ostringstream;
+
 #include "LString.h"
 #include "lstrings.h"
 #include "LRegex.h"
 
 using std::count;
 using std::transform;
+using std::tolower;
+using std::toupper;
 
 int compare_no_case(string const & s, string const & s2)
 {
@@ -34,6 +47,7 @@ int compare_no_case(string const & s, string const & s2)
        return 1;
 }
 
+
 int compare_no_case(string const & s, string const & s2, unsigned int len)
 {
 //#warning verify this func please
@@ -56,6 +70,7 @@ int compare_no_case(string const & s, string const & s2, unsigned int len)
        return 1;
 }
 
+
 bool isStrInt(string const & str)
 {
        if (str.empty()) return false;
@@ -90,7 +105,15 @@ int  strToInt(string const & str)
 string lowercase(string const & a)
 {
        string tmp(a);
+#ifdef __GLIBCPP__
+       string::iterator result = tmp.begin();
+       for (string::iterator first = tmp.begin();
+            first != tmp.end(); ++first, ++result) {
+               *result = tolower(*first);
+       }
+#else
        transform(tmp.begin(), tmp.end(), tmp.begin(), tolower);
+#endif
        return tmp;
 }
 
@@ -98,26 +121,52 @@ string lowercase(string const & a)
 string uppercase(string const & a)
 {
        string tmp(a);
+#ifdef __GLIBCPP__
+       string::iterator result = tmp.begin();
+       for (string::iterator first = tmp.begin();
+            first != tmp.end(); ++first, ++result) {
+               *result = toupper(*first);
+       }
+#else
        transform(tmp.begin(), tmp.end(), tmp.begin(), toupper);
+#endif
        return tmp;
 }
 
 
 string tostr(long i)
 {
-       // should use string stream
+#ifndef HAVE_SSTREAM
+       // "Hey!", you say. "Why do we need the char str[30]?".
+       // Since strstream does not handle memory for us we have to do
+       // that ourselves, if we don't pass str in we have to capture
+       // oss.str() in a tmp variable and delete that manually.
+       // Thus we then require more temporary variables and the code
+       // gets more obfuscated.
        char str[30];
-       sprintf(str, "%ld", i);
-       return string(str);
+       ostrstream oss(str, 30);
+       oss << i << '\0';
+       return oss.str();
+#else
+       ostringstream oss;
+       oss << i;
+       return oss.str().c_str();
+#endif
 }
 
 
 string tostr(unsigned long i)
 {
-       // should use string stream
+#ifndef HAVE_SSTREAM   
        char str[30];
-       sprintf(str, "%lu", i);
-       return string(str);
+       ostrstream oss(str, 30);
+       oss << i << '\0';
+       return oss.str();
+#else
+       ostringstream oss;
+       oss << i;
+       return oss.str().c_str();
+#endif
 }
 
 
@@ -153,10 +202,16 @@ string tostr(bool b)
 
 string tostr(double d)
 {
-       // should use string stream
+#ifndef HAVE_SSTREAM
        char tmp[40];
-       sprintf(tmp, "%f", d);
-       return string(tmp);
+       ostrstream oss(tmp, 40);
+       oss << d << '\0';
+       return oss.str();
+#else
+       ostringstream oss;
+       oss << d;
+       return oss.str().c_str();
+#endif
 }