143 local env; |
143 local env; |
144 -- The ' = true' are needed so as not to set off __newindex when we assign the functions below |
144 -- The ' = true' are needed so as not to set off __newindex when we assign the functions below |
145 env = setmetatable({ |
145 env = setmetatable({ |
146 Host = true, host = true, VirtualHost = true, |
146 Host = true, host = true, VirtualHost = true, |
147 Component = true, component = true, |
147 Component = true, component = true, |
148 Include = true, include = true, RunScript = dofile }, { |
148 Include = true, include = true, RunScript = true }, { |
149 __index = function (t, k) |
149 __index = function (t, k) |
150 return rawget(_G, k) or |
150 return rawget(_G, k) or |
151 function (settings_table) |
151 function (settings_table) |
152 config[__currenthost or "*"][k] = settings_table; |
152 config[__currenthost or "*"][k] = settings_table; |
153 end; |
153 end; |
203 |
203 |
204 function env.Include(file) |
204 function env.Include(file) |
205 local f, err = io.open(file); |
205 local f, err = io.open(file); |
206 if f then |
206 if f then |
207 local data = f:read("*a"); |
207 local data = f:read("*a"); |
|
208 local file = resolve_relative_path(filename:gsub("[^"..path_sep.."]+$", ""), file); |
208 local ok, err = parsers.lua.load(data, file); |
209 local ok, err = parsers.lua.load(data, file); |
209 if not ok then error(err:gsub("%[string.-%]", file), 0); end |
210 if not ok then error(err:gsub("%[string.-%]", file), 0); end |
210 end |
211 end |
211 if not f then error("Error loading included "..file..": "..err, 0); end |
212 if not f then error("Error loading included "..file..": "..err, 0); end |
212 return f, err; |
213 return f, err; |
213 end |
214 end |
214 env.include = env.Include; |
215 env.include = env.Include; |
215 |
216 |
|
217 function env.RunScript(file) |
|
218 return dofile(resolve_relative_path(filename:gsub("[^"..path_sep.."]+$", ""), file)); |
|
219 end |
|
220 |
216 local chunk, err = loadstring(data, "@"..filename); |
221 local chunk, err = loadstring(data, "@"..filename); |
217 |
222 |
218 if not chunk then |
223 if not chunk then |
219 return nil, err; |
224 return nil, err; |
220 end |
225 end |