Module:Infobox AFDO

From Xenharmonic Wiki
Jump to navigation Jump to search

Documentation transcluded from /doc
Note: Do not invoke this module directly; use the corresponding template instead: Template:Infobox AFDO.
Icon-Todo.png Todo: Documentation

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

function p.infobox_AFDO(frame)
	-- debug mode will disable the categories
	local debug_mode = frame.args["debug"] ~= nil
	local categories = ""
	
	local steps = frame.args["steps"]
	local stepnum = tonumber(steps)
	local dualfifth = stepnum % 2 == 1
	local fifth = steps+math.ceil(steps/2)
	local special_properties = ""
	
	categories = categories .. "[[Category:AFDO|" .. string.rep("#", string.len (stepnum)) .. "]]"
	
	-- prime test
	local prime = ""
	if u.is_prime(stepnum) then
		prime = " (prime)"
		-- if rat.eq(et.equave, 2) then
			categories = categories .. "[[Category:Prime AFDO|" .. string.rep("#", string.len (stepnum)) .. "]]"
		-- end
	end
	
	local infobox_data = {}
	table.insert(infobox_data, {
		"Prime factorization",
		u._prime_factorization(stepnum) .. prime
	})

    if(dualfifth) then
    	table.insert(infobox_data, {
		"Dual sharp fifth",
		fifth .. "/" .. steps .. " (" .. math.floor(math.log(fifth / steps) / math.log(2) * 1200 * 1000) / 1000 .. "c)"
		})    
		table.insert(infobox_data, {
		"Dual flat fifth",
		(fifth-1) .. "/" .. steps .. " (" .. math.floor(math.log((fifth - 1) / steps) / math.log(2) * 1200 * 1000) / 1000 .. "c)"
		})
    else
		table.insert(infobox_data, {
		"Fifth",
		fifth .. "/" .. steps .. " (" .. math.floor(math.log(fifth / steps) / math.log(2) * 1200 * 1000) / 1000 .. "c)"
		})
		
    end

   if(special_properties ~= "") then
   		table.insert(infobox_data, {"Special properties", special_properties})
   	end

	local result = infobox.build(
		"[[" .. steps .. "afdo]]",
		infobox_data,
		"[[" .. (steps - 1) .. "afdo|← " .. (steps - 1) .. "afdo]]",
		"[[" .. (steps + 1) .. "afdo|" .. (steps + 1) .. "afdo →]]"
	)
	
	if not debug_mode then
		result = result .. categories
	end
	return result
end

return p