Compare commits

...

9 Commits

20 changed files with 48 additions and 36 deletions

View File

@ -15,7 +15,7 @@ This package lets you render sequence diagrams directly in Typst. The following
<td>
```typst
#import "@preview/chronos:0.1.0"
#import "@preview/chronos:0.2.0"
#chronos.diagram({
import chronos: *
_par("Alice")

View File

@ -58,10 +58,12 @@
/// - 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
/// - max-width (int, float, length, none): Maximum width of the column\ If set to a lower value than `width`, the latter will be overriden\ If set to `none`, no restriction is applied
#let _col(
p1,
p2,
width: auto,
margin: 0,
min-width: 0
min-width: 0,
max-width: none
) = {}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

View File

@ -30,8 +30,8 @@
#set page(numbering: "1/1", header: align(right)[chronos #sym.dash.em v#chronos.version])
#set page(
header: locate(loc => align(left)[chronos #sym.dash.em v#chronos.version]),
footer: locate(loc => align(center, counter(page).display("1/1", both: true)))
header: align(left)[chronos #sym.dash.em v#chronos.version],
footer: context align(center, counter(page).display("1/1", both: true))
)
= Introduction

View File

@ -19,14 +19,15 @@
),)
}
#let _col(p1, p2, width: auto, margin: 0, min-width: 0) = {
#let _col(p1, p2, width: auto, margin: 0, min-width: 0, max-width: none) = {
return ((
type: "col",
p1: p1,
p2: p2,
width: width,
margin: margin,
min-width: min-width
min-width: min-width,
max-width: max-width
),)
}
@ -240,7 +241,6 @@
}
}
set text(font: "Source Sans 3")
let canvas = render(participants, elmts)
fit-canvas(canvas, width: width)
}

View File

@ -1,4 +1,4 @@
#import "@preview/cetz:0.2.2": draw
#import "@preview/cetz:0.3.1": draw
#import "consts.typ": *
#let _grp(name, desc: none, type: "default", elmts) = {

View File

@ -1,4 +1,4 @@
#let version = version(0, 1, 1)
#let version = version(0, 2, 0)
#import "diagram.typ": diagram, from-plantuml, _gap, _evt, _col
#import "sequence.typ": _seq, _ret

View File

@ -1,4 +1,4 @@
#import "@preview/cetz:0.2.2": draw
#import "@preview/cetz:0.3.1": draw
#import "consts.typ": *
#let SIDES = (

View File

@ -1,4 +1,4 @@
#import "@preview/cetz:0.2.2": draw
#import "@preview/cetz:0.3.1": draw
#import "consts.typ": *
#let PAR-SPECIALS = "?[]"

View File

@ -1,4 +1,4 @@
#import "@preview/cetz:0.2.2": canvas, draw
#import "@preview/cetz:0.3.1": canvas, draw
#import "utils.typ": get-participants-i, get-style, normalize-units
#import "group.typ"
#import "participant.typ"
@ -218,10 +218,13 @@
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)
let width = widths.at(i)
width = calc.max(width, normalize-units(elmt.min-width))
if elmt.max-width != none {
width = calc.min(width, normalize-units(elmt.max-width))
}
widths.at(i) = width + normalize-units(elmt.margin)
}
}

View File

@ -1,4 +1,4 @@
#import "@preview/cetz:0.2.2": draw
#import "@preview/cetz:0.3.1": draw
#import "consts.typ": *
#let _sep(name) = {

View File

@ -1,4 +1,4 @@
#import "@preview/cetz:0.2.2": draw, vector
#import "@preview/cetz:0.3.1": draw, vector
#import "consts.typ": *
#import "participant.typ"
#import "note.typ"
@ -100,19 +100,27 @@
y -= Y-SPACE
let i1 = pars-i.at(elmt.p1)
let i2 = pars-i.at(elmt.p2)
let width = calc.abs(x-pos.at(i1) - x-pos.at(i2))
let h = 0
let comment = if elmt.comment == none {none} else {
let w = calc.min(width * 1pt, measure(elmt.comment).width)
box(
width: if i1 == i2 {auto} else {w},
elmt.comment
)
}
// Reserve space for comment
if elmt.comment != none {
h = calc.max(h, measure(box(elmt.comment)).height / 1pt + 6)
if comment != none {
h = calc.max(h, measure(comment).height / 1pt + 6)
}
if "linked-note" in elmt {
h = calc.max(h, note.get-size(elmt.linked-note).height / 2)
}
y -= h
let i1 = pars-i.at(elmt.p1)
let i2 = pars-i.at(elmt.p2)
let start-info = (
i: i1,
x: x-pos.at(i1),
@ -169,7 +177,7 @@
let m = measure(box(par.display-name))
let f = if i1 > i2 {-1} else {1}
end-info.x -= (m.width + PAR-PAD.last() * 2) / 2pt * f
shapes += participant.render(x-pos, par, y: end-info.y - CREATE-OFFSET)
shapes += participant.render(x-pos, par, y: end-info.y)
}
end-info.ll-lvl = lifelines.at(i2).level * LIFELINE-W / 2
@ -244,7 +252,7 @@
(x2, end-info.y)
)
if elmt.comment != none {
if comment != none {
comment-anchor = (
start: if x-mid < x1 {"south-east"} else {"south-west"},
end: if x-mid < x1 {"south-west"} else {"south-east"},
@ -268,7 +276,7 @@
(x2, end-info.y)
)
if elmt.comment != none {
if comment != none {
let start-pt = pts.first()
let end-pt = pts.last()
if elmt.start-tip != "" {
@ -348,27 +356,26 @@
shapes += draw.line(..pts, ..style)
if elmt.comment != none {
if comment != none {
shapes += draw.content(
comment-pt,
elmt.comment,
comment,
anchor: comment-anchor,
angle: comment-angle,
padding: 3pt
)
}
if elmt.create-dst {
let dst-line = lifelines.at(i2)
dst-line.lines.push(("create", end-info.y))
lifelines.at(i2) = dst-line
}
if elmt.enable-dst {
let dst-line = lifelines.at(i2)
dst-line.lines.push(("enable", end-info.y, elmt.lifeline-style))
lifelines.at(i2) = dst-line
}
if elmt.create-dst {
end-info.y -= CREATE-OFFSET
let dst-line = lifelines.at(i2)
dst-line.lines.push(("create", end-info.y))
lifelines.at(i2) = dst-line
}
if "linked-note" in elmt {
let m = note.get-size(elmt.linked-note)

View File

@ -1,7 +1,7 @@
[package]
name = "chronos"
version = "0.1.1"
compiler = "0.11.0"
version = "0.2.0"
compiler = "0.12.0"
repository = "https://git.kb28.ch/HEL/chronos"
entrypoint = "src/lib.typ"
authors = [