64 lines
1.7 KiB
Typst
64 lines
1.7 KiB
Typst
|
|
|
|
#let open = text(size: 2em, "\u{25CB}")
|
|
#let close = text(size: 2em, "\u{25CF}")
|
|
#let half = text(size: 2em, "\u{25D0}")
|
|
|
|
#let note_to_tab = (
|
|
"D": (
|
|
"A": (close, close, open, open, open, open),
|
|
"B": (close, open, open, open, open, open),
|
|
"C": (open, close, close, open, open, open),
|
|
"C#": (open, open, open, open, open, open),
|
|
"D": (close, close, close, close, close, close),
|
|
"E": (close, close, close, close, close, open),
|
|
//"F": ()
|
|
"F#": (close, close, close, close, open, open),
|
|
"G": (close, close, close, open, open, open),
|
|
"A+": (close, close, open, open, open, open),
|
|
"B+": (close, open, open, open, open, open),
|
|
"C+": (open, close, close, close, open, open),
|
|
"C#+": (open, close, close, open, open, open),
|
|
"D+": (open, close, close, close, close, close),
|
|
"E+": (close, close, close, close, close, open),
|
|
"F#+": (close, close, close, close, open, open),
|
|
"G+": (close, close, close, open, open, open),
|
|
)
|
|
)
|
|
|
|
#let tabs(key: "D", notes) = {
|
|
let dic = note_to_tab.at(key)
|
|
let tab = ()
|
|
let i = 0
|
|
while i < notes.len() {
|
|
let j = i + 1
|
|
while j < notes.len() and notes.at(j) in "#+"{
|
|
j = j + 1
|
|
}
|
|
let note = notes.slice(i, j)
|
|
let (name, octave) = if notes.at(j - 1) == "+" {
|
|
(notes.slice(i, j - 1), "+")
|
|
} else {
|
|
(note, " ")
|
|
}
|
|
if note == " " {
|
|
tab.push((" ",)*8)
|
|
} else {
|
|
tab.push((..dic.at(note), octave, name))
|
|
}
|
|
i = j
|
|
}
|
|
|
|
grid(
|
|
columns: (1.5em,)*tab.len(),
|
|
rows: (1.2em,)*8,
|
|
row-gutter: (0em, 0em, .5em, 0em, 0em, .4em, 0em),
|
|
//stroke: black,
|
|
align: center+horizon,
|
|
..for i in range(8) {
|
|
for t in tab {
|
|
(t.at(i),)
|
|
}
|
|
}
|
|
)
|
|
}
|