Fix sequence connection with leftmost lifeline #25

Merged
HEL merged 5 commits from fix/issue-24-layered-lifelines into dev 2026-01-21 13:30:54 +00:00
15 changed files with 15305 additions and 15051 deletions

View File

@@ -22,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,
@@ -40,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

30299
manual.pdf

File diff suppressed because one or more lines are too long

View File

@@ -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

View File

@@ -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: ()
),) ),)
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@@ -0,0 +1,4 @@
# generated by tytanic, do not edit
diff/**
out/**

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View 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))