Module:Infobox interval region

From Xenharmonic Wiki
Revision as of 05:59, 14 March 2025 by VectorGraphics (talk | contribs)
Jump to navigation Jump to search

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

-- EXTREMELY WIP

local p = {}
local u = require("Module:Utils")
local infobox = require("Module:Infobox")
local rat = require("Module:Rational")
local yesno = require("Module:Yesno")

function p.concatenate_tables(t1, t2)
	for i=1, #t2 do
		t1[#t1 + 1] = t2[i]
	end
end

function p.infobox_IR(frame)
	local name = frame.args["regionname"]
	local complement = frame.args["complement"]
	local centslower = frame.args["centsLowerWide"]
	local centsupper = frame.args["centsUpperWide"]
	local centslowerStrict = frame.args["centsLower"]
	local centsupperStrict = frame.args["centsUpper"]
	local subregions = frame.args["subregions"]
	local superregions = frame.args["superregions"]
	local prevRegion = frame.args["prevRegion"]
	local nextRegion = frame.args["nextRegion"]
	local equave = frame.args["equave"]
	local ji3 = frame.args["ji3"]
	local ji5 = frame.args["ji5"]
	local ji7 = frame.args["ji7"]
	local ji11 = frame.args["ji11"]
	local ji13 = frame.args["ji13"]
	local jiPre = frame.args["ji"]
	local ji = {}
	for note in jiPre:gmatch("%d*/%d*") do
		 table.insert(ji, rat.parse(note))
	end

	local jihigh = frame.args["jiHigh"]
	local moses = frame.args["MOSes"]
	
	local data = {}
	
			table.insert(data, {
			"Name",
			name
		})
	

	
	
	if centslower == nil or centslower == "" then
		table.insert(data, {
			"Lower bound",
			centslowerStrict .. "¢"
		})
	else
		table.insert(data, {
			"Lower bound",
			centslower .. "¢ - " .. centslowerStrict .. "¢"
		})	
	end
	
	if centsupper == nil or centsupper == "" then
		table.insert(data, {
			"Upper bound",
			centsupperStrict .. "¢"
		})
	else
		table.insert(data, {
			"Upper bound",
			centsupperStrict .. "¢ - " .. centsupper .. "¢"
		})	
	end
			if moses ~= nil and moses ~= "" then
		table.insert(data, {
			"Generated [[MOS]]es",
			moses
		})
		end
			table.insert(data, {
			string.format("<div style=\"margin-top: 0.6em;\"><b>%s</b></div>", "[[JI]] intervals")
		})	
	local jidata = ""
	local q = 0
			for k,v in pairs(ji) do
				if q == 1 then
					jidata = jidata .. "<br>"
					end
				jidata = jidata .. "[[" .. rat.as_ratio(v) .. "]] (" .. math.floor(rat.cents(v)*10+0.5)/10 .. "¢)"
				q = 1
			end
		table.insert(data, {
			"Intervals",
			jidata
		})	
		table.insert(data, {
			string.format("<div style=\"margin-top: 0.6em;\"><b>%s</b></div>", "Related regions")
		})	
			if complement ~= nil and complement ~= "" then
		table.insert(data, {
			"[[Complement]]",
			complement
		})
			end
				if subregions ~= nil and subregions ~= "" then
		table.insert(data, {
			"Subregions",
			subregions
		})
				end
					if superregions ~= nil and superregions ~= "" then
		table.insert(data, {
			"Superregion(s)",
			superregions
		})
		end
	local args = {
		["Adjacent Links"] = { "<&nbsp;"..(prevRegion or ""), (nextRegion or "").."&nbsp;>" },
		["Title"] = "Interval&nbsp;region",
		["Rows"] = data,
	}

	local result = infobox._infobox(args)
	
	
	
	return frame:preprocess(debugg == true and "<pre>" .. result .. "</pre>" or result)
	
end


return p