2024-06-18 14:09:06 +00:00
|
|
|
#let get-participants-i(participants) = {
|
|
|
|
let pars-i = (:)
|
|
|
|
for (i, p) in participants.enumerate() {
|
|
|
|
pars-i.insert(p.name, i)
|
|
|
|
}
|
|
|
|
return pars-i
|
|
|
|
}
|
|
|
|
|
|
|
|
#let get-group-span(participants, group) = {
|
|
|
|
let min-i = participants.len() - 1
|
|
|
|
let max-i = 0
|
|
|
|
let pars-i = get-participants-i(participants)
|
|
|
|
|
|
|
|
for elmt in group.elmts {
|
|
|
|
if elmt.type == "seq" {
|
|
|
|
let i1 = pars-i.at(elmt.p1)
|
|
|
|
let i2 = pars-i.at(elmt.p2)
|
|
|
|
min-i = calc.min(min-i, i1, i2)
|
|
|
|
max-i = calc.max(max-i, i1, i2)
|
|
|
|
} else if elmt.type == "grp" {
|
|
|
|
let (i0, i1) = get-group-span(participants, elmt)
|
|
|
|
min-i = calc.min(min-i, i0)
|
|
|
|
max-i = calc.max(max-i, i1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return (min-i, max-i)
|
2024-06-18 21:00:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#let get-style(base-name, mods) = {
|
|
|
|
let style = if base-name == "lifeline" {(
|
|
|
|
fill: white,
|
|
|
|
stroke: black + 1pt
|
|
|
|
)}
|
|
|
|
|
|
|
|
if mods == auto {
|
|
|
|
return style
|
|
|
|
}
|
|
|
|
if type(mods) == dictionary {
|
|
|
|
return style + mods
|
|
|
|
}
|
|
|
|
|
|
|
|
panic("Invalid type for parameter mods, expected auto or dictionary, got " + str(type(mods)))
|
2024-06-18 14:09:06 +00:00
|
|
|
}
|