Add string-upcase, string-downcase builtins
Simple ASCII for now. Add some Unicode smarts later.
This commit is contained in:
		
							parent
							
								
									41eb286f90
								
							
						
					
					
						commit
						16d409c382
					
				
							
								
								
									
										31
									
								
								c/string.c
								
								
								
								
							
							
						
						
									
										31
									
								
								c/string.c
								
								
								
								
							|  | @ -292,6 +292,34 @@ value_t builtin_char_downcase(value_t *args, uint32_t nargs) | |||
|     return mk_wchar(towlower(*(int32_t *)cp_data(cp))); | ||||
| } | ||||
| 
 | ||||
| value_t string_map_chars(int (*mapfun)(int), char *os) | ||||
| { | ||||
|     char *ns; | ||||
|     value_t nv; | ||||
|     size_t n, i; | ||||
| 
 | ||||
|     n = strlen(os); | ||||
|     nv = cvalue_string(n); | ||||
|     ns = cv_data((struct cvalue *)ptr(nv)); | ||||
|     memcpy(ns, os, n); | ||||
|     for (i = 0; i < n; i++) { | ||||
|         ns[i] = mapfun(ns[i]); | ||||
|     } | ||||
|     return nv; | ||||
| } | ||||
| 
 | ||||
| value_t builtin_string_upcase(value_t *args, uint32_t nargs) | ||||
| { | ||||
|     argcount("string-upcase", nargs, 1); | ||||
|     return string_map_chars(toupper, tostring(args[0], "string-upcase")); | ||||
| } | ||||
| 
 | ||||
| value_t builtin_string_downcase(value_t *args, uint32_t nargs) | ||||
| { | ||||
|     argcount("string-downcase", nargs, 1); | ||||
|     return string_map_chars(tolower, tostring(args[0], "string-downcase")); | ||||
| } | ||||
| 
 | ||||
| value_t builtin_char_alphabetic(value_t *args, uint32_t nargs) | ||||
| { | ||||
|     struct cprim *cp; | ||||
|  | @ -501,6 +529,9 @@ static struct builtinspec stringfunc_info[] = { | |||
|     { "char-downcase", builtin_char_downcase }, | ||||
|     { "char-alphabetic?", builtin_char_alphabetic }, | ||||
| 
 | ||||
|     { "string-upcase", builtin_string_upcase }, | ||||
|     { "string-downcase", builtin_string_downcase }, | ||||
| 
 | ||||
|     { "number->string", fl_numbertostring }, | ||||
|     { "string->number", fl_stringtonumber }, | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue