Diff

core/configmanager.lua @ 794:912dc389935a

Add Include command to include extra configuration files from the main one
author Matthew Wild <mwild1@gmail.com>
date Fri, 13 Feb 2009 14:38:17 +0000
parent 793:55add3b87c01
child 795:e27a48e35bbb
line wrap: on
line diff
--- a/core/configmanager.lua	Fri Feb 13 14:37:15 2009 +0000
+++ b/core/configmanager.lua	Fri Feb 13 14:38:17 2009 +0000
@@ -9,8 +9,8 @@
 
 
 local _G = _G;
-local 	setmetatable, loadfile, pcall, rawget, rawset, io = 
-		setmetatable, loadfile, pcall, rawget, rawset, io;
+local 	setmetatable, loadfile, pcall, rawget, rawset, io, error = 
+		setmetatable, loadfile, pcall, rawget, rawset, io, error;
 
 module "configmanager"
 
@@ -97,7 +97,8 @@
 	function parsers.lua.load(data)
 		local env;
 		-- The ' = true' are needed so as not to set off __newindex when we assign the functions below
-		env = setmetatable({ Host = true; host = true; Component = true, component = true }, { __index = function (t, k)
+		env = setmetatable({ Host = true; host = true; Component = true, component = true,
+							Include = true, include = true }, { __index = function (t, k)
 												return rawget(_G, k) or
 														function (settings_table)
 															config[__currenthost or "*"][k] = settings_table;
@@ -124,6 +125,18 @@
 		end
 		env.component = env.Component;
 		
+		function env.Include(file)
+			local f, err = io.open(file);
+			if f then
+				local data = f:read("*a");
+				local ok, err = parsers.lua.load(data);
+				if not ok then error(err:gsub("%[string.-%]", file), 0); end
+			end
+			if not f then error("Error loading included "..file..": "..err, 0); end
+			return f, err;
+		end
+		env.include = env.Include;
+		
 		local chunk, err = loadstring(data);
 		
 		if not chunk then