|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- https://anggtwu.net/LUA/DiagForth1.lua.html
-- https://anggtwu.net/LUA/DiagForth1.lua
-- (find-angg "LUA/DiagForth1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- (defun e () (interactive) (find-angg "LUA/DiagForth1.lua"))
-- (defun o () (interactive) (find-angg "LUA/DiagTeX1.lua"))
-- (defun oo () (interactive) (find-dn6 "diagforth.lua"))
--
-- «.dxyrun» (to "dxyrun")
-- «.relplace» (to "relplace")
forths = forths or {}
forthe = {} -- Similar to forths[], but defines eaters.
DiagForth = Class {
type = "DiagForth",
__index = {
w = function (df) return getword() or werror() end,
e = function (df) return getwordasluaexpr() or werror() end,
w_w = function (df) return df:w(),df:w() end,
w_w_w = function (df) return df:w(),df:w(),df:w() end,
e_e = function (df) return df:e(),df:e() end,
e_e_e = function (df) return df:e(),df:e(),df:e() end,
e_e_w = function (df) return df:e(),df:e(),df:w() end,
--
getargs = function (df,word)
local ga = forthe[word]
if not ga then return end
if type(ga) == "function" then return ga() end
if type(ga) == "string" then
local methodname = ga:gsub(",", "_")
if not df[methodname] then
error("Bad getargs method in "..word.." -> "..methodname)
end
return df[methodname](df)
end
error("Bad getargs in word: "..word)
end,
dxyrun1 = function (df,word)
if forths[word] then forths[word](df:getargs(word))
elseif nodes[word] then ds:push(nodes[word])
else Error("Unknown word: "..word)
end
end,
dxyrun = function (df,str,pos_)
local oldvalues = pack(subj,startcol,endcol,word,pos)
setsubj(str, pos_ or 1)
while getword() do df:dxyrun1(word) end
subj,startcol,endcol,word,pos = unpack(oldvalues)
end,
--
run1 = function (df,cmd)
if type(cmd) == "string" then cmd = {cmd} end
local word = cmd[1]
if not forths[word] then error("Unknown word: "..word) end
forths[word](unpack(cmd, 2))
end,
--
},
}
-- «dxyrun» (to ".dxyrun")
-- Replaces: (find-dn6 "diagforth.lua" "dxyrun")
dxyrun = function (str, pos_)
DiagForth{}:dxyrun(str,pos_)
end
--
-- dxyrun = function (str, pos)
-- setsubj(str, pos or 1)
-- while getword() do
-- PP(word)
-- -- if forths[word] then forths[word]()
-- if forths[word] then forths[word](forthe_getargs(word))
-- elseif nodes[word] then ds:push(nodes[word])
-- else Error("Unknown word: "..word)
-- end
-- end
-- end
-- (find-dn6 "diagforth.lua" "nodes")
-- (find-dn6 "diagforth.lua" "arrow-modifiers")
-- (find-dn6 "diagmiddle.lua" "dvarrownodes" "forths[\"harrownodes\"] =")
forthe[".p="] = "w"
forthe[".slide="] = "w"
forthe[".curve="] = "w"
forthe[".label="] = "w"
forthe[".plabel="] = "w,w"
forthe[".PLABEL="] = "w,w"
forths[".p="] = function (p) ds:pick(0).placement = p end
forths[".slide="] = function (slide) ds:pick(0).slide = slide end
forths[".curve="] = function (curve) ds:pick(0).curve = curve end
forths[".label="] = function (label) ds:pick(0).label = label end
forths[".plabel="] = function (p,label)
ds:pick(0).placement = p
ds:pick(0).label = label
end
forths[".PLABEL="] = function (lp,label)
ds:pick(0).lplacement = lp
ds:pick(0).label = label
end
-- (find-dn6 "diagforth.lua" "arrows" "x+=")
forthe["x+="] = "e"
forthe["y+="] = "e"
forths["x+="] = function (dx) ds:pick(0).x = ds:pick(0).x + dx end
forths["y+="] = function (dy) ds:pick(0).y = ds:pick(0).y + dy end
forthe["xy+="] = "e,e"
forths["xy+="] = function (dx,dy)
ds:pick(0).x = ds:pick(0).x + dx
ds:pick(0).y = ds:pick(0).y + dy
end
-- «relplace» (to ".relplace")
-- (find-dn6 "diagforth.lua" "relplace")
forthe["relplace"] = "e,e,w"
forths["relplace"] = function (dx,dy,TeX)
local x, y = ds:pick(0).x, ds:pick(0).y
ds:push(storearrow(DxyPlace {{x=x+dx, y=y+dy, tex=TeX}}))
end
-- (misp 51 "2-category-of-cats")
-- (misa "2-category-of-cats")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "DiagForth1.lua"
--]]
-- Local Variables:
-- coding: utf-8-unix
-- End: