From 6aead2330aad7663a2a90353535722fc7dc1aa58 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Fri, 14 Nov 2025 14:33:15 -0600 Subject: [PATCH] Prelude.splitRecursive --- src/kiss/Prelude.hx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/kiss/Prelude.hx b/src/kiss/Prelude.hx index 3f91efc..af1181a 100644 --- a/src/kiss/Prelude.hx +++ b/src/kiss/Prelude.hx @@ -57,6 +57,7 @@ typedef HashableString = { hashCode:()->Int }; +@:keep class Prelude { public static function hashableString(s:String):HashableString { return { @@ -404,6 +405,22 @@ class Prelude { return filter(_splitByAll([s], delimiters)); } + /** + * Split a string by the first delimiter, then recursively split the substrings by + * the following delimiters in order. + * i.e. (splitRecursive "a:b::c:d" ["::" ":"]) returns [["a" "b"] ["c" "d"]] + */ + public static function splitRecursive(s:String, delimiters:Array):Array { + var parts = s.split(delimiters[0]); + return if (delimiters.length == 1) { + parts; + } else { + [for (part in parts) { + splitRecursive(part, delimiters.slice(1)); + }]; + } + } + public static function reverse(l:kiss.List):kiss.List { var c = l.copy(); c.reverse();