68 lines
1.1 KiB
Lua
68 lines
1.1 KiB
Lua
|
|
local escapes = {
|
|
{"\\", "b"},
|
|
{"\t", "t"},
|
|
{"\n", "n"},
|
|
{"\r", "r"},
|
|
{"\'", "a"},
|
|
{"\"", "q"},
|
|
{";" , "s"},
|
|
{":" , "c"},
|
|
}
|
|
|
|
function expandescape(str)
|
|
local ostrt = {}
|
|
|
|
local len = #str
|
|
for i=1, len do
|
|
local ci = str:sub(i, i)
|
|
|
|
local co = ci
|
|
for escidx, esc in ipairs(escapes) do
|
|
if ci==esc[1] then co = "\\"..esc[2] end
|
|
end
|
|
|
|
table.insert(ostrt, co)
|
|
end
|
|
|
|
return table.concat(ostrt)
|
|
end
|
|
|
|
function collapseescape(str)
|
|
local ostrt = {}
|
|
|
|
local i = 1
|
|
local len = #str
|
|
while i<=len do
|
|
local ci = str:sub(i, i)
|
|
|
|
local co = ci
|
|
if ci=="\\" and i<len then
|
|
i = i+1
|
|
ci = str:sub(i, i)
|
|
for escidx, esc in ipairs(escapes) do
|
|
if ci==esc[2] then co = esc[1] end
|
|
end
|
|
end
|
|
|
|
table.insert(ostrt, co)
|
|
i = i+1
|
|
end
|
|
|
|
return table.concat(ostrt)
|
|
end
|
|
|
|
function tobitstring(num, len)
|
|
local maxval = bit.lshift(1, len)
|
|
if num>=maxval then error("bitstring value too big") end
|
|
|
|
num = num%maxval
|
|
|
|
local bitstring = ""
|
|
for i = len, 1, -1 do
|
|
bitstring = bitstring..bit.rshift(bit.band(num, bit.lshift(1, i-1)), i-1)
|
|
end
|
|
|
|
return bitstring
|
|
end
|