Modul:lettgallisch.substantivflexion

Die Dokumentation für dieses Modul kann unter Modul:lettgallisch.substantivflexion/Doku erstellt werden

local flex = {}

-- optionale Parameter
-- args[1] = <Deklinationsform> {f,m}
-- args[2] = <Palatisierung> {0,1}
-- args["test"] == 1 zur Testausgabe

local function makeRow(head, sing, plur)
	local row = mw.html.create('tr')
	row
			:tag('td')
				:css('font-weight', 'bold')
				:css('background-color', '#F4F4F4')
				:wikitext(head)
				:done()
			:tag('td')
				:wikitext(sing)
				:done()
			:tag('td')
				:wikitext(plur)
				:done()
	return tostring(row)
end
local function makeTestRow(head, sing, plur, sing_t, plur_t)
	if sing~=sing_t then sing=sing .. " <font color=red>" .. sing_t .. "</font>" end 
	if plur~=plur_t then plur=plur .. " <font color=red>" .. plur_t .. "</font>" end 
	return tostring(makeRow(head, sing, plur))
end

function flex.deklination(frame)
	local stem = ""
	local args
	local pal = {}
	local depal = {}
	pal["c"] = "č"
	pal["d"] = "ž"
	pal["s"] = "š"
	pal["t"] = "š"
	pal["z"] = "ž"
	pal["l"] = "ļ"
	pal["n"] = "ņ"
	pal["sl"] = "šļ"
	pal["sn"] = "šņ"
	pal["sm"] = "šm"
	pal["zl"] = "žļ"
	pal["zn"] = "žņ"
	pal["kst"] = "kš"
	depal["ļ"] = "l"
	depal["ņ"] = "n"
    if frame == mw.getCurrentFrame() then
        args = frame:getParent().args
    else
        args = frame.args
    end
	local s = {}
	local p = {}
	local t = args["test"]
	local dk = args[1] or ""
	local root = mw.html.create('table')
	s[1] = args["Nominativ Singular"] or mw.title.getCurrentTitle().text
	e1 = mw.ustring.sub(s[1],-1)
	e2 = mw.ustring.sub(s[1],-2)

	if dk=="m3" then 
		stem = mw.ustring.sub(s[1],1,-3)
		s[2] = s[1]
		s[3] = stem .. "um"
		s[4] = stem .. "u"
		s[5] = stem .. "u"
		s[6] = stem .. "ū"
		s[7] = s[1]
	elseif (dk=="f") then
		stem = mw.ustring.sub(s[1],1,-2)
		s[2] = s[1]
		s[3] = stem .. "ei"
		s[4] = stem .. "i"
		s[5] = s[4]
		s[6] = stem .. "ī"
		s[7] = s[1]
		p[1] = s[1] .. ", " .. stem .. "is"
		p[3] = stem .. "im"
		p[4] = p[1]
		p[5] = p[3]
		p[6] = s[6] .. "s"
		p[7] = p[1]
		cons = mw.ustring.sub(stem,-1)
		cons2 = mw.ustring.sub(stem,-2)
		cons3 = mw.ustring.sub(stem,-3)
		p[2] = stem .. "u"
		if pal[cons] then
			p[2] = mw.ustring.sub(stem,1,-2) .. pal[cons] .. "u"
		end
		if pal[cons2] then
			p[2] = mw.ustring.sub(stem,1,-3) .. pal[cons2] .. "u"
		end
		if pal[cons3] then
			p[2] = mw.ustring.sub(stem,1,-4) .. pal[cons3] .. "u"
		end
	elseif dk=="m2" or ((e2=="is") and dk=="")  then 
		if (e2=="is") then stem = mw.ustring.sub(s[1],1,-3) else stem = mw.ustring.sub(s[1],1,-2) end
		s[2] = stem .. "a"
		s[3] = stem .. "am"
		s[4] = stem .. "i"
		s[5] = s[4]
		s[6] = stem .. "ī"
		s[7] = stem .. "i"
		p[1] = stem .. "i"
		p[2] = stem .. "u"
		p[6] = stem .. "ūs"
		cons = mw.ustring.sub(stem,-1)
		cons2 = mw.ustring.sub(stem,-2)
		if depal[cons] then 
			s[4] = mw.ustring.sub(stem,1,-2) .. depal[cons] .. "i"
			s[5] = s[4]
			s[6] = mw.ustring.sub(stem,1,-2) .. depal[cons] .. "ī"
			p[1] = s[4]
		end
		if pal[cons] then
			s[2] = mw.ustring.sub(stem,1,-2) .. pal[cons] .. "a"
			s[3] = mw.ustring.sub(stem,1,-2) .. pal[cons] .. "am"
			p[1] = mw.ustring.sub(stem,1,-2) .. pal[cons] .. "i"
			p[2] = mw.ustring.sub(stem,1,-2) .. pal[cons] .. "u"
			p[6] = mw.ustring.sub(stem,1,-2) .. pal[cons] .. "ūs"
		end
		if pal[cons2] then
			s[2] = mw.ustring.sub(stem,1,-3) .. pal[cons2] .. "a"
			s[3] = mw.ustring.sub(stem,1,-3) .. pal[cons2] .. "am"
			p[1] = mw.ustring.sub(stem,1,-3) .. pal[cons2] .. "i"
			p[2] = mw.ustring.sub(stem,1,-3) .. pal[cons2] .. "u"
			p[6] = mw.ustring.sub(stem,1,-3) .. pal[cons2] .. "ūs"
		end
		p[3] = p[1] .. "m"
		p[4] = p[2] .. "s"
		p[5] = p[3]
		p[7] = p[1]
	elseif (dk=="m1" or e1=="s" or e1=="š") then
		if e2=="ys" then stem = mw.ustring.sub(s[1],1,-3) else stem = mw.ustring.sub(s[1],1,-2) end
		s[2] = stem .. "a"
		s[3] = stem .. "am"
		s[4] = stem .. "u"
		s[5] = s[4]
		s[6] = stem .. "ā"
		s[7] = stem
		p[1] = stem .. "i"
		p[2] = stem .. "u"
		p[3] = stem .. "im"
		p[4] = stem .. "us"
		p[5] = p[3]
		p[6] = stem .. "ūs"
		p[7] = p[1]
	elseif (e1=="a") then
		stem = mw.ustring.sub(s[1],1,-2)
		cons = mw.ustring.sub(stem,-1)
		if mw.ustring.find("jļņ",cons,1,plain) then 
			if depal[cons] then
				s[2] = mw.ustring.sub(s[1],1,-3) .. depal[cons] .. "is, " .. stem .. cons .. "as" 
			else
				s[2] = stem .. "is, " .. stem .. "as"
			end
		else 
			s[2] = stem .. "ys, " .. stem .. "as" 
		end
		s[3] = stem .. "ai"
		s[4] = stem .. "u"
		s[5] = s[4]
		s[6] = stem .. "ā"
		s[7] = s[1]
		p[1] = s[2]
		p[2] = stem .. "u"
		p[3] = stem .. "om"
		p[4] = s[2]
		p[5] = p[3]
		p[6] = stem .. "uos"
		p[7] = p[1]
	elseif (e1=="e") then
		stem = mw.ustring.sub(s[1],1,-2)
		s[2] = stem .. "is, " .. stem .. "es"
		s[3] = stem .. "ei"
		s[4] = stem .. "i"
		s[5] = s[4]
		s[6] = stem .. "ē"
		s[7] = s[1]
		p[1] = s[2]
		p[3] = stem .. "em"
		p[4] = s[2]
		p[5] = p[3]
		p[6] = stem .. "ēs"
		p[7] = p[1]
		cons = mw.ustring.sub(stem,-1)
		cons2 = mw.ustring.sub(stem,-2)
		cons3 = mw.ustring.sub(stem,-3)
		if pal[cons] then
			p[2] = mw.ustring.sub(stem,1,-2) .. pal[cons] .. "u"
		end
		if pal[cons2] then
			p[2] = mw.ustring.sub(stem,1,-3) .. pal[cons2] .. "u"
		end
		if pal[cons3] then
			p[2] = mw.ustring.sub(stem,1,-4) .. pal[cons3] .. "u"
		end
	end

	local Sgdash = args["kSg"] and "&mdash;"
	local Pldash = args["kPl"] and "&mdash;"

	if t=="1" then 
		root:addClass('wikitable hintergrundfarbe2') 
		root:css('float','left')
	else
		root:addClass ('wikitable inflection-table float-right hintergrundfarbe2')
	end

	root:tag('tr')
			:css('background-color', '#F4F4F4')
			:tag('th')
				:wikitext('[[Hilfe:Kasus|Kasus]]')
				:done()
			:tag('th')
				:wikitext('[[Hilfe:Singular|Singular]]')
				:done()
			:tag('th')
				:wikitext('[[Hilfe:Plural|Plural]]')
				:done()
		if (t=="1") then root:wikitext(makeTestRow('[[Hilfe:Nominativ|Nominativ]]',args["Nominativ Singular"],args["Nominativ Plural"],s[1],p[1])) 
		else root:wikitext(makeRow(
			'[[Hilfe:Nominativ|Nominativ]]',
			Sgdash or flexlink(args["Nominativ Singular"] or mw.title.getCurrentTitle().text or s[1]),
			Pldash or flexlink(args["Nominativ Plural"] or p[1])))
		end
		if (t=="1") then root:wikitext(makeTestRow('[[Hilfe:Genitiv|Genitiv]]',args["Genitiv Singular"],args["Genitiv Plural"],s[2],p[2])) 
		else root:wikitext(makeRow(
			'[[Hilfe:Genitiv|Genitiv]]',
			Sgdash or flexlink(args["Genitiv Singular"] or s[2]),
			Pldash or flexlink(args["Genitiv Plural"] or p[2])))
		end
		if (t=="1") then root:wikitext(makeTestRow('[[Hilfe:Dativ|Dativ]]',args["Dativ Singular"],args["Dativ Plural"],s[3],p[3])) 
		else root:wikitext(makeRow(
			'[[Hilfe:Dativ|Dativ]]',
			Sgdash or flexlink(args["Dativ Singular"] or s[3]),
			Pldash or flexlink(args["Dativ Plural"] or p[3])))
		end
		if (t=="1") then root:wikitext(makeTestRow('[[Hilfe:Akkusativ|Akkusativ]]',args["Akkusativ Singular"],args["Akkusativ Plural"],s[4],p[4])) 
		else root:wikitext(makeRow(
			'[[Hilfe:Akkusativ|Akkusativ]]',
			Sgdash or flexlink(args["Akkusativ Singular"] or s[4]),
			Pldash or flexlink(args["Akkusativ Plural"] or p[4])))
		end
		if (t=="1") then root:wikitext(makeTestRow('[[Hilfe:Instrumental|Instrumental]]',args["Instrumental Singular"],args["Instrumental Plural"],s[5],p[5])) 
		else root:wikitext(makeRow(
			'[[Hilfe:Instrumental|Instrumental]]',
			Sgdash or flexlink(args["Instrumental Singular"] or s[5]),
			Pldash or flexlink(args["Instrumental Plural"] or p[5])))
		end
		if (t=="1") then root:wikitext(makeTestRow('[[Hilfe:Lokativ|Lokativ]]',args["Lokativ Singular"],args["Lokativ Plural"],s[6],p[6])) 
		else root:wikitext(makeRow(
			'[[Hilfe:Lokativ|Lokativ]]',
			Sgdash or flexlink(args["Lokativ Singular"] or s[6]),
			Pldash or flexlink(args["Lokativ Plural"] or p[6])))
		end
		if (t=="1") then root:wikitext(makeTestRow('[[Hilfe:Vokativ|Vokativ]]',args["Vokativ Singular"],args["Vokativ Plural"],s[7],p[7])) 
		else root:wikitext(makeRow(
			'[[Hilfe:Vokativ|Vokativ]]',
			Sgdash or flexlink(args["Vokativ Singular"] or s[7]),
			Pldash or flexlink(args["Vokativ Plural"] or p[7])))
		end
	return tostring(root)
end


function flexlink(str)
  if (not str) then str="" end
  str = "[[" .. str .. "]]"
  str = mw.ustring.gsub(str,", ","]]<br />[[")
  str = mw.ustring.gsub(str,"%[%[%(","([[")
  str = mw.ustring.gsub(str,"%)%]%]","]])")
  return str
end

return flex