turtle/helpers.lua

148 lines
2.5 KiB
Lua
Raw Permalink Normal View History

2013-11-30 19:43:31 +01:00
luahelpers={}
function long_string(s,i)
local ii=i
local ls=string.len(s)
local depth=0
while i<=ls do
i=i+1
c=string.sub(s,i,i)
if c=='[' then
i=i+1
break
else
depth=depth+1
end
end
while i<=ls-depth-1 do
i=i+1
c=string.sub(s,i,i+depth+1)
if c==']'..string.rep("=",depth).."]" then
i=i+depth+2
break
end
end
return i,string.sub(s,ii,i-1)
end
function countb(s,i)
local x=0
while string.sub(s,i,i)=="\\" do
i=i-1
x=x+1
end
return x
end
function luahelpers.remove_comments(s)
local i=1
local ls=string.len(s)
local l2=""
while i<=ls do
local c=string.sub(s,i,i)
if c=="-" then
if i==ls then
l2=l2.."-"
break
end
local c2=string.sub(s,i+1,i+1)
if c2=="-" then
--comment
if i==ls-1 then break end
local c3=string.sub(s,i+2,i+2)
if c3=="[" then --long comment
local k=""
i,k=long_string(s,i+2)
print(k)
else --short comment
i=i+2
c=string.sub(s,i,i)
while i<=ls and c~="\n" do
c=string.sub(s,i,i)
i=i+1
end
l2=l2.."\n"
end
else
i=i+1
l2=l2.."-"
end
elseif c=='"' then
c=string.sub(s,i,i)
while i<=ls do
l2=l2..c
i=i+1
c=string.sub(s,i,i)
if c=='"' then
local c2=countb(s,i-1)
if c2%2==0 then
i=i+1
l2=l2..'"'
break
end
end
end
elseif c=="'" then
c=string.sub(s,i,i)
while i<=ls do
l2=l2..c
i=i+1
c=string.sub(s,i,i)
if c=="'" then
local c2=countb(s,i-1)
if c2%2==0 then
i=i+1
l2=l2.."'"
break
end
end
end
elseif c=="[" then
if i==ls then
l2=l2.."["
break
end
local c2=string.sub(s,i+1,i+1)
if c2=="[" or c2=="=" then
local k=""
i,k=long_string(s,i)
l2=l2..k
else
i=i+1
l2=l2.."["
end
else
l2=l2..c
i=i+1
end
end
return l2
end
function luahelpers.add_yields(s)
s=luahelpers.remove_comments(s)
s="\n"..s.."\n"
s=string.gsub(s, "[^_%w]while[^_%w].-[^_%w]do[^_%w]", "%1 coroutine.yield(0);")
s=string.gsub(s, "[^_%w]for[^_%w].-[^_%w]do[^_%w]", "%1 coroutine.yield(0);")
s=string.gsub(s, "[^_%w]repeat[^_%w]", "%1 coroutine.yield(0);")
s=string.gsub(s, "[^_%w]function[^_%w].-%)", "%1 coroutine.yield(0);")
return s
end
--[======[ DEBUG CODE
print(luahelpers.remove_comments([====[
gzvsvs--gsv
fsd"--hkj"fvd
[=[--[[]=]
--[[fzffs]]
]====]))
print(luahelpers.remove_comments([====[
--[[fzffs]]
]====]))
--]======]
print(luahelpers.add_yields([[
while true do
turtle.forward()
end]]))