TradeSkillMaster/Core/Service/Groups/Path.lua

82 lines
2.5 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local _, TSM = ...
local Path = TSM.Groups:NewPackage("Path")
local String = TSM.Include("Util.String")
local private = {}
-- ============================================================================
-- Module Functions
-- ============================================================================
function Path.GetName(groupPath)
local _, name = private.SplitPath(groupPath)
return name
end
function Path.GetParent(groupPath)
local parentPath = private.SplitPath(groupPath)
return parentPath
end
function Path.Split(groupPath)
return private.SplitPath(groupPath)
end
function Path.Join(...)
if select(1, ...) == TSM.CONST.ROOT_GROUP_PATH then
return Path.Join(select(2, ...))
end
return strjoin(TSM.CONST.GROUP_SEP, ...)
end
function Path.IsChild(groupPath, parentPath)
if parentPath == TSM.CONST.ROOT_GROUP_PATH then
return groupPath ~= TSM.CONST.ROOT_GROUP_PATH
end
return strmatch(groupPath, "^"..String.Escape(parentPath)..TSM.CONST.GROUP_SEP) and true or false
end
function Path.Format(groupPath)
if not groupPath then return end
local result = gsub(groupPath, TSM.CONST.GROUP_SEP, "->")
return result
end
function Path.GetRelative(groupPath, prefixGroupPath)
if groupPath == prefixGroupPath then
return TSM.CONST.ROOT_GROUP_PATH
end
local relativePath, numSubs = gsub(groupPath, "^"..String.Escape(prefixGroupPath)..TSM.CONST.GROUP_SEP, "")
assert(numSubs == 1 and relativePath)
return relativePath
end
function Path.GetTopLevel(groupPath)
assert(groupPath ~= TSM.CONST.ROOT_GROUP_PATH)
return strmatch(groupPath, "^([^"..TSM.CONST.GROUP_SEP.."]+)")
end
-- ============================================================================
-- Private Helper Functions
-- ============================================================================
function private.SplitPath(groupPath)
local parentPath, groupName = strmatch(groupPath, "^(.+)"..TSM.CONST.GROUP_SEP.."([^"..TSM.CONST.GROUP_SEP.."]+)$")
if parentPath then
return parentPath, groupName
elseif groupPath ~= TSM.CONST.ROOT_GROUP_PATH then
return TSM.CONST.ROOT_GROUP_PATH, groupPath
else
return nil, groupPath
end
end