1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- -- Lua script used to clean up tabs and spaces in C, CPP and H files.
- -- Copyright (c) 2014, bel
- -- MIT License (http://opensource.org/licenses/mit-license.php)
- --
- -- It can be used from the command line:
- -- Call Lua5.1 or Lua5.2 + this script file + the C/CPP/H file to clean
- --
- -- It can be used in Visual Studio as an external tool:
- -- command: Lua5.1.exe or Lua5.2.exe
- -- argument: "X:\civetweb\resources\cleanup.lua" $(ItemPath)
- --
- clean = arg[1]
- print("Cleaning " .. clean)
- lines = io.lines(clean)
- if not lines then
- print("Can not open file " .. clean)
- return
- end
- function trimright(s)
- return s:match "^(.-)%s*$"
- end
- local lineend = false
- local tabspace = false
- local changed = false
- local invalid = false
- local newfile = {}
- lineno = 0
- incmt = false
- for l in lines do
- lineno = lineno + 1
- local lt = trimright(l)
- if (lt ~= l) then
- lineend = true
- changed = true
- end
- local mcmt = l:find("%/%*");
- if mcmt then
- if incmt then
- print("line " .. lineno .. " nested comment")
- end
- if not (l:sub(mcmt):find("%*%/")) then
- -- multiline comment begins here
- incmt = true
- end
- elseif incmt then
- if not l:find("^%s*%*") then
- print("line " .. lineno .. " multiline comment without leading *")
- end
- if l:find("%*%/") then
- incmt = false
- end
- else
- local cmt = l:find("//")
- if (cmt) and (l:sub(cmt-5, cmt+1) ~= "http://") and (l:sub(cmt-6, cmt+1) ~= "https://") then
- print("line " .. lineno .. " has C++ comment //")
- end
- end
- local lts = lt:gsub('\t', ' ')
- if (lts ~= lt) then
- tabspace = true
- changed = true
- end
- for i=1,#lts do
- local b = string.byte(lts,i)
- if b<32 or b>=127 then
- print("Letter " .. string.byte(l,i) .. " (" .. b .. ") found in line " .. lts)
- invalid = true
- end
- end
- newfile[#newfile + 1] = lts
- end
- print("Line endings trimmed: " .. tostring(lineend))
- print("Tabs converted to spaces: " .. tostring(tabspace))
- print("Invalid characters: " .. tostring(invalid))
- if changed then
- local f = io.open(clean, "wb")
- for i=1,#newfile do
- f:write(newfile[i])
- f:write("\n")
- end
- f:close()
- print("File cleaned")
- end
|