forked from HEL/chronos
46 lines
1.2 KiB
Typst
46 lines
1.2 KiB
Typst
#import "core/draw/group.typ"
|
|
|
|
#let _grp(name, desc: none, type: "default", elmts, ..style) = {
|
|
return ((
|
|
type: "grp",
|
|
draw: group.render-start,
|
|
name: name,
|
|
desc: desc,
|
|
grp-type: type,
|
|
elmts: elmts,
|
|
style: style.named()
|
|
),)
|
|
}
|
|
|
|
#let _alt(desc, elmts, ..elses-style) = {
|
|
let all-elmts = ()
|
|
all-elmts += elmts
|
|
let elses = elses-style.pos()
|
|
let style = elses-style.named()
|
|
for i in range(0, elses.len(), step: 2) {
|
|
let else-desc = elses.at(i)
|
|
let else-elmts = elses.at(i + 1, default: ())
|
|
all-elmts.push((
|
|
type: "else",
|
|
draw: group.render-else,
|
|
desc: else-desc
|
|
))
|
|
all-elmts += else-elmts
|
|
}
|
|
|
|
return _grp("alt", desc: desc, type: "alt", all-elmts, ..style)
|
|
}
|
|
|
|
#let _loop(desc, min: none, max: auto, elmts, ..style) = {
|
|
let name = "loop"
|
|
if min != none {
|
|
if max == auto {
|
|
max = "*"
|
|
}
|
|
name += "(" + str(min) + "," + str(max) + ")"
|
|
}
|
|
_grp(name, desc: desc, type: "loop", elmts, ..style)
|
|
}
|
|
#let _opt(desc, elmts, ..style) = _grp("opt", desc: desc, type: "opt", elmts, ..style.named())
|
|
#let _break(desc, elmts, ..style) = _grp("break", desc: desc, type: "break", elmts, ..style.named())
|