2017-03-23 12:17:57 +11:00
|
|
|
-- Postprocessor
|
|
|
|
local lastchar = " "
|
|
|
|
local text = io.read("*a")
|
|
|
|
|
|
|
|
text = "\n" .. text
|
|
|
|
|
|
|
|
-- the most important step: everything assumes \n
|
|
|
|
text = text:gsub("\r", "")
|
|
|
|
|
|
|
|
-- tabs are always useless.
|
|
|
|
-- get rid of them *before* removing comments so indented comments also get scrubbed.
|
|
|
|
text = text:gsub("\t", "")
|
|
|
|
|
|
|
|
text = text:gsub("\n%-%-[^\n]+", "")
|
|
|
|
|
|
|
|
-- This is run after comment removal so that comments can be re-added.
|
|
|
|
text = text:gsub("\n%%[^\n]+", function(s)
|
|
|
|
return "\n" .. s:sub(3)
|
|
|
|
end)
|
|
|
|
local otext = text
|
|
|
|
local function pass()
|
|
|
|
text = text:gsub(".\n+.", function(i)
|
|
|
|
local l = i:sub(1, 1) .. i:sub(#i)
|
2017-03-25 21:58:44 +11:00
|
|
|
if not l:match("[^%(%)%{%}%,].") then
|
2017-03-23 12:17:57 +11:00
|
|
|
return l
|
|
|
|
end
|
|
|
|
return i:sub(1, 1) .. "\n" .. i:sub(#i)
|
|
|
|
end)
|
|
|
|
end
|
|
|
|
pass()
|
|
|
|
while otext ~= text do
|
|
|
|
otext = text
|
|
|
|
pass()
|
|
|
|
end
|
|
|
|
-- Final processing
|
|
|
|
text = text:gsub("^\n+", ""):gsub("\n+$", "")
|
|
|
|
io.write(text)
|