added groups

This commit is contained in:
2024-06-18 16:09:06 +02:00
parent c7fba373a5
commit dc5d868a5d
5 changed files with 153 additions and 15 deletions

View File

@ -1,3 +1,4 @@
#import "utils.typ": get-group-span
#import "renderer.typ": render
#let _seq(
@ -37,9 +38,40 @@
return false
}
#let _grp(name, desc: none, type: "default", elmts) = {
return ((
type: "grp",
name: name,
desc: desc,
grp-type: type,
elmts: elmts
),)
}
#let diagram(elements) = {
let participants = ()
for elmt in elements {
let elmts = elements
let i = 0
let a = elmts.len()
while i < elmts.len() {
let elmt = elmts.at(i)
if elmt.type == "grp" {
elmts = (
elmts.slice(0, i + 1) +
elmt.elmts +
((
type: "grp-end"
),) +
elmts.slice(i+1)
)
}
i += 1
}
let b = elmts.len()
[#a / #b]
[#elmts.map(e => e.type)]
for elmt in elmts {
if elmt.type == "par" {
participants.push(elmt)
} else if elmt.type == "seq" {
@ -52,7 +84,15 @@
}
}
render(participants, elements)
for (i, elmt) in elmts.enumerate() {
if elmt.type == "grp" {
let (min-i, max-i) = get-group-span(participants, elmt)
elmts.at(i).insert("min-i", min-i)
elmts.at(i).insert("max-i", max-i)
}
}
render(participants, elmts)
}
#let from-plantuml(code) = {