Module:ug-decl-noun

From Wiktionary, the free dictionary
Jump to navigation Jump to search
This module needs documentation.
Please document this module by describing its purpose and usage on the documentation page.

local export = {}
local m_com = require("Module:ug-common")
local m_case = require("Module:ug-noun")
local lang = require("Module:languages").getByCode("ug")
local m_links = require("Module:links")
--local m_utilities = require("Module:utilities")

local match = mw.ustring.match

local PAGENAME = mw.title.getCurrentTitle().text

function export.get_args(frame)
	local args
	if frame.args["test"] then
		args = frame.args
	else
		args = frame:getParent().args
	end
end
	
function export.get_word(frame)
	local args
	if frame.args["test"] then
		args = frame.args
	else
		args = frame:getParent().args
	end
	local vv = args[1]
	local str = args["head"] or PAGENAME
	local base, v, c = m_com.getLast(str)
	if not v then return {} end
	local tongue = nil
	local v1 = v; v2 = v; c1 = c; c2 = c
	local categories = {}
	if vv then
		if (vv == "ا" or vv == "ە") and (v == "ې" or v == "ى") then
			if vv == "ا" then tongue = "back" end
			if vv == "ە" then tongue = "front" end
		else
	    	if c == "" then -- open
		    	if (v == "ا" or v == "ە") then
			    	v1 = vv
		    		if (vv == "ا" or vv == "ە") then
		    			c2 = "ي"
			    		table.insert(categories, "Uyghur nouns ending in " .. v .. " with no change")
		    		else
			    		table.insert(categories, "Uyghur nouns ending in " .. v .. " change to " .. vv)
		    		end
		    	elseif (v == "ې" or v == "ى") then
		    		v2 = vv
		    		table.insert(categories, "Uyghur nouns ending in " .. v .. " change to " .. vv)
		    	else
		    		v2 = vv; c2 = "ي"
		    	end
		    else --close
		    	if (v == "ا" or v == "ە") then
		    		v2 = vv
		    	elseif vv == "-" then
		    		v2 = ""
		    	end
		    end
		end
	else
		if c == "" and not (v == "ې" or v == "ى") then -- open
	    	c2 = "ي"
	    end
	end
	if not tongue then
		tongue = m_com.checkTongue(str)
	end
	
	--alll params
	local ae, iuu
	local ghqgk, ghg, dt
	local consonJsiz = "پتچخسشفقكھ"
	local consonJliqSpecial = "غگبد"
	
	if tongue == "front" or tongue == "f" then
		ae = "ە"
		ghg = "گ"
		if match(c, "[" .. consonJsiz .. consonJliqSpecial .. "]$" ) then
			ghqgk = "ك"
		else
			ghqgk = "گ"
		end
	elseif tongue == "back" or tongue == "b" then
		ae = "ا"
		ghg = "غ"
		if match(c, "[" .. consonJsiz .. consonJliqSpecial .. "]$" ) then
			ghqgk = "ق"
		else
			ghqgk = "غ"
		end
	end
	if match(c, "[" .. consonJsiz .. "]$" ) then
		dt = "ت"
	else
		dt = "د"
	end
	local temp_v = v2
	if temp_v == "" then temp_v = v end
	if match(temp_v, "[اەېى]$" ) then
		iuu = "ى"
	elseif match(temp_v, "[وۇ]$" ) then
		iuu = "ۇ"
	elseif match(temp_v, "[ۆۈ]$" ) then
		iuu = "ۈ"
	end
	return {str = str, base = base, tongue = tongue, c = c, v = v, c1=c1, v1 = v1, c2 = c2, v2 = v2, ae=ae, ghqgk = ghqgk, ghg=ghg, dt=dt, iuu=iuu,categories = categories }
end

function export.noun(frame)
	local word = export.get_word(frame)
	local data = export.createCases(word)
	export.link(data)
	return m_case.make_table(data)
end

function export.createCases(word)
	local data = {
		forms = {},
		}
	if word.tongue == "" or word.tongue == "central" or word.tongue == nil then
		-- cat no tongue
	else
		local root1 = word.base .. word.v1 .. word.c1
		local root2 = word.base .. word.v2 .. word.c2
		local iuu 
		if word.c2 == "" then iuu = "" else iuu = word.iuu end
		
		--imp
		export.createCase(data, "imp", word.str, root1, root1 .. "ل" .. word.ae .. "ر", word.ae, word.dt, word.ghqgk, word.ghg)
		--1st person singular
		local sl = root2 .. iuu .. "م"; local pl = root1  .. "لىرىم"
		export.createCase(data, "p1s", sl, sl, pl, word.ae, "د", word.ghg, word.ghg)
		--2nd person singular ordinar
		sl = root2 .. iuu .. "ڭ"; pl = root1  .. "لىرىڭ"
		export.createCase(data, "p2so", sl, sl, pl, word.ae, "د", word.ghg, word.ghg)
		--2nd person plural ordinar
		sl = root2 .. iuu .. "ڭلار"; pl = root1  .. "لىرىڭلار"
		export.createCase(data, "p2po", sl, sl, pl, word.ae, "د", word.ghg, word.ghg)
		--1st person plural
		if word.c2 == "" then sl = root1 .. "مىز" else sl = root2 .. "ىمىز" end
		pl = root1  .. "لىرىمىز"
		export.createCase(data, "p1p", sl, sl, pl, word.ae, "د", word.ghg, word.ghg)
		--2st person singular refined
		if word.c2 == "" then sl = root1 .. "ڭىز" else sl = root2 .. "ىڭىز" end
		pl = root1  .. "لىرىڭىز"
		export.createCase(data, "p2sr", sl, sl, pl, word.ae, "د", word.ghg, word.ghg)
		--2st person plural refined
		if word.c2 == "" then sl = root1 .. "ڭىزلار" else sl = root2 .. "ىڭىزلار" end
		pl = root1  .. "لىرىڭىزلار"
		export.createCase(data, "p2pr", sl, sl, pl, word.ae, "د", word.ghg, word.ghg)
		--2st person singular & plural respectful
		sl = root1 .. "لىرى"
		pl = root1 .. "لىرى"
		export.createCase(data, "p2spr", sl, sl, pl, word.ae, "د", word.ghg, word.ghg)
		--3st person
		if word.c2 == "" then sl = root1 .. "سى" else sl = root2 .. "ى" end
		pl = root1  .. "لىرى"
		export.createCase(data, "p3", sl, sl, pl, word.ae, "د", word.ghg, word.ghg)
	end
	return data
end

function export.createCase(data, short, str, root1, root2, ae, dt, ghqgk, ghg)
	data.forms[short .. "_nom_s"] = str
	data.forms[short .. "_nom_p"] = root2
	data.forms[short .. "_gen_s"] = root1 .. "نىڭ" ;
	data.forms[short .. "_gen_p"] = data.forms[short .. "_nom_p"] .. "نىڭ"
	if not short:find("_") then
		export.createCase(data, short .. "_gen", data.forms[short .. "_gen_s"] .. "كى",  data.forms[short .. "_gen_s"] .. "كى", data.forms[short .. "_gen_p"] .. "كى", "ە", "د","گ" , "گ")
	end
	data.forms[short .. "_acc_s"] = root1 .. "نى" ;
	data.forms[short .. "_acc_p"] = data.forms[short .. "_nom_p"] .. "نى"
	data.forms[short .. "_dat_s"] = root1 .. ghqgk .. ae ;
	data.forms[short .. "_dat_p"] = data.forms[short .. "_nom_p"] .. ghg .. ae
	data.forms[short .. "_loc_s"] = root1 .. dt .. ae ;
	data.forms[short .. "_loc_p"] = data.forms[short .. "_nom_p"]  .. "د" .. ae
	data.forms[short .. "_abl_s"] = root1 .. dt .. "ىن" ;
	data.forms[short .. "_abl_p"] = data.forms[short .. "_nom_p"]  .. "دىن"
	if short:find("_lqu") then
		data.forms[short .. "_lqu_s"] = "—" ;
		data.forms[short .. "_lqu_p"] = "—" ;
	else
		data.forms[short .. "_lqu_s"] = root1 .. dt .. "ىكى" ;
		data.forms[short .. "_lqu_p"] = data.forms[short .. "_nom_p"]  .. "دىكى"
		export.createCase(data, short .. "_lqu",  data.forms[short .. "_lqu_s"] , data.forms[short .. "_lqu_s"] , data.forms[short .. "_lqu_p"] , "ە", "د","گ" , "گ")
	end
	data.forms[short .. "_lim_s"] = root1 .. ghqgk .. "ىچە" ;
	data.forms[short .. "_lim_p"] = data.forms[short .. "_nom_p"]  .. ghg .. "ىچە"
	data.forms[short .. "_sem_s"] = root1 .. dt .. "ەك" ;
	data.forms[short .. "_sem_p"] = data.forms[short .. "_nom_p"]  .. "دەك"
	data.forms[short .. "_com_s"] = { root1 .. "چىلىك" , root1 .. "چە" }
	data.forms[short .. "_com_p"] = {data.forms[short .. "_nom_p"]  .. "چىلىك", data.forms[short .. "_nom_p"]  .. "چە"}
	data.forms[short .. "_rep_s"] = root1 .. "نىڭكى" ;
	data.forms[short .. "_rep_p"] = data.forms[short .. "_nom_p"] .. "نىڭكى"
	if not short:find("_") then
		export.createCase(data, short .. "_rep", data.forms[short .. "_rep_s"],  data.forms[short .. "_rep_s"], data.forms[short .. "_rep_p"] , "ە", "د","گ" , "گ")
	end
	return forms
end

function export.link(data)
	for key,val in pairs(data.forms) do
		if type(val) ~= "table" then
			val = {val}
		end
		local newval = {}
		for i,form in ipairs(val) do
			local newform = form
			if not mw.ustring.match(key,"nolink") and not mw.ustring.match(form,"—") then
				newform = m_links.full_link({term = form, lang = lang})
			end
			if mw.ustring.match(form, "—") then
				newform = "—"
			end
			table.insert(newval, newform)
		end
		data.forms[key] = table.concat(newval, " or ")
	end
end

return export