Module:hi-accord

Ce module a pour but d’afficher les infoboites de flexion en hindi.

Il utilise la fonction frame:getParent, il ne peut donc être appelé que par un modèle.

Voir le modèle {{hi-accord}} pour la description des paramètres.

info Documentation du Module:hi-accord : v · d · m · h.


local p={}

function exception(mot,liste)
-- Teste si le mot appartient à une liste d'exceptions.
	local resultat = false
    local n = #liste
	for i = 1,n do
		if mot==liste[i] then
			resultat=true
			break
		end
	end
	return resultat
end

function declinaisons_m_aa_aa(singDir,transSingDir)
-- noms masculins finissant par ा (ā) et le conservant après ajout de la désinence.
	local pd=singDir
	local so=singDir
	local po=singDir.."ओं"
	local sv=singDir
	local pv=singDir.."ओ"
	local tpd=transSingDir
	local tso=transSingDir
	local tpo=transSingDir.."õ"
	local tsv=transSingDir
	local tpv=transSingDir.."o"
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_m_aa(singDir,transSingDir)
-- noms masculins finissant par ा ou आ (ā)
	local pd=mw.ustring.sub(singDir,1,-2).."े"
	local so=mw.ustring.sub(singDir,1,-2).."े"
	local po=mw.ustring.sub(singDir,1,-2).."ों"
	local sv=mw.ustring.sub(singDir,1,-2).."े"
	local pv=mw.ustring.sub(singDir,1,-2).."ो"
	local tpd=mw.ustring.sub(transSingDir,1,-2).."e"
	local tso=mw.ustring.sub(transSingDir,1,-2).."e"
	local tpo=mw.ustring.sub(transSingDir,1,-2).."õ"
	local tsv=mw.ustring.sub(transSingDir,1,-2).."e"
	local tpv=mw.ustring.sub(transSingDir,1,-2).."o"
	if mw.ustring.sub(singDir,-1) == "आ" then
		pd=mw.ustring.sub(singDir,1,-2).."ए"
		so=mw.ustring.sub(singDir,1,-2).."ए"
		po=mw.ustring.sub(singDir,1,-2).."ओं"
		sv=mw.ustring.sub(singDir,1,-2).."ए"
		pv=mw.ustring.sub(singDir,1,-2).."ओ"
	end
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_m_i(singDir,transSingDir)
-- noms masculins finissant par ि (i)
	local pd=singDir
	local so=singDir
	local po=singDir.."यों"
	local sv=singDir
	local pv=singDir.."यो"
	local tpd=transSingDir
	local tso=transSingDir
	local tpo=transSingDir.."yõ"
	local tsv=transSingDir
	local tpv=transSingDir.."yo"
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_m_ii(singDir,transSingDir)
-- noms masculins finissant par  ी  ou ई (ī)
	local pd=singDir
	local so=singDir
	local po=mw.ustring.sub(singDir,1,-2).."ियों"
	local sv=singDir
	local pv=mw.ustring.sub(singDir,1,-2).."ियो"
	local tpd=transSingDir
	local tso=transSingDir
	local tpo=mw.ustring.sub(transSingDir,1,-2).."iyõ"
	local tsv=transSingDir
	local tpv=mw.ustring.sub(transSingDir,1,-2).."iyo"
	if mw.ustring.sub(singDir,-1) == "ई" then -- par exemple भाई
		po=mw.ustring.sub(singDir,1,-2).."इयों"
		pv=mw.ustring.sub(singDir,1,-2).."इओ"
	end
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_m_u(singDir,transSingDir)
-- noms masculins finissant par ु (u)
	local pd=singDir
	local so=singDir
	local po=singDir.."ओं"
	local sv=singDir
	local pv=singDir.."ओ"
	local tpd=transSingDir
	local tso=transSingDir
	local tpo=transSingDir.."õ"
	local tsv=transSingDir
	local tpv=transSingDir.."o"
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_m_uu(singDir,transSingDir)
-- noms masculins finissant par  ू  ou ऊ (ū)
	local pd=singDir
	local so=singDir
	local po=mw.ustring.sub(singDir,1,-2).."ुओं"
	local sv=singDir
	local pv=mw.ustring.sub(singDir,1,-2).."ुओ"
	local tpd=transSingDir
	local tso=transSingDir
	local tpo=mw.ustring.sub(transSingDir,1,-2).."uõ"
	local tsv=transSingDir
	local tpv=mw.ustring.sub(transSingDir,1,-2).."uo"
	if mw.ustring.sub(singDir,-1) == "ऊ" then -- par exemple ताऊ (tāū)
		po=mw.ustring.sub(singDir,1,-2).."उओं"
		pv=mw.ustring.sub(singDir,1,-2).."उओ"
	end
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_m_v_aan(singDir,transSingDir)
-- noms masculins finissant par une voyelle suivie de आँ (ā̃)
	local pd=mw.ustring.sub(singDir,1,-3).."एँ"
	local so=mw.ustring.sub(singDir,1,-3).."एँ"
	local po=mw.ustring.sub(singDir,1,-3).."ओं"
	local sv=mw.ustring.sub(singDir,1,-3).."एँ"
	local pv=mw.ustring.sub(singDir,1,-3).."ओं"
	local tpd=mw.ustring.sub(transSingDir,1,-3).."ẽ"
	local tso=mw.ustring.sub(transSingDir,1,-3).."ẽ"
	local tpo=mw.ustring.sub(transSingDir,1,-3).."õ"
	local tsv=mw.ustring.sub(transSingDir,1,-3).."ẽ"
	local tpv=mw.ustring.sub(transSingDir,1,-3).."õ"
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_m_c_aan(singDir,transSingDir)
-- noms masculins finissant par une consonne suivie de ाँ (ā̃)
	local pd=mw.ustring.sub(singDir,1,-3).."ें"
	local so=mw.ustring.sub(singDir,1,-3).."ें"
	local po=mw.ustring.sub(singDir,1,-3).."ों"
	local sv=mw.ustring.sub(singDir,1,-3).."ें"
	local pv=mw.ustring.sub(singDir,1,-3).."ों"
	local tpd=mw.ustring.sub(transSingDir,1,-3).."ẽ"
	local tso=mw.ustring.sub(transSingDir,1,-3).."ẽ"
	local tpo=mw.ustring.sub(transSingDir,1,-3).."õ"
	local tsv=mw.ustring.sub(transSingDir,1,-3).."ẽ"
	local tpv=mw.ustring.sub(transSingDir,1,-3).."õ"
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_m(singDir,transSingDir)
-- noms masculins finissant par une consonne
	local pd=singDir
	local so=singDir
	local po=singDir.."ों"
	local sv=singDir
	local pv=singDir.."ो"
	local tpd=transSingDir
	local tso=transSingDir
	local tpo=transSingDir.."õ"
	local tsv=transSingDir
	local tpv=transSingDir.."o"
	if mw.ustring.sub(transSingDir,-1) == "a" then -- par exemple मित्र (mitra)
		tpo=mw.ustring.sub(transSingDir,1,-2).."õ"
		tpv=mw.ustring.sub(transSingDir,1,-2).."o"
	end
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_f_iyaa(singDir,transSingDir)
-- noms féminins finissant par िया (iyā)
	local pd=singDir.."ँ"
	local so=singDir
	local po=mw.ustring.sub(singDir,1,-2).."ों"
	local sv=singDir
	local pv=mw.ustring.sub(singDir,1,-2).."ो"
	local tpd=mw.ustring.sub(transSingDir,1,-2).."ā̃"
	local tso=transSingDir
	local tpo=mw.ustring.sub(transSingDir,1,-2).."õ"
	local tsv=transSingDir
	local tpv=mw.ustring.sub(transSingDir,1,-2).."o"
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_f_aa(singDir,transSingDir)
-- noms féminins finissant par ा ou आ (ā)
	local pd=singDir.."एँ"
	local so=singDir
	local po=singDir.."ओं"
	local sv=singDir
	local pv=singDir.."ओ"
	local tpd=transSingDir.."ẽ"
	local tso=transSingDir
	local tpo=transSingDir.."õ"
	local tsv=transSingDir
	local tpv=transSingDir.."o"
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_f_i(singDir,transSingDir)
-- noms féminins finissant par ि (i)
	local pd=singDir.."याँ"
	local so=singDir
	local po=singDir.."यों"
	local sv=singDir
	local pv=singDir.."यो"
	local tpd=transSingDir.."yā̃"
	local tso=transSingDir
	local tpo=transSingDir.."yõ"
	local tsv=transSingDir
	local tpv=transSingDir.."yo"
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_f_ii(singDir,transSingDir)
-- noms féminins finissant par ी ou ई (ī)
	local pd=mw.ustring.sub(singDir,1,-2).."ियाँ"
	local so=singDir
	local po=mw.ustring.sub(singDir,1,-2).."ियों"
	local sv=singDir
	local pv=mw.ustring.sub(singDir,1,-2).."ियो"
	local tpd=mw.ustring.sub(transSingDir,1,-2).."iyā̃"
	local tso=transSingDir
	local tpo=mw.ustring.sub(transSingDir,1,-2).."iyõ"
	local tsv=transSingDir
	local tpv=mw.ustring.sub(transSingDir,1,-2).."iyo"
	if mw.ustring.sub(singDir,-1) == "ई" then -- par exemple ताई (tāī)
		pd=mw.ustring.sub(singDir,1,-2).."इयाँ"
		po=mw.ustring.sub(singDir,1,-2).."इयों"
		pv=mw.ustring.sub(singDir,1,-2).."इयो"
	end
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_f_uu(singDir,transSingDir)
-- noms féminins finissant par ू ou ऊ (ū)
	local pd=mw.ustring.sub(singDir,1,-2).."ुएँ"
	local so=singDir
	local po=mw.ustring.sub(singDir,1,-2).."ुओं"
	local sv=singDir
	local pv=mw.ustring.sub(singDir,1,-2).."ुओ"
	local tpd=mw.ustring.sub(transSingDir,1,-2).."uẽ"
	local tso=transSingDir
	local tpo=mw.ustring.sub(transSingDir,1,-2).."uõ"
	local tsv=transSingDir
	local tpv=mw.ustring.sub(transSingDir,1,-2).."uo"
	if mw.ustring.sub(singDir,-1) == "ऊ" then
		pd=mw.ustring.sub(singDir,1,-2).."उएँ"
		po=mw.ustring.sub(singDir,1,-2).."उओं"
		pv=mw.ustring.sub(singDir,1,-2).."उओ"
	end
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_f(singDir,transSingDir,TPD)
-- noms féminins finissant par une consonne
	local pd=singDir.."ें"
	local so=singDir
	local po=singDir.."ों"
	local sv=singDir
	local pv=singDir.."ो"
	local tpd=transSingDir.."ẽ"
	local tso=transSingDir
	local tpo=transSingDir.."õ"
	local tsv=transSingDir
	local tpv=transSingDir.."o"
	if TPD then -- par exemple औरत (aurat) औरतें (aurtẽ)
		tpd=TPD
		tpo=mw.ustring.sub(TPD,1,-2).."õ"
		tpv=mw.ustring.sub(TPD,1,-2).."o"
	end
	return pd, so, po, sv, pv, tpd, tso, tpo, tsv, tpv
end

function declinaisons_adj(singDir,transSingDir)
-- adjectifs finissant par ा (ā) ou ाँ (ā̃)
	if mw.ustring.sub(singDir,-1) == "ा" or mw.ustring.sub(singDir,-1) == "आ" then
		local radical = mw.ustring.sub(singDir,1,-2)
		local transRadical = mw.ustring.sub(transSingDir,1,-2)
		local pd=radical.."े"
		local tpd=transRadical.."e"
		local fs =radical.."ी"
		local tfs =transRadical.."ī"
		if mw.ustring.sub(singDir,-2) == "या" then -- par exemple नया
			pd = mw.ustring.sub(singDir,1,-3).."ए"
			tpd = mw.ustring.sub(transSingDir,1,-3).."e"
			fs = mw.ustring.sub(singDir,1,-3).."ई"
			tfs = mw.ustring.sub(transSingDir,1,-3).."ī"
		elseif mw.ustring.sub(singDir,-1) == "या" then
			pd = radical.."ए"
			fd = radical.."ई"
		end
		return pd,pd,pd,pd,pd,tpd,tpd,tpd,tpd,tpd,fs,fs,fs,fs,tfs,tfs,tfs,tfs
	elseif mw.ustring.sub(singDir,-2) == "ाँ" then
		local radical = mw.ustring.sub(singDir,1,-3)
		local transRadical = mw.ustring.sub(transSingDir,1,-3)
		local pd=radical.."ें"
		local tpd=transRadical.."ẽ"
		local fs =radical.."ीं"
		local tfs =transRadical.."ī̃"
		return pd,pd,pd,pd,pd,tpd,tpd,tpd,tpd,tpd,fs,fs,fs,fs,tfs,tfs,tfs,tfs
	end
end

function p.boite(frame)
	local args = frame:getParent().args
	local genre = args[1]
	local singDir = args[2]
	local transSingDir = args[3]
	local vocatif = args["voc"]
	local TPD = args["TPD"]
	local plurDir,singObl,plurObl,singVoc,plurVoc,
	transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
	nil,nil,nil,nil,nil,nil,nil,nil,nil,nil
	local listeaa={"अधिवक्ता","अपहर्ता","अभिनेता","अभियोक्ता","ऋणदाता","कर्ता","कार्यकर्ता","ख़लीफ़ा","जीजा","ज्ञाता","दाता",
	"दादा","नाना","निर्माता","पिता","प्रदाता","फूफा","दाता","देवता","मतदाता","महाधिवक्ता","मामा","मौसा","यज्ञकर्ता","योद्धा",
	"राजा","राष्ट्रपिता","वर्मा","विजेता","संवाददाता"}
	if genre == "m" or genre == "f" then
		if genre == "m" then
            if mw.ustring.sub(singDir,-1) == "ा" or mw.ustring.sub(singDir,-1) == "आ" then
				if exception(singDir,listeaa) then
					plurDir,singObl,plurObl,singVoc,plurVoc,
					transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
					declinaisons_m_aa_aa(singDir,transSingDir)
				else
					plurDir,singObl,plurObl,singVoc,plurVoc,
					transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
					declinaisons_m_aa(singDir,transSingDir)
				end
            elseif mw.ustring.sub(singDir,-1) == "ि" then
				plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_m_i(singDir,transSingDir)
            elseif mw.ustring.sub(singDir,-1) == "ी" or mw.ustring.sub(singDir,-1) == "ई" then
				plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_m_ii(singDir,transSingDir)
            elseif mw.ustring.sub(singDir,-1) == "ु" then
				plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_m_u(singDir,transSingDir)
            elseif mw.ustring.sub(singDir,-1) == "ू" or mw.ustring.sub(singDir,-1) == "ऊ" then
				plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_m_uu(singDir,transSingDir)
			elseif mw.ustring.sub(singDir,-2) == "आँ" then
				plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_m_v_aan(singDir,transSingDir)
			elseif mw.ustring.sub(singDir,-2) == "ाँ" then
				plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_m_c_aan(singDir,transSingDir)
			else
				plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_m(singDir,transSingDir)
			end
		else -- genre == "f"
            if mw.ustring.sub(singDir,-3) == "िया" then
				plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_f_iyaa(singDir,transSingDir)
            elseif mw.ustring.sub(singDir,-1) == "ा" or mw.ustring.sub(singDir,-1) == "आ" then
                plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_f_aa(singDir,transSingDir)
            elseif mw.ustring.sub(singDir,-1) == "ि" then
                plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_f_i(singDir,transSingDir)
            elseif mw.ustring.sub(singDir,-1) == "ी"  or mw.ustring.sub(singDir,-1) == "ई" then
                plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_f_ii(singDir,transSingDir)
            elseif mw.ustring.sub(singDir,-1) == "ू" or mw.ustring.sub(singDir,-1) == "ऊ" then
                plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_f_uu(singDir,transSingDir)
            else
                plurDir,singObl,plurObl,singVoc,plurVoc,
				transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
				declinaisons_f(singDir,transSingDir,TPD)
            end
		end
		local txt =
		'{| class="flextable"\n'..
		'| class="invisible" |\n'..
		'! Singulier\n'..
		'! Pluriel\n'..
		'|-\n'..
		'! Direct\n'..
		'| [[' .. singDir .. '#hi|' .. singDir .. ']]<br />('..transSingDir..')\n'..
		'| [[' .. plurDir .. '#hi|' .. plurDir .. ']]<br />('..transPlurDir..')\n'..
		'|-\n'..
		'! Oblique\n'..
		'| [[' .. singObl .. '#hi|' .. singObl .. ']]<br />('..transSingObl..')\n'..
		'| [[' .. plurObl .. '#hi|' .. plurObl .. ']]<br />('..transPlurObl..')\n'
		if vocatif then
			txt = txt..
			'|-\n'..
			'! Vocatif\n'..
			'| [[' .. singVoc .. '#hi|' .. singVoc .. ']]<br />('..transSingVoc..')\n'..
			'| [[' .. plurVoc .. '#hi|' .. plurVoc .. ']]<br />('..transPlurVoc..')\n'
		end	
		txt = txt..
		'|}'
		return txt
    elseif genre == "adj" or genre == "mf" then
		local fSing,fPlurDir,fPlurObl,fPlurVoc,
		fTransSing,fTransPlurDir,fTransPlurObl,fTransPlurVoc=
		nil,nil,nil,nil,nil,nil,nil,nil
		if genre == "adj" then
			plurDir,singObl,plurObl,singVoc,plurVoc,
			transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc,
			fSing,fPlurDir,fPlurObl,fPlurVoc,
			fTransSing,fTransPlurDir,fTransPlurObl,fTransPlurVoc=
			declinaisons_adj(singDir,transSingDir)
		else -- genre == "mf"
            if mw.ustring.sub(singDir,-1) == "ा" then
				if exception(singDir,listeaa) then
					plurDir,singObl,plurObl,singVoc,plurVoc,
					transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
					declinaisons_m_aa_aa(singDir,transSingDir)
				else
					plurDir,singObl,plurObl,singVoc,plurVoc,
					transPlurDir,transSingObl,transPlurObl,transSingVoc,transPlurVoc=
					declinaisons_m_aa(singDir,transSingDir)
				end
				fSing = mw.ustring.sub(singDir,1,-2).."ी"
				fTransSing = mw.ustring.sub(transSingDir,1,-2).."ī"
				fPlurDir,x,fPlurObl,x,fPlurVoc,
				fTransPlurDir,x,fTransPlurObl,x,fTransPlurVoc=
				declinaisons_f_ii(fSing,fTransSing)
			end
		end
		
		local txt =
		'{| class="flextable"\n'..
		'| class="invisible" |\n'..
		'! colspan="2" | Masculin\n'..
		'! colspan="2" | Féminin\n'..
		'|-\n'..
		'| class="invisible" |\n'..
		'! Singulier\n'..
		'! Pluriel\n'..
		'! Singulier\n'..
		'! Pluriel\n'..
		'|-\n'..
		'! Direct\n'..
		'| [[' .. singDir .. '#hi|' .. singDir .. ']]<br />('..transSingDir..')\n'..
		'| [[' .. plurDir .. '#hi|' .. plurDir .. ']]<br />('..transPlurDir..')\n'..
		'| [[' .. fSing .. '#hi|' .. fSing .. ']]<br />('..fTransSing..')\n'..
		'| [[' .. fPlurDir .. '#hi|' .. fPlurDir .. ']]<br />('..fTransPlurDir..')\n'..
		'|-\n'..
		'! Oblique\n'..
		'| [[' .. singObl .. '#hi|' .. singObl .. ']]<br />('..transSingObl..')\n'..
		'| [[' .. plurObl .. '#hi|' .. plurObl .. ']]<br />('..transPlurObl..')\n'..
		'| [[' .. fSing .. '#hi|' .. fSing .. ']]<br />('..fTransSing..')\n'..
		'| [[' .. fPlurObl .. '#hi|' .. fPlurObl .. ']]<br />('..fTransPlurObl..')\n'
		if vocatif then
			txt = txt..
			'|-\n'..
			'! Vocatif\n'..
			'| [[' .. singVoc .. '#hi|' .. singVoc .. ']]<br />('..transSingVoc..')\n'..
			'| [[' .. plurVoc .. '#hi|' .. plurVoc .. ']]<br />('..transPlurVoc..')\n'..
			'| [[' .. fSing .. '#hi|' .. fSing .. ']]<br />('..fTransSing..')\n'..
			'| [[' .. fPlurVoc .. '#hi|' .. fPlurVoc .. ']]<br />('..fTransPlurVoc..')\n'
		end	
		txt = txt..
		'|}'
		return txt
	end
end

return p