/// Does not depend on the locale.
int compare_no_case(docstring const & s, docstring const & s2);
+/// Compare \p s and \p s2 using the collating rules of the current locale.
+int compare_locale(docstring const & s, docstring const & s2);
+
/// Compare \p s and \p s2, ignoring the case of ASCII characters only.
int compare_ascii_no_case(std::string const & s, std::string const & s2);
/// Changes the case of \p s to lowercase.
/// Does not depend on the locale.
docstring const lowercase(docstring const & s);
+// Currently unused, but the code is there if needed.
+// std::string const lowercase(std::string const & s);
/// Changes the case of \p s to uppercase.
/// Does not depend on the locale.
docstring const subst(docstring const & a,
docstring const & oldstr, docstring const & newstr);
+/// Count all occurences of char \a chr inside \a str
+int count_char(std::string const & str, char chr);
+
/// Count all occurences of char \a chr inside \a str
int count_char(docstring const & str, docstring::value_type chr);
+/** Count all occurences of binary chars inside \a str.
+ It is assumed that \a str is utf-8 encoded and that a binary char
+ belongs to the unicode class names Zl, Zp, Cc, Cf, Cs, Co, or Cn
+ (excluding white space characters such as '\t', '\n', '\v', '\f', '\r').
+ See http://www.unicode.org/Public/6.2.0/ucd/UnicodeData.txt
+*/
+int count_bin_chars(std::string const & str);
+
/** Trims characters off the end and beginning of a string.
\code
trim("ccabccc", "c") == "ab".
/// Same as split but uses the last delim.
std::string const rsplit(std::string const & a, std::string & piece, char delim);
+docstring const rsplit(docstring const & a, docstring & piece, char_type delim);
docstring const rsplit(docstring const & a, char_type delim);
/// Escapes non ASCII chars and other problematic characters that cause