1 #ifndef SASS_UTIL_STRING_H 2 #define SASS_UTIL_STRING_H 3 4 #include "sass.hpp" 5 #include <string> 6 7 namespace Sass { 8 namespace Util { 9 10 // ########################################################################## 11 // Special case insensitive string matcher. We can optimize 12 // the more general compare case quite a bit by requiring 13 // consumers to obey some rules (lowercase and no space). 14 // - `literal` must only contain lower case ascii characters 15 // there is one edge case where this could give false positives 16 // test could contain a (non-ascii) char exactly 32 below literal 17 // ########################################################################## 18 bool equalsLiteral(const char* lit, const sass::string& test); 19 20 // ########################################################################### 21 // Returns [name] without a vendor prefix. 22 // If [name] has no vendor prefix, it's returned as-is. 23 // ########################################################################### 24 sass::string unvendor(const sass::string& name); 25 26 sass::string rtrim(sass::string str); 27 sass::string normalize_newlines(const sass::string& str); 28 sass::string normalize_underscores(const sass::string& str); 29 sass::string normalize_decimals(const sass::string& str); 30 char opening_bracket_for(char closing_bracket); 31 char closing_bracket_for(char opening_bracket); 32 33 // Locale-independent ASCII character routines. 34 ascii_isalpha(unsigned char c)35 inline bool ascii_isalpha(unsigned char c) { 36 return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); 37 } 38 ascii_isdigit(unsigned char c)39 inline bool ascii_isdigit(unsigned char c) { 40 return (c >= '0' && c <= '9'); 41 } 42 ascii_isalnum(unsigned char c)43 inline bool ascii_isalnum(unsigned char c) { 44 return ascii_isalpha(c) || ascii_isdigit(c); 45 } 46 ascii_isascii(unsigned char c)47 inline bool ascii_isascii(unsigned char c) { return c < 128; } 48 ascii_isxdigit(unsigned char c)49 inline bool ascii_isxdigit(unsigned char c) { 50 return ascii_isdigit(c) || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'); 51 } 52 ascii_isspace(unsigned char c)53 inline bool ascii_isspace(unsigned char c) { 54 return c == ' ' || c == '\t' || c == '\v' || c == '\f' || c == '\r' || c == '\n'; 55 } 56 ascii_tolower(unsigned char c)57 inline char ascii_tolower(unsigned char c) { 58 if (c >= 'A' && c <= 'Z') return c + 32; 59 return c; 60 } 61 62 void ascii_str_tolower(sass::string* s); 63 ascii_toupper(unsigned char c)64 inline char ascii_toupper(unsigned char c) { 65 if (c >= 'a' && c <= 'z') return c - 32; 66 return c; 67 } 68 69 void ascii_str_toupper(sass::string* s); 70 71 } // namespace Sass 72 } // namespace Util 73 #endif // SASS_UTIL_STRING_H 74