From c469d4b7c07e224f685202ddf3308a2aff1093d1 Mon Sep 17 00:00:00 2001
From: Cameron Taylor <cameron.taylor.ninja@gmail.com>
Date: Mon, 7 Aug 2023 16:01:22 -0400
Subject: [PATCH] regexp filter

---
 source/funkin/FreeplayState.hx | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/source/funkin/FreeplayState.hx b/source/funkin/FreeplayState.hx
index 277db9873..bc3d9bbce 100644
--- a/source/funkin/FreeplayState.hx
+++ b/source/funkin/FreeplayState.hx
@@ -393,7 +393,7 @@ class FreeplayState extends MusicBeatSubState
           case "ALL":
             generateSongList(null, true);
           default:
-            generateSongList({filterType: STARTSWITH, filterData: str}, true);
+            generateSongList({filterType: REGEXP, filterData: str}, true);
         }
       };
 
@@ -477,6 +477,13 @@ class FreeplayState extends MusicBeatSubState
     {
       switch (filterStuff.filterType)
       {
+        case REGEXP:
+          // filterStuff.filterData has a string with the first letter of the sorting range, and the second one
+          // this creates a filter to return all the songs that start with a letter between those two
+          var filterRegexp = new EReg("^[" + filterStuff.filterData + "].*", "i");
+          tempSongs = tempSongs.filter(str -> {
+            return filterRegexp.match(str.songName);
+          });
         case STARTSWITH:
           tempSongs = tempSongs.filter(str -> {
             return str.songName.toLowerCase().startsWith(filterStuff.filterData);
@@ -1045,6 +1052,7 @@ typedef SongFilter =
 enum abstract FilterType(String)
 {
   var STARTSWITH;
+  var REGEXP;
   var FAVORITE;
   var ALL;
 }