diff --git a/Embedded/compress.lua b/Embedded/compress.lua new file mode 100644 index 0000000..784e89c --- /dev/null +++ b/Embedded/compress.lua @@ -0,0 +1,59 @@ +local tArgs = {...} +local input = tArgs[1] +local output = tArgs[2] + +local tKeywords = {"%[%[","]]","function","local","return","end","elseif","then","true","false"} +local tAvoid = {} +local tCodes = {} +local tReplace = {} +tAvoid[10] = true +tAvoid[27] = true + +for i = 1, 31 do + if not tAvoid[i] then + tCodes[#tCodes+1] = i + end +end + +for k,v in pairs(tKeywords) do + local newchar = table.remove(tCodes,1) + tReplace[#tReplace+1] = {v,string.char(newchar)} +end + +local f = io.open(input,"rb") +if not f then return false end +local c = f:read("*a") +f:close() +local origSize = c:len() +for k,v in pairs(tReplace) do + v[3] = c:find(v[1]) + c=c:gsub(v[1],v[2]) +end +local mSize = c:len() +c="c=[["..c.."]]for k,v in pairs({" +for k,v in pairs(tReplace) do + if v[3] then + c=c.."{'"..v[2].."','"..v[1].."'}" + if k < #tReplace then + c=c.."," + end + end +end +c=c.."})do c=c:gsub(v[1],v[2])end load(c)()" +--c=c.."})do c=c:gsub(v[1],v[2])end print(c)" +local fullSize = c:len() +if output then + f=io.open(output,"wb") + f:write(c) + f:close() +end +io.write("Original size: ") +print(origSize) +io.write("Minified size: ") +io.write(mSize) +io.write("; delta: ") +print(origSize - mSize) +io.write("RtR size: ") +io.write(fullSize) +io.write("; delta: ") +print(origSize - fullSize)