// Cubescript Multidimensional Arrays persistidents 0 islists = [ bool = 0 loop il (listlen $arg1) [ if (> (listlen (at $arg1 $il)) 1) [ bool = 1; break ] ] result $bool ] countQuotes = [ numquotes = 0 loop cq (strlen $arg1) [ if (testchar (substr $arg1 $cq 1) 8) [ ++ numquotes ] ] result $numquotes ] getQuotePosition = [ open_q = -1 loop gqp (strlen $arg1) [ if (testchar (substr $arg1 $gqp 1) 8) [ open_q = $gqp break ] ] ] reverseString = [ oldstr = $arg1 newstr = [] loop ri (strlen $oldstr) [ newstr = (concatword $newstr (substr $oldstr (* (+ $ri 1) -1) 1)) ] result $newstr ] // returns the subarray name of a open bracket position in an existing mdarray extractSubarrayName = [ open_bracket_pos = $arg2 subarray_name = [] loop esn (strlen $arg1) [ tmpchar = (substr $arg1 (- $open_bracket_pos (+ $esn 2)) 1) if (testchar $tmpchar 7) break [ if (&& (! (strcmp $tmpchar "[")) (! (strcmp $tmpchar "]"))) [ subarray_name = (concatword $subarray_name $tmpchar) ] ] ] result (reverseString $subarray_name) ] // adds a new subarray to an existing mdarray MDArray_New_Subarray = [ if (= (findlist (getalias $arg1) $arg2) -1) [ add2list $arg1 $arg2 if (islists $arg3) [ add2list $arg1 (addpunct (concatword [ ] $arg3 [ ]) 1) ] [ add2list $arg1 (addpunct (concatword [ ] (addpunct $arg3) [ ]) 1) ] ] ] // finds the open and close bracket pair positions of a subarray in an existing mdarray MDArray_Get_Bracket_Positions = [ targ1 = $arg1 targ2 = $arg2 open_bracket_pos = (+ (strpos $targ1 $targ2) (+ (strlen $targ2) 1)) close_bracket_pos = -1 loop mgp (- (strlen $targ1) $open_bracket_pos) [ next_char = (+ (+ $open_bracket_pos $mgp) 1) if (strstr (substr $targ1 $next_char 1) "]") [ close_bracket_pos = $next_char break ] ] ] // returns either an entire subarray or a single element from a subarray of an existing mdarray MDArray_Get = [ marg1 = $arg1 marg2 = $arg2 marg3 = $arg3 mdarray = (getalias $marg1) target = (findlist $mdarray $marg2) if (!= $target -1) [ MDArray_Get_Bracket_Positions $mdarray $marg2 if (!= $close_bracket_pos -1) [ ++ open_bracket_pos // skip the bracket itself when extracting the subarray with the line below -- close_bracket_pos subarray = (substr $mdarray $open_bracket_pos (- $close_bracket_pos $open_bracket_pos)) if (= (countQuotes $subarray) 2) [ getQuotePosition $subarray if (&& (checkrange $open_q 0 1) (testchar (substr $subarray -1) 8)) [ // beginning/end quotes need to be trimmed from single-list subarrays subarray = (substr $subarray (+ $open_q 1)) subarray = (substr $subarray 0 (- (strlen $subarray) 1)) ] ] if (= $marg3 -1) [ result $subarray ] [ result (at $subarray $marg3) ] ] ] [ echo (red)Error: $marg2 is not a subarray of $marg1 ] ] // returns a list of all opening bracket "[" positions in an existing mdarray MDArray_Get_All_Opening_Bracket_Positions = [ o_positions = [] loop mga (strlen $arg1) [ if (strcmp (substr $arg1 $mga 1) "[") [ add2list o_positions $mga ] ] if (listlen $o_positions) [ result $o_positions ] [ result -1 ] ] // returns the number of subarrays in an existing mdarray MDArray_Get_Subarray_Count = [ result (listlen (MDArray_Get_All_Opening_Bracket_Positions (getalias $arg1))) ] // returns a list of all subarray names in an existing mdarray MDArray_Get_All_Subarray_Names = [ opening_brackets = (MDArray_Get_All_Opening_Bracket_Positions (getalias $arg1)) subarray_names = [] loop mgn (listlen $opening_brackets) [ add2list subarray_names (extractSubarrayName (getalias $arg1) (at $opening_brackets $mgn)) ] result $subarray_names ] // searches the contents of all subarrays in an existing mdarray for a keyword // returns a list of all subarray names that have content with matches MDArray_Search = [ mdarray = (getalias $arg1) token = $arg2 subarrays = (MDArray_Get_All_Subarray_Names $arg1) search_results = [] loop ms (listlen $subarrays) [ curarray = (MDArray_Get $arg1 (at $subarrays $ms) -1) if (strstr $curarray $token) [ if (! (strstr $search_results (at $subarrays $ms))) [ add2list search_results (at $subarrays $ms) ] ] ] result $search_results ] // deletes an entire subarray from an existing mdarray MDArray_Delete_Subarray = [ orig_array = (getalias $arg1) target_subarray = $arg2 target_pos = (strpos $orig_array $target_subarray) gotclose = -1 delstr = [] if (!= $target_pos -1) [ loop mds (strlen $orig_array) [ if (< $mds $target_pos) continue [ if (strcmp (substr $orig_array $mds 1) "]") [ gotclose = $mds; break ] ] ] delstr = (substr $orig_array $target_pos (- (+ $gotclose 1) $target_pos)) $arg1 = (strreplace $orig_array $delstr []) result (getalias $arg1) ] ] // modifies an existing element in an existing subarray MDArray_Modify_Subarray = [ original_subarray = (MDArray_Get $arg1 $arg2 -1) target_elem = $arg3 new_elem = $arg4 new_subarray = [] if (! (countQuotes $original_subarray)) [ original_subarray = (addpunct $original_subarray) ] loop mms (listlen $original_subarray) [ next_elem = (at $original_subarray $mms) if (= $mms $target_elem) [ if (> (listlen $new_elem) 1) [ add2list new_subarray (addpunct $new_elem) ] [ add2list new_subarray $new_elem ] ] [ if (> (listlen $next_elem) 1) [ add2list new_subarray (addpunct $next_elem) ] [ add2list new_subarray $next_elem ] ] ] MDArray_Delete_Subarray $arg1 $arg2 MDArray_New_Subarray $arg1 $arg2 $new_subarray ] // adds a new element to an existing subarray MDArray_Add_To_Subarray = [ mdarray = (getalias $arg1) to_add = $arg3 if (!= (findlist $mdarray $arg2) -1) [ subarray = (MDArray_Get $arg1 $arg2 -1) if (! (countQuotes $subarray)) [ subarray = (addpunct $subarray) ] if (! (countQuotes $to_add)) [ to_add = (addpunct $to_add) ] MDArray_Delete_Subarray $arg1 $arg2 MDArray_New_Subarray $arg1 $arg2 (format [%1 %2] $subarray $to_add) ] ] // some of these aliases can cause issues if they get stored in saved.cfg (missing bracket errors/etc.) addListOnQuit [bool MDArray_New_Subarray MDArray_Get_Bracket_Positions MDArray_Get reverseString MDArray_Get_All_Opening_Bracket_Positions MDArray_Get_Subarray_Count MDArray_Get_All_Subarray_Names extractSubarrayName MDArray_Search MDArray_Delete_Subarray MDArray_Modify_Subarray original_subarray target_elem new_elem new_subarray next_elem islists hasQuotePair got_open_quote got_close_quote mdarray subarray firstchar lastchar oldstr newstr subarray_names subarray_name tmpchar token subarrays search_results curarray orig_array target_subarray target_pos gotclose delstr next_char] persistidents 1