Module:MOS notation: Difference between revisions

Ganaram inukshuk (talk | contribs)
m Clarified comments, updated to-do's
Ganaram inukshuk (talk | contribs)
Quickly added support for abbreviations for mosstep-quality-to-degree function; default is no abbreviations to avoid breaking existing templates
Line 193: Line 193:
-- scale degree
-- scale degree
-- To be used in conjunction with the degrees function
-- To be used in conjunction with the degrees function
-- TODO: add options to change naming and enumeration scheme; options include:
-- For notation: options include mosstep, mosdegree, and ordinal (not recommended except for maybe 5L 2s)
-- - Abbreviations (Major/Minor vs Maj/Min vs M/m)
-- For wording: options include abbreviated or not abbreviated (type in nothing for this option)
function p.mosstep_and_quality_to_degree(mossteps, quality, prefix, notation)
function p.mosstep_and_quality_to_degree(mossteps, quality, prefix, notation, wording)
-- Notation options currently include:
-- Notation options currently include:
Line 204: Line 204:
local prefix = prefix or "mos" -- Default prefix is mos
local prefix = prefix or "mos" -- Default prefix is mos
local notation = notation or "mosdegree" -- Default notation is mosdegree
local notation = notation or "mosdegree" -- Default notation is mosdegree
local wording = wording or "" -- Default wording is no abbreviations


local degree_name = ""
local degree_name = ""
if notation == "mosstep" then
degree_name = mossteps .. "-" .. prefix .. "step"
if wording ~= "abbreviated" then
elseif notation == "mosdegree" then
if notation == "mosstep" then
degree_name = mossteps .. "-" .. prefix .. "degree"
degree_name = mossteps .. "-" .. prefix .. "step"
elseif notation == "ordinal" then
elseif notation == "mosdegree" then
-- Add a dash between the prefix and ordinal, if a prefix is given
degree_name = mossteps .. "-" .. prefix .. "degree"
if prefix == "" then
elseif notation == "ordinal" then
degree_name = ord._ordinal(mossteps + 1)
-- Add a dash between the prefix and ordinal, if a prefix is given
else
if prefix == "" then
degree_name = prefix .. "-" .. ord._ordinal(mossteps + 1)
degree_name = ord._ordinal(mossteps + 1)
else
degree_name = prefix .. "-" .. ord._ordinal(mossteps + 1)
end
end
if quality == 0 then
degree_name = "Perfect " .. degree_name
elseif quality == 1 then
degree_name = "Major " .. degree_name
elseif quality == 2 then
degree_name = "Augmented " .. degree_name
elseif quality > 2 then
degree_name = (quality - 1) .. "× augmented " .. degree_name
elseif quality == -1 then
degree_name = "Minor " .. degree_name
elseif quality == -2 then
degree_name = "Diminished " .. degree_name
elseif quality < -2 then
degree_name = (math.abs(quality) - 1) .. "× diminished " .. degree_name
end
else
if notation == "mosstep" then
degree_name = mossteps .. "-" .. prefix .. "s"
elseif notation == "mosdegree" then
degree_name = mossteps .. "-" .. prefix .. "d"
elseif notation == "ordinal" then
-- Add a dash between the prefix and ordinal, if a prefix is given
if prefix == "" then
degree_name = ord._ordinal(mossteps + 1)
else
degree_name = prefix .. "-" .. ord._ordinal(mossteps + 1)
end
end
if quality == 0 then
degree_name = "P" .. degree_name
elseif quality == 1 then
degree_name = "M" .. degree_name
elseif quality == 2 then
degree_name = "A" .. degree_name
elseif quality > 2 then
degree_name = string.rep("A", quality - 1) .. degree_name
elseif quality == -1 then
degree_name = "m" .. degree_name
elseif quality == -2 then
degree_name = "d" .. degree_name
elseif quality < -2 then
degree_name = string.rep("d", quality - 1) .. degree_name
end
end
end
if quality == 0 then
degree_name = "Perfect " .. degree_name
elseif quality == 1 then
degree_name = "Major " .. degree_name
elseif quality == 2 then
degree_name = "Augmented " .. degree_name
elseif quality > 2 then
degree_name = (quality - 1) .. "× augmented " .. degree_name
elseif quality == -1 then
degree_name = "Minor " .. degree_name
elseif quality == -2 then
degree_name = "Diminished " .. degree_name
elseif quality < -2 then
degree_name = (math.abs(quality) - 1) .. "× diminished " .. degree_name
end
end