mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-11-23 07:43:01 +00:00
54 lines
1.5 KiB
Lua
54 lines
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, 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.new("C:\\Users\\me\\".."/Documents//code.lua")
|
||
|
path.new = 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 pathlets = { ... }
|
||
|
local ok, err = check(pathlets)
|
||
|
if not ok then return false, err end
|
||
|
return path.new(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)
|