}
+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();
}
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;
+}