Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/LUA/Pict2e2.lua.html -- http://anggtwu.net/LUA/Pict2e2.lua -- (find-angg "LUA/Pict2e2.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun p1 () (interactive) (find-angg "LUA/Pict2e1.lua")) -- (defun p2 () (interactive) (find-angg "LUA/Pict2e2.lua")) require "ELpeg1" -- (find-angg "LUA/ELpeg1.lua") -- (find-angg "LUA/ELpeg1.lua" "ToTeX") -- (find-angg "LUA/ELpeg1.lua" "Subst") require "Indent1" -- (find-angg "LUA/Indent1.lua") require "Subst1" -- (find-angg "LUA/Subst1.lua") require "Show2" -- (find-angg "LUA/Show2.lua") require "MiniV1" -- (find-angg "LUA/MiniV1.lua") V = MiniV v = V.fromab -- «.Points2» (to "Points2") -- «.Points2-tests» (to "Points2-tests") -- «.Pict» (to "Pict") -- «.Pict-tests» (to "Pict-tests") -- «.PictBounds» (to "PictBounds") -- «.PictBounds-tests» (to "PictBounds-tests") -- «.PictBounds-methods» (to "PictBounds-methods") -- «.PictBounds-methods-tests» (to "PictBounds-methods-tests") -- (find-angg "LUA/Indent1.lua" "Ind") -- (find-angg "LUA/Pict2e1.lua" "Pict2e-methods" "PradClass.__index.addline =") table.reverse = function (A) local B = {} setmetatable(B, getmetatable(A)) for i=1,#A do B[#A-i+1] = A[i] end return B end table.addentries = function (A, B) for k,v in pairs(B) do A[k] = v end return A end -- ____ _ _ -- | _ \ ___ (_)_ __ | |_ ___ -- | |_) / _ \| | '_ \| __/ __| -- | __/ (_) | | | | | |_\__ \ -- |_| \___/|_|_| |_|\__|___/ -- -- «Points2» (to ".Points2") -- Points2 = Class { type = "Points2", new = function () return Points2 {} end, from = function (...) return Points2 {...} end, __tostring = function (pts) return pts:tostring() end, __index = { add = function (pts, pt) table.insert(pts, pt); return pts end, adds = function (pts, pts2) for _,pt in ipairs(pts2) do pts:add(pt) end return pts end, -- tostring = function (pts, sep) return mapconcat(tostring, pts, sep or "") end, pict2e = function (pts, prefix) return prefix..tostring(pts) end, Line = function (pts) return pts:pict2e("\\Line") end, polygon = function (pts) return pts:pict2e("\\polygon") end, region0 = function (pts) return pts:pict2e("\\polygon*") end, polygon = function (pts, s) return pts:pict2e("\\polygon"..(s or "")) end, rev = function (pts) return table.reverse(pts) end, -- region = function (pts, color) return pts:region0():color(color) end, -- region = function (pts, color) return pts:region0() end, }, } -- «Points2-tests» (to ".Points2-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Pict2e2.lua" a = VTable {2, 3, 4} = a = table.reverse(a) pts = Points2 {v(1,2), v(3,4), v(3,1)} = pts = pts:Line() = pts:Line() = pts:rev() = pts:add(pts:rev()) pts = Points2 {v(1,2), v(3,4), v(3,1)} PPP(pts:Line()) -- Points2.__index.pict2e = function (pts, prefix) -- return PictList { prefix..tostring(pts) } -- end PPP(pts:Line()) = pts:Line() = pts:Line():bshow() * (etv) = pts:polygon() = pts:polygon():bshow() * (etv) = pts:region0():bshow() * (etv) --]] -- ____ _ _ -- | _ \(_) ___| |_ -- | |_) | |/ __| __| -- | __/| | (__| |_ -- |_| |_|\___|\__| -- -- (find-angg "LUA/lua50init.lua" "pformat") -- -- «Pict» (to ".Pict") Pict = Class { type = "Pict", __tostring = function (p) return indent(p) end, __index = { output = function (p) output(tostring(p)) end, add = function (p, o) table.insert(p, o); return p end, pre = function (p, o) return Pict {o, p} end, print = function (p, o) return p:add(o) end, printf = function (p, ...) return p:add(format(...)) end, pprintf = function (p, ...) return p:add(pformat(...)) end, wrap = function (p, a, b) return Pict {a, p, b} end, wrapin = function (p, pre, a, b) return Pict {(pre or "")..a, p, b} end, wrap00 = function (p, pre) return p:wrapin(pre, "{<+1>", "<-1>}") end, wrap01 = function (p, pre) return p:wrapin(pre, "{<+1>", "<-1R>\n}") end, wrap02 = function (p, pre) return p:wrapin(pre, "{<+1>", "<-1R>\n }") end, wrap10 = function (p, pre) return p:wrapin(pre, "{<+1R>", "<-1>}") end, wrap11 = function (p, pre) return p:wrapin(pre, "{<+1R>", "<-1R>\n}") end, wrap12 = function (p, pre) return p:wrapin(pre, "{<+1R>", "<-1R>\n }") end, Wrap00 = function (p, pre) return p:wrapin(pre, "{{<+2>", "<-2>}}") end, Wrap10 = function (p, pre) return p:wrapin(pre, "{{<+2R>", "<-2>}}") end, wrapbe = function (p, b, e) return p:wrap(b.."\n <+1L>", "<-1R>\n"..e) end, -- d = function (p) return p:wrapin("", "$<+1>", "<-1>$") end, dd = function (p) return p:wrapin("", "$$<+2>", "<-2>$$") end, -- -- (find-angg "LUA/Pict2e1.lua" "Pict2e-methods") def = function (p, name) return p:Wrap10("\\def\\"..name) end, sa = function (p, name) return p:Wrap10("\\sa{"..name.."}") end, color = function (p, color) return p:wrap00("\\color{"..color.."}") end, Color = function (p, color) return p:wrap00("\\Color"..color) end, precolor = function (p, color) return p:pre("\\color{"..color.."}") end, prethickness = function (p, th) return p:pre("\\linethickness{"..th.."}") end, preunitlength = function (p, u) return p:pre("\\unitlength="..u) end, bhbox = function (p) return p:wrapin("\\bhbox", "{$<+1>", "<-1>$}") end, myvcenter = function (p) return p:wrap00("\\myvcenter") end, putat = function (p, xy) return p:wrap00(pformat("\\put%s", xy)) end, -- scalebox = function (p, scale) if not scale then return p end return p:d():wrap00("\\scalebox{"..scale.."}") end, -- addputstrat = function (p, xy, str) return p:add(pformat("\\put%s{%s}", xy, str)) end, addopendotat = function (p, xy) return p:addputstrat(xy, "\\opendot") end, addcloseddotat = function (p, xy) return p:addputstrat(xy, "\\closeddot") end, addline = function (p, ...) return p:add(Points2.from(...):Line()) end, addpolygon = function (p, ...) return p:add(Points2.from(...):polygon()) end, addregion0 = function (p, ...) return p:add(Points2.from(...):region0()) end, predotdims = function (p, c, o) local fmt1 = "\\def\\closeddot{\\circle*{%s}}" local fmt2 = "\\def\\opendot {\\circle*{%s}\\color{white}\\circle*{%s}}" return Pict { pformat(fmt1,c), pformat(fmt2,c,o), p } end, -- -- 2023jun08: putstrat = function (p, xy, str) return p:add(pformat("\\put%s{%s}", xy, str)) end, putfmtat = function (p, xy, ...) return p:putstrat(xy, pformat(...)) end, putcellat = function (p, xy, str) return p:putfmtat(xy, "\\cell{%s}", str) end, puttcellat = function (p, xy, str) return p:putfmtat(xy, "\\cell{\\text{%s}}", str) end, -- puttcellat = function (p, xy, str) return p:putcellat(xy, format("\\text{%s}", str)) end, } } -- (find-angg "LUA/Pict2e1.lua" "Pict2e-methods" "PradClass.__index.addline =") -- «Pict-tests» (to ".Pict-tests") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Pict2e2.lua" p = Pict {"a", "<!><+1>", "b", "<-1>", "c"} = p ab = Pict {"a", "b"} = ab = ab:wrapin(":", "{", "}") = ab:wrapin(":", "{<+1><!>", "<!><-1>}") = ab:wrapin(":", "{<+1><!>", "<-1><!>}") = ab:wrap00() = ab:wrap01() = ab:wrap02() = ab:wrap10() = ab:wrap11() = ab:wrap12() = ab:def"foo" = ab:sa "foo" = ab:Color"Red" = ab:precolor"red" = ab:prethickness"1pt" = ab:preunitlength"1pt" = ab:bhbox() = ab:myvcenter() = ab:putat(v(2,3)) = ab:scalebox(2.3) = ab:addopendotat(v(2,3)) = ab:addcloseddotat(v(2,3)) = ab:addline(v(4,5), v(6,7), v(8,9)) = ab:addpolygon(v(4,5), v(6,7), v(8,9)) = ab:addregion0(v(4,5), v(6,7), v(8,9)) = ab:predotdims(1.2, 3.4) --]] -- (find-angg "LUA/Pict2e1.lua" "PictBounds") -- ____ _ _ ____ _ -- | _ \(_) ___| |_| __ ) ___ _ _ _ __ __| |___ -- | |_) | |/ __| __| _ \ / _ \| | | | '_ \ / _` / __| -- | __/| | (__| |_| |_) | (_) | |_| | | | | (_| \__ \ -- |_| |_|\___|\__|____/ \___/ \__,_|_| |_|\__,_|___/ -- -- «PictBounds» (to ".PictBounds") -- (find-LATEX "edrxpict.lua" "pictp0-pictp3") -- (find-es "pict2e" "picture-mode") -- (find-kopkadaly4page (+ 12 288) "\\begin{picture}(x dimen,y dimen)") -- (find-kopkadaly4text (+ 12 288) "\\begin{picture}(x dimen,y dimen)") -- (find-kopkadaly4page (+ 12 301) "13.1.6 Shifting a picture environment") -- (find-kopkadaly4text (+ 12 301) "13.1.6 Shifting a picture environment") -- (find-kopkadaly4page (+ 12 302) "\\begin{picture}(x dimen,y dimen)(x offset,y offset)") -- (find-kopkadaly4text (+ 12 302) "\\begin{picture}(x dimen,y dimen)(x offset,y offset)") PictBounds = Class { type = "PictBounds", new = function (ab, cd, e) local a,b = ab[1], ab[2] local c,d = cd[1], cd[2] local x1,x2 = min(a,c), max(a,c) local y1,y2 = min(b,d), max(b,d) return PictBounds {x1=x1, y1=y1, x2=x2, y2=y2, e=e or .2} end, -- -- (find-angg "LUA/Pict2e1.lua" "Pict2e" "getbounds =") getbounds = function () return PictBounds.bounds or PictBounds.new(v(0,0), v(3, 2)) end, setbounds = function (...) PictBounds.bounds = PictBounds.new(...) end, -- __tostring = function (pb) return pb:tostring() end, __index = { x0 = function (pb) return pb.x1 - pb.e end, x3 = function (pb) return pb.x2 + pb.e end, y0 = function (pb) return pb.y1 - pb.e end, y3 = function (pb) return pb.y2 + pb.e end, p0 = function (pb) return v(pb.x1 - pb.e, pb.y1 - pb.e) end, p1 = function (pb) return v(pb.x1, pb.y1 ) end, p2 = function (pb) return v(pb.x2, pb.y2 ) end, p3 = function (pb) return v(pb.x2 + pb.e, pb.y2 + pb.e) end, tostring = function (pb) return pformat("LL=(%s,%s) UR=(%s,%s) e=%s", pb.x1, pb.y1, pb.x2, pb.y2, pb.e) end, -- beginpicture = function (pb) local dimen = pb:p3() - pb:p0() local center = (pb:p3() + pb:p0()) * 0.5 local offset = pb:p0() return pformat("\\begin{picture}%s%s", dimen, offset) end, -- grid = function (pb) local p = Pict({"% Grid", "% Horizontal lines:"}) for y=pb.y1,pb.y2 do p:addline(v(pb:x0(), y), v(pb:x3(), y)) end p:add("% Vertical lines:") for x=pb.x1,pb.x2 do p:addline(v(x, pb:y0()), v(x, pb:y3())) end return p end, ticks = function (pb, e) e = e or .2 local p = Pict({"% Ticks", "% On the vertical axis:"}) for y=pb.y1,pb.y2 do p:addline(v(-e, y), v(e, y)) end p:add("% On the horizontal axis: ") for x=pb.x1,pb.x2 do p:addline(v(x, -e), v(x, e)) end return p end, axes = function (pb) local p = Pict({"% Axes"}) return p:addline(v(pb:x0(), 0), v(pb:x3(), 0)) :addline(v(0, pb:y0()), v(0, pb:y3())) end, axesandticks = function (pb) return Pict { pb:axes(), pb:ticks() } end, -- -- 2023jun08: hticks = function (pb, e) e = e or .2 local p = Pict {"% On the horizontal axis:"} for x=pb.x1,pb.x2 do p:addline(v(x, -e), v(x, e)) end return p end, vticks = function (pb, e) e = e or .2 local p = Pict {"% On the vertical axis:"} for y=pb.y1,pb.y2 do p:addline(v(-e, y), v(e, y)) end return p end, haxis = function (pb) return Pict({}):addline(v(pb:x0(), 0), v(pb:x3(), 0)) end, vaxis = function (pb) return Pict({}):addline(v(0, pb:y0()), v(0, pb:y3())) end, haxisandticks = function (pb) return Pict { "% Horizontal axis and ticks:", pb:haxis(), pb:hticks() } end, }, } -- «PictBounds-tests» (to ".PictBounds-tests") -- (find-LATEX "edrxpict.lua" "pictp0-pictp3") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Pict2e2.lua" = PictBounds.new(v(-1,-2), v( 3, 5)) = PictBounds.new(v( 3, 5), v(-1,-2)) = PictBounds.new(v( 3, 5), v(-1,-2), 0.5) pb = PictBounds.new(v(-1,-2), v( 3, 5)) = pb:p0() = pb:p1() = pb:p2() = pb:p3() = pb:grid() = pb:ticks() = pb:axes() = pb:axesandticks() = pb:grid():prethickness("0.5pt") = pb:grid():prethickness("0.5pt"):color("gray") = pb = pb:beginpicture() = pb:p0() = (pb:p0() + pb:p3()) = (pb:p0() + pb:p3()) * 0.5 --]] -- ____ _ _ ____ _ -- | _ \(_) ___| |_| __ ) ___ _ _ _ __ __| |___ _ __ ___ -- | |_) | |/ __| __| _ \ / _ \| | | | '_ \ / _` / __| | '_ ` _ \ -- | __/| | (__| |_| |_) | (_) | |_| | | | | (_| \__ \ | | | | | | -- |_| |_|\___|\__|____/ \___/ \__,_|_| |_|\__,_|___/ |_| |_| |_| -- -- This block "adds PictBounds methods to the class Pict". -- More precisely, it adds to Pict.__index, that is the table of methods -- for the class Pict, a bunch of new methods that call things from the -- class PictBounds. -- Based on: (find-angg "LUA/Pict2e1.lua" "PictBounds-methods") -- -- «PictBounds-methods» (to ".PictBounds-methods") -- table.addentries(Pict.__index, { gb = function (p) return PictBounds.getbounds() end, getbounds = function (p) return PictBounds.getbounds() end, -- bep0 = function (p) return p:gb():beginpicture(), "\\end{picture}" end, bep = function (p) return p:wrapbe(p:bep0()) end, -- grid0 = function (p) return p:gb():grid() end, axes0 = function (p) return p:gb():axes() end, axesandticks0 = function (p) return p:gb():axesandticks() end, haxisandticks0 = function (p) return p:gb():haxisandticks() end, -- gridstyle = function (p) return p:pre("\\pictgridstyle"):wrap01() end, axesstyle = function (p) return p:pre("\\pictaxesstyle"):wrap01() end, naxesstyle = function (p) return p:pre("\\pictnaxesstyle"):wrap01() end, -- pregrid = function (p) return p:pre(p:grid0():gridstyle()) end, preaxes = function (p) return p:pre(p:axes0():axesstyle()) end, preaxesandticks = function (p) return p:pre(p:axesandticks0():axesstyle()) end, prehaxisandticks = function (p) return p:pre(p:haxisandticks0():axesstyle()) end, prenaxesandticks = function (p) return p:pre(p:axesandticks0():naxesstyle()) end, -- -- "PGAT" means "Picture, Grid, Axes, Ticks". -- This method adds begin/end picture, grid, axes, and ticks to a -- Pict2e object, in the right order, and with a very compact syntax -- to select what will be added. It can also add a bhbox and a def. pgat = function (p, str, def) if str:match("a") then p = p:preaxesandticks() end if str:match("A") then p = p:preaxes() end if str:match("N") then p = p:prenaxesandticks() end -- for numerozinhos if str:match("h") then p = p:prehaxisandticks() end -- for estatistica if str:match("g") then p = p:pregrid() end if str:match("p") then p = p:bep() end if str:match("c") then p = p:myvcenter() end if str:match("B") then p = p:bhbox() end if def then p = p:def(def) end return p end, pgats = function (p, str, saname) return p:pgat(str):sa(saname) end, }) -- «PictBounds-methods-tests» (to ".PictBounds-methods-tests") --[[ ** (find-angg "LUA/Show2.lua" "texbody") ** (find-code-show2 "~/LATEX/Show2.tex") * (code-show2 "~/LATEX/Show2.tex") * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Pict2e2.lua" ab = Pict {"a", "b"} = ab:bep0() = ab:bep() = ab: grid0() = ab: gridstyle() = ab:pregrid() = ab: axes0() = ab: axesandticks0() = ab: axesstyle() = ab: naxesstyle() = ab: preaxes() = ab: preaxesandticks() = ab:prenaxesandticks() = ab:pgat("a") = ab:pgat("A") = ab:pgat("N") = ab:pgat("g") = ab:pgat("p") = ab:pgat("c") = ab:pgat("B") = ab:pgat(" ", "foo") require "PictShow1" -- (find-angg "LUA/PictShow1.lua") ab = Pict {} = ab:pgat("hg") = ab:pgat("pgh"):show() = show() = Show.log = Show.bigstr * (etv) --]] -- Local Variables: -- coding: utf-8-unix -- End: