- This module should not be invoked directly; use its corresponding template instead: Template:Infobox regtemp.
|
Module:Infobox regtemp is a draft module. It is incomplete and may not be in active development. If possible, editors are encouraged to help with its development. In the meantime, editors should avoid using this module across the Xenharmonic Wiki, except for testing.
|
This module generates an infobox providing information about a given regular temperament.
| Introspection summary for Module:Infobox regtemp
|
Functions provided (5)
| Line
|
Function
|
Params
|
| 7
|
infobox_RT (invokable)
|
(frame)
|
| 197
|
digit2greek
|
(number, purpose)
|
| 279
|
num2greek
|
(number, purpose)
|
| 294
|
digit2greeklet
|
(number, purpose)
|
| 361
|
num2greeklet
|
(number)
|
|
|
No function descriptions were provided. The Lua code may have further information.
local p = {}
local infobox = require("Module:Infobox")
local u = require("Module:Utils")
local yesno = require("Module:Yesno")
function p.infobox_RT(frame)
-- no real math functionality... yet
local name = frame.args["tempname"]
local subgroup = frame.args["subgroup"]
local basis = frame.args["commas"]
local edo_first = frame.args["edo_first"]
local edo1 = tonumber(edo_first)
local edo_second = frame.args["edo_second"]
local edo2 = tonumber(edo_second)
local tuning = frame.args["tuning"]
local genfrac = frame.args["genfrac"]
local method = frame.args["method"]
local mapping = frame.args["mapping"]
local mos = frame.args["mosses"]
local ploidacot = frame.args["ploidacot"]
local colorname = frame.args["colorname"]
local pergen = frame.args["pergen"]
local limit1 = frame.args["lim1"]
local comp1 = frame.args["comp1"]
local acc1 = frame.args["acc1"]
local limit2 = frame.args["lim2"]
local comp2 = frame.args["comp2"]
local acc2 = frame.args["acc2"]
local debugg = frame.args["debug"]
local data = {}
table.insert(data, {
"Subgroups",
subgroup
})
table.insert(data, {
"Comma basis",
basis
})
table.insert(data, {
"Reduced mapping",
"⟨" .. mapping .. "]"
})
-- process mapping
local map = {}
for num in mapping:gmatch("(%d+); ") do
table.insert(map, num)
end
local lowermap = {}
for num in mapping:gmatch("(%d+) ") do
table.insert(lowermap, num)
end
-- autocalculating ploidacot
local ploid = tonumber (map[1])
local equave = string.char(string.byte(subgroup, 1))
local equave_letter
local cot = tonumber(lowermap[1])
local referent = string.char(string.byte(subgroup, 3))
local suffix = "cleft"
if tonumber(equave) == 3 then
equave_letter = "t"
if tonumber(string.char(string.byte(subgroup, 3))) == 5 then
if tonumber(string.char(string.byte(subgroup, 5))) == 7 then
cot = tonumber(lowermap[2])
suffix = "gem"
end
elseif tonumber(string.char(string.byte(subgroup, 3))) == 2 then -- edf
equave_letter = "f"
equave = "3/2"
referent = string.char(string.byte(subgroup, 5))
end
if referent == "7" then
suffix = "gem"
end
elseif tonumber(equave) == 2 then
equave_letter = "o"
if tonumber(string.char(string.byte(subgroup, 3))) == 3 then
suffix = "cot"
elseif tonumber(string.char(string.byte(subgroup, 3))) == 5 then
suffix = "seph"
end
else
equave_letter = equave
end
if suffix == "cleft" then
suffix = referent .. suffix
end
local equave_size = 1200 * u.log2(tonumber(equave))
local referent_size = 1200 * u.log2(tonumber(referent))
local period_size = equave_size / ploid
local generator_size = tonumber(tuning)
if cot < 0 then
generator_size = equave_size - generator_size
cot = -cot
end
local shear = (math.floor(generator_size * cot / period_size)
- math.floor(referent_size % equave_size / period_size)) % cot
if ploid == 1 and cot > 2 and shear == cot - ploid then
shear = shear - cot
end
suffix = p.num2greeklet(tostring(shear)) .. p.num2greek(tostring(cot), "cot") .. suffix
if ploid ~= 1 then
suffix = p.num2greek(tostring(ploid), "ploid") .. "ploid " .. suffix
end
if ploidacot == "0" then
ploidacot = suffix
end
-- edo join
table.insert(data, {
"Edo join",
"[[" .. edo_first .. "ed" .. equave_letter .. "|" .. edo_first .. "]] & [[" .. edo_second .. "ed" .. equave_letter .. "|" .. edo_second .. "]]"
})
table.insert(data, {
"Generator ([[" .. method .. "]])",
"~" .. genfrac .. " = " .. tuning .. "{{c}}"
})
if mos ~= "0" then
table.insert(data, {
"MOS scales",
mos
})
end
table.insert(data, {
"Ploidacot",
ploidacot
})
if pergen ~= "0" then
table.insert(data, {
"Pergen",
pergen
})
end
if colorname ~= "0" then
table.insert(data, {
"Color name",
colorname
})
end
-- error and stuff
local limit_text
if equave_letter == "o" then
limit_text = "-odd-limit"
elseif equave_letter == "t" then
limit_text = "-throdd-limit"
else
limit_text = "-integer-limit"
end
local string1 = limit1 .. limit_text .. ": " .. acc1 .. "{{c}}"
local string2 = limit1 .. limit_text .. ": " .. comp1 .. " notes"
if limit2 ~= "0" then
string1 = string1 .. "; <br>" .. limit2 .. limit_text .. ": " .. acc2 .. "{{c}}"
string2 = string2 .. "; <br>" .. limit2 .. limit_text .. ": " .. comp2 .. " notes"
end
table.insert(data, {
"Minimax error",
string1
})
table.insert(data, {
"Target scale size",
string2
})
local result = infobox.build(
name,
data
)
return frame:preprocess(debugg == true and "<pre>" .. result .. "</pre>" or result)
end
function p.digit2greek(number, purpose)
local greek
if number == "1" then
if purpose == "ploid" then
greek = "ha"
elseif purpose == "cot" then
greek = "mono"
elseif purpose == "decade" then
greek = "deca"
else
greek = "hen"
end
elseif number == "2" then
if purpose == "decade" then
greek = "icosa"
elseif purpose == "unit" then
greek = "do"
else
greek = "di"
end
elseif number == "0" then
if purpose == "unit" then
greek = ""
else
greek = "a"
end
else
if number == "3" then
if purpose == "decade" then
greek = "tria"
else
greek = "tri"
end
elseif number == "4" then
if purpose == "decade" then
greek = "tessera"
else
greek = "tetra"
end
elseif number == "5" then
if purpose == "decade" then
greek = "pente"
else
greek = "penta"
end
elseif number == "6" then
if purpose == "decade" then
greek = "hexe"
else
greek = "hexa"
end
elseif number == "7" then
if purpose == "decade" then
greek = "hebdome"
else
greek = "hepta"
end
elseif number == "8" then
if purpose == "decade" then
greek = "ogdoe"
elseif purpose == "unit" then
greek = "octo"
else
greek = "octa"
end
elseif number == "9" then
if purpose == "decade" then
greek = "enene"
else
greek = "ennea"
end
end
if purpose == "decade" then
greek = greek .. "conta"
end
end
return greek
end
function p.num2greek(number, purpose)
local greek
if string.len(number) == 1 then
greek = p.digit2greek(number, purpose)
elseif string.len(number) == 2 then
local unit = string.char(string.byte(number, 2))
local decade = string.char(string.byte(number, 1))
greek = p.digit2greek(unit, "unit") .. p.digit2greek(decade, "decade")
end
return greek
end
function p.digit2greeklet(number, purpose)
local greek
if number == "1" then
if purpose == "decade" then
greek = "iota-"
elseif purpose == "unit" then
greek = "alpha-"
end
elseif number == "2" then
if purpose == "decade" then
greek = "kappa-"
elseif purpose == "unit" then
greek = "beta-"
end
elseif number == "3" then
if purpose == "decade" then
greek = "lambda-"
elseif purpose == "unit" then
greek = "gamma-"
end
elseif number == "4" then
if purpose == "decade" then
greek = "mu-"
elseif purpose == "unit" then
greek = "delta-"
end
elseif number == "5" then
if purpose == "decade" then
greek = "nu-"
elseif purpose == "unit" then
greek = "epsilon-"
end
elseif number == "6" then
if purpose == "decade" then
greek = "xi-"
elseif purpose == "unit" then
greek = "wau-"
end
elseif number == "7" then
if purpose == "decade" then
greek = "omicron-"
elseif purpose == "unit" then
greek = "zeta-"
end
elseif number == "8" then
if purpose == "decade" then
greek = "pi-"
elseif purpose == "unit" then
greek = "eta-"
end
elseif number == "9" then
if purpose == "decade" then
greek = "qoppa-"
elseif purpose == "unit" then
greek = "theta-"
end
elseif number == "0" then
greek = ""
elseif number == "-1" then
greek = "omega-"
end
return greek
end
function p.num2greeklet(number)
local greek
if string.len(number) == 1 then
greek = p.digit2greeklet(number, "unit")
elseif string.len(number) == 2 then
local unit = string.char(string.byte(number, 2))
local decade = string.char(string.byte(number, 1))
greek = p.digit2greeklet(decade, "decade") .. p.digit2greeklet(unit, "unit")
end
return greek
end
return p