diff options
-rw-r--r-- | auto.def | 2 | ||||
-rw-r--r-- | jim.c | 11 | ||||
-rw-r--r-- | tests/string.test | 6 | ||||
-rw-r--r-- | utf8.c | 5 |
4 files changed, 22 insertions, 2 deletions
@@ -85,7 +85,7 @@ if {[cc-check-function-in-lib socket socket]} { cc-check-functions ualarm lstat fork vfork system select execvpe cc-check-functions backtrace geteuid mkstemp realpath strptime isatty -cc-check-functions regcomp waitpid sigaction sys_signame sys_siglist +cc-check-functions regcomp waitpid sigaction sys_signame sys_siglist isascii cc-check-functions syslog opendir readlink sleep usleep pipe getaddrinfo utimes if {[cc-check-functions sysinfo]} { cc-with {-includes sys/sysinfo.h} { @@ -2970,6 +2970,15 @@ static Jim_Obj *JimStringTrim(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *t return strObjPtr; } +/* Some platforms don't have isascii - need a non-macro version */ +#ifdef HAVE_ISASCII +#define jim_isascii isascii +#else +static int jim_isascii(int c) +{ + return !(c & ~0x7f); +} +#endif static int JimStringIs(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *strClass, int strict) { @@ -3017,7 +3026,7 @@ static int JimStringIs(Jim_Interp *interp, Jim_Obj *strObjPtr, Jim_Obj *strClass case STR_IS_ALPHA: isclassfunc = isalpha; break; case STR_IS_ALNUM: isclassfunc = isalnum; break; - case STR_IS_ASCII: isclassfunc = isascii; break; + case STR_IS_ASCII: isclassfunc = jim_isascii; break; case STR_IS_DIGIT: isclassfunc = isdigit; break; case STR_IS_LOWER: isclassfunc = islower; break; case STR_IS_UPPER: isclassfunc = isupper; break; diff --git a/tests/string.test b/tests/string.test index e4d5dc5..650088c 100644 --- a/tests/string.test +++ b/tests/string.test @@ -248,6 +248,12 @@ test string-6.12 {string is alnum, true} { test string-6.15 {string is alpha, true} { string is alpha abc } 1 +test string-6.16 {string is ascii, true} { + string is ascii abc123 +} 1 +test string-6.17 {string is ascii, false} { + string is ascii 0123Ü567 +} 0 test string-6.24 {string is digit, true} { string is digit 0123456789 } 1 @@ -178,6 +178,11 @@ static int utf8_map_case(const struct casemap *mapping, int num, int ch) return ch; } +/* Some platforms don't have isascii */ +#ifndef isascii +#define isascii(C) (!((C) & ~0x7f)) +#endif + int utf8_upper(int ch) { if (isascii(ch)) { |