Module:Infobox MOS: Difference between revisions

Ganaram inukshuk (talk | contribs)
m Adopt yesno module
Ganaram inukshuk (talk | contribs)
m adopt some mos functions
Line 1: Line 1:
local p = {}
local p = {}
local utils = require('Module:Utils')
local rat = require('Module:Rational')
local rat = require('Module:Rational')
local mos = require('Module:MOS')
local mos = require('Module:MOS')
Line 104: Line 103:
-- blank instead.
-- blank instead.
for i = 1, #adjacent_links do
for i = 1, #adjacent_links do
local number_of_periods = utils._gcd(input_mos.nL, input_mos.ns)
local is_null_large = string.find(adjacent_links[i], "0L") and input_mos.nL == 1
local is_null_large = string.find(adjacent_links[i], "0L") and input_mos.nL == 1
local is_null_small = string.find(adjacent_links[i], "0s") and input_mos.ns == 1
local is_null_small = string.find(adjacent_links[i], "0s") and input_mos.ns == 1
Line 126: Line 124:
local equave_in_cents = rat.cents(input_mos.equave)
local equave_in_cents = rat.cents(input_mos.equave)
local number_of_periods = utils._gcd(input_mos.nL, input_mos.ns)
local number_of_periods = mos.period_step_count(input_mos)
local period_as_string = ""
local period_as_string = ""
if number_of_periods == 1 then
if number_of_periods == 1 then
Line 160: Line 158:
local input_mos = input_mos or mos.new(5, 2)
local input_mos = input_mos or mos.new(5, 2)
local number_of_periods = utils._gcd(input_mos.nL, input_mos.ns)
local number_of_periods = mos.period_step_count(input_mos)
local bright_gen = mos.bright_gen(input_mos)
local bright_gen = mos.bright_gen(input_mos)
Line 173: Line 171:
local dark_max_in_steps  = et.backslash_display(equalized_ed, dark_gen['L'] + dark_gen['s'])
local dark_max_in_steps  = et.backslash_display(equalized_ed, dark_gen['L'] + dark_gen['s'])
local bright_min_in_cents = et.cents(equalized_ed, bright_gen['L'] + bright_gen['s'])
local bright_min_in_cents = mos.bright_gen_to_cents(input_mos, {1, 1})
local bright_max_in_cents = et.cents(collapsed_ed, bright_gen['L'])
local bright_max_in_cents = mos.bright_gen_to_cents(input_mos, {1, 0})
local dark_min_in_cents  = et.cents(collapsed_ed, dark_gen['L'])
local dark_min_in_cents  = mos.dark_gen_to_cents(input_mos, {1, 0})
local dark_max_in_cents  = et.cents(equalized_ed, dark_gen['L'] + dark_gen['s'])
local dark_max_in_cents  = mos.dark_gen_to_cents(input_mos, {1, 1})
local section_header = "Generator size"
local section_header = "Generator size"
Line 193: Line 191:
{"[[Bright]]", string.format("%s to %s (%.1f¢ to %.1f¢)", bright_min_in_steps, bright_max_in_steps, bright_min_in_cents, bright_max_in_cents)},
{"[[Bright]]", string.format("%s to %s (%.1f¢ to %.1f¢)", bright_min_in_steps, bright_max_in_steps, bright_min_in_cents, bright_max_in_cents)},
{"[[Dark]]", string.format("%s to %s (%.1f¢ to %.1f¢)", dark_min_in_steps, dark_max_in_steps, dark_min_in_cents, dark_max_in_cents)},
{"[[Dark]]", string.format("%s to %s (%.1f¢ to %.1f¢)", dark_min_in_steps, dark_max_in_steps, dark_min_in_cents, dark_max_in_cents)},
}
return section_entries
end
-- Helper function
-- Produces ranges small and large steps (currently unused)
-- Section is returned as a jagged array and return value must be merged into
-- a larger array.
function p.step_sizes(input_mos)
local input_mos = input_mos or mos.new(5, 2)
local equalized_ed = et.new(input_mos.nL + input_mos.ns, input_mos.equave, "")
local collapsed_ed = et.new(input_mos.nL, input_mos.equave, "")
-- Large and small steps
-- The small step lower bound is basically zero (when collapsed).
-- The upper bound for a small step and the lower bound for a large step
-- are the same.
-- The upper bound of a large step is when the step ratio is collapsed.
local small_step_min_in_steps = et.backslash_display(collapsed_ed, 0)
local large_step_min_in_steps = et.backslash_display(equalized_ed, 1)
local large_step_max_in_steps = et.backslash_display(collapsed_ed, 1)
local small_step_min_in_cents = et.cents(collapsed_ed, 0)
local large_step_min_in_cents = et.cents(equalized_ed, 1)
local large_step_max_in_cents = et.cents(collapsed_ed, 1)
local section_header = "Step size"
local equave_annotation = ""
if rat.eq(input_mos.equave, 3) then
equave_annotation = '<sup><abbr title="In steps of edt">(edt)</sup>'
elseif rat.eq(input_mos.equave, rat.new(3,2)) then
equave_annotation = '<sup><abbr title="In steps of edf">(edf)</sup>'
elseif not rat.eq(input_mos.equave, 2) then
local equave_as_ratio = rat.as_ratio(input_mos.equave)
equave_annotation = string.format('<sup><abbr title="In steps of ed%s">(ed%s)</sup>', equave_as_ratio, equave_as_ratio)
end
local section_entries = {
{string.format("<b>%s</b>%s", section_header, equave_annotation)},
{"[[Step pattern | Large]]", string.format("%s to %s (%.1f¢ to %.1f¢)", large_step_min_in_steps, large_step_max_in_steps, large_step_min_in_cents, large_step_max_in_cents)},
{"[[Step pattern | Small]]", string.format("%s to %s (%.1f¢ to %.1f¢)", small_step_min_in_steps, large_step_min_in_steps, small_step_min_in_cents, large_step_min_in_cents)}
}
}
Line 258: Line 213:
local notecount = input_mos.nL + input_mos.ns
local notecount = input_mos.nL + input_mos.ns
local number_of_periods = utils._gcd(input_mos.nL, input_mos.ns)
local number_of_periods = mos.period_step_count(input_mos)
local tamnams_name  = tamnams.lookup_name  (input_mos)
local tamnams_name  = tamnams.lookup_name  (input_mos)
Line 357: Line 312:
local hard_floght_scalesig  = string.format("[[%s | %s]]", mos.as_long_string(hard_floght_mos), mos.as_string(hard_floght_mos))
local hard_floght_scalesig  = string.format("[[%s | %s]]", mos.as_long_string(hard_floght_mos), mos.as_string(hard_floght_mos))
local number_of_periods = utils._gcd(input_mos.nL, input_mos.ns)
local number_of_periods = mos.period_step_count(input_mos)
local is_nL_ns = input_mos.nL == number_of_periods and input_mos.ns == number_of_periods
local is_nL_ns = input_mos.nL == number_of_periods and input_mos.ns == number_of_periods
if is_nL_ns then
if is_nL_ns then