Module:Infobox RT

Revision as of 02:21, 21 October 2024 by Lériendil (talk | contribs) (how about this now)

Documentation for this module may be created at Module:Infobox RT/doc

local p = {}
local u = require("Module:Utils")
local infobox = require("Module:Infobox")

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 mos = frame.args["mosses"]
	local mapping = frame.args["mapping"]
	local ploidacot = frame.args["ploidacot"]
	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 data = {}
	
	-- processed mapping
	local map = {}
	local lowermap = {}
	table.insert(data, {
		"Subgroups",
		subgroup
	})

	table.insert(data, {
		"Comma basis",
		basis
	})

	table.insert(data, {
		"Reduced mapping",
		"<" .. mapping .. "]"
	})

	-- autocalculating ploidacot (wip)
	for num in mapping:gmatch("(%d+); ") do
		table.insert(map, num)
	end
	local ploid = map[1]
	
	for num in mapping:gmatch("(%d+) ") do
		table.insert(lowermap, num)
	end
	
	local equave = string.char(string.byte(subgroup, 1))
	local equave_letter
	local cot = tonumber(lowermap[1])
	if equave == "2" then
		equave_letter = "o"
	elseif equave == "3" then
		equave_letter = "t"
	end
	
	-- edo join
	table.insert(data, {
		"Edo join",
		"[[" .. edo_first .. "ed" .. equave_letter .. "|" .. edo_first .. "]] & [[" .. edo_second .. "ed" .. equave .. "|" .. edo_second .. "]]"
	})

	table.insert(data, {
		"Generator ([[" .. method .. "]])",
		"~" .. genfrac .. " = " .. tuning .. "c"
	})

	table.insert(data, {
		"MOS scales",
		mos
	})

	table.insert(data, {
		"Ploidacot",
		ploidacot
	})

	table.insert(data, {
		"Minmax error",
		"(" .. limit1 .. "-[[odd limit]]) " .. acc1 .. "c; <br> (" .. limit2 .. "-[[odd limit]]) " .. acc2 .. "c"
	})

	table.insert(data, {
		"Target scale size",
		"(" .. limit1 .. "-[[odd limit]]) " .. comp1 .. " notes; <br> (" .. limit2 .. "-[[odd limit]]) " .. comp2 .. " notes"
	})

	local result = infobox.build(
		name,
		data
	)
	
	return result
end

return p