66 lines
1.7 KiB
Lua

assert(arg and arg[0], "You ran this script incorrectly.")
--Get the location of our modules relative to here.
local baseDir = arg[0]:match("^(.*[\\/])")
baseDir = baseDir or "./"
assert(baseDir, arg[0] .. " No directory")
--Fixup the package path to be relative to this directory.
package.path = baseDir .. "modules/?.lua;" .. package.path
--Make a function to get the correct directory name.
function SysRelPath(relativePath)
return baseDir .. relativePath
end
FixupPath = SysRelPath --Older name.
local opts = require "GetOptions"
local Specs = require "Specs"
local Styles = require "Styles"
local LoadSpec = require "LoadLuaSpec"
local util = require "util"
--Get the options.
local status, options = pcall(opts.GetOptions, arg)
if(not status) then
io.stdout:write(options, "\n")
return
end
--Load the spec data.
local spec = Specs.GetSpec(options.spec)
local specData = spec.LoadSpec()
--Verify that every extension in `options.extensions` is a real extension.
local badExts = {}
for _, extName in ipairs(options.extensions) do
if(not specData.extdefs[extName]) then
badExts[#badExts + 1] = extName
end
end
if(#badExts > 0) then
io.stdout:write("The following extensions are not in the spec ", options.spec, ":\n")
for _, extName in ipairs(badExts) do
io.stdout:write("\t", extName, "\n")
end
return
end
--Extract the path and base-filename from the filename.
local simplename, dir = util.ParsePath(options.outname)
dir = dir or "./"
assert(simplename,
"There is no filename in the path '" .. options.outname .. "'")
local style, structure = Styles.GetStyle(options.style)
--Compute the filename, minus style-specific suffix.
local basename = dir .. spec:FilePrefix() .. simplename
structure.Proc(basename, style, specData, spec, options)