added _ret for return sequences

This commit is contained in:
Louis Heredero 2024-10-06 22:27:49 +02:00
parent 9275169e8c
commit c4f09a0a3e
Signed by: HEL
GPG Key ID: 8D83DE470F8544E7
3 changed files with 36 additions and 2 deletions

View File

@ -1,6 +1,7 @@
#import "utils.typ": get-group-span, fit-canvas #import "utils.typ": get-group-span, fit-canvas
#import "renderer.typ": render #import "renderer.typ": render
#import "participant.typ" as participant: _par, PAR-SPECIALS #import "participant.typ" as participant: _par, PAR-SPECIALS
#import "sequence.typ": _seq
#let _gap(size: 20) = { #let _gap(size: 20) = {
return (( return ((
@ -38,7 +39,9 @@
let elmts = elements let elmts = elements
let i = 0 let i = 0
// Flatten groups let activation-history = ()
// Flatten groups + convert returns
while i < elmts.len() { while i < elmts.len() {
let elmt = elmts.at(i) let elmt = elmts.at(i)
if elmt.type == "grp" { if elmt.type == "grp" {
@ -62,6 +65,30 @@
),) + ),) +
elmts.slice(i+1) elmts.slice(i+1)
) )
} else if elmt.type == "seq" {
if elmt.enable-dst {
activation-history.push(elmt)
}
} else if elmt.type == "evt" {
if elmt.event == "enable" {
for elmt2 in elmts.slice(0, i).rev() {
if elmt2.type == "seq" {
activation-history.push(elmt2)
break
}
}
}
} else if elmt.type == "ret" {
if activation-history.len() == 0 {
panic("Cannot return if no lifeline is activated")
}
let seq = activation-history.pop()
elmts.at(i) = _seq(
seq.p2, seq.p1,
comment: elmt.comment,
disable-src: true,
dashed: true
).first()
} }
i += 1 i += 1
} }

View File

@ -1,7 +1,7 @@
#let version = version(0, 1, 1) #let version = version(0, 1, 1)
#import "diagram.typ": diagram, from-plantuml, _gap, _evt, _col #import "diagram.typ": diagram, from-plantuml, _gap, _evt, _col
#import "sequence.typ": _seq #import "sequence.typ": _seq, _ret
#import "group.typ": _grp, _loop, _alt, _opt, _break #import "group.typ": _grp, _loop, _alt, _opt, _break
#import "participant.typ": _par #import "participant.typ": _par
#import "separator.typ": _sep #import "separator.typ": _sep

View File

@ -88,6 +88,13 @@
),) ),)
} }
#let _ret(comment: none) = {
return ((
type: "ret",
comment: comment
),)
}
#let render(pars-i, x-pos, participants, elmt, y, lifelines) = { #let render(pars-i, x-pos, participants, elmt, y, lifelines) = {
let shapes = () let shapes = ()