|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- http://angg.twu.net/LUA/LuaBlocks.lua.html
-- http://angg.twu.net/LUA/LuaBlocks.lua
-- (find-angg "LUA/LuaBlocks.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/LuaBlocks.lua"))
LuaBlocks = Class {
fromfile0 = function (fname)
local lines = splitlines(ee_readfile(fname))
return LuaBlocks {lines = lines, ranges = nil, sranges = nil}
end,
type = "LuaBlocks",
__index = {
line = function (lb, i) return lb.lines[i] end,
nlines = function (lb) return #lb.lines end,
afterend = function (lb, i) return lb:line(i) == nil end,
emptyline = function (lb, i) return lb:line(i) == "" end,
nonemptyline = function (lb, i) return lb:line(i) and not lb:emptyline(i) end,
getranges = function (lb)
lb.ranges = {}
local i,j = 1,1
while true do
while lb:emptyline(i) do i = i + 1 end
if lb:afterend(i) then return lb end
j = i
while lb:nonemptyline(j + 1) do j = j + 1 end
table.insert(lb.ranges, {i, j})
i = j + 1
end
end,
gendefs = function (lb, i, j, step)
return cow(function ()
for k=i,j,(step or 1) do
local li = lb:line(k)
local name = li:match("^([A-za-z_][A-za-z0-9_]+)%s+=")
if name then coy(k, name) end
end
end)
end,
genalldefs = function (lb)
return cow(function ()
for _,ij in ipairs(lb.ranges) do
local i,j = ij[1], ij[2]
for k,name in lb:gendefs(i, j) do
coy(i, j, k, name)
end
end
end)
end,
getsranges = function (lb)
lb.sranges = SetL.new()
lb.sdefs = SetL.new()
for _,ij in ipairs(lb.ranges) do
local i,j = ij[1], ij[2]
local i_j = i.."-"..j
local sr = {i=i, j=j, defs=SetL.new()}
for k,name in lb:gendefs(i, j) do
sr.defs:add(name, k)
lb.sdefs:add(name, i_j)
end
lb.sranges:add(i_j, sr)
end
return lb
end,
},
}
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "LuaBlocks.lua"
lb = LuaBlocks.fromfile0("LuaBlocks.lua"):getranges()
PPV(lb.ranges)
PPV(lb.lines)
for k,name in lb:gendefs(1, 40) do print(name, k) end
for i,j,k,name in lb:genalldefs() do print(i, j, k, name) end
lb = LuaBlocks.fromfile0("~/LUA/lua50init.lua")
lb:getranges()
for i,j,k,name in lb:genalldefs() do print(i, j, k, name) end
lb:getsranges()
-- for name,sr in lb.sranges:gen() do PP(name, sr) end
-- for name,sr in lb.sranges:gen() do PP(name, sr.defs) end
for name,sr in lb.sranges:gen() do PP(name, sr.defs.list) end
somenames = Set.from(split("copy map Class"))
for name,i_j in lb.sdefs :gen() do print(i_j, name) end
for name,i_j in (lb.sdefs * somenames):gen() do print(i_j, name) end
--]]