@@ -37,14 +37,16 @@ function _is_liststr(s) = is_list(s) || is_str(s);
3737// s5=substr("abcdefg",len=-2); // Returns ""
3838function substr(str , pos= 0 , len= undef) =
3939 assert(is_string(str ))
40- is_list(pos) ? _substr(str , pos[0 ], pos[1 ]- pos[0 ]+ 1 ) :
41- len == undef ? _substr(str , pos, len(str )- pos) :
42- _substr(str ,pos,len);
43-
44- function _substr(str ,pos,len,substr= "" ) =
45- len <= 0 || pos>= len(str ) ? substr :
46- _substr(str , pos+ 1 , len- 1 , str (substr, str [pos]));
40+ is_list(pos) ? _substr(str , pos[0 ], pos[1 ]- pos[0 ]+ 1 )
41+ : len == undef ? _substr(str , pos, len(str )- pos)
42+ : _substr(str ,pos,len);
4743
44+ function _substr(str ,pos,len) =
45+ assert(pos>= 0 ,"pos value for substr() must be nonnegative" )
46+ len <= 0 || pos>= len(str ) ? ""
47+ :
48+ chr([for (i= [pos:pos+ len- 1 ]) ord(str [i])]);
49+
4850
4951// Function: suffix()
5052// Synopsis: Returns the last few characters of a string.
@@ -348,7 +350,7 @@ function str_pad(str,length,char=" ",left=false) =
348350 assert(is_str(char) && len(char)== 1 , "char must be a single character string" )
349351 assert(is_bool(left))
350352 let(
351- padding = str_join (repeat(char,length- len(str )))
353+ padding = chr (repeat(ord( char) ,length- len(str )))
352354 )
353355 left ? str (padding,str ) : str (str ,padding);
354356
@@ -393,7 +395,7 @@ function str_replace_char(str,char,replace) =
393395// s=downcase("ABCdef"); // Returns "abcdef"
394396function downcase(str ) =
395397 assert(is_string(str ))
396- str_join ([for (char= str ) let(code= ord(char)) code>= 65 && code<= 90 ? chr( code+ 32 ) : char ]);
398+ chr ([for (char= str ) let(code= ord(char)) code>= 65 && code<= 90 ? code+ 32 : code ]);
397399
398400
399401// Function: upcase()
@@ -411,7 +413,7 @@ function downcase(str) =
411413// s=upcase("ABCdef"); // Returns "ABCDEF"
412414function upcase(str ) =
413415 assert(is_string(str ))
414- str_join ([for (char= str ) let(code= ord(char)) code>= 97 && code<= 122 ? chr( code- 32 ) : char ]);
416+ chr ([for (char= str ) let(code= ord(char)) code>= 97 && code<= 122 ? code- 32 : code ]);
415417
416418
417419// Section: Random strings
@@ -433,8 +435,8 @@ function upcase(str) =
433435// charset = string to draw the characters from. Default: characters from "0" to "z".
434436// seed = random number seed
435437function rand_str(n, charset, seed) =
436- is_undef(charset)? str_join([ for (c = rand_int(48 ,122 ,n,seed)) chr(c)] )
437- : str_join ([for (i= rand_int(0 ,len(charset)- 1 ,n,seed)) charset[i]]);
438+ is_undef(charset)? chr( rand_int(48 ,122 ,n,seed))
439+ : chr ([for (i= rand_int(0 ,len(charset)- 1 ,n,seed)) ord( charset[i]) ]);
438440
439441
440442
@@ -609,17 +611,16 @@ function parse_num(str) =
609611// Example:
610612// str(123456789012345); // Returns "1.23457e+14"
611613// format_int(123456789012345); // Returns "123456789012345"
612- // format_int(-123456789012345); // Returns "-123456789012345"
614+ // format_int(-123456789012345); // Returns "-123456789012345"
615+ // format_int(12,3); // Returns 012
613616function format_int(i,mindigits= 1 ) =
614617 i< 0 ? str ("-" , format_int(- i,mindigits)) :
615618 let(i= floor (i), e= floor (log (i)))
616- i== 0 ? str_join([for (j= [0 :1 :mindigits- 1 ]) "0" ]) :
617- str_join(
618- concat(
619- [for (j= [0 :1 :mindigits- e- 2 ]) "0" ],
620- [for (j= [e:- 1 :0 ]) str (floor (i/pow (10 ,j)% 10 ))]
621- )
622- );
619+ i== 0 ? chr([for (j= [0 :1 :mindigits- 1 ]) 48 ]) :
620+ chr([
621+ for (j= [0 :1 :mindigits- e- 2 ]) 48 ,
622+ for (j= [e:- 1 :0 ]) 48 + (floor (i/pow (10 ,j)% 10 ))
623+ ]);
623624
624625
625626// Function: format_fixed()
@@ -715,7 +716,7 @@ function _format_matrix(M, sig=4, sep=1, eps=1e-9) =
715716 figure_dash = chr(8210 ),
716717 space_punc = chr(8200 ),
717718 space_figure = chr(8199 ),
718- sep = is_num(sep) && sep>= 0 ? str_join (repeat(space_figure,sep))
719+ sep = is_num(sep) && sep>= 0 ? chr (repeat(ord( space_figure) ,sep))
719720 : is_string(sep) ? sep
720721 : assert(false ,"Invalid separator: must be a string or positive integer giving number of spaces" ),
721722 strarr=
@@ -832,7 +833,7 @@ function format(fmt, vals) =
832833 typ== "G" ? upcase(format_float(val,default(prec,6 ))) :
833834 assert(false ,str ("Unknown format type: " ,typ)),
834835 padlen = max (0 ,wid- len(unpad)),
835- padfill = str_join ([for (i= [0 :1 :padlen- 1 ]) zero? "0" : " " ]),
836+ padfill = chr ([for (i= [0 :1 :padlen- 1 ]) zero? 48 : 32 ]),
836837 out = left? str (unpad, padfill) : str (padfill, unpad)
837838 )
838839 out, raw
0 commit comments