Files can now be queried for configuration properties.

This commit is contained in:
Tom van Dijck 2015-07-14 08:48:46 -07:00
parent 96848b28f1
commit 32885d1673
2 changed files with 42 additions and 10 deletions

View File

@ -98,6 +98,21 @@
end
--
-- Merges the list of terms from an existing context.
--
-- @param ctx
-- The context to receive the copied terms.
-- @param src
-- The context containing the terms to copy.
--
function context.mergeFilters(ctx, src)
ctx.terms = table.merge(ctx.terms, table.deepcopy(src.terms))
end
--
-- Sets the base directory for path token expansion in non-path fields; such
-- values will be made relative to this path.

View File

@ -43,11 +43,24 @@
--
function fileconfig.new(fname, prj)
local fcfg = {}
local environ = { }
local fcfg = context.new(prj, environ)
context.copyFilters(fcfg, prj)
context.addFilter(fcfg, "files", fname:lower())
for key, value in pairs(prj.environ) do
environ[key] = value
end
environ.file = fcfg
context.compile(fcfg)
fcfg.project = prj
fcfg.configs = {}
fcfg.abspath = fname
context.basedir(fcfg, prj.location)
-- Most of the other path properties are computed on demand
-- from the file's absolute path.
@ -86,7 +99,7 @@
local environ = {}
local fsub = context.new(prj, environ)
context.copyFilters(fsub, cfg)
context.addFilter(fsub, "files", fcfg.abspath:lower())
context.mergeFilters(fsub, fcfg)
fcfg.configs[cfg] = fsub
@ -98,9 +111,9 @@
environ[key] = value
end
-- Make the context being built here accessible to tokens
environ.file = fsub
for key, value in pairs(fcfg.environ) do
environ[key] = value
end
-- finish the setup
@ -204,15 +217,16 @@
--
-- The indexer for the file configurations. If I have a path building function
-- to fulfill the request, call it. Else this is a missing index so return nil.
-- to fulfill the request, call it. Else fall back to the context's own value lookups.
--
local fcfg_mt = fileconfig.fcfg_mt
fcfg_mt.__index = function(file, key)
fcfg_mt.__index = function(fcfg, key)
if type(fcfg_mt[key]) == "function" then
return fcfg_mt[key](file)
return fcfg_mt[key](fcfg)
end
return context.__mt.__index(fcfg, key)
end
@ -222,8 +236,11 @@
-- TODO: Would be great if this didn't require inside knowledge of context.
--
fileconfig.fsub_mt.__index = function(fcfg, key)
return fcfg_mt.__index(fcfg, key) or context.__mt.__index(fcfg, key)
fileconfig.fsub_mt.__index = function(fsub, key)
if type(fcfg_mt[key]) == "function" then
return fcfg_mt[key](fsub)
end
return context.__mt.__index(fsub, key)
end