forked from HEL/circuiteria
initial rewrite of drawing pipeline + positioning
This commit is contained in:
@ -9,6 +9,38 @@
|
||||
/// - length (length, ratio): Optional base unit
|
||||
/// -> none
|
||||
#let circuit(body, length: 2em) = {
|
||||
set text(font: "Source Sans 3")
|
||||
canvas(length: length, body)
|
||||
let next-id = 0
|
||||
let elements = (:)
|
||||
|
||||
for element in body {
|
||||
let internal = type(element) == dictionary and "id" in element
|
||||
let eid = if internal {element.id} else {none}
|
||||
if eid == none {
|
||||
while str(next-id) in elements {
|
||||
next-id += 1
|
||||
}
|
||||
eid = str(next-id)
|
||||
if internal {
|
||||
element.id = eid
|
||||
}
|
||||
next-id += 1
|
||||
}
|
||||
elements.insert(eid, element)
|
||||
}
|
||||
|
||||
for element in elements.values() {
|
||||
if type(element) == dictionary and "pre-process" in element {
|
||||
elements = (element.pre-process)(elements, element)
|
||||
}
|
||||
}
|
||||
|
||||
canvas(length: length, {
|
||||
for element in elements.values() {
|
||||
if type(element) == dictionary and "draw" in element {
|
||||
(element.draw)(element)
|
||||
} else {
|
||||
(element,)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user