Compare commits

...

2 Commits

Author SHA1 Message Date
c7fba373a5
improved column layout 2024-06-18 14:11:03 +02:00
974eb92159
added some styling options 2024-06-18 13:51:01 +02:00
4 changed files with 60 additions and 10 deletions

Binary file not shown.

View File

@ -12,8 +12,20 @@ Alice <-- Bob: Another authentication Response
#chronos.diagram({
import "/src/diagram.typ": *
_seq("Alice", "Bob", comment: "Authentication Request")
_seq("Bob", "Alice", comment: "Authentication Response", style: "dashed")
_seq("Bob", "Alice", comment: "Authentication Response", dashed: true)
_seq("Alice", "Bob", comment: "Another authentication Request")
_seq("Bob", "Alice", comment: "Another authentication Response", style: "dashed")
_seq("Bob", "Alice", comment: "Another authentication Response", dashed: true)
})
#chronos.diagram({
import "/src/diagram.typ": *
_seq("Bob", "Alice", comment: "bonjour", color: red)
_seq("Alice", "Bob", comment: "ok", color: blue)
})
#chronos.diagram({
import "/src/diagram.typ": *
_seq("Alice", "Bob", comment: "This is a test")
_seq("Alice", "Callum", comment: "This is another test with a long text")
})

View File

@ -1,12 +1,21 @@
#import "renderer.typ": render
#let _seq(p1, p2, comment: none, style: auto) = {
#let _seq(
p1,
p2,
comment: none,
dashed: false,
tip: "default",
color: black
) = {
return ((
type: "seq",
p1: p1,
p2: p2,
comment: comment,
style: style
dashed: dashed,
tip: tip,
color: color,
),)
}

View File

@ -1,7 +1,8 @@
#import "@preview/cetz:0.2.2": canvas, draw
#let X-SPACE = 2
#let Y-SPACE = 30
#let Y-SPACE = 20
#let PAR-PAD = (5pt, 3pt)
#let PAR-SPACE = 10
#let get-participants-i(participants) = {
let pars-i = (:)
@ -30,7 +31,15 @@
}
}
let widths = participants.slice(0, -1).map(_ => 0)
let widths = ()
for i in range(participants.len() - 1) {
let p1 = participants.at(i)
let p2 = participants.at(i + 1)
let w1 = measure(box(p1.display-name)).width + PAR-PAD.last() * 2
let w2 = measure(box(p2.display-name)).width + PAR-PAD.last() * 2
widths.push(w1 / 2pt + w2 / 2pt + PAR-SPACE)
}
for cell in cells.filter(c => c.i2 - c.i1 == 1) {
let m = measure(cell.cell)
widths.at(cell.i1) = calc.max(
@ -38,6 +47,18 @@
m.width / 1pt
)
}
let multicol-cells = cells.filter(c => c.i2 - c.i1 > 1)
multicol-cells = multicol-cells.sorted(key: c => {
c.i1 * 1000 + c.i2
})
for cell in multicol-cells {
let m = measure(cell.cell)
widths.at(cell.i2 - 1) = calc.max(
widths.at(cell.i2 - 1),
m.width / 1pt - widths.slice(0, cell.i2 - 1).sum()
)
}
return widths
}
@ -58,7 +79,7 @@
p.display-name,
name: p.name,
frame: "rect",
padding: (5pt, 3pt),
padding: PAR-PAD,
anchor: "south"
)
}
@ -69,10 +90,18 @@
if elmt.type == "seq" {
let x1 = x-pos.at(pars-i.at(elmt.p1))
let x2 = x-pos.at(pars-i.at(elmt.p2))
let style = (
mark: (end: "straight"),
stroke: (
dash: if elmt.dashed {"dashed"} else {"solid"},
paint: elmt.color
)
)
draw.line(
(x1, y),
(x2, y),
mark: (end: "straight")
..style
)
if elmt.comment != none {
draw.content(
@ -100,7 +129,7 @@
p.display-name,
name: p.name,
frame: "rect",
padding: (5pt, 3pt),
padding: PAR-PAD,
anchor: "north"
)
}