added alt/else, loops and other group shortcuts
This commit is contained in:
@ -11,6 +11,36 @@
|
||||
),)
|
||||
}
|
||||
|
||||
#let _alt(desc, elmts, ..args) = {
|
||||
let all-elmts = ()
|
||||
all-elmts += elmts
|
||||
let args = args.pos()
|
||||
for i in range(0, args.len(), step: 2) {
|
||||
let else-desc = args.at(i)
|
||||
let else-elmts = args.at(i + 1, default: ())
|
||||
all-elmts.push((
|
||||
type: "else",
|
||||
desc: else-desc
|
||||
))
|
||||
all-elmts += else-elmts
|
||||
}
|
||||
|
||||
return _grp("alt", desc: desc, type: "alt", all-elmts)
|
||||
}
|
||||
|
||||
#let _loop(desc, min: none, max: auto, elmts) = {
|
||||
let name = "loop"
|
||||
if min != none {
|
||||
if max == auto {
|
||||
max = "*"
|
||||
}
|
||||
name += "(" + str(min) + "," + str(max) + ")"
|
||||
}
|
||||
_grp(name, desc: desc, type: "loop", elmts)
|
||||
}
|
||||
#let _opt(desc, elmts) = grp("opt", desc: desc, type: "opt", elmts)
|
||||
#let _break(desc, elmts) = grp("break", desc: desc, type: "break", elmts)
|
||||
|
||||
#let render(x0, x1, y0, y1, group) = {
|
||||
let shapes = ()
|
||||
let name = text(group.name, weight: "bold")
|
||||
@ -50,5 +80,20 @@
|
||||
)
|
||||
}
|
||||
|
||||
return shapes
|
||||
}
|
||||
|
||||
#let render-else(x0, x1, y, elmt) = {
|
||||
let shapes = draw.line(
|
||||
(x0, y),
|
||||
(x1, y),
|
||||
stroke: (dash: (2pt, 1pt), thickness: .5pt)
|
||||
)
|
||||
shapes += draw.content(
|
||||
(x0, y),
|
||||
text([\[#elmt.desc\]], weight: "bold", size: .8em),
|
||||
anchor: "north-west",
|
||||
padding: 3pt
|
||||
)
|
||||
return shapes
|
||||
}
|
Reference in New Issue
Block a user