A1 = function(id, preserve_screen_top_of_cursor_node) -- like A, but translate a single node in Nodes to Surface -- this only works because Nodes is a flat array; we don't support row/col types here yet -- delete previously added shapes for this node: for i=#Surface,1,-1 do local x = Surface[i] if x.id == id or (x.keys and table.find(x.keys, id)) then table.remove(Surface, i) end end -- translate Nodes to Surface local node = Nodes[id] compute_layout(node, node.x,node.y, Surface, preserve_screen_top_of_cursor_node) for _,d in ipairs(node.outgoing_edges) do compute_layout_for_edge(id, d) end for _,s in ipairs(node.incoming_edges) do compute_layout_for_edge(s, id) end -- continue the pipeline B(preserve_screen_top_of_cursor_node) end