Jump to content

Module:Svara/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Renamed user ExPsittacine (talk | contribs) at 16:14, 28 September 2018 (Fix typo.). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local mSep = require('Module:Separated entries')
local getArgs = require('Module:Arguments').getArgs

local p = {}
local f -- A global frame variable.

-- This is still missing most lower and higher octave notes.
local svaraDesc = {
	["Ṣ"]  = "Shadja (Sa, lower octave)",
	["S"]  = "Shadja (Sa)",
	["Ṡ"]  = "Shadja (Sa, higher octave)",
	["R₁"] = "Shuddha Rishabha",
	["R₂"] = "Chatushruti Rishabha",
	["R₃"] = "Shatshruti Rishabha",
	["G₁"] = "Shuddha Gandhara",
	["G₂"] = "Sadharana Gandhara",
	["G₃"] = "Antara Gandhara",
	["M₁"] = "Shuddha Madhyama",
	["M₂"] = "Prati Madhyama",
	["P"]  = "Pancham (Pa)",
	["D₁"] = "Shuddha Dhaivata",
	["D₂"] = "Chatushruti Dhaivata",
	["D₃"] = "Shatshruti Dhaivata",
	["N₁"] = "Shuddha Nishada",
	["N₂"] = "Kaishiki Nishada",
	["N₃"] = "Kakali Nishada",
	["Ṟ"] = "Komal Re",
	["R"] = "Shuddha Re",
	["G̱"] = "Komal Gandhara",
	["G"] = "Shuddha Gandhara",
	["M"] = "Madhyama",
	["M̄"] = "Tivra Ma",
	["Ḏ"] = "Komal Dhaivata",
	["D"] = "Shuddha Dhaivata",
	["Ṉ"] = "Komal Nishada",
	["N"] = "Shuddha Nishada",
}

function p.convertCarnaticHindustani(input)
	local svaras = {
		["'S"] = 'Ṣ',
		['S']  = 'S',
		['R1'] = 'Ṟ',
		['R2'] = 'R',
		['R3'] = 'G̱',
		['G1'] = 'R',
		['G2'] = 'G̱',
		['G3'] = 'G',
		['M1'] = 'M',
		['M2'] = 'M̄',
		['P']  = 'P',
		['D1'] = 'Ḏ',
		['D2'] = 'D',
		['D3'] = 'Ṉ',
		['N1'] = 'D',
		['N2'] = 'Ṉ',
		['N3'] = 'N',
		["S'"] = 'Ṡ',
	}
	for key, value in pairs(input) do
      input[key] = svaras[value];
    end
    
	return input
end

function p.resolveCarnatic(input)
	local svaras = {
		["'S"] = 'Ṣ',
		['S']  = 'S',
		['R1'] = 'R₁',
		['R2'] = 'R₂',
		['R3'] = 'R₃',
		['G1'] = 'G₁',
		['G2'] = 'G₂',
		['G3'] = 'G₃',
		['M1'] = 'M₁',
		['M2'] = 'M₂',
		['P']  = 'P',
		['D1'] = 'D₁',
		['D2'] = 'D₂',
		['D3'] = 'D₃',
		['N1'] = 'N₁',
		['N2'] = 'N₂',
		['N3'] = 'N₃',
		["S'"] = 'Ṡ',
	}
	for key, value in pairs(input) do
      input[key] = svaras[value];
    end
    
	return input
end

function p.resolveHindustani(input)
	local svaras = {
		["'s"] = 'Ṣ',
		["'S"] = 'Ṣ',
		['s']  = 'S',
		['S']  = 'S',
		['r']  = 'Ṟ',
		['R']  = 'R',
		['g']  = 'G̱',
		['G']  = 'G',
		['m']  = 'M',
		['M']  = 'M̄',
		['p']  = 'P',
		['P']  = 'P',
		['d']  = 'Ḏ',
		['D']  = 'D',
		['n']  = 'Ṉ',
		['N']  = 'N',
		["S'"] = 'Ṡ',
	}
	for key, value in pairs(input) do
      input[key] = svaras[value];
    end

	return input
end

function p.carnatic(frame)
	local args = p.sanitiseArgs(frame, true)
	-- Carnatic notation is case-insensitive. Enable the capitalise option.
	args = p.resolveCarnatic(args)
	return p._main(args)
end

function p.hindustani(frame)
	local args = p.sanitiseArgs(frame)
	args = p.resolveHindustani(args)
	return p._main(args)
end

function p._main(args)
	args['separator'] = " "
    return mSep.main(args)
end

function p.sanitiseArgs(frame, capitalise)
	f = frame
	local args = getArgs(frame)

	-- Capitalise arguments.
	if (capitalise) then
		for key, value in pairs(args) do
    		args[key] = mw.ustring.upper(args[key]);
    	end
	end

	return args
end

function p.main(frame)
	local args = p.sanitiseArgs(frame)
	return p._main(args)
end

return p