Module:Ups and downs sharpness

Revision as of 22:12, 23 September 2025 by Tristanbay (talk | contribs) (trying to get nowrap to work properly)
Module documentation[view] [edit] [history] [purge]
This module should not be invoked directly; use its corresponding template instead: Template:Ups and downs sharpness.

This module automatically creates a table with the combinations of symbols to notate a given edo using Kite's ups and downs notation.

Introspection summary for Module:Ups and downs sharpness 
Functions provided (1)
Line Function Params
8 ud_sharpness (invokable) (frame)
Lua modules required (1)
Variable Module Functions used
utils Module:Utils dependency not used

No function descriptions were provided. The Lua code may have further information.


local p = {}
local utils = require("Module:Utils")

local function sharp_n(edo) -- calculate amount of steps for sharp/flat
	return (7 * math.floor((edo * math.log(3) / math.log(2)) + 0.5)) - (11 * edo) -- mapping of augmented unison
end

function p.ud_sharpness(frame) -- generate table
	local sharp = sharp_n(frame.args["edo"])
	local tab = "{|class=\"wikitable\"\n|+\n!Step offset\n|'''0'''\n"
	for i = 1, sharp * 2 + 1 do
		if (i % sharp == 0) then
			tab = tab .. "|'''" .. i .. "'''\n"
		else
			tab = tab .. "|" .. i .. "\n"
		end
	end
	tab = tab .. "|-\n!Sharp symbol\n|rowspan=\"2\"|[[File:Heji18.svg|15px]]\n"
	for i = 1, sharp * 2 + 1 do
		tab = tab .. "|{{nowrap|<span>"
		if ((i - (sharp * math.floor(i / sharp))) / sharp) > math.ceil(((i - (sharp * math.floor(i / sharp))) / sharp) - 0.5) then
			if (i - (sharp * math.floor(i / sharp))) % 5 == 4 then
				tab = tab .. "&#x202F;[[File:Down narrow.svg|9px]]&#x202F;[[File:Quip narrow.svg|9px]]"
			else
				for j = 1, (i - (sharp * math.floor(i / sharp))) % 5 do
					tab = tab .. "&#x202F;[[File:Up narrow.svg|9px]]"
				end
			end
			for j = 1, math.floor((i - (sharp * math.floor(i / sharp))) / 5) do
				tab = tab .. "&#x202F;[[File:Quip narrow.svg|9px]]"
			end
		else
			if ((sharp * math.ceil(i / sharp)) - i) % 5 == 4 then
				tab = tab .. "&#x202F;[[File:Up narrow.svg|9px]]&#x202F;[[File:Quid narrow.svg|9px]]"
			else
				for j = 1, ((sharp * math.ceil(i / sharp)) - i) % 5 do
					tab = tab .. "&#x202F;[[File:Down narrow.svg|9px]]"
				end
			end
			for j = 1, math.floor(((sharp * math.ceil(i / sharp)) - i) / 5) do
				tab = tab .. "&#x202F;[[File:Quid narrow.svg|9px]]"
			end
		end
		if math.ceil((i / sharp) - 0.5) == 1 then
			tab = tab .. "&#x202F;[[File:Heji25.svg|16px]]"
		elseif math.ceil((i / sharp) - 0.5) == 2 then
			tab = tab .. "&#x202F;[[File:Heji32.svg|21px]]"
		end
		tab = tab .. "</span>\n"
	end
	tab = tab .. "|-\n!Flat symbol\n"
	for i = 1, sharp * 2 + 1 do
		tab = tab .. "|{{nowrap|<span>"
		if ((i - (sharp * math.floor(i / sharp))) / sharp) > math.ceil(((i - (sharp * math.floor(i / sharp))) / sharp) - 0.5) then
			if (i - (sharp * math.floor(i / sharp))) % 5 == 4 then
				tab = tab .. "&#x202F;[[File:Up narrow.svg|9px]]&#x202F;[[File:Quid narrow.svg|9px]]"
			else
				for j = 1, (i - (sharp * math.floor(i / sharp))) % 5 do
					tab = tab .. "&#x202F;[[File:Down narrow.svg|9px]]"
				end
			end
			for j = 1, math.floor((i - (sharp * math.floor(i / sharp))) / 5) do
				tab = tab .. "&#x202F;[[File:Quid narrow.svg|9px]]"
			end
		else
			if ((sharp * math.ceil(i / sharp)) - i) % 5 == 4 then
				tab = tab .. "&#x202F;[[File:Down narrow.svg|9px]]&#x202F;[[File:Quip narrow.svg|9px]]"
			else
				for j = 1, ((sharp * math.ceil(i / sharp)) - i) % 5 do
					tab = tab .. "&#x202F;[[File:Up narrow.svg|9px]]"
				end
			end
			for j = 1, math.floor(((sharp * math.ceil(i / sharp)) - i) / 5) do
				tab = tab .. "&#x202F;[[File:Quip narrow.svg|9px]]"
			end
		end
		if math.ceil((i / sharp) - 0.5) == 1 then
			tab = tab .. "&#x202F;[[File:Heji11.svg|16px]]"
		elseif math.ceil((i / sharp) - 0.5) == 2 then
			tab = tab .. "&#x202F;[[File:Heji4.svg|27px]]"
		end
		tab = tab .. "</span>}}\n"
	end
	tab = tab .. "|}"
	return tab
end

return p