mirror of
https://github.com/TangentFoxy/love-release.git
synced 2025-07-28 02:52:20 +00:00
159 lines
3.7 KiB
Lua
159 lines
3.7 KiB
Lua
--- Provides utility functions and constants.
|
|
-- @module utils
|
|
|
|
local cfg = require 'luarocks.core.cfg'
|
|
local fs = require 'luarocks.fs'
|
|
local dir = require 'luarocks.dir'
|
|
|
|
local utils = {}
|
|
|
|
assert(cfg.init())
|
|
fs.init()
|
|
|
|
--[[ CACHE ]]--
|
|
|
|
--- Cache directory.
|
|
utils.cache = nil
|
|
|
|
do
|
|
local cache = dir.dir_name(cfg.local_cache) .. "/love-release"
|
|
assert(fs.make_dir(cache))
|
|
utils.cache = cache
|
|
end
|
|
|
|
|
|
--[[ LÖVE VERSION ]]--
|
|
|
|
utils.love = {}
|
|
|
|
local ver = {
|
|
major = nil,
|
|
minor = nil,
|
|
patch = nil,
|
|
str = nil
|
|
}
|
|
utils.love.ver = ver
|
|
|
|
function ver:new(str)
|
|
local major, minor, patch = str:match("^(%d+)%.?(%d*)%.?(%d*)$")
|
|
assert(type(major) == 'string',
|
|
("Could not extract version number(s) from %q"):format(str))
|
|
local o = { major = tonumber(major),
|
|
minor = tonumber(minor),
|
|
patch = tonumber(patch),
|
|
str = str }
|
|
setmetatable(o, self)
|
|
self.__index = self
|
|
return o
|
|
end
|
|
|
|
function ver:__eq(other)
|
|
return self.major == other.major and self.minor == other.minor and
|
|
self.patch == other.patch
|
|
end
|
|
|
|
function ver:__lt(other)
|
|
if self.major ~= other.major then return self.major < other.major end
|
|
if self.minor ~= other.minor then return self.minor < other.minor end
|
|
if self.patch ~= other.patch then return self.patch < other.patch end
|
|
return false
|
|
end
|
|
|
|
function ver:__tostring()
|
|
local buffer = { ("%d.%d"):format(self.major, self.minor) }
|
|
if self.patch then table.insert(buffer, "." .. self.patch) end
|
|
return table.concat(buffer)
|
|
end
|
|
|
|
setmetatable(ver, { __call = ver.new })
|
|
|
|
--- All supported LÖVE versions.
|
|
-- @local
|
|
utils.love.versionTable = {
|
|
ver'11.2', ver'11.1', ver'11.0',
|
|
ver'0.10.2', ver'0.10.1', ver'0.10.0',
|
|
ver'0.9.2', ver'0.9.1', ver'0.9.0',
|
|
ver'0.8.0',
|
|
ver'0.7.2', ver'0.7.1', ver'0.7.0',
|
|
ver'0.6.2', ver'0.6.1', ver'0.6.0',
|
|
--[[
|
|
ver'0.5.0',
|
|
ver'0.4.0',
|
|
ver'0.3.2', ver'0.3.1', ver'0.3.0',
|
|
ver'0.2.1', ver'0.2.0',
|
|
ver'0.1.1',
|
|
--]]
|
|
}
|
|
|
|
--- Last script LÖVE version.
|
|
utils.love.lastVersion = utils.love.versionTable[1]
|
|
|
|
--- First supported LÖVE version.
|
|
utils.love.minVersion = utils.love.versionTable[#utils.love.versionTable]
|
|
|
|
--- Checks if a LÖVE version exists and is supported.
|
|
-- @tparam ver version LÖVE version.
|
|
-- @treturn bool true is the version is supported.
|
|
function utils.love.isSupported(version)
|
|
assert(getmetatable(version) == ver)
|
|
if version >= utils.love.minVersion
|
|
and version <= utils.love.lastVersion then
|
|
for _, v in ipairs(utils.love.versionTable) do
|
|
if version == v then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
--[[ LUA ]]--
|
|
|
|
utils.lua = {}
|
|
|
|
--- Compiles a file to LuaJIT bytecode.
|
|
-- @string file file path.
|
|
-- @treturn string bytecode.
|
|
function utils.lua.bytecode(file)
|
|
if package.loaded.jit then
|
|
return string.dump(assert(loadfile(file)), true)
|
|
else
|
|
local handle = io.popen('luajit -b '..file..' -')
|
|
local result = handle:read("*a")
|
|
handle:close()
|
|
return result
|
|
end
|
|
end
|
|
|
|
--- Escapes a string to use as a regex.
|
|
-- @string string to escape.
|
|
function utils.lua.escape_string_regex(string)
|
|
-- ^$()%.[]*+-?
|
|
return string:gsub('%%', '%%%%'):gsub('^%^', '%%^'):gsub('%$$', '%%$')
|
|
:gsub('%(', '%%('):gsub('%)', '%%)'):gsub('%.', '%%.')
|
|
:gsub('%[', '%%['):gsub('%]', '%%]'):gsub('%*', '%%*')
|
|
:gsub('%+', '%%+'):gsub('%-', '%%-'):gsub('%?', '%%?')
|
|
end
|
|
|
|
|
|
--[[ IO ]]--
|
|
|
|
local stdout = io.output(io.stdout)
|
|
local stderr = io.output(io.stderr)
|
|
utils.io = {}
|
|
|
|
--- Prints a message to stdout.
|
|
-- @string string the message.
|
|
function utils.io.out(string)
|
|
stdout:write(string)
|
|
end
|
|
|
|
--- Prints a message to stderr.
|
|
-- @string string the message.
|
|
function utils.io.err(string)
|
|
stderr:write(string)
|
|
end
|
|
|
|
|
|
return utils
|