Commit: b216f21c5b380798e72a821ea9bba313c876383f
Parent: 4f537874f2ca23bb28fa1dd8f4c5576313b2fa80
Author: Ren Tatsumoto
Date:   Fri, 14 May 2021 19:52:25 +0300
get rid of gsub
Diffstat:
1 file changed, 17 insertions(+), 22 deletions(-)
diff --git a/subs2srs.lua b/subs2srs.lua
@@ -297,26 +297,21 @@ local function get_episode_number(filename)
     local filename_reversed = filename:reverse()
 
     local ep_num_patterns = {
-        "%s?(%d?%d?%d)[pP]?[eE]", -- Starting with E or EP (case-insensitive). "Example Series S01E01"
-        "%)(%d?%d?%d)%(",         -- Surrounded by parentheses. "Example Series (12)"
-        "%](%d?%d?%d)%[",         -- Surrounded by brackets. "Example Series [01]"
-        "%s(%d?%d?%d)%s",         -- Surrounded by whitespace. "Example Series 124 [1080p 10-bit]"
-        "_(%d?%d?%d)_",           -- Surrounded by underscores. "Example_Series_04_1080p"
-        "^(%d?%d?%d)[%s_]"        -- Ending to the episode number. "Example Series 124"
+        "%s?(%d?%d?%d)[pP]?[eE]",  -- Starting with E or EP (case-insensitive). "Example Series S01E01"
+        "%)(%d?%d?%d)%(",          -- Surrounded by parentheses. "Example Series (12)"
+        "%](%d?%d?%d)%[",          -- Surrounded by brackets. "Example Series [01]"
+        "%s(%d?%d?%d)%s",          -- Surrounded by whitespace. "Example Series 124 [1080p 10-bit]"
+        "_(%d?%d?%d)_",            -- Surrounded by underscores. "Example_Series_04_1080p"
+        "^(%d?%d?%d)[%s_]",        -- Ending to the episode number. "Example Series 124"
     }
 
-    local episode
+    local s, e, episode_num
     for _, pattern in pairs(ep_num_patterns) do
-        if episode ~= nil then break end
-        _, ep_end_position, episode = string.find(filename_reversed, pattern)
-    end
-
-    if not is_empty(episode) then
-        -- As the string (from where the end position is) was reversed,
-        -- subtracting the end_position from the length of the filename will get us the start position
-        return episode:reverse(), string.len(filename) - ep_end_position
-    else
-        return '', nil
+        if not is_empty(episode_num) then
+            return #filename - e, #filename - s, episode_num:reverse()
+        else
+            s, e, episode_num = string.find(filename_reversed, pattern)
+        end
     end
 end
 
@@ -324,15 +319,15 @@ local function tag_format(filename)
     filename = remove_extension(filename)
     filename = remove_common_resolutions(filename)
 
-    local episode, ep_start_position = get_episode_number(filename)
+    local s, e, episode_num = get_episode_number(filename)
 
-    if config.tag_del_episode_num == true and ep_start_position ~= nil then
+    if config.tag_del_episode_num == true and not is_empty(s) then
         if config.tag_del_after_episode_num == true then
             -- Removing everything (e.g. episode name) after the episode number including itself.
-            filename = filename:sub(0, ep_start_position)
+            filename = filename:sub(1, s)
         else
             -- Removing the first found instance of the episode number.
-            filename = filename:reverse():gsub(episode:reverse(), '', 1):reverse()
+            filename = filename:sub(1, s) .. filename:sub(e + 1, -1)
         end
     end
 
@@ -351,7 +346,7 @@ local function tag_format(filename)
     filename = filename:gsub(" ", "_")
     filename = filename:gsub("_%-_", "_") -- Replaces garbage _-_ substrings with a underscore
     filename = remove_leading_trailing_dashes(filename)
-    return filename, episode
+    return filename, episode_num
 end
 
 local function substitute_fmt(tag)