rivet-typst/src/range.typ

65 lines
1.1 KiB
Plaintext

#import "util.typ"
#let key(start, end) = {
return str(start) + "->" + str(end)
}
#let bits(range) = {
return range.end - range.start + 1
}
#let parse-span(span) = {
let start-end = span.split("-")
if start-end.len() == 1 {
start-end.push(start-end.first())
}
let start = int(start-end.last())
let end = int(start-end.first())
return (start, end)
}
#let make(
start,
end,
name,
description: "",
values: none,
depends-on: none
) = {
return (
start: start,
end: end,
name: name,
description: description,
values: values,
depends-on: depends-on,
last-value-y: -1
)
}
#let load(start, end, data) = {
let values = none
let bits = end - start + 1
if "values" in data {
values = (:)
for (val, desc) in data.values {
val = util.z-fill(val, bits)
values.insert(val, desc)
}
}
let depends-on = data.at("depends-on", default: none)
if depends-on != none {
depends-on = parse-span(str(depends-on))
}
return make(
start,
end,
str(data.name),
description: data.at("description", default: ""),
values: values,
depends-on: depends-on
)
}