<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tes5.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3AChak-nouns</id>
	<title>Module:Chak-nouns - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://tes5.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3AChak-nouns"/>
	<link rel="alternate" type="text/html" href="https://tes5.st34an.tech/index.php?title=Module:Chak-nouns&amp;action=history"/>
	<updated>2026-04-17T18:48:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://tes5.st34an.tech/index.php?title=Module:Chak-nouns&amp;diff=3249&amp;oldid=prev</id>
		<title>imported&gt;Juelos at 10:59, 10 May 2025</title>
		<link rel="alternate" type="text/html" href="https://tes5.st34an.tech/index.php?title=Module:Chak-nouns&amp;diff=3249&amp;oldid=prev"/>
		<updated>2025-05-10T10:59:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;export = {}&lt;br /&gt;
&lt;br /&gt;
require(&amp;quot;Module:Chak-nouns/format&amp;quot;)&lt;br /&gt;
require(&amp;quot;Module:Chak-nouns/data&amp;quot;)&lt;br /&gt;
m_params = require(&amp;quot;Module:Parameters&amp;quot;)&lt;br /&gt;
m_vars = require(&amp;quot;Module:Variables&amp;quot;)&lt;br /&gt;
m_cu = require(&amp;quot;Module:Chak-utilities&amp;quot;)&lt;br /&gt;
m_stru = require(&amp;quot;Module:String utilities&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
function export.get_forms(root_str,manual)&lt;br /&gt;
&lt;br /&gt;
	local forms = {}&lt;br /&gt;
	local prefixes = {}&lt;br /&gt;
	local codas = {}&lt;br /&gt;
	&lt;br /&gt;
	local root = m_cu.parse_root(root_str,true)&lt;br /&gt;
&lt;br /&gt;
	if root == nil or #root == 0 then&lt;br /&gt;
		error(&amp;quot;No root provided.&amp;quot;)&lt;br /&gt;
	elseif string.find(root[#root],&amp;quot;[&amp;quot;..VOWELS..&amp;quot;]&amp;quot;) then&lt;br /&gt;
		error (&amp;quot;Invalid root: &amp;quot;..root_str)&lt;br /&gt;
	else&lt;br /&gt;
			&lt;br /&gt;
		if #root == 1 then --Root with no vowels&lt;br /&gt;
			local mods = mw.text.split(root[1],&amp;quot;-&amp;quot;)&lt;br /&gt;
			codas[&amp;quot;nom&amp;quot;] = &amp;#039;i&amp;#039;..mods[2]&lt;br /&gt;
			codas[&amp;quot;gen&amp;quot;] = mods[2]&lt;br /&gt;
			codas[&amp;quot;acc.sg&amp;quot;] = mods[2]&lt;br /&gt;
			codas[&amp;quot;acc.pl&amp;quot;] = mods[2]&lt;br /&gt;
			forms[&amp;quot;nom.sg&amp;quot;] = mods[1]..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;i&amp;quot;..(mods[3] or mods[2])&lt;br /&gt;
			forms[&amp;quot;nom.pl&amp;quot;] = mods[1]..&amp;#039;a&amp;#039;..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;i&amp;quot;..(mods[3] or mods[2])&lt;br /&gt;
			forms[&amp;quot;acc.sg&amp;quot;] = &amp;quot;a&amp;quot;..mods[1]..mods[2]..&amp;quot;a&amp;quot;..(mods[3] or &amp;#039;&amp;#039;)&lt;br /&gt;
			forms[&amp;quot;acc.pl&amp;quot;] = mods[1]..&amp;quot;a&amp;quot;..mods[2]..(mods[3] or &amp;#039;&amp;#039;)..((mods[3] and &amp;#039;a&amp;#039;) or &amp;#039;&amp;#039;)&lt;br /&gt;
			forms[&amp;quot;gen.sg&amp;quot;] = mods[1]..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;a&amp;quot;..(mods[3] or mods[2])&lt;br /&gt;
			forms[&amp;quot;gen.pl&amp;quot;] = mods[1]..&amp;#039;a&amp;#039;..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;a&amp;quot;..(mods[3] or mods[2])&lt;br /&gt;
			forms[&amp;quot;loc.sg&amp;quot;] = &amp;quot;un-&amp;quot;..mods[1]..((mods[3] and &amp;#039;a&amp;#039;) or &amp;#039;&amp;#039;)..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;i&amp;quot;..(mods[3] or mods[2])&lt;br /&gt;
			forms[&amp;quot;loc.pl&amp;quot;] = &amp;quot;un-&amp;quot;..mods[1]..((mods[3] and &amp;#039;aa&amp;#039;) or &amp;#039;&amp;#039;)..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;i&amp;quot;..(mods[3] or mods[2])&lt;br /&gt;
			forms[&amp;quot;all.sg&amp;quot;] = &amp;quot;a-&amp;quot;..mods[1]..mods[2]..&amp;quot;a&amp;quot;..(mods[3] or &amp;#039;&amp;#039;)&lt;br /&gt;
			forms[&amp;quot;all.pl&amp;quot;] = &amp;quot;a-&amp;quot;..mods[1]..&amp;quot;a&amp;quot;..mods[2]..(mods[3] or &amp;#039;&amp;#039;)..((mods[3] and &amp;#039;a&amp;#039;) or &amp;#039;&amp;#039;)&lt;br /&gt;
			forms[&amp;quot;abl.sg&amp;quot;] = &amp;quot;is-&amp;quot;..mods[1]..((mods[3] and &amp;#039;a&amp;#039;) or &amp;#039;&amp;#039;)..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;a&amp;quot;..(mods[3] or mods[2])&lt;br /&gt;
			forms[&amp;quot;abl.pl&amp;quot;] = &amp;quot;is-&amp;quot;..mods[1]..((mods[3] and &amp;#039;aa&amp;#039;) or &amp;#039;&amp;#039;)..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;a&amp;quot;..(mods[3] or mods[2])&lt;br /&gt;
--		elseif #root == 2 then -- Root with V+ then C+&lt;br /&gt;
				&lt;br /&gt;
		else &lt;br /&gt;
			local tail_str = root[#root]&lt;br /&gt;
			local mods = mw.text.split(tail_str,&amp;quot;-&amp;quot;)&lt;br /&gt;
			table.remove(root,#root)&lt;br /&gt;
			prefixes[&amp;quot;loc&amp;quot;] = (string.find(root[1],&amp;quot;[aeiou]&amp;quot;) and &amp;quot;n&amp;quot;) or &amp;quot;un-&amp;quot;&lt;br /&gt;
			prefixes[&amp;quot;all&amp;quot;] = (string.find(root[1],&amp;quot;[aeiou]&amp;quot;) and &amp;quot;h&amp;quot;) or &amp;quot;a-&amp;quot;&lt;br /&gt;
			prefixes[&amp;quot;abl&amp;quot;] = (string.find(root[1],&amp;quot;[aeiou]&amp;quot;) and &amp;quot;s&amp;quot;) or &amp;quot;is-&amp;quot;&lt;br /&gt;
			&lt;br /&gt;
			local vowel = root[#root]&lt;br /&gt;
			local cond_vowel = m_cu.condense_vowels(vowel)&lt;br /&gt;
			local pl_vowel = string.sub(&amp;quot;a&amp;quot;..vowel,1,2)&lt;br /&gt;
			local cond_pl_vowel = m_cu.condense_vowels(pl_vowel)&lt;br /&gt;
			table.remove(root,#root)&lt;br /&gt;
			&lt;br /&gt;
			codas[&amp;quot;nom&amp;quot;] = mods[1]..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;i&amp;quot;..(mods[3] or mods[2] or &amp;#039;&amp;#039;)&lt;br /&gt;
			codas[&amp;quot;gen&amp;quot;] = mods[1]..((mods[3] and mods[2]) or &amp;#039;&amp;#039;)..&amp;quot;a&amp;quot;..(mods[3] or mods[2] or &amp;#039;&amp;#039;)&lt;br /&gt;
			codas[&amp;quot;acc.sg&amp;quot;] = mods[1]..(mods[2] or &amp;#039;&amp;#039;)..((mods[2] and m_cu.degeminate_char(cond_vowel)) or &amp;#039;&amp;#039;)..(mods[3] or &amp;#039;&amp;#039;)&lt;br /&gt;
			codas[&amp;quot;acc.pl&amp;quot;] = mods[1]..(mods[2] or &amp;#039;&amp;#039;)..((mods[2] and &amp;#039;a&amp;#039;) or &amp;#039;&amp;#039;)..(mods[3] or &amp;#039;&amp;#039;)&lt;br /&gt;
			&lt;br /&gt;
			if #root == 1 and m_cu.is_geminate(root[1]) then &lt;br /&gt;
				forms[&amp;quot;nom.sg&amp;quot;] = string.sub(cond_vowel,1,1)..root[1]..cond_vowel..codas[&amp;quot;nom&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;nom.pl&amp;quot;] = string.sub(pl_vowel,1,1)..root[1]..pl_vowel..codas[&amp;quot;nom&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;acc.sg&amp;quot;] = string.sub(cond_vowel,1,1)..root[1]..m_cu.degeminate_char(cond_vowel)..codas[&amp;quot;acc.sg&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;acc.pl&amp;quot;] = string.sub(cond_pl_vowel,1,1)..root[1]..cond_pl_vowel..codas[&amp;quot;acc.pl&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;gen.sg&amp;quot;] = string.sub(cond_vowel,1,1)..root[1]..cond_vowel..codas[&amp;quot;gen&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;gen.pl&amp;quot;] = string.sub(pl_vowel,1,1)..root[1]..pl_vowel..codas[&amp;quot;gen&amp;quot;]&lt;br /&gt;
				root[1] = m_cu.degeminate_char(root[1])&lt;br /&gt;
			else&lt;br /&gt;
				local concat_root = table.concat(root)&lt;br /&gt;
				forms[&amp;quot;nom.sg&amp;quot;] = concat_root..vowel..codas[&amp;quot;nom&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;nom.pl&amp;quot;] = concat_root..pl_vowel..codas[&amp;quot;nom&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;acc.sg&amp;quot;] = concat_root..m_cu.degeminate_char(cond_vowel)..codas[&amp;quot;acc.sg&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;acc.pl&amp;quot;] = concat_root..cond_pl_vowel..codas[&amp;quot;acc.pl&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;gen.sg&amp;quot;] = concat_root..vowel..codas[&amp;quot;gen&amp;quot;]&lt;br /&gt;
				forms[&amp;quot;gen.pl&amp;quot;] = concat_root..pl_vowel..codas[&amp;quot;gen&amp;quot;]&lt;br /&gt;
			end&lt;br /&gt;
			local concat_root = table.concat(root) --I am doing some trickery here with concat_root being scoped at two levels. Bad coding practice, but gets the job done for now.&lt;br /&gt;
			forms[&amp;quot;loc.sg&amp;quot;] = prefixes[&amp;quot;loc&amp;quot;]..concat_root..vowel..codas[&amp;quot;nom&amp;quot;]&lt;br /&gt;
			forms[&amp;quot;loc.pl&amp;quot;] = prefixes[&amp;quot;loc&amp;quot;]..concat_root..pl_vowel..codas[&amp;quot;nom&amp;quot;]&lt;br /&gt;
			forms[&amp;quot;all.sg&amp;quot;] = prefixes[&amp;quot;all&amp;quot;]..concat_root..m_cu.degeminate_char(cond_vowel)..codas[&amp;quot;acc.sg&amp;quot;]&lt;br /&gt;
			forms[&amp;quot;all.pl&amp;quot;] = prefixes[&amp;quot;all&amp;quot;]..concat_root..cond_pl_vowel..codas[&amp;quot;acc.pl&amp;quot;]&lt;br /&gt;
			forms[&amp;quot;abl.sg&amp;quot;] = prefixes[&amp;quot;abl&amp;quot;]..concat_root..vowel..codas[&amp;quot;gen&amp;quot;]&lt;br /&gt;
			forms[&amp;quot;abl.pl&amp;quot;] = prefixes[&amp;quot;abl&amp;quot;]..concat_root..pl_vowel..codas[&amp;quot;gen&amp;quot;]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k,v in pairs(forms) do&lt;br /&gt;
		forms[k] = m_cu.assimilate(v)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k,v in pairs(manual) do&lt;br /&gt;
		if manual[k] ~= nil then&lt;br /&gt;
			forms[k] = v&lt;br /&gt;
		end		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return forms&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.show_declension(root,mod,others)&lt;br /&gt;
    mod = mod or &amp;#039;&amp;#039;&lt;br /&gt;
	local forms = {}&lt;br /&gt;
&lt;br /&gt;
	--forms = export.get_forms(root,mod,stems,others)&lt;br /&gt;
	forms = export.get_forms(root..mod,others)&lt;br /&gt;
&lt;br /&gt;
	return m_stru.format(decl_table,forms)&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.declension(frame)&lt;br /&gt;
&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {alias_of = &amp;quot;root&amp;quot;},&lt;br /&gt;
		[2] = {alias_of = &amp;quot;mod&amp;quot;},&lt;br /&gt;
		[&amp;quot;root&amp;quot;] = { default = m_vars.var(&amp;#039;chak-root&amp;#039;) },&lt;br /&gt;
		[&amp;quot;mod&amp;quot;] = { default = m_vars.var(&amp;#039;chak-mod&amp;#039;) },&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local frame_args = frame:getParent().args&lt;br /&gt;
	local args,others = m_params.process(frame_args,params,true)&lt;br /&gt;
	&lt;br /&gt;
	return export.show_declension(args[&amp;quot;root&amp;quot;],args[&amp;quot;mod&amp;quot;],others)&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.test(root,mod)&lt;br /&gt;
	&lt;br /&gt;
	return export.show_declension(root,mod,{})&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.headword(frame)&lt;br /&gt;
&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {alias_of = &amp;quot;root&amp;quot;},&lt;br /&gt;
		[2] = {alias_of = &amp;quot;mod&amp;quot;},&lt;br /&gt;
		[&amp;quot;root&amp;quot;] = { default = m_vars.var(&amp;#039;chak-root&amp;#039;)},&lt;br /&gt;
		[&amp;quot;mod&amp;quot;] = { default = m_vars.var(&amp;#039;chak-mod&amp;#039;) },&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local frame_args = frame:getParent().args&lt;br /&gt;
	local args,others = m_params.process(frame_args,params,true)&lt;br /&gt;
	&lt;br /&gt;
	local forms = export.get_forms(args[&amp;quot;root&amp;quot;]..(args[&amp;quot;mod&amp;quot;] or &amp;#039;&amp;#039;),others)&lt;br /&gt;
&lt;br /&gt;
	local output = &amp;quot;&amp;quot;&lt;br /&gt;
	output = output..&amp;quot;(&amp;#039;&amp;#039;nominative plural&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;quot;..m_cu.l(forms[&amp;quot;nom.pl&amp;quot;])&lt;br /&gt;
	output = output..&amp;quot;&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;accusative plural&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;quot;..m_cu.l(forms[&amp;quot;acc.pl&amp;quot;])&lt;br /&gt;
    output = output..&amp;quot;&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;locative singular&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;quot;..m_cu.l(forms[&amp;quot;loc.sg&amp;quot;])&lt;br /&gt;
    output = output..&amp;quot;&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;allative singular&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;quot;..m_cu.l(forms[&amp;quot;all.sg&amp;quot;])&lt;br /&gt;
	output = output..&amp;quot;&amp;#039;&amp;#039;&amp;#039;)&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>imported&gt;Juelos</name></author>
	</entry>
</feed>