local serial = require "serialization"

local tArgs = {...}
local infile = tArgs[1]
local minfile = tArgs[1]..".min"
local outfile = tArgs[2]
local dbug = true
if not outfile then dbug = false end

local function dprint(...)
 if dbug then
  print(...)
 end
end

local replacements={
{"  "," "},
{"\n ","\n"},
{"\n\n","\n"},
{" == ","=="},
{" ~= ","~="},
{" >= ",">="},
{" <= ","<="},
{" > ",">"},
{" < ","<"},
{" = ","="},
{", ",","},
{" %+ ","+"},
{" %- ","-"},
{" %/ ","/"},
{" %* ","*"},
{" \n","\n"},
{" %.%. ",".."},
{"([%)%}])%s(%a)","%1%2"},
{"(%d)%s([G-Zg-z])","%1%2"},
{"([\"'])%s(%a)","%1%2"},
{"%-%-.-\n",""},
}

local initr = #replacements

local fmin = io.open(minfile,"rb")
if fmin then
 local nreplacements = serial.unserialize(fmin:read("*a"))
 for k,v in ipairs(nreplacements) do
  table.insert(replacements,1+k,v)
 end
end

dprint(tostring(#replacements - initr).." replacements loaded.")

local fin = io.open(infile,"rb")
local ss = fin:read("*a")
fin:close()

local initl = ss:len()

for k,v in ipairs(replacements) do
 while ss:find(v[1]) ~= nil do
  ss=ss:gsub(v[1],v[2])
 end
end

dprint("Delta: "..tostring(initl - ss:len()).." bytes")

if outfile then
 local outf = io.open(outfile,"wb")
 outf:write(ss)
 outf:close()
else
print(ss)
end
