From feff0305102a2d7d29e16537a60d0e2c01bd8b87 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Fri, 4 Oct 2024 19:19:17 +0200 Subject: [PATCH] added alt/else, loops and other group shortcuts --- gallery/example1.pdf | Bin 31925 -> 40713 bytes gallery/example1.typ | 37 ++++++++++++++++++++++++++++------- src/diagram.typ | 2 +- src/group.typ | 45 +++++++++++++++++++++++++++++++++++++++++++ src/lib.typ | 2 +- src/renderer.typ | 19 ++++++++++++++++++ 6 files changed, 96 insertions(+), 9 deletions(-) diff --git a/gallery/example1.pdf b/gallery/example1.pdf index de434a8c1e18b81f8a13418990d0e6282f6104ff..a3f8e8fad22a5090b275c713d64610f7f7fa0524 100644 GIT binary patch delta 36016 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

ASb<&FvGzBc@Mt)5ZJM#KxG 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 delta 27265 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 diff --git a/gallery/example1.typ b/gallery/example1.typ index 48be250..28d10de 100644 --- a/gallery/example1.typ +++ b/gallery/example1.typ @@ -33,15 +33,38 @@ Alice <-- Bob: Another authentication Response #chronos.diagram({ import chronos: * _seq("Alice", "Bob", comment: "Authentication Request") - _seq("Bob", "Alice", comment: "Authentication Failure") - _grp("My own label", desc: "My own label2", { - _seq("Alice", "Log", comment: "Log attack start") - _grp("loop", desc: "1000 times", { - _seq("Alice", "Bob", comment: "DNS Attack") - }) - _seq("Alice", "Bob", comment: "Log attack end") + _alt( + "successful case", { + _seq("Bob", "Alice", comment: "Authentication Accepted") + }, + "some kind of failure", { + _seq("Bob", "Alice", comment: "Authentication Failure") + + _grp("My own label", desc: "My own label2", { + _seq("Alice", "Log", comment: "Log attack start") + _loop("1000 times", { + _seq("Alice", "Bob", comment: "DNS Attack") + }) + _seq("Alice", "Log", comment: "Log attack end") + }) + }, + "Another type of failure", { + _seq("Bob", "Alice", comment: "Please repeat") + } + ) +}) + +#chronos.diagram({ + import chronos: * + _par("a", display-name: box(width: 1.5em, height: .5em), show-bottom: false) + _par("b", display-name: box(width: 1.5em, height: .5em), show-bottom: false) + _col("a", "b", width: 2cm) + _loop("a<1", min: 1, { + _seq("a", "b", end-tip: ">>") + _seq("b", "a", end-tip: ">>") }) + _seq("a", "b", end-tip: ">>") }) #chronos.diagram({ diff --git a/src/diagram.typ b/src/diagram.typ index b70eef5..8412d60 100644 --- a/src/diagram.typ +++ b/src/diagram.typ @@ -185,7 +185,7 @@ // Compute groups spans (horizontal) for (i, elmt) in elmts.enumerate() { - if elmt.type == "grp" { + if elmt.type == "grp" or elmt.type == "alt" { 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) diff --git a/src/group.typ b/src/group.typ index 78e00c7..4d3cb3c 100644 --- a/src/group.typ +++ b/src/group.typ @@ -11,6 +11,36 @@ ),) } +#let _alt(desc, elmts, ..args) = { + let all-elmts = () + all-elmts += elmts + let args = args.pos() + for i in range(0, args.len(), step: 2) { + let else-desc = args.at(i) + let else-elmts = args.at(i + 1, default: ()) + all-elmts.push(( + type: "else", + desc: else-desc + )) + all-elmts += else-elmts + } + + return _grp("alt", desc: desc, type: "alt", all-elmts) +} + +#let _loop(desc, min: none, max: auto, elmts) = { + let name = "loop" + if min != none { + if max == auto { + max = "*" + } + name += "(" + str(min) + "," + str(max) + ")" + } + _grp(name, desc: desc, type: "loop", elmts) +} +#let _opt(desc, elmts) = grp("opt", desc: desc, type: "opt", elmts) +#let _break(desc, elmts) = grp("break", desc: desc, type: "break", elmts) + #let render(x0, x1, y0, y1, group) = { let shapes = () let name = text(group.name, weight: "bold") @@ -50,5 +80,20 @@ ) } + return shapes +} + +#let render-else(x0, x1, y, elmt) = { + let shapes = draw.line( + (x0, y), + (x1, y), + stroke: (dash: (2pt, 1pt), thickness: .5pt) + ) + shapes += draw.content( + (x0, y), + text([\[#elmt.desc\]], weight: "bold", size: .8em), + anchor: "north-west", + padding: 3pt + ) return shapes } \ No newline at end of file diff --git a/src/lib.typ b/src/lib.typ index 6afc60f..2d96474 100644 --- a/src/lib.typ +++ b/src/lib.typ @@ -2,7 +2,7 @@ #import "diagram.typ": diagram, from-plantuml, _gap, _evt, _col #import "sequence.typ": _seq -#import "group.typ": _grp +#import "group.typ": _grp, _loop, _alt, _opt, _break #import "participant.typ": _par #import "separator.typ": _sep #import "note.typ": _note diff --git a/src/renderer.typ b/src/renderer.typ index a772654..4d9c46c 100644 --- a/src/renderer.typ +++ b/src/renderer.typ @@ -242,6 +242,7 @@ let draw-seq = sequence.render.with(pars-i, x-pos, participants) let draw-group = group.render.with() + let draw-else = group.render-else.with() 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) @@ -283,6 +284,9 @@ if g.at(1).max-i == elmt.max-i { g.at(3) += 1 } g }) + if elmt.grp-type == "alt" { + elmt.insert("elses", ()) + } groups.push((y, elmt, 0, 0)) y -= m.height / 1pt @@ -294,6 +298,21 @@ let x1 = x-pos.at(group.max-i) + end-lvl * 10 + 20 shapes += draw-group(x0, x1, start-y, y, group) + if group.grp-type == "alt" { + for (else-y, else-elmt) in group.elses { + shapes += draw-else(x0, x1, else-y, else-elmt) + } + } + + // Alt's elses -> reserve space for label + store position + } else if elmt.type == "else" { + y -= Y-SPACE + let m = measure(text([\[#elmt.desc\]], weight: "bold", size: .8em)) + groups.last().at(1).elses.push(( + y, elmt + )) + y -= m.height / 1pt + // Separator } else if elmt.type == "sep" { let shps