Module:Infobox AFDO: Difference between revisions

From Xenharmonic Wiki
Jump to navigation Jump to search
Undo revision 184877 by ArrowHead294 (talk). The debug mode is used in several places on the wiki where categories should be disabled
Tag: Undo
ArrowHead294 (talk | contribs)
m Alphabetise dependencies
Line 1: Line 1:
local p = {}
local p = {}
local infobox = require("Module:Infobox")
local u = require("Module:Utils")
local u = require("Module:Utils")
local infobox = require("Module:Infobox")
local yesno = require("Module:Yesno")
local yesno = require("Module:Yesno")



Revision as of 12:17, 19 May 2025

Module documentation[view] [edit] [history] [purge]
This module should not be invoked directly; use its corresponding template instead: Template:Infobox AFDO.

Generates an infobox providing information about a given arithmetic frequency division of the octave.

Introspection summary for Module:Infobox AFDO 
Functions provided (1)
Line Function Params
6 infobox_AFDO (invokable) (frame)
Lua modules required (3)
Variable Module Functions used
infobox Module:Infobox build
u Module:Utils is_prime
_prime_factorization
yesno Module:Yesno yesno

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_AFDO(frame)
	-- debug mode will disable the categories
	local debug_mode = yesno(frame.args["debug"])
	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 frame:preprocess(result)
end

return p