Module:Infobox chord: Difference between revisions
Move color names to middle of table; make code more consistent with other multi-valued entries |
There's no whitespaces in use |
||
| (17 intermediate revisions by 4 users not shown) | |||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local consistency = require("Module:Chord consistency") | |||
local infobox = require("Module:Infobox") | |||
local rat = require("Module:Rational") | local rat = require("Module:Rational") | ||
local utils = require("Module:Utils") | local utils = require("Module:Utils") | ||
local | local yesno = require("Module:Yesno") | ||
function p.infobox_chord(frame) | function p.infobox_chord(frame) | ||
local debug_mode = | local debug_mode = yesno(frame.args["debug"]) | ||
local page_name = frame:preprocess("{{PAGENAME}}") | local page_name = frame:preprocess("{{PAGENAME}}") | ||
| Line 92: | Line 93: | ||
local denom = root / gcd | local denom = root / gcd | ||
table.insert(root_interval_links, "[[" .. numer .. "/" .. denom .. "]]") | table.insert(root_interval_links, "[[" .. numer .. "/" .. denom .. "]]") | ||
-- compute ratio of this harmonic relative to the previous | -- compute ratio of this harmonic relative to the previous | ||
if i > 1 then | if i > 1 then | ||
local prev = harmonics[i-1] | local prev = harmonics[i - 1] | ||
local step_gcd = utils._gcd(h, prev) | local step_gcd = utils._gcd(h, prev) | ||
local step_numer = h / step_gcd | local step_numer = h / step_gcd | ||
local step_denom = prev / step_gcd | local step_denom = prev / step_gcd | ||
table.insert(step_interval_links, "[[" .. step_numer .. "/" .. step_denom .. "]]") | table.insert(step_interval_links, "[[" .. step_numer .. "/" .. step_denom .. "]]") | ||
table.insert(step_cents, utils._round_dec( | table.insert(step_cents, utils._round_dec(1200*utils.log2(step_numer/step_denom)) .. "¢") | ||
end | end | ||
table.insert(root_cents_steps, utils._round_dec( | table.insert(root_cents_steps, utils._round_dec(1200*utils.log2(numer/denom)) .. "¢") | ||
end | end | ||
| Line 167: | Line 166: | ||
genus_product = genus_product * (prime ^ exponent) | genus_product = genus_product * (prime ^ exponent) | ||
end | end | ||
-- consistent edos | |||
local distance = tonumber(frame.args["Distance"]) | |||
if distance == nil then | |||
if #harmonics >= 5 then | |||
distance = 1.5 | |||
elseif #harmonics >= 3 then | |||
distance = 2.0 | |||
else | |||
distance = 3.0 | |||
end | |||
end | |||
local consistent_edos = consistency.consistent_edos(harmonics, distance, 'edo', 4) | |||
-- compute tag to add for category sort order: as many "#" as the number of digits in the first harmonic | -- compute tag to add for category sort order: as many "#" as the number of digits in the first harmonic | ||
| Line 185: | Line 197: | ||
table.insert(infobox_data, {"Subharmonics", "1/(" .. table.concat(subharmonics, ":") .. ")"}) | table.insert(infobox_data, {"Subharmonics", "1/(" .. table.concat(subharmonics, ":") .. ")"}) | ||
end | end | ||
table.insert(infobox_data, {"Intervals from root", table.concat(root_interval_links, " | table.insert(infobox_data, {"Intervals from root", table.concat(root_interval_links, | ||
table.insert(infobox_data, {"Cents from root", table.concat(root_cents_steps, "& | "<span style=\"padding-left: 0.1em; padding-right: 0.1em;\">–</span>")}) | ||
table.insert(infobox_data, {"Cents from root", table.concat(root_cents_steps, | |||
"<span style=\"padding-left: 0.1em; padding-right: 0.1em;\">–</span>")}) | |||
table.insert(infobox_data, {"Step intervals", table.concat(step_interval_links, ", ")}) | table.insert(infobox_data, {"Step intervals", table.concat(step_interval_links, ", ")}) | ||
table.insert(infobox_data, {"Step cents", table.concat(step_cents, ", ")}) | table.insert(infobox_data, {"Step cents", table.concat(step_cents, ", ")}) | ||
| Line 197: | Line 211: | ||
label = "Color names" | label = "Color names" | ||
end | end | ||
table.insert(infobox_data, {"[[Color notation|" .. label .. "]]", table.concat(color_names, "<br/>")}) | table.insert(infobox_data, {"[[Color notation|" .. label .. "]]", table.concat(color_names, "<br />")}) | ||
end | end | ||
| Line 208: | Line 222: | ||
end | end | ||
local genus_data = table.concat(genus_terms, " | local genus_data = table.concat(genus_terms, | ||
"<span style=\"padding-left: 0.1em; padding-right: 0.1em;\">⋅</span>") | |||
-- append the actual product if it's (arbitrarily) 9 digits or fewer | -- append the actual product if it's (arbitrarily) 9 digits or fewer | ||
if genus_product < 1000000000 then | if genus_product < 1000000000 then | ||
| Line 223: | Line 238: | ||
table.insert(infobox_data, {"[[Otonal odd limit]]", otonal_odd_limit}) | table.insert(infobox_data, {"[[Otonal odd limit]]", otonal_odd_limit}) | ||
table.insert(infobox_data, {"[[Utonal odd limit]]", utonal_odd_limit}) | table.insert(infobox_data, {"[[Utonal odd limit]]", utonal_odd_limit}) | ||
if consistent_edos ~= "" then | |||
table.insert(infobox_data, {"[[Consistency|Consistent edos]] (''d'' ≥ " .. distance .. ")", "<span style=\"font-size: 75%;\">" .. consistent_edos .. "</span>"}) | |||
table.insert(infobox_data, {"<div style=\"font-size: 75%; text-align: right; white-space: nowrap;\">[[Module:Chord consistency/doc|* 2 ≤ ''d'' < 4; ** 4 ≤ ''d'' < 8; *** 8 ≤ ''d'' < 16; …]]</div>"}) | |||
else | |||
table.insert(infobox_data, {"[[Consistency|Consistent edos]] (''d'' ≥ " .. distance .. ")", "<small>not exist in the range up to 72</small>"}) | |||
end | |||
end | end | ||
| Line 232: | Line 254: | ||
end | end | ||
local | local result = infobox.build("<u>Chord information</u>", infobox_data) | ||
if not debug_mode then | if not debug_mode then | ||
result = result .. cats | |||
end | end | ||
return | |||
return frame:preprocess(result) | |||
end | end | ||
return p | return p | ||