#include "support/docstring.h"
-#include <string>
#include <vector>
/// 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);
bool isStrDbl(std::string const & str);
/// does the string contain a digit?
-bool hasDigit(docstring const & str);
+bool hasDigitASCII(docstring const & str);
+
+bool isHexChar(char_type);
bool isHex(docstring const & str);
/// Does not depend on the locale.
char_type uppercase(char_type c);
+/// Checks if the supplied character is lower-case
+bool isLowerCase(char_type ch);
+
+/// Checks if the supplied character is upper-case
+bool isUpperCase(char_type ch);
+
/// same as lowercase(), but ignores locale
std::string const ascii_lowercase(std::string const &);
docstring const ascii_lowercase(docstring const &);
/// 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 uppercase(docstring const & s);
+/// Returns the superscript of \p c or \p c if no superscript exists.
+/// Does not depend on the locale.
+char_type superscript(char_type c);
+
+/// Returns the subscript of \p c or \p c if no subscript exists.
+/// Does not depend on the locale.
+char_type subscript(char_type c);
+
/// Does str start with c?
bool prefixIs(docstring const & str, char_type c);
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".
will be the whole of the string if no delimiter is found.
The return value is what follows delim, if anything. So the return
value is the null string if no delimiter is found.
+ 'a' and 'piece' must be different variables.
Examples:
\code
s1= "a;bc"; s2= ""
/// 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