|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- treesegs.lua:
-- This file:
-- http://angg.twu.net/dednat5/treesegs.lua.html
-- http://angg.twu.net/dednat5/treesegs.lua
-- (find-dn5 "treesegs.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
-- Version: 2011mar28
-- License: GPL3
--
-- «.allsegments-test» (to "allsegments-test")
require "eoo" -- (find-dn5 "eoo.lua")
require "parse" -- (find-dn5 "parse.lua")
intersects = function (start1, end1, start2, end2)
if end1 <= start2 then return false end
if end2 <= start1 then return false end
return true
end
allsegments = {}
-- allsegment[5] is a Segments object containing the list of all
-- Segment objects at line 5 of the current file.
Segment = Class {
type = "Segment",
__index = {
iswithin = function (seg, l, r)
return intersects(seg.l, seg.r, l, r)
end,
intersects = function (seg1, seg2)
return intersects(seg1.l, seg1.r, seg2.l, seg2.r)
end,
segsabove_ = function (seg, dy)
return allsegments[seg.y - dy] or Segments {}
end,
segsabove = function (seg)
return seg:segsabove_(1):allintersecting(seg)
end,
firstsegabove = function (seg) return seg:segsabove()[1] end,
rootnode = function (seg)
return seg:segsabove_(2):firstwithin(seg.l, seg.l + 1)
end,
},
}
Segments = Class {
type = "Segments",
__index = {
allwithin = function (segs, l, r)
local T = {}
for _,seg in ipairs(segs) do
if seg:iswithin(l, r) then table.insert(T, seg) end
end
return T
end,
firstwithin = function (segs, l, r)
return segs:allwithin(l, r)[1]
end,
allintersecting = function (segs, seg)
return segs:allwithin(seg.l, seg.r)
end,
firstintersecting = function (segs, seg)
return segs:allwithin(seg.l, seg.r)[1]
end,
},
}
-- (find-dn5 "parse.lua")
tosegments = function (str, line)
local T = {}
setsubj(untabify(str))
while getword() do
table.insert(T, Segment {l=startcol, r=endcol, t=word, y=line, i=#T+1})
end
return Segments(T)
end
-- dump-to: tests
--[==[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
require "treesegs"
foo = function (str)
allsegments[y] = tosegments(str, y)
y = y + 1
end
y = 4
foo "%: a b "
foo "%: ----? "
foo "%: c "
foo "%: "
foo "%: ^t "
PP(allsegments)
PP(allsegments[5])
PP(allsegments[5][1])
PP(allsegments[5][1]:segsabove())
PP(allsegments[8][1])
PP(allsegments[8][1]:rootnode())
PP(allsegments[4][1]:segsabove())
PP(allsegments[4][1]:firstsegabove())
require "trees" -- (find-dn5 "trees.lua")
PP (allsegments[6][1]:totreenode())
print(allsegments[6][1]:totreenode():TeX_subtree(" "))
print(allsegments[6][1]:totreenode():TeX_deftree("t"))
-- «allsegments-test» (to ".allsegments-test")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
require "trees" -- (find-dn5 "trees.lua")
foo = function (str)
allsegments[y] = tosegments(str, y)
y = y + 1
end
allsegments = {}
y = 2
foo "%: 1 2 3 "
foo "%: ======= "
foo "%: f 1+2+3 "
foo "%: ---------app"
foo "%: f(1+2+3) "
foo "%: "
foo "%: ^f(1+2+3) "
PP(allsegments)
-- {2={1={"i"=1, "l"=7, "r"=8, "t"="1", "y"=2},
-- 2={"i"=2, "l"=10, "r"=11, "t"="2", "y"=2},
-- 3={"i"=3, "l"=13, "r"=14, "t"="3", "y"=2}},
-- 3={1={"i"=1, "l"=7, "r"=14, "t"="=======", "y"=3}},
-- 4={1={"i"=1, "l"=4, "r"=5, "t"="f", "y"=4},
-- 2={"i"=2, "l"=8, "r"=13, "t"="1+2+3", "y"=4}},
-- 5={1={"i"=1, "l"=4, "r"=16, "t"="---------app", "y"=5}},
-- 6={1={"i"=1, "l"=5, "r"=13, "t"="f(1+2+3)", "y"=6}},
-- 7={},
-- 8={1={"i"=1, "l"=5, "r"=14, "t"="^f(1+2+3)", "y"=8}},
-- }
PP(allsegments[6][1])
PP(allsegments[6][1]:totreenode())
print(allsegments[6][1]:totreenode():TeX_deftree("f(1+2+3)"))
--]==]
-- Local Variables:
-- coding: raw-text-unix
-- ee-anchor-format: "«%s»"
-- End: