<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3AChak-utilities</id>
	<title>Module:Chak-utilities - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3AChak-utilities"/>
	<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Chak-utilities&amp;action=history"/>
	<updated>2026-04-10T22:44:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Chak-utilities&amp;diff=353&amp;oldid=prev</id>
		<title>Jsrs701: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Chak-utilities&amp;diff=353&amp;oldid=prev"/>
		<updated>2026-04-10T07:29:41Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:29, 10 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawikidb:diff:1.41:old-352:rev-353 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jsrs701</name></author>
	</entry>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Chak-utilities&amp;diff=352&amp;oldid=prev</id>
		<title>bob&gt;Vaxjedi at 00:18, 22 July 2024</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Chak-utilities&amp;diff=352&amp;oldid=prev"/>
		<updated>2024-07-22T00:18:05Z</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-utilities/data&amp;quot;)&lt;br /&gt;
local m_links = require(&amp;quot;Module:links&amp;quot;)&lt;br /&gt;
local m_utilities = require(&amp;quot;Module:utilities&amp;quot;)&lt;br /&gt;
--local m_headword = require(&amp;quot;Module:headword&amp;quot;)&lt;br /&gt;
local m_stru = require(&amp;quot;Module:String utilities&amp;quot;)&lt;br /&gt;
local m_table = require(&amp;quot;Module:Table&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local lang = require(&amp;quot;Module:Languages&amp;quot;).getByCode(&amp;quot;chak&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
function export.l(term, face, alt)&lt;br /&gt;
	return m_links.full_link( { term = term, lang = lang, alt = alt }, face )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.is_geminate(char)&lt;br /&gt;
	return char ~= nil and #char &amp;gt; 1 and #char &amp;lt; 4 and mw.ustring.sub(char,1,1) == mw.ustring.sub(char,2,2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.compress_consonants(str)&lt;br /&gt;
	&lt;br /&gt;
	str = str or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	replace = {{&amp;quot;ssh&amp;quot;,&amp;quot;ʃʃ&amp;quot;},&lt;br /&gt;
				{&amp;quot;ddh&amp;quot;,&amp;quot;ðð&amp;quot;},&lt;br /&gt;
				{&amp;quot;tth&amp;quot;,&amp;quot;θθ&amp;quot;}, &lt;br /&gt;
				{&amp;quot;cch&amp;quot;,&amp;quot;ʧʧ&amp;quot;},&lt;br /&gt;
				{&amp;quot;sh&amp;quot;,&amp;quot;ʃ&amp;quot;},&lt;br /&gt;
				{&amp;quot;dh&amp;quot;,&amp;quot;ð&amp;quot;},&lt;br /&gt;
				{&amp;quot;th&amp;quot;,&amp;quot;θ&amp;quot;},&lt;br /&gt;
				{&amp;quot;j&amp;quot;,&amp;quot;ʤ&amp;quot;},&lt;br /&gt;
				{&amp;quot;ch&amp;quot;,&amp;quot;ʧ&amp;quot;},&lt;br /&gt;
				{&amp;quot;&amp;#039;&amp;quot;,&amp;quot;&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	for _,v in ipairs(replace) do&lt;br /&gt;
		str = mw.ustring.gsub(str,v[1],v[2])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.expand_consonants(str)&lt;br /&gt;
	replace = {&lt;br /&gt;
				{&amp;quot;s&amp;#039;h&amp;quot;,&amp;quot;sh&amp;quot;},&lt;br /&gt;
				{&amp;quot;s&amp;#039;sh&amp;quot;,&amp;quot;sʃ&amp;quot;},&lt;br /&gt;
				{&amp;quot;d&amp;#039;h&amp;quot;,&amp;quot;dh&amp;quot;},&lt;br /&gt;
				{&amp;quot;d&amp;#039;dh&amp;quot;,&amp;quot;dð&amp;quot;},&lt;br /&gt;
				{&amp;quot;t&amp;#039;h&amp;quot;,&amp;quot;th&amp;quot;},&lt;br /&gt;
				{&amp;quot;t&amp;#039;th&amp;quot;,&amp;quot;tθ&amp;quot;},&lt;br /&gt;
				{&amp;quot;ssh&amp;quot;,&amp;quot;ʃʃ&amp;quot;},&lt;br /&gt;
				{&amp;quot;ddh&amp;quot;,&amp;quot;ðð&amp;quot;},&lt;br /&gt;
				{&amp;quot;tth&amp;quot;,&amp;quot;θθ&amp;quot;}, &lt;br /&gt;
				{&amp;quot;cch&amp;quot;,&amp;quot;ʧʧ&amp;quot;},&lt;br /&gt;
				{&amp;quot;sh&amp;quot;,&amp;quot;ʃ&amp;quot;},&lt;br /&gt;
				{&amp;quot;dh&amp;quot;,&amp;quot;ð&amp;quot;},&lt;br /&gt;
				{&amp;quot;th&amp;quot;,&amp;quot;θ&amp;quot;},&lt;br /&gt;
				{&amp;quot;j&amp;quot;,&amp;quot;ʤ&amp;quot;},&lt;br /&gt;
				{&amp;quot;ch&amp;quot;,&amp;quot;ʧ&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	for _,v in ipairs(replace) do&lt;br /&gt;
		str = mw.ustring.gsub(str,v[2],v[1])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.parse_consonants(str)&lt;br /&gt;
	&lt;br /&gt;
	str = export.compress_consonants(str)&lt;br /&gt;
	&lt;br /&gt;
	str = mw.ustring.gsub(str,&amp;quot;.&amp;quot;,&amp;#039;\0%0%0&amp;#039;)&lt;br /&gt;
	str = mw.ustring.gsub(str,&amp;quot;(.)%z%1&amp;quot;,&amp;quot;%1&amp;quot;)&lt;br /&gt;
	str = mw.ustring.gsub(str,&amp;quot;%z.&amp;quot;,&amp;quot;-&amp;quot;)&lt;br /&gt;
	str = mw.ustring.gsub(str,&amp;quot;^.&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
	str = mw.ustring.gsub(str,&amp;quot;%-&amp;#039;%-&amp;quot;,&amp;quot;-&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	str = export.expand_consonants(str)&lt;br /&gt;
&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.parse_root(root_str,expandFinal)&lt;br /&gt;
	&lt;br /&gt;
	if expandFinal == nil then&lt;br /&gt;
		expandFinal = false	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	stems = {}&lt;br /&gt;
&lt;br /&gt;
	local root = m_stru.capturing_split(root_str,&amp;quot;([&amp;quot;..VOWELS..&amp;quot;]+)&amp;quot;)&lt;br /&gt;
	if root[1] == &amp;#039;&amp;#039; then&lt;br /&gt;
		table.remove(root,1)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if expandFinal then&lt;br /&gt;
		local tail = root[#root]&lt;br /&gt;
		local new_tail = export.parse_consonants(tail)&lt;br /&gt;
		root[#root] = new_tail&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	mw.logObject(root)&lt;br /&gt;
	return root&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.condense_vowels(vowel_str)&lt;br /&gt;
	&lt;br /&gt;
	local output = vowel_str or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if #output &amp;gt; 3 or #output &amp;lt; 2 then&lt;br /&gt;
		return output&lt;br /&gt;
	elseif #output == 3 then&lt;br /&gt;
		output = string.sub(output,1,2)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	output = string.gsub(output,&amp;quot;%S%S&amp;quot;,{[&amp;quot;aw&amp;quot;]=&amp;quot;o&amp;quot;,&lt;br /&gt;
										[&amp;quot;au&amp;quot;]=&amp;quot;o&amp;quot;,&lt;br /&gt;
										[&amp;quot;ao&amp;quot;]=&amp;quot;o&amp;quot;,&lt;br /&gt;
										[&amp;quot;ai&amp;quot;]=&amp;quot;e&amp;quot;,&lt;br /&gt;
										[&amp;quot;ay&amp;quot;]=&amp;quot;e&amp;quot;,&lt;br /&gt;
										[&amp;quot;ae&amp;quot;]=&amp;quot;e&amp;quot;,&lt;br /&gt;
										[&amp;quot;wu&amp;quot;]=&amp;quot;uu&amp;quot;,&lt;br /&gt;
										[&amp;quot;uw&amp;quot;]=&amp;quot;uu&amp;quot;,&lt;br /&gt;
										[&amp;quot;yi&amp;quot;]=&amp;quot;ii&amp;quot;,&lt;br /&gt;
										[&amp;quot;iy&amp;quot;]=&amp;quot;ii&amp;quot;,&lt;br /&gt;
	})&lt;br /&gt;
	return output &lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.extract_root(root_str)&lt;br /&gt;
	&lt;br /&gt;
	roots = {&lt;br /&gt;
		onset = &amp;#039;&amp;#039;,&lt;br /&gt;
		vowel = &amp;#039;&amp;#039;,&lt;br /&gt;
		coda = &amp;#039;&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if root_str then&lt;br /&gt;
&lt;br /&gt;
		root_str = string.gsub(root_str,&amp;#039;%s&amp;#039;,&amp;#039;-&amp;#039;)&lt;br /&gt;
		parts = mw.text.split(root_str,&amp;#039;-&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
		if #parts == 3 then&lt;br /&gt;
			roots[&amp;#039;onset&amp;#039;] = parts[1]&lt;br /&gt;
			roots[&amp;#039;vowel&amp;#039;] = parts[2]&lt;br /&gt;
			roots[&amp;#039;coda&amp;#039;] = parts[3]&lt;br /&gt;
		elseif #parts == 2 then&lt;br /&gt;
			if string.find(parts[1],&amp;quot;^[&amp;quot;..VOWELS..&amp;quot;]&amp;quot;) then&lt;br /&gt;
				roots[&amp;#039;onset&amp;#039;] = &amp;#039;&amp;#039;&lt;br /&gt;
				roots[&amp;#039;vowel&amp;#039;] = parts[1]&lt;br /&gt;
				roots[&amp;#039;coda&amp;#039;] = parts[2]&lt;br /&gt;
			elseif string.find(parts[2],&amp;quot;^[&amp;quot;..VOWELS..&amp;quot;]&amp;quot;) then&lt;br /&gt;
				roots[&amp;#039;onset&amp;#039;] = parts[1]&lt;br /&gt;
				roots[&amp;#039;vowel&amp;#039;] = parts[2]&lt;br /&gt;
				roots[&amp;#039;coda&amp;#039;] = &amp;#039;&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				roots[&amp;#039;onset&amp;#039;] = parts[1]&lt;br /&gt;
				roots[&amp;#039;vowel&amp;#039;] = &amp;#039;&amp;#039;&lt;br /&gt;
				roots[&amp;#039;coda&amp;#039;] = parts[2]&lt;br /&gt;
			end&lt;br /&gt;
		elseif #parts == 1 and parts[1] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local temp = root_str&lt;br /&gt;
			s,e = string.find(temp,&amp;quot;[&amp;quot;..VOWELS..&amp;quot;]+&amp;quot;)&lt;br /&gt;
			if s then &lt;br /&gt;
				roots[&amp;#039;vowel&amp;#039;] = string.sub(temp,s,e)&lt;br /&gt;
			end&lt;br /&gt;
			s,e = string.find(temp,&amp;quot;^[^&amp;quot;..VOWELS..&amp;quot;]+&amp;quot;)&lt;br /&gt;
			if s then&lt;br /&gt;
				roots[&amp;#039;onset&amp;#039;] = string.sub(temp,s,e)&lt;br /&gt;
				temp = string.gsub(temp,roots[&amp;#039;onset&amp;#039;],&amp;#039;&amp;#039;,1)&lt;br /&gt;
			end&lt;br /&gt;
			s,e = string.find(temp,&amp;quot;[^&amp;quot;..VOWELS..&amp;quot;]+&amp;quot;)&lt;br /&gt;
			if s then&lt;br /&gt;
				roots[&amp;#039;coda&amp;#039;] = string.sub(temp,s,e)	&lt;br /&gt;
			end&lt;br /&gt;
		else &lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end	&lt;br /&gt;
	&lt;br /&gt;
	return roots&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.geminate_char(char)&lt;br /&gt;
	char = char or &amp;#039;&amp;#039; &lt;br /&gt;
	if #char == 1 or (#char == 2 and string.sub(char,2) == &amp;#039;h&amp;#039;) then&lt;br /&gt;
		return string.sub(char,1,1)..char&lt;br /&gt;
	else&lt;br /&gt;
		return char&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.degeminate_char(char)&lt;br /&gt;
	char = char or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if (#char == 2 or #char == 3) and string.sub(char,1,1) == string.sub(char,2,2)  then&lt;br /&gt;
		return string.sub(char,2)&lt;br /&gt;
	else&lt;br /&gt;
		return char&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.assimilate(str)&lt;br /&gt;
&lt;br /&gt;
	output = export.compress_consonants(str)&lt;br /&gt;
&lt;br /&gt;
	if str and str ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			--Find and record location of hyphen, if any&lt;br /&gt;
			hyphen = mw.ustring.find(output,&amp;quot;-&amp;quot;,1,true) or 0&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;-&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			--VvC assimilition FIXME - should not happen if v is geminate. Disabling for now.&lt;br /&gt;
			-- output = string.gsub(output,&amp;quot;([&amp;quot;..VOWELS..&amp;quot;])v([^&amp;quot;..VOWELS..&amp;quot;])&amp;quot;,&amp;quot;%1~v%2&amp;quot;):gsub(&amp;quot;(.)~v&amp;quot;,{VvC)&lt;br /&gt;
			--Sibilant Assimilation&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;([&amp;quot;..SIBILANTS..&amp;quot;])([&amp;quot;..SIBILANTS..&amp;quot;])&amp;quot;,&amp;quot;%2%2&amp;quot;)&lt;br /&gt;
			--Nasal Assimilation&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;m([tdszkgθðl])&amp;quot;,&amp;quot;n%1&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;n([bfv])&amp;quot;,&amp;quot;m%1&amp;quot;)&lt;br /&gt;
			--General Devoicing&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;([&amp;quot;..DEVOICED..&amp;quot;])([&amp;quot;..VOICED..&amp;quot;])&amp;quot;,&amp;quot;%1~%2&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;~(.)&amp;quot;,DEVOICING)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;([&amp;quot;..VOICED..&amp;quot;])([&amp;quot;..DEVOICED..&amp;quot;])&amp;quot;,&amp;quot;~%1%2&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;~(.)&amp;quot;,DEVOICING)&lt;br /&gt;
			--H devoicing&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;h([&amp;quot;..VOICED..&amp;quot;])&amp;quot;,&amp;quot;h~%1&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;~(.)&amp;quot;,H_DEVOICING)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;([&amp;quot;..VOICED..&amp;quot;])h&amp;quot;,&amp;quot;~%1h&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;~(.)&amp;quot;,H_DEVOICING)	&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;hj&amp;quot;,&amp;quot;hʧ&amp;quot;)	&lt;br /&gt;
			--Misc&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;qk&amp;quot;,&amp;quot;kk&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;kq&amp;quot;,&amp;quot;kk&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;ao&amp;quot;,&amp;quot;au&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;ae&amp;quot;,&amp;quot;ai&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;aw&amp;quot;,&amp;quot;au&amp;quot;)&lt;br /&gt;
			output = mw.ustring.gsub(output,&amp;quot;ua&amp;quot;,&amp;quot;wa&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
			--Add hyphen, if any&lt;br /&gt;
			if hyphen &amp;gt; 0 then&lt;br /&gt;
				output = mw.ustring.sub(output,1,hyphen-1)..&amp;#039;-&amp;#039;..mw.ustring.sub(output,hyphen)	&lt;br /&gt;
			end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return export.expand_consonants(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.prothetic(str)&lt;br /&gt;
	str = str or &amp;#039;&amp;#039;&lt;br /&gt;
	str2 = export.compress_consonants(str)&lt;br /&gt;
	char1 = mw.ustring.sub(str2,1,1)&lt;br /&gt;
	char2 = mw.ustring.sub(str2,2,2)&lt;br /&gt;
	&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if mw.ustring.find(VOWELS,char1) or mw.ustring.find(VOWELS,char2) then&lt;br /&gt;
		result = str&lt;br /&gt;
	else&lt;br /&gt;
		local v = mw.ustring.match(str,&amp;quot;[&amp;quot;..VOWELS..&amp;quot;]&amp;quot;) or &amp;#039;a&amp;#039;&lt;br /&gt;
		result = v..str&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.chak_from_root(frame)&lt;br /&gt;
	local output = {}&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local namespace = title.nsText&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;] = {required = true},&lt;br /&gt;
		[&amp;quot;mod&amp;quot;] = {},		&lt;br /&gt;
		[&amp;quot;nocat&amp;quot;] = { type = &amp;quot;boolean&amp;quot;, default = false },&lt;br /&gt;
		[&amp;quot;plain&amp;quot;] = { type = &amp;quot;boolean&amp;quot;, default = false },&lt;br /&gt;
		[&amp;quot;alt&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;face&amp;quot;] = { default = &amp;quot;term&amp;quot; },&lt;br /&gt;
		[&amp;quot;notext&amp;quot;] = { type = &amp;quot;boolean&amp;quot;, default = false },&lt;br /&gt;
		[&amp;quot;nolink&amp;quot;] = { type = &amp;quot;boolean&amp;quot;, default = false },&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params)&lt;br /&gt;
	&lt;br /&gt;
	if not args[&amp;quot;root&amp;quot;] and namespace == &amp;quot;Template&amp;quot; then&lt;br /&gt;
		args[&amp;quot;root&amp;quot;] = &amp;quot;tes&amp;quot;&lt;br /&gt;
		args[&amp;quot;mod&amp;quot;] = &amp;quot;t&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local link_text = export.l(args[&amp;quot;root&amp;quot;], args[&amp;quot;face&amp;quot;], args[&amp;quot;root&amp;quot;] )&lt;br /&gt;
	mw.getCurrentFrame():callParserFunction( &amp;#039;#vardefine&amp;#039;, { &amp;#039;chak-root&amp;#039;, args[&amp;quot;root&amp;quot;] } )&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;mod&amp;quot;] then&lt;br /&gt;
		mod_str = export.parse_consonants(args[&amp;quot;mod&amp;quot;])&lt;br /&gt;
		mods = mw.text.split(mod_str,&amp;quot;-&amp;quot;)&lt;br /&gt;
		for k in ipairs(mods) do&lt;br /&gt;
			link_text = link_text..&amp;quot; + &amp;quot;..export.l(&amp;quot;-&amp;quot;..mods[k], args[&amp;quot;face&amp;quot;], &amp;quot;-&amp;quot;..mods[k])&lt;br /&gt;
			table.insert(categories, m_utilities.format_categories( { &amp;quot;Chakobsa terms with the modifier -&amp;quot; .. mods[k] }, lang) )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		mw.getCurrentFrame():callParserFunction( &amp;#039;#vardefine&amp;#039;, { &amp;#039;chak-mod&amp;#039;, args[&amp;quot;mod&amp;quot;] } )&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
	table.insert(output, link_text)&lt;br /&gt;
	table.insert(categories, m_utilities.format_categories( { &amp;quot;Chakobsa terms belonging to the root &amp;quot; .. args[&amp;quot;root&amp;quot;]:gsub(&amp;#039;-&amp;#039;,&amp;#039;&amp;#039;) }, lang) )&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;plain&amp;quot;] then&lt;br /&gt;
		return args[&amp;quot;root&amp;quot;]:gsub(&amp;#039;-&amp;#039;,&amp;#039;&amp;#039;)..&amp;quot; + -&amp;quot;..args[&amp;quot;mod&amp;quot;]&lt;br /&gt;
	elseif args[&amp;quot;nocat&amp;quot;] then&lt;br /&gt;
		return table.concat(output)&lt;br /&gt;
	elseif args[&amp;quot;notext&amp;quot;] then&lt;br /&gt;
		return table.concat(categories)&lt;br /&gt;
	else&lt;br /&gt;
		return table.concat(output) .. table.concat(categories)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>bob&gt;Vaxjedi</name></author>
	</entry>
</feed>