use(require(“atomy”))
data = require(“anatomy/data”)
def(pass(a & Array, part)):
a collect [x]: pass(x, part)
def(pass(c & data ResolveElement, part)):
pass(c action[part], part)
def(pass(x & (data Reference | data Target), part)):
x
def(pass(e & data Element, part)):
unless(e class == data Element): warning(.did-not-traverse(e class)) e dup tap [x]: x content = pass(e content, part)
def(pass(i & data Itemization, part)):
i dup tap [x]: x elements = i elements collect [name, body]: [ pass(name, part) pass(body, part) ]
def(pass(l & data List, part)):
l dup tap [x]: x elements = l elements collect [body]: pass(body, part)
def(pass(p & data Paragraph, part)):
p dup tap [x]: x content = pass(p content, part)
def(pass(c & data ResolveBlock, part)):
pass(c action[part], part)
def(pass(b & data Block, part)):
unless(b class == data Block): warning(.did-not-traverse(b class)) b dup tap [x]: x content = pass(b content, part)
def(pass(s & String, _)): s
def(pass(nil, _)): nil
def(over(part)):
part body = pass(part body, part) part parts each [sub]: over(sub) part