added checks + fixed auto ids
This commit is contained in:
parent
358de4825d
commit
5616544707
@ -11,26 +11,40 @@
|
||||
#let circuit(body, length: 2em) = {
|
||||
let next-id = 0
|
||||
let elements = (:)
|
||||
let ids = ()
|
||||
for e in body {
|
||||
if type(e) == dictionary and "id" in e {
|
||||
ids.push(e.id)
|
||||
}
|
||||
}
|
||||
|
||||
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 {
|
||||
let eid = if internal {element.id} else {auto}
|
||||
if eid == auto {
|
||||
while str(next-id) in ids {
|
||||
next-id += 1
|
||||
}
|
||||
eid = str(next-id)
|
||||
ids.push(eid)
|
||||
if internal {
|
||||
element.id = eid
|
||||
}
|
||||
next-id += 1
|
||||
}
|
||||
if eid in elements {
|
||||
panic("An element with the id '" + eid + "' already exists. Please use a different id")
|
||||
}
|
||||
elements.insert(eid, element)
|
||||
}
|
||||
|
||||
for element in elements.values() {
|
||||
if type(element) == dictionary and "pre-process" in element {
|
||||
elements = (element.pre-process)(elements, element)
|
||||
assert(
|
||||
type(elements) == dictionary,
|
||||
message: "The `pre-process` method of element '" + element.id + "' did not return the elements dictionary"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -147,7 +147,19 @@
|
||||
|
||||
// Workaround because CeTZ needs to have all draw functions in the body
|
||||
let func = {}
|
||||
(func, bounds) = draw-shape(elmt, bounds)
|
||||
let res = draw-shape(elmt, bounds)
|
||||
assert(
|
||||
type(res) == array and res.len() == 2,
|
||||
message: "The drawing function of element '" + elmt.id + "' did not return a function and new bounds"
|
||||
)
|
||||
(func, bounds) = res
|
||||
if type(func) == function {
|
||||
func = (func,)
|
||||
}
|
||||
assert(
|
||||
type(bounds) == dictionary,
|
||||
message: "The drawing function of element '" + elmt.id + "' did not return the correct bounds dictionary"
|
||||
)
|
||||
func
|
||||
|
||||
if elmt.name != none {
|
||||
@ -208,7 +220,7 @@
|
||||
ports-margins: (:),
|
||||
fill: none,
|
||||
stroke: black + 1pt,
|
||||
id: "",
|
||||
id: auto,
|
||||
auto-ports: true,
|
||||
ports-y: (:),
|
||||
debug: (
|
||||
|
Loading…
x
Reference in New Issue
Block a user