Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://angg.twu.net/LUA/Cabos2.lua.html -- http://angg.twu.net/LUA/Cabos2.lua -- (find-angg "LUA/Cabos2.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun o () (interactive) (find-angg "LUA/Cabos1.lua")) -- (defun e () (interactive) (find-angg "LUA/Cabos2.lua")) -- Superseded by: -- (find-angg "LUA/StrGrid1.lua") -- «.XtoT» (to "XtoT") -- «.Xtot-tests» (to "Xtot-tests") -- «.StrOut» (to "StrOut") -- «.StrOut-tests» (to "StrOut-tests") -- «.StrGrid» (to "StrGrid") -- «.StrGrid-tests» (to "StrGrid-tests") -- __ ___ _____ -- \ \/ / |_ __|_ _| -- \ /| __/ _ \| | -- / \| || (_) | | -- /_/\_\\__\___/|_| -- -- «XtoT» (to ".XtoT") -- Superseded by: (find-angg "LUA/StrGrid1.lua" "XtoT") XtoT = Class { type = "XtoT", from_ = function (x0, x1, t0, t1) return XtoT {x0=x0, x1=x1, t0=t0, t1=t1} end, from = function (x0, x1, t0, t1) return XtoT.from_(x0, x1, t0, t1):functions() end, __tostring = mytostringp, __index = { xtot = function (xt, x) local x0,x1,t0,t1 = xt.x0, xt.x1, xt.t0, xt.t1 return t0 + (x-x0)*(t1-t0)/(x1-x0) end, ttox = function (xt, t) local x0,x1,t0,t1 = xt.x0, xt.x1, xt.t0, xt.t1 return x0 + (t-t0)*(x1-x0)/(t1-t0) end, functions = function (xt) local xtot = function (x) return xt:xtot(x) end local ttox = function (t) return xt:ttox(t) end return xt,xtot,ttox end, }, } -- «Xtot-tests» (to ".Xtot-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Cabos2.lua" xt,xtot,ttox = XtoT.from(10, 20, 100, 200) = xtot(12) = ttox(120) --]] -- ____ _ ___ _ -- / ___|| |_ _ __ / _ \ _ _| |_ -- \___ \| __| '__| | | | | | | __| -- ___) | |_| | | |_| | |_| | |_ -- |____/ \__|_| \___/ \__,_|\__| -- -- «StrOut» (to ".StrOut") -- See: (find-es "lua5" "bprint") sprint = function (so, ...) local args = pack(...) return mapconcat(tostring, args, "\t", args.n).."\n" end StrOut = Class { type = "StrOut", new = function () return StrOut {out=""} end, __tostring = function (so) return so:tostring(so) end, __index = { add = function (so, str) so.out = so.out..str; return so end, print = function (so, ...) return so:add(sprint(...)) end, printf = function (so, ...) return so:add(format(...)) end, pprintf = function (so, ...) return so:add(pformat(...)) end, tostring = function (so) return so:tostring0() end, tostring0 = function (so) return (so.out:gsub("\n$", "")) end, tostring00 = function (so) return so.out end, }, } -- «StrOut-tests» (to ".StrOut-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Cabos2.lua" so = StrOut.new() so:print(22, nil, "33", {}, nil) = so --]] -- ____ _ ____ _ _ -- / ___|| |_ _ __ / ___|_ __(_) __| | -- \___ \| __| '__| | _| '__| |/ _` | -- ___) | |_| | | |_| | | | | (_| | -- |____/ \__|_| \____|_| |_|\__,_| -- -- «StrGrid» (to ".StrGrid") StrGrid = Class { type = "StrGrid", from = function (bigstr, x0, y0) x0 = x0 or 0 y0 = y0 or 0 local grid = {} for _,li in ipairs(splitlines(bigstr)) do local spl = split(li) if #spl > 0 then table.insert(grid, spl) end end local rows,cols = #grid, #grid[1] local xmin,ymin = x0, y0 local xmax,ymax = x0+(cols-1), y0+(rows-1) local _,rtoy,ytor = XtoT.from(1,rows, ymax,y0) local _,ctox,xtoc = XtoT.from(1,cols, x0,xmax) return StrGrid {grid=grid, x0=x0, y0=y0, xmin=xmin, ymin=ymin, xmax=xmax, ymax=ymax, rows=rows, cols=cols, rtoy=rtoy, ytor=ytor, ctox=ctox, xtoc=xtoc } end, __tostring = function (sg) return mytostringv(sg.grid) end, __index = { get = function (sg, x, y) local r,c = sg.ytor(y), sg.xtoc(x) if not sg.grid[r] then return end return sg.grid[r][c] end, drawnodes = function (sg) local so = StrOut.new() for y=sg.ymax,sg.ymin,-1 do for x=sg.xmin,sg.xmax do if sg:get(x,y) ~= "." then so:printf(" \\node at (%d,%d) {%s};\n", x, y, sg:get(x,y)) end end end return so:tostring00() end, drawletters = function (sg) local so = StrOut.new() for y=sg.ymax,sg.ymin,-1 do for x=sg.xmin,sg.xmax do so:printf(" \\draw%s (%d,%d);\n", sg:get(x,y), x, y) end end return so:tostring00() end, }, } -- «StrGrid-tests» (to ".StrGrid-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Cabos2.lua" sg = StrGrid.from [[ a b c d e f g h i j k l m n o p q r ]] = sg = sg:get(0,0) = sg:get(1,0) = sg:get(0,1) = sg:get(10,0) = sg:drawnodes() sg = StrGrid.from([[ a b c d e f g h i j k l m n o p q r ]], -4, -1) = sg:drawnodes() --]==] -- Local Variables: -- coding: utf-8-unix -- End: