Module:IPA/tracking

From The Languages of David J. Peterson
Jump to navigation Jump to search

Documentation for this module may be created at Module:IPA/tracking/documentation

local export = {}

--[[
	symb is what is tracked. It can be a literal symbol or a Lua pattern.
	If it is a table, tracking is added for any of the symbols in the list.
	
	cat is the subtemplate that is added to the default path "IPA/" + language code + "/".
]]

local U = mw.ustring.char

local syllabic = U(0x329)

export.tracking = {
	en = {
		{
			symb = "iə",
			cat = "ambig",
		},
		{
			symb = { "ɪi", "ʊu", "ɪj", "ʊw" },
			cat = "eeoo",
		},
		{
			symb = { "r" },
			cat = "plain r",
		},
	},
	cs = {
		{
			symb = "[mnrl]" .. syllabic,
			cat = "syllabic-consonant",
		},
	},
	ps = {
		{
			symb = "ɤ",
			cat = "Pashto",
		},
	},
	fa = {
		{
			symb = "ʔ",
			cat = "glottal-stop",
		},
	},
	{
		{
			symb = "",
			cat = "",
		},
	},
}

function export.run_tracking(IPA, lang)
	if not IPA or IPA == "" then
		return nil
	end
	
	lang = lang:getCode()
	
	if not export.tracking[lang] or type(export.tracking[lang]) ~= "table" then
		return nil
	end
	
	for i, arguments in ipairs(export.tracking[lang]) do
		if type(arguments) == "table" then
			local required = { "symb", "cat" }
			
			hasArgs = true
			
			for i, arg in pairs(required) do
				if not arguments[arg] or arguments[arg] == "" then
					hasArgs = false
				end
			end
			
			if hasArgs == true then
				local symbols = arguments.symb
				local category = arguments.cat
				
				if type(symbols) == "string" then
					symbols = { symbols }
				end
				
				for _, symbol in pairs(symbols) do
					if type(symbol) ~= "string" then
						return nil
					end
					if mw.ustring.find(IPA, symbol) then
						require("Module:debug").track("IPA/" .. lang .. "/" .. category)
					end
				end
			end
		end
	end
end

return export