Minetest-WorldEditAdditions/worldeditadditions_core/utils/path.lua
2024-10-25 16:58:36 -07:00

54 lines
No EOL
1.5 KiB
Lua

--- A path manipulation class.
-- @class worldeditadditions_core.Path
local path = {}
-- Helper functions
local check = function( ... )
for _, v in ipairs( {...} ) do
if type(v) ~= "string" then
return false, tostring(v) .. " is not a string."
end
end
return true
end
--- The directory separator on the current host system
-- @value string
path.sep = "/"
if package and package.config then
path.sep = package.config:sub(1,1)
end
--- Format string into path
-- @param str string The string to process
-- @return string|false, string? The formatted path string or
-- false and an error message.
-- @example Basic usage
-- local path = path.norm("C:\\Users\\me\\".."/Documents//code.lua")
path.norm = function( str )
local ok, err = check(str)
if not ok then return false, err end
return ({str:gsub("[/\\]+", path.sep)})[1]
end
--- Joins the given path segments into a single path with dirsep.
-- @param ... string The path fragments to process and join.
-- @return string|false, string? The joined path or
-- false and an error message.
-- @example Basic usage
-- local path = file_path("C:\\Users", "me", "/Documents/code.lua")
path.join = function( ... )
local ok, err = check( ... )
if not ok then return false, err end
local pathlets = { ... }
return path.norm(table.concat(pathlets, path.sep))
end
local Path = {}
Path.__name = "Path" -- A hack to allow easier identification
Path.__index = Path
Path.__call = function(self, ...)
return self.join(...)
end
return setmetatable(path, Path)