Module:Infobox MOS

From Xenharmonic Wiki
Revision as of 17:53, 31 March 2023 by Inthar (talk | contribs)
Jump to navigation Jump to search
Module documentation[view] [edit] [history] [purge]
This module should not be invoked directly; use its corresponding template instead: Template:Infobox MOS.

This module generates an infobox providing information about a given moment of symmetry (MOS) scale.

Introspection summary for Module:Infobox MOS 
Functions provided (1)
Line Function Params
10 infobox_MOS (invokable) (frame)
Lua modules required (7)
Variable Module Functions used
ET Module:ET dependency not used
infobox Module:Infobox build
i Module:Interval dependency not used
l Module:Limits dependency not used
MOS Module:MOS parse
rat Module:Rational eq
u Module:Utils dependency not used

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


local p = {}
local i = require('Module:Interval')
local u = require('Module:Utils')
local rat = require('Module:Rational')
local l = require('Module:Limits')
local MOS = require('Module:MOS')
local ET = require('Module:ET')
local infobox = require('Module:Infobox')

function p.infobox_MOS(frame)
	-- debug mode
	local debug_mode = frame.args['debug'] ~= nil
	local categories = ''
	
	local tuning = frame.args['tuning']
	local mos = MOS.parse(tuning) or MOS.parse('5L 2s')
	assert(mos, "failed to parse variable mos")
	-- category of the main article
	categories = categories .. '[[Category:' .. tuning .. '| ]]'
	
	local equave_link = ' (' .. mos.equave .. '-equivalent)'
	local equave_disp = ' <' .. mos.equave .. '>'
	if rat.eq(mos.equave, 2) then
		equave_link = ''
		equave_disp = ''
	end
	
	local prev_L, prev_s = '', ''
	if mos.nL > 1 then
		prev_L = '[[' .. (mos.nL - 1) .. 'L ' .. mos.ns .. 's' .. equave_link .. '|← ' .. (mos.nL - 1) .. 'L' .. mos.ns .. 's' .. equave_disp .. ']]'
	end
	local next_L = '[[' .. (mos.nL + 1) .. 'L ' .. mos.ns .. 's' .. equave_link .. '|' .. (mos.nL + 1) .. 'L' .. mos.ns .. 's' .. equave_disp .. '→]]'
	if mos.ns > 1 then
		prev_s = '[[' .. mos.nL .. 'L ' .. (mos.ns - 1) .. 's' .. equave_link .. '|↑' .. mos.nL .. 'L' .. (mos.ns - 1) .. 's' .. equave_disp .. ']]'
	end
	local next_s = '[[' .. mos.nL .. 'L ' .. (mos.ns + 1) .. 's' .. equave_link .. '|↓' .. mos.nL .. 'L' .. (mos.ns + 1) .. 's' .. equave_disp .. '\n]]'
	
	local infobox_data = {}
	
	table.insert(infobox_data, {
		'Brightest mode',
		'LLLsLLs'
	})
	table.insert(infobox_data, {
		'Period',
		'2/1'
	})
	table.insert(infobox_data, {
		'Range for [[bright]] [[generator]]',
		''
	})
	table.insert(infobox_data, {
		'Range for [[dark]] [[generator]]',
		''
	})
	table.insert(infobox_data, {
		'Parent MOS',
		'[[3L 2s]]'
	})
	table.insert(infobox_data, {
		'Daughter MOSes',
		'[[5L 7s]], [[7L 5s]]'
	})
	table.insert(infobox_data, {
		'[[Operations on MOSes#Sistering|Sister MOS]]',
		'[[2L 5s]]'
	})
	table.insert(infobox_data, {
		'[[Operations on MOSes#Neutralization|Neutralized MOS]]',
		'[[3L 4s]]'
	})
	table.insert(infobox_data, {
		'[[TAMNAMS#Mos pattern names|TAMNAMS name]]',
		'diatonic'
	})
	result = infobox.build(
		tuning,
		infobox_data,
		prev_L,
		next_L,
		prev_s,
		next_s
	)
	
	if not debug_mode then
		result = result .. categories
	end
	return result
end
return p