Moduuli:Kitarakirja/Otelauta
Ulkoasu
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Kitarakirja/Otelauta/ohje
local p = {}
local notedata = require "Moduuli:Kitarakirja/Nuottidata"
local lily = require "Moduuli:Kitarakirja/Lily"
local tekstipohja = require "Moduuli:Tekstipohja"
local N_STRINGS = 6
local viritys = {
notedata.getNoteIndex("e", 1),
notedata.getNoteIndex("b", 0),
notedata.getNoteIndex("g", 0),
notedata.getNoteIndex("d", 0),
notedata.getNoteIndex("a", -1),
notedata.getNoteIndex("e", -1),
}
local fretLabels = {
'<br/><span style="font-size: 0.8em;">(XII)</span>',
'I<br/><span style="font-size: 0.8em;">(XIII)</span>',
'II<br/><span style="font-size: 0.8em;">(XIV)</span>',
'III<br/><span style="font-size: 0.8em;">(XV)</span>',
'IV<br/><span style="font-size: 0.8em;">(XVI)</span>',
'V<br/><span style="font-size: 0.8em;">(XVII)</span>',
'VI<br/><span style="font-size: 0.8em;">(XVIII)</span>',
'VII<br/><span style="font-size: 0.8em;">(XIX)</span>',
'IIX<br/><span style="font-size: 0.8em;">(XX)</span>',
'IX<br/><span style="font-size: 0.8em;">(XXI)</span>',
'X<br/><span style="font-size: 0.8em;">(XXII)</span>',
'XI<br/><span style="font-size: 0.8em;">(XXIII)</span>',
'XII<br/><span style="font-size: 0.8em;">(XXIV)</span>' }
local TABLE_HTML = [=[
<table class="otelauta" border="1" style="border-collapse: collapse; empty-cells: show; text-align: center; table-layout: fixed; width: 100%;">
<tr style="font-family: serif; height: 5em;">
{{{FRET_NUMBERS
}}}
</tr>
{{{STRINGS
}}}
</table>
]=]
-- Kieltä esittävä rivi. Koostuu kahdesta rivistä. Toinen esittää kieltä ja toinen
-- on tekstiä varen. Tekstirivi siirretään kielirivin päälle.
local STRING_HTML = [=[
<tr>
<td colspan="13" style=""><div style="width: 100%;"></div></td></tr>
<tr style="border-top: border-bottom: 0;">
{{{FRETS
}}}
</tr>
]=]
-- TODO ei käytössä
local CELL_HTML = [=[
<td><div style="position: relative; top: -1.9ex;">
{{{TEXT}}}
</div><td>
]=]
function generateFretNumbers(first, last)
local numbering = {}
for i = first, last do
numbering[i - first + 1] = fretLabels[i+1]
end
return '<td style="border-right: double black 2px;">' ..
table.concat(numbering, '</td>\n<td>') .. '</td>'
end
function getMarkup(strings, first, last)
local output = {}
for i_string = 1, N_STRINGS do
-- Ensimmäiseen soluun tulee kaksoisviiva kuvaamaan vapaiden kielten ero.
local fretsMarkup = '<td style="border-right: double black 2px;"><div style="position: relative; top: -1em;">' ..
table.concat(strings[i_string], '</div></td><td><div style="position: relative; top: -1.8ex;">\n') .. '</div></td>\n'
output[i_string] = tekstipohja.korvaaMuuttujat(STRING_HTML, { ["FRETS"] = fretsMarkup })
end
local fretNumbers = generateFretNumbers(first, last)
return tekstipohja.korvaaMuuttujat(TABLE_HTML, {
["FRET_NUMBERS"] = fretNumbers,
["STRINGS"] = table.concat(output, "\n\n") })
end
function p.Otelauta(frame)
local offset = (tonumber(frame.args.nauhanumero) or 0)
local length = frame.args.pituus
local last = nil
local values = frame.args
local strings = { {}, {}, {}, {}, {}, {} }
if #values ~= frame.args.pituus * 6 then
error("Väärä määrä parametreja")
end
if offset == 0 and last == nil then
last = 12
else
last = offset + length
end
local i_string = 1
local i_fret = 0
for i, value in ipairs(values) do
strings[i_string][i_fret + 1] = value
if i_fret == length then
i_string = i_string + 1
i_fret = 0
end
end
local fretboardHTML = getMarkup(strings, offset, last)
return fretboardHTML
end
function p.OtelautaOktaavi(frame)
local first = (tonumber(frame.args.nauhanumero) or 0)
local last = frame.args.pituus
local values = {}
local strings = { {}, {}, {}, {}, {}, {} }
for i, v in ipairs(frame.args) do
values[i] = v
end
if #values ~= 12 then
error("Väärä määrä parametreja: " .. #values)
end
if first == 0 and last == nil then
last = 12
else -- TODO paremmin
last = first + last
end
for i_string = 1, N_STRINGS do
for i_fret = first, last do
local note_index = (viritys[i_string] + i_fret) % 12
strings[i_string][i_fret + 1] = values[note_index + 1]
end
end
local fretboardHTML = getMarkup(strings, first, last)
return fretboardHTML
end
return p