#ifndef SASS_UTIL_STRING_H
#define SASS_UTIL_STRING_H
#include "sass.hpp"
#include <string>
namespace Sass {
namespace Util {
// ##########################################################################
// Special case insensitive string matcher. We can optimize
// the more general compare case quite a bit by requiring
// consumers to obey some rules (lowercase and no space).
// - `literal` must only contain lower case ascii characters
// there is one edge case where this could give false positives
// test could contain a (non-ascii) char exactly 32 below literal
// ##########################################################################
bool equalsLiteral(const char* lit, const sass::string& test);
// ###########################################################################
// Returns [name] without a vendor prefix.
// If [name] has no vendor prefix, it's returned as-is.
// ###########################################################################
sass::string unvendor(const sass::string& name);
sass::string rtrim(sass::string str);
sass::string normalize_newlines(const sass::string& str);
sass::string normalize_underscores(const sass::string& str);
sass::string normalize_decimals(const sass::string& str);
char opening_bracket_for(char closing_bracket);
char closing_bracket_for(char opening_bracket);
// Locale-independent ASCII character routines.
inline bool ascii_isalpha(unsigned char c) {
return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
}
inline bool ascii_isdigit(unsigned char c) {
return (c >= '0' && c <= '9');
}
inline bool ascii_isalnum(unsigned char c) {
return ascii_isalpha(c) || ascii_isdigit(c);
}
inline bool ascii_isascii(unsigned char c) { return c < 128; }
inline bool ascii_isxdigit(unsigned char c) {
return ascii_isdigit(c) || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');
}
inline bool ascii_isspace(unsigned char c) {
return c == ' ' || c == '\t' || c == '\v' || c == '\f' || c == '\r' || c == '\n';
}
inline char ascii_tolower(unsigned char c) {
if (c >= 'A' && c <= 'Z') return c + 32;
return c;
}
void ascii_str_tolower(sass::string* s);
inline char ascii_toupper(unsigned char c) {
if (c >= 'a' && c <= 'z') return c - 32;
return c;
}
void ascii_str_toupper(sass::string* s);
} // namespace Sass
} // namespace Util
#endif // SASS_UTIL_STRING_H