]> git.lyx.org Git - lyx.git/blobdiff - src/support/lstrings.C
small changes read changelog
[lyx.git] / src / support / lstrings.C
index 9a5a061865e4196962dc0fc3b1fa3d4dc7e5ba00..f0e6fe2b952cec85e39e06e1a00524394831223c 100644 (file)
@@ -30,6 +30,7 @@ using std::transform;
 #ifndef CXX_GLOBAL_CSTD
 using std::tolower;
 using std::toupper;
+using std::strlen;
 #endif
 
 
@@ -55,6 +56,37 @@ int compare_no_case(string const & s, string const & s2)
 }
 
 
+namespace {
+       int ascii_tolower(int c) {
+               if (c >= 'A' && c <= 'Z')
+                       return c - 'A' + 'a';
+               return c;
+       }
+}
+
+
+int compare_ascii_no_case(string const & s, string const & s2)
+{
+       string::const_iterator p = s.begin();
+       string::const_iterator p2 = s2.begin();
+
+       while (p != s.end() && p2 != s2.end()) {
+               int const lc1 = ascii_tolower(*p);
+               int const lc2 = ascii_tolower(*p2);
+               if (lc1 != lc2)
+                       return (lc1 < lc2) ? -1 : 1;
+               ++p;
+               ++p2;
+       }
+
+       if (s.size() == s2.size())
+               return 0;
+       if (s.size() < s2.size())
+               return -1;
+       return 1;
+}
+
+
 int compare_no_case(string const & s, string const & s2, unsigned int len)
 {
        string::const_iterator p = s.begin();
@@ -590,3 +622,24 @@ string const rsplit(string const & a, string & piece, char delim)
        }
        return tmp;
 }
+
+
+// This function escapes 8-bit characters and other problematic
+// characters that cause problems in latex labels.
+string const escape(string const & lab)
+{
+       char hexdigit[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
+                             '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+       string enc;
+       for (string::size_type i = 0; i < lab.length(); ++i) {
+               unsigned char c= lab[i];
+               if (c >= 128 || c == '=' || c == '%') {
+                       enc += '=';
+                       enc += hexdigit[c>>4];
+                       enc += hexdigit[c & 15];
+               } else {
+                       enc += c;
+               }
+       }
+       return enc;
+}