local _G = _G;
+local setmetatable, loadfile, pcall, rawget, rawset, io =
+ setmetatable, loadfile, pcall, rawget, rawset, io;
module "configmanager"
local parsers = {};
end };
end
+function getconfig()
+ return config;
+end
+
function get(host, section, key)
local sec = config[host][section];
if sec then
end
function load(filename, format)
+ format = format or filename:match("%w+$");
if parsers[format] and parsers[format].load then
local f = io.open(filename);
if f then
- local ok, err = parsers[format](f:read("*a"));
+ local ok, err = parsers[format].load(f:read("*a"));
f:close();
return ok, err;
end
end
- return false, "no parser";
+ if not format then
+ return nil, "no parser specified";
+ else
+ return false, "no parser";
+ end
end
function save(filename, format)
end
end
+-- Built-in Lua parser
do
+ local loadstring, pcall, setmetatable = _G.loadstring, _G.pcall, _G.setmetatable;
+ local setfenv, rawget, tostring = _G.setfenv, _G.rawget, _G.tostring;
parsers.lua = {};
function parsers.lua.load(data)
- local env = setmetatable({}, { __index = function (t, k)
- if k:match("^mod_") then
- return function (settings_table)
+ local env;
+ env = setmetatable({ Host = true; host = true; }, { __index = function (t, k)
+ return rawget(_G, k) or
+ function (settings_table)
config[__currenthost or "*"][k] = settings_table;
end;
- end
- return rawget(_G, k);
+ end,
+ __newindex = function (t, k, v)
+ set(env.__currenthost or "*", "core", k, v);
end});
function env.Host(name)
- env.__currenthost = name;
+ rawset(env, "__currenthost", name);
+ set(name or "*", "core", "defined", true);
end
+ env.host = env.Host;
local chunk, err = loadstring(data);
return nil, err;
end
-
-
return true;
end