added groups
This commit is contained in:
@ -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) = {
|
||||
|
Reference in New Issue
Block a user