21 #include "absl/hash/hash.h" 22 #include "absl/strings/ascii.h" 23 #include "absl/strings/match.h" 24 #include "absl/strings/string_view.h" 27 #define strncasecmp _strnicmp 28 #define strcasecmp _stricmp 37 return os <<
"kLower";
39 return os <<
"kUpper";
41 return os <<
"kFirst";
43 return os <<
"kMixed";
45 return os <<
"kNoAlpha";
47 return os <<
"INVALID";
52 const char* s =
input.data();
53 const char*
const end = s +
input.size();
55 for (; s != end && !(absl::ascii_isupper(*s) || absl::ascii_islower(*s));
64 for (++s; s != end && !(absl::ascii_isupper(*s) || absl::ascii_islower(*s));
67 if (s == end)
return firstcapstype;
77 if ((absl::ascii_isupper(*s) &&
79 (absl::ascii_islower(*s) &&
90 if (s1.size() == s2.size()) {
91 return strncasecmp(s1.data(), s2.data(), s1.size());
92 }
else if (s1.size() < s2.size()) {
93 int res = strncasecmp(s1.data(), s2.data(), s1.size());
94 return (res == 0) ? -1 : res;
96 int res = strncasecmp(s1.data(), s2.data(), s2.size());
97 return (res == 0) ? 1 : res;
103 return std::hash<std::string>{}(absl::AsciiStrToLower(s));
107 absl::string_view s2)
const {
108 return s1.size() == s2.size() &&
109 strncasecmp(s1.data(), s2.data(), s1.size()) == 0;
114 for (
auto& ch : *s) {
116 ch = absl::ascii_toupper(ch);
118 upper = (absl::StrContains(delimiters, ch));
123 absl::string_view delimiters) {
124 std::string result(s);
void MakeAsciiTitlecase(std::string *s, absl::string_view delimiters)
std::ostream & operator<<(std::ostream &os, const AsciiCapitalizationType &type)
bool operator()(absl::string_view s1, absl::string_view s2) const
size_t operator()(absl::string_view s) const
static int input(yyscan_t yyscanner)
AsciiCapitalizationType GetAsciiCapitalization(const absl::string_view input)
int AsciiCaseInsensitiveCompare(absl::string_view s1, absl::string_view s2)