|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- https://anggtwu.net/LUA/DiagStacks1.lua.html
-- https://anggtwu.net/LUA/DiagStacks1.lua
-- (find-angg "LUA/DiagStacks1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- This file implements the stacks used by:
-- (find-dn6 "diagforth.lua" "diagram")
-- (find-dn6 "diagforth.lua" "enddiagram")
--
-- The main stack, `ds', is based on the Forth data stack - see:
-- (find-miniforthgempage 3 "DS={ 5 }")
--
-- The items in `ds' are usually nodes and arrows,
-- that are also kept in the tables `nodes' and `arrows',
-- and are reset every time that we run "diagram" and "enddiagram".
--
-- There is also a "metastack" called `depths', used by "((" and "))":
-- (find-dednatslides2018page 10)
-- (find-dednatslides2018text 10)
--
-- Based on: (find-dn6 "diagstacks.lua")
-- Used by: (find-angg "LUA/DiagForth1.lua")
-- «.nodes» (to "nodes")
-- «.nodes-test» (to "nodes-test")
-- «.arrows-test» (to "arrows-test")
require "Stack1" -- (find-angg "LUA/Stack1.lua")
ds = Stack.new()
depths = Stack {ds=ds} -- (find-angg "LUA/Stack1.lua" "Stack" "metastacks")
-- _
-- _ __ ___ __| | ___ ___
-- | '_ \ / _ \ / _` |/ _ \/ __|
-- | | | | (_) | (_| | __/\__ \
-- |_| |_|\___/ \__,_|\___||___/
--
-- «nodes» (to ".nodes")
-- See: (find-angg "LUA/DiagForth1.lua" "DiagForth" "ds:push(nodes[word])")
-- (find-angg "LUA/DiagForth1.lua" "2D-and-2Dx" "storenode")
--
nodes = VTable {} -- has numeric and string indices
storenode = function (node)
table.insert(nodes, node)
node.noden = #nodes -- ".noden" acts as a numeric id.
if node.tag then -- ".tag" acts as a string id.
nodes[node.tag] = node -- "midpoint" creates nodes without ".tag"s.
end
return node
end
-- «nodes-test» (to ".nodes-test")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "DiagStacks1.lua"
ds:push(storenode {x=4, y=5, tag="A"})
ds:push(storenode {x=6, y=7, tag="B"})
ds:push(storenode {x=8, y=9})
= nodes
--]]
-- «arrows» (to ".arrows")
-- See: (find-angg "LUA/DiagForth1.lua" "arrows" "storearrow")
-- (find-angg "LUA/DiagForth1.lua" "enddiagram")
-- (find-angg "LUA/DiagTeX1.lua" "diagxy_def_diag")
--
arrows = VTable {} -- has only numeric indices
storearrow = function (arrow)
table.insert(arrows, arrow)
arrow.arrown = #arrows
return arrow
end
-- «arrows-test» (to ".arrows-test")
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "DiagStacks1.lua"
dofile "DiagTeX1.lua"
Stack.__index.tostring = mytostringv
ds:push(storenode {x=4, y=5, tag="A"})
ds:push(storenode {x=6, y=7, tag="B"})
ds:push(storenode {x=8, y=9, tag="C"})
ds:push(storearrow(DxyArrow {from=1, to=2, shape="->"}))
ds:push(storearrow(DxyArrow {from=2, to=3, shape="->"}))
= nodes
= arrows
= diagxy_def_diag("Foo")
--]]
-- Local Variables:
-- coding: utf-8-unix
-- End: