Module:MOS genchain: Difference between revisions
bugfix for multiperiod mosses |
ArrowHead294 (talk | contribs) mNo edit summary |
||
| (28 intermediate revisions by 3 users not shown) | |||
| Line 20: | Line 20: | ||
p.cell_color_small_size = "#FCE4D6" | p.cell_color_small_size = "#FCE4D6" | ||
p.cell_color_sm_altered_size = "#F8CBAD" | p.cell_color_sm_altered_size = "#F8CBAD" | ||
function p.preprocess_genchain(input_mos) | function p.preprocess_genchain(input_mos) | ||
local input_mos = input_mos or mos.new(5,2) | local input_mos = input_mos or mos.new(5,2) | ||
local num_gens = | local num_gens = (2 * (input_mos.nL + input_mos.nL + input_mos.ns))/mos.period_count(input_mos) - 2 | ||
local bright_gen = mos.bright_gen(input_mos) | local bright_gen = mos.bright_gen(input_mos) | ||
local gens = mos.interval_mul(bright_gen, num_gens/2) | local gens = mos.interval_mul(bright_gen, math.floor(num_gens/2)) | ||
bright_gen = mos.interval_mul(bright_gen, -1) | bright_gen = mos.interval_mul(bright_gen, -1) | ||
local genchain = { mos.period_reduce(gens, input_mos) } | local genchain = { mos.period_reduce(gens, input_mos) } | ||
| Line 37: | Line 36: | ||
end | end | ||
function p._mos_genchain(input_mos) | function p._mos_genchain(input_mos, mos_prefix, mos_abbrev, is_collapsed) | ||
local input_mos = input_mos or mos.new( | local input_mos = input_mos or mos.new(5,2) | ||
local mos_prefix = mos_prefix or "mos" | |||
local mos_abbrev = mos_abbrev or "m" | |||
local is_collapsed = is_collapsed == true | |||
local num_gens = mos.period_step_count(input_mos) | local num_gens = mos.period_step_count(input_mos) | ||
| Line 44: | Line 46: | ||
local genchain = p.preprocess_genchain(input_mos) | local genchain = p.preprocess_genchain(input_mos) | ||
local period_count = mos.period_count(input_mos) | local period_count = mos.period_count(input_mos) | ||
local scale_sig = mos.as_string(input_mos) | |||
-- Begin table | -- Begin table | ||
local result = "{| class=\"wikitable center- | local result = "{| class=\"wikitable center-1 center-3 mw-collapsible" .. (is_collapsed and " mw-collapsed\"\n" or "\"\n") | ||
-- | -- Table caption | ||
result = result .. "! Bright gens" | result = result .. "|+ style=\"font-size: 105%; white-space: nowrap;\" | " .. string.format("Generator chain of %s\n", scale_sig) | ||
-- Headers for each period | |||
result = result .. "|-\n" | |||
.. "! Bright gens" | |||
for i = 1, period_count do | for i = 1, period_count do | ||
result = result | result = result | ||
.. " !! Scale | .. " !! Scale degree" | ||
.. " !! Abbrev" | .. " !! Abbrev." | ||
end | end | ||
result = result .. "\n" | |||
-- Add a row for each scale degree, plus their period-shifted counterparts | -- Add a row for each scale degree, plus their period-shifted counterparts | ||
for i = 1, #genchain do | for i = 1, #genchain do | ||
result = result .. "|-\n" | |||
-- Number of generators | -- Number of generators | ||
local num_gens = math.ceil(#genchain/2) - i | local num_gens = math.ceil(#genchain / 2) - i | ||
result = result .. string.format("| %s", num_gens) | result = result .. string.format("| %s", string.gsub(num_gens, "-", "−")) | ||
-- Scale degree (full name) and abbrev | -- Scale degree (full name) and abbrev | ||
| Line 77: | Line 84: | ||
if num_gens == 0 then | if num_gens == 0 then | ||
result = result | result = result | ||
.. string.format(" || %s<br>%s", tamnams.degree_quality(current_interval, input_mos, "sentence-case"), tamnams.degree_quality(period_raised_interval, input_mos, "sentence-case") | .. string.format(" || %s<br />%s || %s<br />%s", | ||
tamnams.degree_quality(current_interval, input_mos, "sentence-case", mos_prefix), | |||
tamnams.degree_quality(period_raised_interval, input_mos, "sentence-case", mos_prefix), | |||
tamnams.degree_quality(current_interval, input_mos, "abbrev" , mos_abbrev), | |||
tamnams.degree_quality(period_raised_interval, input_mos, "abbrev", mos_abbrev)) | |||
elseif num_gens < 0 and mos.interval_step_count(current_interval) % mos.period_step_count(input_mos) == 0 then | elseif num_gens < 0 and mos.interval_step_count(current_interval) % mos.period_step_count(input_mos) == 0 then | ||
result = result | result = result | ||
.. string.format(" || %s", tamnams.degree_quality(period_raised_interval, input_mos, "sentence-case") | .. string.format(" || %s || %s", | ||
tamnams.degree_quality(period_raised_interval, input_mos, "sentence-case", mos_prefix), | |||
tamnams.degree_quality(period_raised_interval, input_mos, "abbrev", mos_abbrev)) | |||
else | else | ||
result = result | result = result | ||
.. string.format(" || %s", tamnams.degree_quality(current_interval, input_mos, "sentence-case") | .. string.format(" || %s || %s", | ||
tamnams.degree_quality(current_interval, input_mos, "sentence-case", mos_prefix), | |||
tamnams.degree_quality(current_interval, input_mos, "abbrev", mos_abbrev)) | |||
end | end | ||
end | end | ||
| Line 93: | Line 105: | ||
result = result | result = result | ||
.. "\n" | .. "\n" | ||
end | end | ||
result = result .. "|}" | result = result .. "|}" | ||
return result | return result | ||
| Line 119: | Line 113: | ||
function p.mos_genchain(frame) | function p.mos_genchain(frame) | ||
local scalesig = frame.args["Scale Signature"] | local scalesig = frame.args["Scale Signature"] | ||
local input_mos = mos.parse(scalesig) | local mos_prefix = frame.args["MOS Prefix"] | ||
local mos_abbrev = frame.args["MOS Abbrev"] | |||
local collapsed = yesno(frame.args["Collapsed"]) | |||
local debugg = yesno(frame.args["debug"]) | |||
-- Parse scalesig | |||
local input_mos = mos.parse(scalesig) | |||
-- Verify name/prefix/abbrev | |||
mos_prefix = tamnams.verify_prefix(input_mos, mos_prefix) | |||
mos_abbrev = tamnams.verify_abbrev(input_mos, mos_abbrev) | |||
local result = p._mos_genchain(input_mos, mos_prefix, mos_abbrev, collapsed) | |||
-- Debugger option | |||
if debugg == true then | |||
result = "<syntaxhighlight lang=\"wikitext\">" .. result .. "</syntaxhighlight>" | |||
end | |||
return | return frame:preprocess(result) | ||
end | end | ||
return p | return p | ||