summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex/luatexbase/modutils.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luatexbase/modutils.lua')
-rw-r--r--Master/texmf-dist/tex/luatex/luatexbase/modutils.lua113
1 files changed, 36 insertions, 77 deletions
diff --git a/Master/texmf-dist/tex/luatex/luatexbase/modutils.lua b/Master/texmf-dist/tex/luatex/luatexbase/modutils.lua
index 64b420c12cb..40063557c8b 100644
--- a/Master/texmf-dist/tex/luatex/luatexbase/modutils.lua
+++ b/Master/texmf-dist/tex/luatex/luatexbase/modutils.lua
@@ -13,103 +13,62 @@
--
module("luatexbase", package.seeall)
local modules = modules or {}
-local requiredversions = {}
-local function datetonumber(date)
+local function date_to_int(date)
numbers = string.gsub(date, "(%d+)/(%d+)/(%d+)", "%1%2%3")
return tonumber(numbers)
end
-local function isdate(date)
- for _, _ in string.gmatch(date, "%d+/%d+/%d+") do
- return true
- end
- return false
-end
-local date, number = 1, 2
-local function parse_version(version)
- if isdate(version) then
- return {type = date, version = datetonumber(version), orig = version}
- else
- return {type = number, version = tonumber(version), orig = version}
- end
+local function msg_format(msg_type, mod_name, ...)
+ local cont = '('..mod_name..')' .. ('Module: '..msg_type):gsub('.', ' ')
+ return 'Module '..mod_name..' '..msg_type..': '
+ .. string.format(...):gsub('\n', '\n'..cont) .. '\n'
end
local function module_error_int(mod, ...)
- error('Module '..mod..' error: '..string.format(...), 3)
+ error(msg_format('error', mod, ...), 3)
end
function module_error(mod, ...)
module_error_int(mod, ...)
end
function module_warning(mod, ...)
- texio.write_nl("Module "..mod.." warning: "..string.format(...))
+ for _, line in ipairs(msg_format('warning', mod, ...):explode('\n')) do
+ texio.write_nl(line)
+ end
end
function module_info(mod, ...)
- texio.write_nl(mod..": "..string.format(...))
+ for _, line in ipairs(msg_format('info', mod, ...):explode('\n')) do
+ texio.write_nl(line)
+ end
end
-function module_log(mod, ...)
- texio.write_nl('log', mod..": "..string.format(...))
+function module_log(mod, msg, ...)
+ texio.write_nl('log', mod..': '..msg:format(...))
end
-function module_term(mod, ...)
- texio.write_nl('term', mod..": "..string.format(...))
+function errwarinf(name)
+ return function(...) module_error_int(name, ...) end,
+ function(...) module_warning(name, ...) end,
+ function(...) module_info(name, ...) end,
+ function(...) module_log(name, ...) end
end
-local function err(...) module_error_int('luatexbase.modutils', ...) end
-local function warn(...) module_warning('luatexbase.modutils', ...) end
-function use_module(name)
+local err, warn = errwarinf('luatexbase.modutils')
+function require_module(name, req_date)
require(name)
- if not modules[name] then
- warn("Module didn't properly identified itself: %s", name)
- end
-end
-function require_module(name, version)
- if not version then
- return use_module(name)
- end
- luaversion = parse_version(version)
- if modules[name] then
- if luaversion.type == date then
- if datetonumber(modules[name].date) < luaversion.version then
- err("found module `%s' loaded in version %s, "
- .."but version %s was required",
- name, modules[name].date, version)
- end
- else
- if modules[name].version < luaversion.version then
- err("found module `%s' loaded in version %.02f, "
- .."but version %s was required",
- name, modules[name].version, version)
- end
+ local info = modules[name]
+ if not info then
+ warn("module '%s' was not properly identified", name)
+ elseif version then
+ if not (info.date and date_to_int(info.date) > date_to_int(req_date))
+ then
+ warn("module '%s' required in version '%s'\n"
+ .. "but found in version '%s'", name, req_date, info.date)
end
- else
- requiredversions[name] = luaversion
- use_module(name)
end
end
-function provides_module(mod)
- if not mod then
- err('cannot provide nil module')
- return
- end
- if not mod.version or not mod.name or not mod.date
- or not mod.description then
- err("invalid module registered: "
- .."fields name, version, date and description are mandatory")
- return
- end
- requiredversion = requiredversions[mod.name]
- if requiredversion then
- if requiredversion.type == date
- and requiredversion.version > datetonumber(mod.date) then
- err("loading module %s in version %s, "
- .."but version %s was required",
- mod.name, mod.date, requiredversion.orig)
- elseif requiredversion.type == number
- and requiredversion.version > mod.version then
- err("loading module %s in version %.02f, "
- .."but version %s was required",
- mod.name, mod.version, requiredversion.orig)
- end
+function provides_module(info)
+ if not (info and info.name) then
+ err('provides_module: missing information')
end
- modules[mod.name] = mod
- texio.write_nl('log', string.format("Lua module: %s %s v%.02f %s\n",
- mod.name, mod.date, mod.version, mod.description))
+ texio.write_nl('log', string.format("Lua module: %s %s %s %s\n",
+ info.name, info.date or '', info.version or '', info.description or ''))
+ modules[info.name] = info
+ return errwarinf(info.name)
end
--
-- End of File `modutils.lua'.