/## Copyright 2021 Kyle Gunger This file is licensed under the CDDL 1.0 (the License) and may only be used in accordance with the License. You should have received a copy of the License with this software/source code. If you did not, a copy can be found at the following URL: https://opensource.org/licenses/CDDL-1.0 THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO WARRANTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE EXPRESS OR IMPLIED #/ /# util.tnsl Utility functions that may be useful in many places. #/ /; string_equate({}charp s1, s2) [bool] /; if (len s1 !== len s2) ;return false ;/ /; loop (int i = 0; i < len s1) [i++] /; if (s1{i} !== s2{i}) ;return false ;/ ;/ ;return true ;/ /; add_strings (~{}charp a, b) [{}charp] ;{}charp out = "" /; loop (int i = 0; i < len a`) [i++] ;out.append(a`{i}) ;/ /; loop (int i = 0; i < len b`) [i++] ;out.append(b`{i}) ;/ ;return out ;/ /; is_whitespace (charp c) [bool] ;return c == '\t' || c == '\n' || c == ' ' ;/ /; is_digit (charp c) [bool] ;return c !< '0' && c !> '9' ;/ /; is_alpha (charp c) [bool] ;bool low = c !< 'A' && c !> 'Z', high = c !< 'a' && c >! 'z' ;return low || high ;/ /; digit_to_char(int i) [charp] ;charp out = '0' ;out = out + (i % 10) ;return out ;/ /; string_from_int(int i) [{}charp] ;{}charp c = "" /; if (i < 0) ;c = "-" ;i = -i ;/ ;c.append(digit_to_char(i)) /; loop (i !== 0) [i = i / 10] ;c.append(digit_to_char(i)) ;/ ;return c ;/ /; get_escape_code (charp c) [charp] /; if (c == '\'') ;return '\'' ;; else if (c == 'n') ;return '\n' ;; else if (c == 't') ;return '\t' ;; else if (c == '\r') ;return '\r' ;; else if (c == '\b') ;return '\b' ;/ ;return 0 ;/ /; unquote_char ({}charp c) [charp] /; if (c{1} == '\\') /; if (c{2} == 'u') ;return 0 ;/ ;return get_escape_code(c{2}) ;/ ;return c{1} ;/ /; unquote_string ({}charp str) [{}charp] ;/