Files
TB-Docs/report/chapters/03_theory/utils.typ

49 lines
1.0 KiB
Typst

#let syntax(body) = {
set text(weight: "bold", fill: rgb(100, 50, 0))
body
}
#let blank(r, c) = grid.cell(
rowspan: r,
colspan: c
)[]
#let tab = sym.arrow.r.stop
#let nl = move(dx: -2pt, dy: 2pt, sym.arrow.curve.l)
#let syntax-preamble = doc => {
show tab: set text(fill: gray.darken(20%))
show sym.arrow.curve.l: set text(fill: gray.darken(20%))
set math.cases(gap: 4pt)
show math.equation: set align(left)
doc
}
#let syntax-grid(..sections) = {
let cells = ()
for (i, (meta-var, name, elements)) in sections.pos().enumerate() {
if i != 0 {
cells.push(grid.cell(colspan: 4)[])
}
cells += ($#meta-var$, $::=$, none, [_#{name}_])
cells.push(blank(elements.len(), 2))
cells += elements.map(
e => if e.last() == none {
grid.cell(colspan: 2, e.first())
} else {
e
}
).flatten()
}
show: syntax-preamble
grid(
columns: (auto, auto, 1fr, auto),
align: (left, left, left, right).map(a => a + horizon),
column-gutter: .4em,
row-gutter: 1.2em,
..cells,
)
}