Compare commits
16 Commits
feat/styli
...
34ec00768f
| Author | SHA1 | Date | |
|---|---|---|---|
|
34ec00768f
|
|||
| a7db89b214 | |||
|
511368d405
|
|||
|
3a7e0a8176
|
|||
|
03c0f1cc7e
|
|||
|
df785be454
|
|||
|
692a4570ff
|
|||
|
53adb58525
|
|||
|
771bfdc0ea
|
|||
| 1000a3a19a | |||
|
f3763cb1f7
|
|||
|
c19d507486
|
|||
|
fe01e63dd0
|
|||
|
d6c390f3c5
|
|||
|
bbc8bb0339
|
|||
|
f39e14654a
|
@@ -1,7 +1,8 @@
|
|||||||
/// Manually adds an event to the given participant
|
/// Manually adds an event to the given participant
|
||||||
/// - participant (str): The participant concerned by the event
|
/// - participant (str): The participant concerned by the event
|
||||||
/// - event (str): The event type (see @@EVENTS for ccepted values)
|
/// - event (str): The event type (see @@EVENTS for ccepted values)
|
||||||
#let _evt(participant, event) = {}
|
/// - lifeline-style (auto, dict): See @@_seq()
|
||||||
|
#let _evt(participant, event, lifeline-style: auto) = {}
|
||||||
|
|
||||||
/// Creates a sequence / message between two participants
|
/// Creates a sequence / message between two participants
|
||||||
/// - p1 (str): Start participant
|
/// - p1 (str): Start participant
|
||||||
@@ -21,6 +22,7 @@
|
|||||||
/// - destroy-src (bool): If true, destroy the source lifeline and participant
|
/// - destroy-src (bool): If true, destroy the source lifeline and participant
|
||||||
/// - lifeline-style (auto, dict): Optional styling options for lifeline rectangles (see CeTZ documentation for more information on all possible values)
|
/// - lifeline-style (auto, dict): Optional styling options for lifeline rectangles (see CeTZ documentation for more information on all possible values)
|
||||||
/// - slant (none, int): Optional slant of the arrow
|
/// - slant (none, int): Optional slant of the arrow
|
||||||
|
/// - outer-lifeline-connect (bool): If true, enables legacy anchoring, making sequences connect to the leftmost lifeline when arriving from the left side. If false, all connections are made with the latest/rightmost lifeline
|
||||||
/// -> array
|
/// -> array
|
||||||
#let _seq(
|
#let _seq(
|
||||||
p1,
|
p1,
|
||||||
@@ -39,7 +41,8 @@
|
|||||||
disable-src: false,
|
disable-src: false,
|
||||||
destroy-src: false,
|
destroy-src: false,
|
||||||
lifeline-style: auto,
|
lifeline-style: auto,
|
||||||
slant: none
|
slant: none,
|
||||||
|
outer-lifeline-connect: false
|
||||||
) = {}
|
) = {}
|
||||||
|
|
||||||
/// Creates a return sequence
|
/// Creates a return sequence
|
||||||
|
|||||||
BIN
manual.pdf
@@ -3,6 +3,9 @@
|
|||||||
#import "/src/consts.typ": *
|
#import "/src/consts.typ": *
|
||||||
#import "/src/core/utils.typ": get-ctx, set-ctx, expand-parent-group
|
#import "/src/core/utils.typ": get-ctx, set-ctx, expand-parent-group
|
||||||
|
|
||||||
|
#let display-name(name) = text(name, weight: "bold")
|
||||||
|
#let display-desc(desc) = text([\[#desc\]], weight: "bold", size: .8em)
|
||||||
|
|
||||||
#let render-start(grp) = get-ctx(ctx => {
|
#let render-start(grp) = get-ctx(ctx => {
|
||||||
let grp = grp
|
let grp = grp
|
||||||
ctx.y -= Y-SPACE
|
ctx.y -= Y-SPACE
|
||||||
@@ -44,8 +47,8 @@
|
|||||||
|
|
||||||
|
|
||||||
#let draw-group(x0, x1, y0, y1, group) = {
|
#let draw-group(x0, x1, y0, y1, group) = {
|
||||||
let name = text(group.name, weight: "bold")
|
let name = display-name(group.name)
|
||||||
let m = measure(box(name))
|
let m = measure(name)
|
||||||
let w = m.width / 1pt + 15
|
let w = m.width / 1pt + 15
|
||||||
let h = m.height / 1pt + 6
|
let h = m.height / 1pt + 6
|
||||||
draw.rect(
|
draw.rect(
|
||||||
@@ -71,7 +74,7 @@
|
|||||||
if group.desc != none {
|
if group.desc != none {
|
||||||
draw.content(
|
draw.content(
|
||||||
(x0 + w, y0),
|
(x0 + w, y0),
|
||||||
text([\[#group.desc\]], weight: "bold", size: .8em),
|
display-desc(group.desc),
|
||||||
anchor: "north-west",
|
anchor: "north-west",
|
||||||
padding: 3pt
|
padding: 3pt
|
||||||
)
|
)
|
||||||
@@ -86,7 +89,7 @@
|
|||||||
)
|
)
|
||||||
draw.content(
|
draw.content(
|
||||||
(x0, y),
|
(x0, y),
|
||||||
text([\[#elmt.desc\]], weight: "bold", size: .8em),
|
display-desc(elmt.desc),
|
||||||
anchor: "north-west",
|
anchor: "north-west",
|
||||||
padding: 3pt
|
padding: 3pt
|
||||||
)
|
)
|
||||||
@@ -105,6 +108,22 @@
|
|||||||
let x0 = min-x - 10
|
let x0 = min-x - 10
|
||||||
let x1 = max-x + 10
|
let x1 = max-x + 10
|
||||||
|
|
||||||
|
// Fit name and descriptions
|
||||||
|
let name-m = measure(display-name(group.name))
|
||||||
|
let width = name-m.width / 1pt + 15
|
||||||
|
if group.desc != none {
|
||||||
|
let desc-m = measure(display-desc(group.desc))
|
||||||
|
width += desc-m.width / 1pt + 6
|
||||||
|
}
|
||||||
|
if group.grp-type == "alt" {
|
||||||
|
width = calc.max(width, ..group.elses.map(e => {
|
||||||
|
let elmt = e.at(1)
|
||||||
|
let desc-m = measure(display-desc(elmt.desc))
|
||||||
|
return desc-m.width / 1pt + 6
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
x1 = calc.max(x1, x0 + width + 3)
|
||||||
|
|
||||||
draw-group(x0, x1, start-y, ctx.y, group)
|
draw-group(x0, x1, start-y, ctx.y, group)
|
||||||
|
|
||||||
if group.grp-type == "alt" {
|
if group.grp-type == "alt" {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#import "/src/cetz.typ": draw, vector
|
#import "/src/cetz.typ": draw, vector, coordinate
|
||||||
|
|
||||||
#import "note.typ"
|
#import "note.typ"
|
||||||
#import "/src/consts.typ": *
|
#import "/src/consts.typ": *
|
||||||
#import "/src/core/utils.typ": get-ctx, set-ctx
|
#import "/src/core/utils.typ": get-ctx, set-ctx, expand-parent-group
|
||||||
|
|
||||||
#let get-arrow-marks(sym, color) = {
|
#let get-arrow-marks(sym, color) = {
|
||||||
if sym == none {
|
if sym == none {
|
||||||
@@ -137,13 +137,19 @@
|
|||||||
end-info.ll-lvl = ctx.lifelines.at(i2).level * LIFELINE-W / 2
|
end-info.ll-lvl = ctx.lifelines.at(i2).level * LIFELINE-W / 2
|
||||||
|
|
||||||
// Compute left/right position at start/end
|
// Compute left/right position at start/end
|
||||||
start-info.insert("lx", start-info.x)
|
|
||||||
if start-info.ll-lvl != 0 { start-info.lx -= LIFELINE-W / 2 }
|
|
||||||
end-info.insert("lx", end-info.x)
|
|
||||||
if end-info.ll-lvl != 0 { end-info.lx -= LIFELINE-W / 2 }
|
|
||||||
|
|
||||||
start-info.insert("rx", start-info.x + start-info.ll-lvl)
|
start-info.insert("rx", start-info.x + start-info.ll-lvl)
|
||||||
end-info.insert("rx", end-info.x + end-info.ll-lvl)
|
end-info.insert("rx", end-info.x + end-info.ll-lvl)
|
||||||
|
let start-lx = start-info.x
|
||||||
|
let end-lx = end-info.x
|
||||||
|
if seq.outer-lifeline-connect {
|
||||||
|
if start-info.ll-lvl != 0 {start-lx -= LIFELINE-W / 2}
|
||||||
|
if end-info.ll-lvl != 0 {end-lx -= LIFELINE-W / 2}
|
||||||
|
} else {
|
||||||
|
if start-info.ll-lvl != 0 {start-lx = start-info.rx - LIFELINE-W}
|
||||||
|
if end-info.ll-lvl != 0 {end-lx = end-info.rx - LIFELINE-W}
|
||||||
|
}
|
||||||
|
start-info.insert("lx", start-lx)
|
||||||
|
end-info.insert("lx", end-lx)
|
||||||
|
|
||||||
// Choose correct points to link
|
// Choose correct points to link
|
||||||
let x1 = start-info.rx
|
let x1 = start-info.rx
|
||||||
@@ -223,6 +229,11 @@
|
|||||||
).at(seq.comment-align)
|
).at(seq.comment-align)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expand-parent-group(
|
||||||
|
calc.min(x1, x2, x-mid),
|
||||||
|
calc.max(x1, x2, x-mid)
|
||||||
|
)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
pts = (
|
pts = (
|
||||||
(x1, start-info.y),
|
(x1, start-info.y),
|
||||||
@@ -261,6 +272,11 @@
|
|||||||
(p1, p2) = (p2, p1)
|
(p1, p2) = (p2, p1)
|
||||||
}
|
}
|
||||||
comment-angle = vector.angle2(p1, p2)
|
comment-angle = vector.angle2(p1, p2)
|
||||||
|
|
||||||
|
expand-parent-group(
|
||||||
|
calc.min(x1, x2),
|
||||||
|
calc.max(x1, x2)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start circle tip
|
// Start circle tip
|
||||||
@@ -335,8 +351,23 @@
|
|||||||
comment,
|
comment,
|
||||||
anchor: comment-anchor,
|
anchor: comment-anchor,
|
||||||
angle: comment-angle,
|
angle: comment-angle,
|
||||||
padding: 3pt
|
padding: 3pt,
|
||||||
|
name: "comment"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO: Improve this
|
||||||
|
draw.get-ctx(c => {
|
||||||
|
let (_, left, right) = coordinate.resolve(
|
||||||
|
c,
|
||||||
|
"comment.west",
|
||||||
|
"comment.east"
|
||||||
|
)
|
||||||
|
expand-parent-group(
|
||||||
|
left.at(0),
|
||||||
|
right.at(0)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if seq.create-dst {
|
if seq.create-dst {
|
||||||
@@ -363,6 +394,11 @@
|
|||||||
set-ctx(c => {
|
set-ctx(c => {
|
||||||
c.y = end-info.y
|
c.y = end-info.y
|
||||||
c.lifelines = ctx.lifelines
|
c.lifelines = ctx.lifelines
|
||||||
|
c.last-drawn = (
|
||||||
|
type: "seq",
|
||||||
|
start-info: start-info,
|
||||||
|
end-info: end-info
|
||||||
|
)
|
||||||
return c
|
return c
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,11 +1,17 @@
|
|||||||
#import "/src/core/utils.typ": get-ctx, is-elmt, set-ctx
|
#import "/src/core/utils.typ": get-ctx, is-elmt, set-ctx
|
||||||
|
#import "/src/cetz.typ": draw
|
||||||
|
|
||||||
#let render(sync) = get-ctx(ctx => {
|
#let render(sync) = get-ctx(ctx => {
|
||||||
set-ctx(c => {
|
set-ctx(c => {
|
||||||
c.sync-ys = ()
|
c.sync = (
|
||||||
|
bottoms: (),
|
||||||
|
starts: (),
|
||||||
|
y: ctx.y
|
||||||
|
)
|
||||||
return c
|
return c
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Compute heights
|
||||||
for e in sync.elmts {
|
for e in sync.elmts {
|
||||||
assert(is-elmt(e), message: "Sync element can only contain chronos elements, found " + repr(e))
|
assert(is-elmt(e), message: "Sync element can only contain chronos elements, found " + repr(e))
|
||||||
assert(
|
assert(
|
||||||
@@ -17,16 +23,34 @@
|
|||||||
c.y = ctx.y
|
c.y = ctx.y
|
||||||
return c
|
return c
|
||||||
})
|
})
|
||||||
|
draw.hide({
|
||||||
(e.draw)(e)
|
(e.draw)(e)
|
||||||
|
})
|
||||||
set-ctx(c => {
|
set-ctx(c => {
|
||||||
c.sync-ys.push(c.y)
|
c.sync.starts.push(c.last-drawn.start-info.y)
|
||||||
|
c.sync.bottoms.push(c.y)
|
||||||
return c
|
return c
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
set-ctx(c => {
|
set-ctx(c => {
|
||||||
c.y = calc.min(..c.sync-ys)
|
c.sync-y = calc.min(..c.sync.starts)
|
||||||
c.remove("sync-ys")
|
return c
|
||||||
|
})
|
||||||
|
|
||||||
|
// Draw aligned elements
|
||||||
|
for (i, e) in sync.elmts.enumerate() {
|
||||||
|
set-ctx(c => {
|
||||||
|
let dy = c.sync.starts.at(i) - ctx.y
|
||||||
|
c.y = c.sync-y - dy
|
||||||
|
return c
|
||||||
|
})
|
||||||
|
(e.draw)(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
set-ctx(c => {
|
||||||
|
c.y = calc.min(..c.sync.bottoms)
|
||||||
|
c.remove("sync")
|
||||||
return c
|
return c
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -39,5 +39,5 @@
|
|||||||
}
|
}
|
||||||
_grp(name, desc: desc, type: "loop", elmts)
|
_grp(name, desc: desc, type: "loop", elmts)
|
||||||
}
|
}
|
||||||
#let _opt(desc, elmts) = grp("opt", desc: desc, type: "opt", elmts)
|
#let _opt(desc, elmts) = _grp("opt", desc: desc, type: "opt", elmts)
|
||||||
#let _break(desc, elmts) = grp("break", desc: desc, type: "break", elmts)
|
#let _break(desc, elmts) = _grp("break", desc: desc, type: "break", elmts)
|
||||||
|
|||||||
@@ -42,13 +42,13 @@
|
|||||||
),)
|
),)
|
||||||
}
|
}
|
||||||
|
|
||||||
#let _evt(participant, event) = {
|
#let _evt(participant, event, lifeline-style: auto) = {
|
||||||
return ((
|
return ((
|
||||||
type: "evt",
|
type: "evt",
|
||||||
draw: evt-render,
|
draw: evt-render,
|
||||||
participant: participant,
|
participant: participant,
|
||||||
event: event,
|
event: event,
|
||||||
lifeline-style: auto
|
lifeline-style: lifeline-style
|
||||||
),)
|
),)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
disable-src: false,
|
disable-src: false,
|
||||||
destroy-src: false,
|
destroy-src: false,
|
||||||
lifeline-style: auto,
|
lifeline-style: auto,
|
||||||
slant: none
|
slant: none,
|
||||||
|
outer-lifeline-connect: false
|
||||||
) = {
|
) = {
|
||||||
return ((
|
return ((
|
||||||
type: "seq",
|
type: "seq",
|
||||||
@@ -39,6 +40,7 @@
|
|||||||
destroy-src: destroy-src,
|
destroy-src: destroy-src,
|
||||||
lifeline-style: lifeline-style,
|
lifeline-style: lifeline-style,
|
||||||
slant: slant,
|
slant: slant,
|
||||||
|
outer-lifeline-connect: outer-lifeline-connect,
|
||||||
linked-notes: ()
|
linked-notes: ()
|
||||||
),)
|
),)
|
||||||
}
|
}
|
||||||
|
|||||||
4
tests/lifeline/create-destroy/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# generated by tytanic, do not edit
|
||||||
|
|
||||||
|
diff/**
|
||||||
|
out/**
|
||||||
BIN
tests/lifeline/create-destroy/ref/1.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
tests/lifeline/create-destroy/ref/2.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
32
tests/lifeline/create-destroy/test.typ
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#set page(width: auto, height: auto)
|
||||||
|
#import "/src/lib.typ": *
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
// Left to right
|
||||||
|
_seq("a", "b", create-dst: true)
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_gap()
|
||||||
|
_seq("a", "b", destroy-dst: true)
|
||||||
|
_gap()
|
||||||
|
_seq("a", "b", destroy-dst: true)
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
// Right to left
|
||||||
|
_seq("b", "a", create-dst: true)
|
||||||
|
_seq("b", "a", enable-dst: true)
|
||||||
|
_seq("b", "a", enable-dst: true)
|
||||||
|
_gap()
|
||||||
|
_seq("b", "a", destroy-dst: true)
|
||||||
|
_gap()
|
||||||
|
_seq("b", "a", destroy-dst: true)
|
||||||
|
})
|
||||||
4
tests/lifeline/enable-disable/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# generated by tytanic, do not edit
|
||||||
|
|
||||||
|
diff/**
|
||||||
|
out/**
|
||||||
BIN
tests/lifeline/enable-disable/ref/1.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
tests/lifeline/enable-disable/ref/2.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
tests/lifeline/enable-disable/ref/3.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
tests/lifeline/enable-disable/ref/4.png
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
BIN
tests/lifeline/enable-disable/ref/5.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
tests/lifeline/enable-disable/ref/6.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
110
tests/lifeline/enable-disable/test.typ
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
#set page(width: auto, height: auto)
|
||||||
|
#import "/src/lib.typ": *
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
// Left to right
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("a", "b", disable-dst: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("a", "b", disable-dst: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
// Right to left
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "a", enable-dst: true)
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "a", enable-dst: true)
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "a", disable-dst: true)
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "a", disable-dst: true)
|
||||||
|
_seq("b", "a")
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
// Self right
|
||||||
|
_seq("a", "a")
|
||||||
|
_seq("a", "a", enable-dst: true)
|
||||||
|
_seq("a", "a")
|
||||||
|
_seq("a", "a", enable-dst: true)
|
||||||
|
_seq("a", "a")
|
||||||
|
_seq("a", "a", disable-dst: true)
|
||||||
|
_seq("a", "a")
|
||||||
|
_seq("a", "a", disable-dst: true)
|
||||||
|
_seq("a", "a")
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
let _seq = _seq.with(flip: true)
|
||||||
|
|
||||||
|
// Self left
|
||||||
|
_seq("b", "b")
|
||||||
|
_seq("b", "b", enable-dst: true)
|
||||||
|
_seq("b", "b")
|
||||||
|
_seq("b", "b", enable-dst: true)
|
||||||
|
_seq("b", "b")
|
||||||
|
_seq("b", "b", disable-dst: true)
|
||||||
|
_seq("b", "b")
|
||||||
|
_seq("b", "b", disable-dst: true)
|
||||||
|
_seq("b", "b")
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
// Disable src (rtl)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("b", "a", disable-src: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("b", "a", disable-src: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
// Disable src (ltr)
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "a", enable-dst: true)
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "a", enable-dst: true)
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("a", "b", disable-src: true)
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("a", "b", disable-src: true)
|
||||||
|
_seq("b", "a")
|
||||||
|
})
|
||||||
4
tests/lifeline/event/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# generated by tytanic, do not edit
|
||||||
|
|
||||||
|
diff/**
|
||||||
|
out/**
|
||||||
BIN
tests/lifeline/event/ref/1.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
tests/lifeline/event/ref/2.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
tests/lifeline/event/ref/3.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
75
tests/lifeline/event/test.typ
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#set page(width: auto, height: auto)
|
||||||
|
#import "/src/lib.typ": *
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
_evt("a", "enable")
|
||||||
|
_gap()
|
||||||
|
_seq("a", "b")
|
||||||
|
_evt("a", "disable")
|
||||||
|
_gap()
|
||||||
|
_evt("a", "enable")
|
||||||
|
_evt("b", "enable")
|
||||||
|
_seq("a", "b")
|
||||||
|
_evt("a", "enable")
|
||||||
|
_evt("b", "enable")
|
||||||
|
_gap()
|
||||||
|
_seq("a", "b")
|
||||||
|
_evt("a", "disable")
|
||||||
|
_evt("b", "disable")
|
||||||
|
_gap()
|
||||||
|
_evt("a", "disable")
|
||||||
|
_evt("b", "disable")
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
_par("c", display-name: "Charlie")
|
||||||
|
|
||||||
|
_seq("a", "b")
|
||||||
|
_gap()
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_evt("c", "create")
|
||||||
|
_seq("c", "a")
|
||||||
|
_evt("b", "destroy")
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
_seq("a", "b")
|
||||||
|
_evt("b", "enable")
|
||||||
|
_seq("a", "b")
|
||||||
|
_evt("b", "enable", lifeline-style: (fill: red))
|
||||||
|
_gap()
|
||||||
|
_seq("b", "a")
|
||||||
|
_evt("b", "disable")
|
||||||
|
_seq("a", "b")
|
||||||
|
_evt("b", "enable", lifeline-style: (
|
||||||
|
stroke: (
|
||||||
|
paint: green,
|
||||||
|
dash: "dashed",
|
||||||
|
thickness: 2pt
|
||||||
|
)
|
||||||
|
))
|
||||||
|
_gap()
|
||||||
|
_seq("b", "a")
|
||||||
|
_evt("b", "disable")
|
||||||
|
_seq("b", "a")
|
||||||
|
_evt("b", "disable")
|
||||||
|
_seq("a", "b")
|
||||||
|
_evt("b", "enable", lifeline-style: (
|
||||||
|
radius: 4pt
|
||||||
|
))
|
||||||
|
_gap()
|
||||||
|
_seq("b", "a")
|
||||||
|
_evt("b", "disable")
|
||||||
|
})
|
||||||
4
tests/lifeline/style/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# generated by tytanic, do not edit
|
||||||
|
|
||||||
|
diff/**
|
||||||
|
out/**
|
||||||
BIN
tests/lifeline/style/ref/1.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
27
tests/lifeline/style/test.typ
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#set page(width: auto, height: auto)
|
||||||
|
#import "/src/lib.typ": *
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a", display-name: "Alice")
|
||||||
|
_par("b", display-name: "Bob")
|
||||||
|
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_seq("a", "b", enable-dst: true, lifeline-style: (fill: red))
|
||||||
|
_gap()
|
||||||
|
_seq("b", "a", disable-src: true)
|
||||||
|
_seq("a", "b", enable-dst: true, lifeline-style: (
|
||||||
|
stroke: (
|
||||||
|
paint: green,
|
||||||
|
dash: "dashed",
|
||||||
|
thickness: 2pt
|
||||||
|
)
|
||||||
|
))
|
||||||
|
_gap()
|
||||||
|
_seq("b", "a", disable-src: true)
|
||||||
|
_seq("b", "a", disable-src: true)
|
||||||
|
_seq("a", "b", enable-dst: true, lifeline-style: (
|
||||||
|
radius: 4pt
|
||||||
|
))
|
||||||
|
_gap()
|
||||||
|
_seq("b", "a", disable-src: true)
|
||||||
|
})
|
||||||
4
tests/sequence/outer-lifeline/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# generated by tytanic, do not edit
|
||||||
|
|
||||||
|
diff/**
|
||||||
|
out/**
|
||||||
BIN
tests/sequence/outer-lifeline/ref/1.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
tests/sequence/outer-lifeline/ref/2.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
29
tests/sequence/outer-lifeline/test.typ
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#set page(width: auto, height: auto)
|
||||||
|
#import "/src/lib.typ": *
|
||||||
|
|
||||||
|
#let make-diagram(_seq) = {
|
||||||
|
diagram({
|
||||||
|
_par("a")
|
||||||
|
_par("b")
|
||||||
|
_par("c")
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("c", "b")
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("c", "b")
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("c", "b")
|
||||||
|
_seq("a", "b", enable-dst: true)
|
||||||
|
_seq("a", "b")
|
||||||
|
_seq("c", "b")
|
||||||
|
|
||||||
|
_evt("b", "disable")
|
||||||
|
_evt("b", "disable")
|
||||||
|
_evt("b", "disable")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#make-diagram(_seq)
|
||||||
|
#pagebreak()
|
||||||
|
#make-diagram(_seq.with(outer-lifeline-connect: true))
|
||||||
4
tests/sequence/sync/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# generated by tytanic, do not edit
|
||||||
|
|
||||||
|
diff/**
|
||||||
|
out/**
|
||||||
BIN
tests/sequence/sync/ref/1.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
37
tests/sequence/sync/test.typ
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
#set page(width: auto, height: auto)
|
||||||
|
#import "/src/lib.typ": *
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
_par("a")
|
||||||
|
_par("b")
|
||||||
|
_par("c")
|
||||||
|
_sync({
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "c")
|
||||||
|
})
|
||||||
|
_gap()
|
||||||
|
_sync({
|
||||||
|
_seq("b", "a", comment: [Comment])
|
||||||
|
_seq("b", "c")
|
||||||
|
})
|
||||||
|
_gap()
|
||||||
|
_sync({
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "c", comment: [Comment])
|
||||||
|
})
|
||||||
|
_gap()
|
||||||
|
_sync({
|
||||||
|
_seq("b", "a", comment: [Two\ lines])
|
||||||
|
_seq("b", "c", comment: [Comment])
|
||||||
|
})
|
||||||
|
|
||||||
|
_sync({
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "c", slant: 10)
|
||||||
|
})
|
||||||
|
|
||||||
|
_sync({
|
||||||
|
_seq("b", "a")
|
||||||
|
_seq("b", "b")
|
||||||
|
})
|
||||||
|
})
|
||||||
4
tests/special-group/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# generated by tytanic, do not edit
|
||||||
|
|
||||||
|
diff/**
|
||||||
|
out/**
|
||||||
BIN
tests/special-group/ref/1.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
tests/special-group/ref/2.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
tests/special-group/ref/3.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
tests/special-group/ref/4.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
tests/special-group/ref/5.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
71
tests/special-group/test.typ
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
#set page(width: auto, height: auto)
|
||||||
|
#import "/src/lib.typ": *
|
||||||
|
|
||||||
|
#let preamble = {
|
||||||
|
_par("a", display-name: [Alice])
|
||||||
|
_par("b", display-name: [Bob])
|
||||||
|
_col("a", "b", width: 2cm)
|
||||||
|
}
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
preamble
|
||||||
|
_grp("Group 1", {
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
_grp("Group 2", desc: [Description], {
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
preamble
|
||||||
|
_alt(
|
||||||
|
"case 1", {
|
||||||
|
_seq("a", "b")
|
||||||
|
},
|
||||||
|
"case 2", {
|
||||||
|
_seq("a", "b")
|
||||||
|
},
|
||||||
|
"case 3", {
|
||||||
|
_seq("a", "b")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
preamble
|
||||||
|
_loop("loop 1", {
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
_loop("loop 2", min: 1, {
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
_loop("loop 3", max: 10, {
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
_loop("loop 3", min: 1, max: 10, {
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
preamble
|
||||||
|
_opt("Optional", {
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#diagram({
|
||||||
|
preamble
|
||||||
|
_break("Break", {
|
||||||
|
_seq("a", "b")
|
||||||
|
})
|
||||||
|
})
|
||||||