Release 0.2.0 #5
1
TODO.md
1
TODO.md
@ -22,6 +22,7 @@
|
|||||||
- [ ] Add args verification to catch user errors + pretty error messages
|
- [ ] Add args verification to catch user errors + pretty error messages
|
||||||
- [ ] PlantUML parser
|
- [ ] PlantUML parser
|
||||||
- [ ] (Message numbering)
|
- [ ] (Message numbering)
|
||||||
|
- [ ] Mainframes
|
||||||
- [ ] Different types of groups (alt/loop/etc.)
|
- [ ] Different types of groups (alt/loop/etc.)
|
||||||
- [ ] Delays
|
- [ ] Delays
|
||||||
- [ ] Auto-fit in parent
|
- [ ] Auto-fit in parent
|
@ -49,3 +49,19 @@
|
|||||||
show-bottom: true,
|
show-bottom: true,
|
||||||
show-top: true,
|
show-top: true,
|
||||||
) = {}
|
) = {}
|
||||||
|
|
||||||
|
/// Sets some options for columns between participants
|
||||||
|
///
|
||||||
|
/// Parameters `p1` and `p2` MUST be consecutive participants (also counting found/lost messages), but they do not need to be in the left to right order
|
||||||
|
/// - p1 (str): The first neighbouring participant
|
||||||
|
/// - p2 (str): The second neighbouring participant
|
||||||
|
/// - width (auto, int, float, length): Optional fixed width of the column\ If the column's content (e.g. sequence comments) is larger, it will overflow
|
||||||
|
/// - margin (int, float, length): Additional margin to add to the column\ This margin is not included in `width` and `min-width`, but rather added separately
|
||||||
|
/// - min-width (int, float, length): Minimum width of the column\ If set to a larger value than `width`, the latter will be overriden
|
||||||
|
#let _col(
|
||||||
|
p1,
|
||||||
|
p2,
|
||||||
|
width: auto,
|
||||||
|
margin: 0,
|
||||||
|
min-width: 0
|
||||||
|
) = {}
|
Binary file not shown.
@ -145,3 +145,22 @@ chronos.diagram({
|
|||||||
|
|
||||||
_gap()
|
_gap()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
#chronos.diagram({
|
||||||
|
import chronos: *
|
||||||
|
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
_par("c", display-name: "Caleb")
|
||||||
|
_par("d", display-name: "Danny")
|
||||||
|
_par("e", display-name: "Erika")
|
||||||
|
|
||||||
|
_col("a", "b")
|
||||||
|
_col("b", "c", width: 2cm)
|
||||||
|
_col("c", "d", margin: .5cm)
|
||||||
|
_col("d", "e", min-width: 2cm)
|
||||||
|
|
||||||
|
//_seq("b", "c", comment: [Hello World !])
|
||||||
|
//_seq("c", "d", comment: [Hello World])
|
||||||
|
//_seq("d", "e", comment: [Hello World])
|
||||||
|
})
|
BIN
manual.pdf
BIN
manual.pdf
Binary file not shown.
@ -155,7 +155,7 @@ chronos.diagram({
|
|||||||
doc-ref: doc-ref
|
doc-ref: doc-ref
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
#tidy.show-module(par-docs, show-outline: false)
|
#tidy.show-module(par-docs, show-outline: false, sort-functions: none)
|
||||||
|
|
||||||
#pagebreak(weak: true)
|
#pagebreak(weak: true)
|
||||||
|
|
||||||
|
@ -18,6 +18,17 @@
|
|||||||
),)
|
),)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#let _col(p1, p2, width: auto, margin: 0, min-width: 0) = {
|
||||||
|
return ((
|
||||||
|
type: "col",
|
||||||
|
p1: p1,
|
||||||
|
p2: p2,
|
||||||
|
width: width,
|
||||||
|
margin: margin,
|
||||||
|
min-width: min-width
|
||||||
|
),)
|
||||||
|
}
|
||||||
|
|
||||||
#let diagram(elements, width: auto) = {
|
#let diagram(elements, width: auto) = {
|
||||||
if elements == none {
|
if elements == none {
|
||||||
return
|
return
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#let version = version(0, 1, 1)
|
#let version = version(0, 1, 1)
|
||||||
#import "diagram.typ": diagram, from-plantuml, _gap, _evt
|
#import "diagram.typ": diagram, from-plantuml, _gap, _evt, _col
|
||||||
|
|
||||||
#import "sequence.typ": _seq
|
#import "sequence.typ": _seq
|
||||||
#import "group.typ": _grp
|
#import "group.typ": _grp
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@preview/cetz:0.2.2": canvas, draw
|
#import "@preview/cetz:0.2.2": canvas, draw
|
||||||
#import "utils.typ": get-participants-i, get-style
|
#import "utils.typ": get-participants-i, get-style, normalize-units
|
||||||
#import "group.typ"
|
#import "group.typ"
|
||||||
#import "participant.typ"
|
#import "participant.typ"
|
||||||
#import participant: PAR-SPECIALS
|
#import participant: PAR-SPECIALS
|
||||||
@ -194,6 +194,37 @@
|
|||||||
}
|
}
|
||||||
widths.at(i) = w
|
widths.at(i) = w
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for elmt in elements {
|
||||||
|
if elmt.type == "col" {
|
||||||
|
let i1 = pars-i.at(elmt.p1)
|
||||||
|
let i2 = pars-i.at(elmt.p2)
|
||||||
|
if calc.abs(i1 - i2) != 1 {
|
||||||
|
let i-min = calc.min(i1, i2)
|
||||||
|
let i-max = calc.max(i1, i2)
|
||||||
|
let others = pars-i.pairs()
|
||||||
|
.sorted(key: p => p.last())
|
||||||
|
.slice(i-min + 1, i-max)
|
||||||
|
.map(p => "'" + p.first() + "'")
|
||||||
|
.join(", ")
|
||||||
|
panic(
|
||||||
|
"Column participants must be consecutive (participants (" +
|
||||||
|
others +
|
||||||
|
") are in between)"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
let i = calc.min(i1, i2)
|
||||||
|
|
||||||
|
if elmt.width != auto {
|
||||||
|
widths.at(i) = normalize-units(elmt.width)
|
||||||
|
}
|
||||||
|
widths.at(i) = calc.max(
|
||||||
|
widths.at(i),
|
||||||
|
normalize-units(elmt.min-width)
|
||||||
|
) + normalize-units(elmt.margin)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return widths
|
return widths
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
#let normalize-units(value) = {
|
||||||
|
if type(value) == int or type(value) == float {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
if type(value) == length {
|
||||||
|
return value / 1pt
|
||||||
|
}
|
||||||
|
panic("Unsupported type '" + str(type(value)) + "'")
|
||||||
|
}
|
||||||
#let get-participants-i(participants) = {
|
#let get-participants-i(participants) = {
|
||||||
let pars-i = (:)
|
let pars-i = (:)
|
||||||
for (i, p) in participants.enumerate() {
|
for (i, p) in participants.enumerate() {
|
||||||
|
Loading…
Reference in New Issue
Block a user