LuaComp/src/application.lua

84 lines
2.5 KiB
Lua
Raw Normal View History

2021-06-26 02:06:38 +10:00
-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at https://mozilla.org/MPL/2.0/.
2021-06-25 19:31:33 +10:00
--#include "src/libluacomp.lua"
2019-12-15 08:23:07 +11:00
2021-06-25 19:31:33 +10:00
local parser = argparse(arg[0]:match("[^/]+$"), "LuaComp v"..LUACOMP_VERSION.."\nA preprocessor+postprocessor written in Lua.")
2019-12-15 08:23:07 +11:00
parser:argument("input", "Input file (- for STDIN)")
parser:option("-O --output", "Output file. (- for STDOUT)", "-")
2019-12-15 09:16:32 +11:00
parser:option("-m --minifier", "Sets the postprocessor", "none")
2019-12-15 08:23:07 +11:00
parser:option("-x --executable", "Makes the script an executable (default: current lua version)"):args "?"
parser:flag("--generator-code", "Outputs only the code from the generator.")
parser:flag("--verbose", "Verbose output. (Debugging)"):action(function() VERBOSE=true end)
2019-12-16 04:56:50 +11:00
parser:flag("--post-processors", "Lists postprocessors"):action(function()
preload_providers()
local provs = {}
for k, v in pairs(providers) do
provs[#provs+1] = k
end
table.sort(provs)
print(table.concat(provs, "\n"))
os.exit(0)
end)
parser:flag("--directives", "Lists directives"):action(function()
preload_directives()
local dirs = {}
for k, v in pairs(directives) do
dirs[#dirs+1] = k
end
table.sort(dirs)
print(table.concat(dirs, "\n"))
os.exit(0)
end)
2019-12-15 08:23:07 +11:00
parser:flag("-v --version", "Prints the version and exits"):action(function()
print(LUACOMP_VERSION)
os.exit(0)
end)
2019-12-16 04:56:50 +11:00
parser:add_complete()
2019-12-15 08:23:07 +11:00
local args = parser:parse()
local file = args.input
_sv("LUACOMP_MINIFIER", args.minifier)
local f
if (file ~= "-") then
2021-06-26 00:46:38 +10:00
local sr, er = stat.stat(file)
if not sr then lc_error("luacomp", er) end
2019-12-15 08:23:07 +11:00
f = io.open(file, "r")
else
f = io.stdin
end
2021-06-25 19:31:33 +10:00
local ocode = luacomp.process_file(f, (file == "-") and "stdin" or file, args.generator_code)
2019-12-15 08:23:07 +11:00
local minifier = providers[args.minifier]
dprint("Minifier: "..args.minifier, minifier)
if not minifier then
2021-06-26 00:46:38 +10:00
lc_error("luacomp", "Postprocessor "..args.minifier.." not found!")
--io.stderr:write("ERROR: Postprocessor `"..args.minifier.."' not found!\n")
--os.exit(1)
2019-12-15 08:23:07 +11:00
end
dprint("Running...")
local rcode, err = minifier(ocode)
if (not rcode) then
2021-06-26 00:46:38 +10:00
--io.stderr:write("ERROR: Error for postprocessor `"..args.minifier.."': \n")
--io.stderr:write(err)
--os.exit(1)
lc_error(args.minifier, "Postprocessor error:\n"..err)
2019-12-15 08:23:07 +11:00
end
local of
if (args.output == "-") then
of = io.stdout
else
of = io.open(args.output, "w")
end
local ver = _VERSION:lower():gsub(" ", "")
if jit then
ver = "luajit"
end
if (args.executable) then
of:write("#!/usr/bin/env ", args.executable[1] or ver, "\n")
end
of:write(rcode)
of:close()
2021-06-25 19:31:33 +10:00
--f:close()