22 #include "absl/hash/hash.h"
23 #include "absl/strings/ascii.h"
24 #include "absl/strings/match.h"
25 #include "absl/strings/string_view.h"
28 #define strncasecmp _strnicmp
29 #define strcasecmp _stricmp
38 return os <<
"kLower";
40 return os <<
"kUpper";
42 return os <<
"kFirst";
44 return os <<
"kMixed";
46 return os <<
"kNoAlpha";
48 return os <<
"INVALID";
53 const char* s =
input.data();
54 const char*
const end = s +
input.size();
56 for (; s !=
end && !(absl::ascii_isupper(*s) || absl::ascii_islower(*s));
65 for (++s; s !=
end && !(absl::ascii_isupper(*s) || absl::ascii_islower(*s));
68 if (s ==
end)
return firstcapstype;
78 if ((absl::ascii_isupper(*s) &&
80 (absl::ascii_islower(*s) &&
91 if (s1.size() == s2.size()) {
92 return strncasecmp(s1.data(), s2.data(), s1.size());
93 }
else if (s1.size() < s2.size()) {
94 int res = strncasecmp(s1.data(), s2.data(), s1.size());
95 return (res == 0) ? -1 : res;
97 int res = strncasecmp(s1.data(), s2.data(), s2.size());
98 return (res == 0) ? 1 : res;
104 return std::hash<std::string>{}(absl::AsciiStrToLower(s));
108 absl::string_view s2)
const {
109 return s1.size() == s2.size() &&
110 strncasecmp(s1.data(), s2.data(), s1.size()) == 0;
115 for (
auto& ch : *s) {
117 ch = absl::ascii_toupper(ch);
119 upper = (absl::StrContains(delimiters, ch));
124 absl::string_view delimiters) {
125 std::string result(s);
int AsciiCaseInsensitiveCompare(absl::string_view s1, absl::string_view s2)
AsciiCapitalizationType GetAsciiCapitalization(const absl::string_view input)
std::ostream & operator<<(std::ostream &os, const AsciiCapitalizationType &type)
void MakeAsciiTitlecase(std::string *s, absl::string_view delimiters)
static int input(yyscan_t yyscanner)
std::optional< int64_t > end
bool operator()(absl::string_view s1, absl::string_view s2) const
size_t operator()(absl::string_view s) const