Module:MOS scalesig

From Xenharmonic Wiki
Jump to navigation Jump to search
Test Template Info-Icon - Version (2).svg Module documentation[view] [edit] [history] [purge]
Note: Do not invoke this module directly; use the corresponding template instead: Template:MOS scalesig.
Icon-Todo.png Todo: Documentation

local mos = require("Module:MOS")
local yesno = require("Module:Yesno")
local getArgs = require("Module:Arguments").getArgs
local p = {}

-- Function to format a string into a mos scalesig, with nonbreaking spaces.
-- Options are:
-- - is_long - Whether to use "xL ys<p/q>" or "xL ys (p/q-equivalent)". Only
--   applies for nonoctave mosses, as a scalesig without an equave is assumed to
--   be 2/1-equivalent.
-- - is_link - Whether the scalesig is a link to its wiki page.
function p._mos_scalesig(input_mos, is_link, is_long)
	local is_link = yesno(is_link, false)
	local is_long = yesno(is_long, false)
	
	if is_link then
		return is_long and mos.as_long_link(input_mos) or mos.as_link(input_mos)
	else
		return is_long and mos.as_long_string(input_mos) or mos.as_string(input_mos)
	end
end

-- Wrapper function
function p.mos_scalesig(frame)
	local args = getArgs(frame)
	
	local input_mos = mos.parse(args["scalesig"])
	local is_link = yesno(args["link"], false)
	local is_long = yesno(args["long"], false)
	
	return p._mos_scalesig(input_mos, is_link, is_long)
end

function p.tester()
	local input_mos = mos.new(5,2)
	return p._mos_scalesig(input_mos, true, true)
end

return p