30 lines
741 B
Typst
30 lines
741 B
Typst
#let get_figures(body) = {
|
|
if type(body) == array {
|
|
body.map(get_figures).flatten()
|
|
} else if type(body) == dictionary {
|
|
body.values().map(get_figures).flatten()
|
|
} else if type(body) != content {
|
|
()
|
|
}else if body.func() == figure {
|
|
(body,)
|
|
} else {
|
|
body.fields().values().map(get_figures).flatten()
|
|
}
|
|
}
|
|
|
|
#let main = include("../main.typ")
|
|
#let figures = {
|
|
let figures = (:)
|
|
for fig in get_figures(main) {
|
|
let fields = fig.fields()
|
|
assert("label" in fields, message: "no 'label' in " + repr(fields))
|
|
let lab = fields.remove("label")
|
|
let body = fields.remove("body")
|
|
figures.insert(str(lab), figure(..fields, body))
|
|
}
|
|
figures
|
|
}
|
|
|
|
#let get_figure(label) = {
|
|
figures.at(str(label))
|
|
}
|