2019-11-06 06:47:42 +11:00
|
|
|
--[[
|
|
|
|
init.lua - Main file of LuaComp
|
|
|
|
|
|
|
|
Copyright 2019 Adorable-Catgirl
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
limitations under the License.
|
|
|
|
]]
|
|
|
|
|
2019-11-06 07:14:33 +11:00
|
|
|
--#include "luacomp_vars.lua"
|
2019-11-06 06:47:42 +11:00
|
|
|
--#include "ast.lua"
|
|
|
|
--#include "generator.lua"
|
|
|
|
--#include "directive_provider.lua"
|
|
|
|
--#include "cfg/minifier_providers.lua"
|
|
|
|
|
|
|
|
local argparse = (function()
|
|
|
|
--#include "argparse.lua"
|
|
|
|
end)()
|
|
|
|
|
2019-11-06 07:14:33 +11:00
|
|
|
local parser = argparse(arg[0], "LuaComp v"..LUACOMP_VERSION.."\nA Lua preprocessor+postprocessor.")
|
2019-11-06 06:47:42 +11:00
|
|
|
parser:argument("input", "Input file (- for STDIN)")
|
|
|
|
parser:option("-O --output", "Output file. (- for STDOUT)", "-")
|
|
|
|
parser:option("-m --minifier", "Sets the minifier", "none")
|
|
|
|
parser:flag("-x --executable", "Makes the script an executable")
|
|
|
|
local args = parser:parse()
|
|
|
|
local file = args.input
|
|
|
|
local f
|
|
|
|
if (file ~= "-") then
|
|
|
|
if (not os.execute("stat "..file..">/dev/null")) then
|
|
|
|
io.stderr:write("ERROR: File `"..file.."' does not exist!\n")
|
|
|
|
os.exit(1)
|
|
|
|
end
|
|
|
|
f = io.open(file, "r")
|
|
|
|
else
|
|
|
|
file = io.stdin
|
|
|
|
end
|
|
|
|
local ast = mkast(f, file)
|
|
|
|
local ocode = generate(ast)
|
|
|
|
|
|
|
|
local minifier = providers[args.minifier]
|
|
|
|
|
|
|
|
local rcode = minifier(ocode)
|
|
|
|
|
|
|
|
local of
|
|
|
|
if (args.output == "-") then
|
|
|
|
of = io.stdout
|
|
|
|
else
|
|
|
|
of = io.open(args.output, "w")
|
|
|
|
end
|
|
|
|
if (args.executable) then
|
|
|
|
of:write("#!/usr/bin/env lua5.3\n")
|
|
|
|
end
|
|
|
|
of:write(rcode)
|
|
|
|
of:close()
|
2019-11-06 07:14:33 +11:00
|
|
|
f:close()
|