diff --git a/gallery/example2.pdf b/gallery/example2.pdf index bb798e8..20e2e33 100644 Binary files a/gallery/example2.pdf and b/gallery/example2.pdf differ diff --git a/gallery/example2.typ b/gallery/example2.typ index ca2903e..cbb301e 100644 --- a/gallery/example2.typ +++ b/gallery/example2.typ @@ -48,4 +48,39 @@ _seq("Alice", "]", comment: [->\]\ from actor1 *to end*]) _seq("Alice", "?", comment: [->?\ *short* from actor1]) _seq("Alice", "Bob", comment: [->\ from actor1 to actor2]) +}) + +#chronos.diagram({ + import chronos: * + _par("alice", display-name: "Alice") + _par("bob", display-name: "Bob") + _par("craig", display-name: "Craig") + + _seq("bob", "alice") + _seq("bob", "craig") + _gap() + + _sync({ + _seq("bob", "alice") + _seq("bob", "craig") + }) + _gap() + + _seq("alice", "bob") + _seq("craig", "bob") + _gap() + + _sync({ + _seq("alice", "bob") + _seq("craig", "bob") + }) + _gap() + + _sync({ + _seq("alice", "bob", enable-dst: true) + _seq("craig", "bob") + }) + _gap() + + _evt("bob", "disable") }) \ No newline at end of file diff --git a/src/lib.typ b/src/lib.typ index f44c8e9..ec5d651 100644 --- a/src/lib.typ +++ b/src/lib.typ @@ -4,4 +4,5 @@ #import "group.typ": _grp #import "participant.typ": _par #import "separator.typ": _sep -#import "note.typ": _note \ No newline at end of file +#import "note.typ": _note +#import "sync.typ": _sync \ No newline at end of file diff --git a/src/renderer.typ b/src/renderer.typ index a4ed4bd..8953a40 100644 --- a/src/renderer.typ +++ b/src/renderer.typ @@ -5,6 +5,7 @@ #import participant: PAR-SPECIALS #import "sequence.typ" #import "separator.typ" +#import "sync.typ" #import "consts.typ": * #import "note.typ" as note: get-note-box @@ -203,6 +204,7 @@ let draw-sep = separator.render.with(x-pos) let draw-par = participant.render.with(x-pos) let draw-note = note.render.with(pars-i, x-pos) + let draw-sync = sync.render.with(pars-i, x-pos, participants) // Draw participants (start) for p in participants { @@ -295,6 +297,12 @@ (y, shps) = draw-note(elmt, y, lifelines) shapes += shps } + + // Synched sequences + } else if elmt.type == "sync" { + let shps + (y, lifelines, shps) = draw-sync(elmt, y, lifelines) + shapes += shps } } diff --git a/src/sync.typ b/src/sync.typ new file mode 100644 index 0000000..41f0891 --- /dev/null +++ b/src/sync.typ @@ -0,0 +1,27 @@ +#import "sequence.typ" + +#let _sync(elmts) = { + return (( + type: "sync", + elmts: elmts + ),) +} + +#let render(pars-i, x-pos, participants, elmt, y, lifelines) = { + let draw-seq = sequence.render.with(pars-i, x-pos, participants) + + let shapes = () + + let end-y = y + + for e in elmt.elmts { + let yi + let shps + (yi, lifelines, shps) = draw-seq(e, y, lifelines) + shapes += shps + end-y = calc.min(end-y, yi) + } + + let r = (end-y, lifelines, shapes) + return r +} \ No newline at end of file