65 lines
1.1 KiB
Plaintext
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
|
||
|
)
|
||
|
}
|