From f5d288f64bff1739b79f99e2accdf0aa7886af4a Mon Sep 17 00:00:00 2001 From: Folkert Kevelam Date: Tue, 8 Oct 2024 22:13:51 +0200 Subject: [PATCH] Initial commit --- lua/SpecSwitcher/path.lua | 98 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 lua/SpecSwitcher/path.lua diff --git a/lua/SpecSwitcher/path.lua b/lua/SpecSwitcher/path.lua new file mode 100644 index 0000000..c980473 --- /dev/null +++ b/lua/SpecSwitcher/path.lua @@ -0,0 +1,98 @@ +local path = {} + +function path.Common_Root( Left, Right, Separator ) + local Sep = Separator or "/" + local smallest_string = nil + local largest_string = nil + if string.len(Left) > string.len(Right) then + smallest_string = Right + largest_string = Left + else + smallest_string = Left + largest_string = Right + end + + local last_sep_idx = 1 + local sep = string.byte(Sep) + for i = 1, #smallest_string do + if smallest_string:byte(i) == sep then + last_sep_idx = i + end + + if smallest_string:byte(i) ~= largest_string:byte(i) then + break + end + end + + local match = string.sub(smallest_string, 1, last_sep_idx - 1) + + if match == '' then + return nil + else + return match + end +end + +function path.Get_Extension( P ) + if P == nil then + return nil + end + + local rev_string = string.reverse(P) + local start_idx = 0 + local end_idx = 0 + start_idx, end_idx = string.find(rev_string, ".", 1, true) + + if start_idx == nil then + return nil + else + return string.sub(P, #P - (start_idx -2)) + end +end + +function path.Get_Extension_From_List( P, Extension_List ) + if Extension_List == nil or P == nil then + return nil + end + + local ext_length = 0 + for _,item in ipairs(Extension_List) do + local current_ext_length = #item + if current_ext_length > ext_length then + ext_length = current_ext_length + end + end + + local rev_string = string.reverse(P) + local start_idx = 0 + local end_idx = 0 + local match = nil + while ( true ) do + start_idx, end_idx = string.find(rev_string, ".", start_idx+1, true) + if start_idx == nil or (start_idx-1) > ext_length then + break + end + + for _,exts in ipairs(Extension_List) do + if exts == string.sub(P, #P - (start_idx -2)) then + match = exts + end + end + end + + return match +end + +function path.Get_Ext( P, Extension_List ) + if Extension_List == nil then + return path.Get_Extension(P) + else + return path.Get_Extension_From_List(P, Extension_List) + end +end + +print(path.Common_Root("/home/folkert/Documents/Projects","/home/folkert/Downloads/sub/sub2/sub3/sub4/hello.txt")) +print(path.Get_Ext("/home/folkert/Documents/projects.wo.cp", {"o.cp"})) + + +return path