Moduuli:Kitarakirja/Sointu
Ulkoasu
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Kitarakirja/Sointu/ohje
local p = {}
local notedata = require "Moduuli:Kitarakirja/Nuottidata"
local lily = require "Moduuli:Kitarakirja/Lily"
local tekstipohja = require "Moduuli:Tekstipohja"
local scoreText_template = [=[
{
% Rivin lopun pystyviiva ja tahtiosoitus piiloon.
\override Score.BarLine.break-visibility = ##(#f #t #t)
\override Staff.TimeSignature #'stencil = ##f
<{{{NUOTIT}}}>1
}
]=]
--- Pilkkoo merkkijonon osiin.
function mw.ustring:split(sep)
local fields = {}
local pattern = mw.ustring.format("([^%s]+)", sep)
self:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
function p.PerussointuIntervalleista(frame)
local args = frame.args
args.root = { frame.args["juurisävel"], frame.args["oktaavi"] or 0 }
local pairs = table.pack(notedata.intervalsToNotenames(args))
local lilynotes = lily.toLilyformat(pairs)
local score = tekstipohja.replaceVariables(scoreText_template, {
["NUOTIT"] = table.concat(lilynotes, " ") })
return frame:extensionTag{ name = "score", content = score }
end
function p.PerussointuNuoteista(frame)
local notes
local octave = frame.args.oktaavi or 1
local pairs = {}
local prevIndex = -1
if frame.args["nuotit"] then
notes = mw.text.split(frame.args.nuotit, "–", true)
else
notes = frame.args
end
for i, note in ipairs(notes) do
-- Oletataan että nuotit on annettu nousevassa järjestyksessä.
local index = notedata.getNoteIndex(note, 0)
if index <= prevIndex then
octave = octave + 1
end
prevIndex = index
pairs[i] = { note, octave }
end
local lilynotes = lily.toLilyformat(pairs)
local score = tekstipohja.korvaaMuuttujat(scoreText_template, {
["NUOTIT"] = table.concat(lilynotes, " ") })
return frame:extensionTag{ name = "score", content = score, args = { sound = "1" } }
end
return p