Compare commits
2 Commits
14cbda2ffb
...
c7fba373a5
Author | SHA1 | Date | |
---|---|---|---|
c7fba373a5 | |||
974eb92159 |
Binary file not shown.
@ -12,8 +12,20 @@ Alice <-- Bob: Another authentication Response
|
|||||||
#chronos.diagram({
|
#chronos.diagram({
|
||||||
import "/src/diagram.typ": *
|
import "/src/diagram.typ": *
|
||||||
_seq("Alice", "Bob", comment: "Authentication Request")
|
_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("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")
|
||||||
})
|
})
|
@ -1,12 +1,21 @@
|
|||||||
#import "renderer.typ": render
|
#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 ((
|
return ((
|
||||||
type: "seq",
|
type: "seq",
|
||||||
p1: p1,
|
p1: p1,
|
||||||
p2: p2,
|
p2: p2,
|
||||||
comment: comment,
|
comment: comment,
|
||||||
style: style
|
dashed: dashed,
|
||||||
|
tip: tip,
|
||||||
|
color: color,
|
||||||
),)
|
),)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#import "@preview/cetz:0.2.2": canvas, draw
|
#import "@preview/cetz:0.2.2": canvas, draw
|
||||||
|
|
||||||
#let X-SPACE = 2
|
#let Y-SPACE = 20
|
||||||
#let Y-SPACE = 30
|
#let PAR-PAD = (5pt, 3pt)
|
||||||
|
#let PAR-SPACE = 10
|
||||||
|
|
||||||
#let get-participants-i(participants) = {
|
#let get-participants-i(participants) = {
|
||||||
let pars-i = (:)
|
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) {
|
for cell in cells.filter(c => c.i2 - c.i1 == 1) {
|
||||||
let m = measure(cell.cell)
|
let m = measure(cell.cell)
|
||||||
widths.at(cell.i1) = calc.max(
|
widths.at(cell.i1) = calc.max(
|
||||||
@ -38,6 +47,18 @@
|
|||||||
m.width / 1pt
|
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
|
return widths
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +79,7 @@
|
|||||||
p.display-name,
|
p.display-name,
|
||||||
name: p.name,
|
name: p.name,
|
||||||
frame: "rect",
|
frame: "rect",
|
||||||
padding: (5pt, 3pt),
|
padding: PAR-PAD,
|
||||||
anchor: "south"
|
anchor: "south"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -69,10 +90,18 @@
|
|||||||
if elmt.type == "seq" {
|
if elmt.type == "seq" {
|
||||||
let x1 = x-pos.at(pars-i.at(elmt.p1))
|
let x1 = x-pos.at(pars-i.at(elmt.p1))
|
||||||
let x2 = x-pos.at(pars-i.at(elmt.p2))
|
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(
|
draw.line(
|
||||||
(x1, y),
|
(x1, y),
|
||||||
(x2, y),
|
(x2, y),
|
||||||
mark: (end: "straight")
|
..style
|
||||||
)
|
)
|
||||||
if elmt.comment != none {
|
if elmt.comment != none {
|
||||||
draw.content(
|
draw.content(
|
||||||
@ -100,7 +129,7 @@
|
|||||||
p.display-name,
|
p.display-name,
|
||||||
name: p.name,
|
name: p.name,
|
||||||
frame: "rect",
|
frame: "rect",
|
||||||
padding: (5pt, 3pt),
|
padding: PAR-PAD,
|
||||||
anchor: "north"
|
anchor: "north"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user