<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://naija.elizia.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AEtymology%2Ftemplates</id>
	<title>Module:Etymology/templates - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://naija.elizia.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AEtymology%2Ftemplates"/>
	<link rel="alternate" type="text/html" href="http://naija.elizia.net/index.php?title=Module:Etymology/templates&amp;action=history"/>
	<updated>2026-10-19T06:53:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.0-rc.0</generator>
	<entry>
		<id>http://naija.elizia.net/index.php?title=Module:Etymology/templates&amp;diff=313&amp;oldid=prev</id>
		<title>Root: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="http://naija.elizia.net/index.php?title=Module:Etymology/templates&amp;diff=313&amp;oldid=prev"/>
		<updated>2020-08-07T14:31:40Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:31, 7 August 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&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;/table&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>http://naija.elizia.net/index.php?title=Module:Etymology/templates&amp;diff=17&amp;oldid=prev</id>
		<title>Kimgerdes: Created page with &quot;local export = {}  local m_languages = require(&quot;Module:languages&quot;)  local rsplit = mw.text.split local rsubn = mw.ustring.gsub  -- version of rsubn() that discards all but the...&quot;</title>
		<link rel="alternate" type="text/html" href="http://naija.elizia.net/index.php?title=Module:Etymology/templates&amp;diff=17&amp;oldid=prev"/>
		<updated>2020-08-07T11:32:25Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local export = {}  local m_languages = require(&amp;quot;Module:languages&amp;quot;)  local rsplit = mw.text.split local rsubn = mw.ustring.gsub  -- version of rsubn() that discards all but the...&amp;quot;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&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 11:32, 7 August 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l580&quot; &gt;Line 580:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 580:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&amp;quot;sort&amp;quot;] = {},&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		[&amp;quot;sort&amp;quot;] = {},&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	}&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- |ignore-params= parameter to module invocation specifies&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- additional parameter names to allow  in template invocation, separated by&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- commas. They must consist of ASCII letters or numbers or hyphens.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local ignore_params = frame.args[&amp;quot;ignore-params&amp;quot;]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	if ignore_params then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		ignore_params = mw.text.trim(ignore_params)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		if not ignore_params:match &amp;quot;^[%w%-,]+$&amp;quot; then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			error(&amp;quot;Invalid characters in |ignore-params=: &amp;quot; .. ignore_params:gsub(&amp;quot;[%w%-,]+&amp;quot;, &amp;quot;&amp;quot;))&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		for param in ignore_params:gmatch &amp;quot;[%w%-]+&amp;quot; do&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			if params[param] then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;				error(&amp;quot;Duplicate param |&amp;quot; .. param&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;					.. &amp;quot; in |ignore-params=: already specified in params&amp;quot;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			params[param] = {}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params)&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l613&quot; &gt;Line 613:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 631:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			true))&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			true))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- Allow |cat=, |cat2=, |cat3=, etc. They must be sequential. If |cat=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	-- is not defined, |cat2= will not be checked. Empty categories are ignored.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local categories = {}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if not args[&amp;quot;nocat&amp;quot;] and frame.args[&amp;quot;cat&amp;quot;] then&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if not args[&amp;quot;nocat&amp;quot;] and frame.args[&amp;quot;cat&amp;quot;] then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;categories &lt;/del&gt;= &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;{}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cat_number&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;		&lt;/del&gt;table.insert(categories, lang:getCanonicalName() .. &amp;quot; &amp;quot; .. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;frame.args[&amp;quot;&lt;/del&gt;cat&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;]&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;		while true do&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		table.insert(parts, require(&amp;quot;Module:utilities&amp;quot;).format_categories(categories, lang, args[&amp;quot;sort&amp;quot;]))&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;			local cat = frame.args[&amp;quot;cat&amp;quot; .. (cat_number or &amp;quot;&amp;quot;)]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;			if not cat then break end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;			cat = mw.text.trim(cat)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;			if cat ~&lt;/ins&gt;= &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;&amp;quot; then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;				&lt;/ins&gt;table.insert(categories, lang:getCanonicalName() .. &amp;quot; &amp;quot; .. cat)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;			end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;			cat_number = (cat_number or 1) + 1&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;		end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;	end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;	if #categories &amp;gt; 0 then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		table.insert(&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;			&lt;/ins&gt;parts,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;			&lt;/ins&gt;require(&amp;quot;Module:utilities&amp;quot;).format_categories(categories, lang, args[&amp;quot;sort&amp;quot;]))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kimgerdes</name></author>
	</entry>
	<entry>
		<id>http://naija.elizia.net/index.php?title=Module:Etymology/templates&amp;diff=312&amp;oldid=prev</id>
		<title>imported&gt;-sche: per Wiktionary:Beer parlour/2020/January#Partial_translation_vs_partial_calque</title>
		<link rel="alternate" type="text/html" href="http://naija.elizia.net/index.php?title=Module:Etymology/templates&amp;diff=312&amp;oldid=prev"/>
		<updated>2020-01-29T06:05:11Z</updated>

		<summary type="html">&lt;p&gt;per &lt;a href=&quot;https://en.wiktionary.org/wiki/Beer_parlour/2020/January#Partial_translation_vs_partial_calque&quot; class=&quot;extiw&quot; title=&quot;wiktionary:Beer parlour/2020/January&quot;&gt;Wiktionary:Beer parlour/2020/January#Partial_translation_vs_partial_calque&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&lt;br /&gt;
&lt;br /&gt;
local m_languages = require(&amp;quot;Module:languages&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local rsplit = mw.text.split&lt;br /&gt;
local rsubn = mw.ustring.gsub&lt;br /&gt;
&lt;br /&gt;
-- version of rsubn() that discards all but the first return value&lt;br /&gt;
local function rsub(term, foo, bar)&lt;br /&gt;
	local retval = rsubn(term, foo, bar)&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fetch_lang(lang, parameter)&lt;br /&gt;
	return m_languages.getByCode(lang) or m_languages.err(lang, parameter)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fetch_source(code, disallow_family)&lt;br /&gt;
	local source =&lt;br /&gt;
		m_languages.getByCode(code)&lt;br /&gt;
		or require(&amp;quot;Module:etymology languages&amp;quot;).getByCode(code)&lt;br /&gt;
		or not disallow_family and require(&amp;quot;Module:families&amp;quot;).getByCode(code)&lt;br /&gt;
	&lt;br /&gt;
	if source then&lt;br /&gt;
		return source&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;quot;The language&amp;quot; .. (not disallow_family and &amp;quot;, family&amp;quot; or &amp;quot;&amp;quot;) .. &amp;quot; or etymology language code \&amp;quot;&amp;quot; .. code .. &amp;quot;\&amp;quot; is not valid.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fetch_script(sc)&lt;br /&gt;
	if sc then&lt;br /&gt;
		return require(&amp;quot;Module:scripts&amp;quot;).getByCode(sc) or error(&amp;quot;The script code \&amp;quot;&amp;quot; .. sc .. &amp;quot;\&amp;quot; is not valid.&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.etyl(frame)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {required = true, default = &amp;quot;und&amp;quot;},&lt;br /&gt;
		[2] = {},&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&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;
	local source = fetch_source(args[1])&lt;br /&gt;
	local lang = args[2]&lt;br /&gt;
	local sort_key = args[&amp;quot;sort&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Empty language means English, but &amp;quot;-&amp;quot; means no language. Yes, confusing...&lt;br /&gt;
	if not lang then&lt;br /&gt;
		lang = &amp;quot;en&amp;quot;&lt;br /&gt;
	elseif lang == &amp;quot;-&amp;quot; then&lt;br /&gt;
		lang = nil&lt;br /&gt;
	end&lt;br /&gt;
	if lang then&lt;br /&gt;
		lang = fetch_lang(lang, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if lang and (lang:getCode() == &amp;quot;la&amp;quot; or lang:getCode() == &amp;quot;nl&amp;quot;) then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;etyl/&amp;quot; .. lang:getCode())&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;etyl/&amp;quot; .. lang:getCode() .. &amp;quot;/&amp;quot; .. source:getCode())&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_etyl(lang, source, sort_key)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.cognate(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	&lt;br /&gt;
	if args.gloss then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;cognate/gloss param&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {required = true, default = &amp;quot;und&amp;quot;},&lt;br /&gt;
		[2] = {},&lt;br /&gt;
		[3] = {alias_of = &amp;quot;alt&amp;quot;},&lt;br /&gt;
		[4] = {alias_of = &amp;quot;t&amp;quot;},&lt;br /&gt;
		&lt;br /&gt;
		[&amp;quot;alt&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;g&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;lit&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;t&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;gloss&amp;quot;] = {alias_of = &amp;quot;t&amp;quot;},&lt;br /&gt;
		[&amp;quot;tr&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;ts&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sc&amp;quot;] = {},&lt;br /&gt;
		&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
	&lt;br /&gt;
	local source = fetch_source(args[1])&lt;br /&gt;
	local sc = fetch_script(args[&amp;quot;sc&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_cognate(&lt;br /&gt;
		{&lt;br /&gt;
			lang = source,&lt;br /&gt;
			sc = sc,&lt;br /&gt;
			term = args[2],&lt;br /&gt;
			alt = args[&amp;quot;alt&amp;quot;],&lt;br /&gt;
			id = args[&amp;quot;id&amp;quot;],&lt;br /&gt;
			genders = args[&amp;quot;g&amp;quot;],&lt;br /&gt;
			tr = args[&amp;quot;tr&amp;quot;],&lt;br /&gt;
			ts = args[&amp;quot;ts&amp;quot;],&lt;br /&gt;
			gloss = args[&amp;quot;t&amp;quot;],&lt;br /&gt;
			pos = args[&amp;quot;pos&amp;quot;],&lt;br /&gt;
			lit = args[&amp;quot;lit&amp;quot;]&lt;br /&gt;
		},&lt;br /&gt;
		args[&amp;quot;sort&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.noncognate(frame)&lt;br /&gt;
	return export.cognate(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parse_2_lang_args(frame, has_text, no_family)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {required = true, default = &amp;quot;und&amp;quot;},&lt;br /&gt;
		[2] = {required = true, default = &amp;quot;und&amp;quot;},&lt;br /&gt;
		[3] = {},&lt;br /&gt;
		[4] = {alias_of = &amp;quot;alt&amp;quot;},&lt;br /&gt;
		[5] = {alias_of = &amp;quot;t&amp;quot;},&lt;br /&gt;
		&lt;br /&gt;
		[&amp;quot;alt&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;g&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;gloss&amp;quot;] = {alias_of = &amp;quot;t&amp;quot;},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;lit&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;t&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;tr&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;ts&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sc&amp;quot;] = {},&lt;br /&gt;
		&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if has_text then&lt;br /&gt;
		params[&amp;quot;notext&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
		params[&amp;quot;nocap&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
	end&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;
	local lang = fetch_lang(args[1], 1)&lt;br /&gt;
	local source = fetch_source(args[2], no_family)&lt;br /&gt;
	local sc = fetch_script(args[&amp;quot;sc&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
	return args, lang, {&lt;br /&gt;
		lang = source,&lt;br /&gt;
		sc = sc,&lt;br /&gt;
		term = args[3],&lt;br /&gt;
		alt = args[&amp;quot;alt&amp;quot;],&lt;br /&gt;
		id = args[&amp;quot;id&amp;quot;],&lt;br /&gt;
		genders = args[&amp;quot;g&amp;quot;],&lt;br /&gt;
		tr = args[&amp;quot;tr&amp;quot;],&lt;br /&gt;
		ts = args[&amp;quot;ts&amp;quot;],&lt;br /&gt;
		gloss = args[&amp;quot;t&amp;quot;],&lt;br /&gt;
		pos = args[&amp;quot;pos&amp;quot;],&lt;br /&gt;
		lit = args[&amp;quot;lit&amp;quot;]&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
function export.derived(frame)&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_derived(lang, term, args[&amp;quot;sort&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.inherited(frame)&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame, nil, &amp;quot;no family&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_inherited(lang, term, args[&amp;quot;sort&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.borrowed(frame)&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_borrowed(lang, term, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		false, true, &amp;quot;plain&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.learned_borrowing(frame)&lt;br /&gt;
	if frame:getParent().args.gloss then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;learned_borrowing/gloss param&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame, &amp;quot;has text&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_borrowed(lang, term, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;], &amp;quot;learned&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.semi_learned_borrowing(frame)&lt;br /&gt;
	if frame:getParent().args.gloss then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;semi_learned_borrowing/gloss param&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame, &amp;quot;has text&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_borrowed(lang, term, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;], &amp;quot;semi-learned&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.orthographic_borrowing(frame)&lt;br /&gt;
	if frame:getParent().args.gloss then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;orthographic_borrowing/gloss param&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame, &amp;quot;has text&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_borrowed(lang, term, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;], &amp;quot;orthographic&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.unadapted_borrowing(frame)&lt;br /&gt;
	if frame:getParent().args.gloss then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;unadapted_borrowing/gloss param&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame, &amp;quot;has text&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_borrowed(lang, term, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;], &amp;quot;unadapted&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.calque(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	&lt;br /&gt;
	-- More informative error message.&lt;br /&gt;
	if args[&amp;quot;etyl lang&amp;quot;] or args[&amp;quot;etyl term&amp;quot;] or args[&amp;quot;etyl t&amp;quot;] or args[&amp;quot;etyl tr&amp;quot;] then&lt;br /&gt;
		error(&amp;quot;{{[[Template:calque|calque]]}} no longer supports parameters beginning with etyl. &amp;quot; ..&lt;br /&gt;
			&amp;quot;The parameters supported are similar to those used by &amp;quot; ..&lt;br /&gt;
			&amp;quot;{{[[Template:der|der]]}}, {{[[Template:inh|inh]]}}, &amp;quot; ..&lt;br /&gt;
			&amp;quot;{{[[Template:bor|bor]]}}. See [[Template:calque/documentation]] for more.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame, &amp;quot;has text&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).calque(lang, term, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.partial_calque(frame)&lt;br /&gt;
	if frame:getParent().args.gloss then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;partial_calque/gloss param&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame, &amp;quot;has text&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).partial_calque(lang, term, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.semantic_loan(frame)&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame, &amp;quot;has text&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).format_semantic_loan(lang, term, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.psm(frame)&lt;br /&gt;
	local args, lang, term = parse_2_lang_args(frame, &amp;quot;has text&amp;quot;)&lt;br /&gt;
	return require(&amp;quot;Module:etymology&amp;quot;).psm(lang, term, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function qualifier(content)&lt;br /&gt;
	if content then&lt;br /&gt;
		return table.concat{&lt;br /&gt;
			&amp;#039;&amp;lt;span class=&amp;quot;ib-brac qualifier-brac&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;&amp;lt;span class=&amp;quot;ib-content qualifier-content&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
			content,&lt;br /&gt;
			&amp;#039;&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;&amp;lt;span class=&amp;quot;ib-brac qualifier-brac&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function desc_or_desc_tree(frame, desc_tree)&lt;br /&gt;
	local params&lt;br /&gt;
	if desc_tree then&lt;br /&gt;
		params = {&lt;br /&gt;
			[1] = {required = true, default = &amp;quot;gem-pro&amp;quot;},&lt;br /&gt;
			[2] = {required = true, default = &amp;quot;*fuhsaz&amp;quot;},&lt;br /&gt;
			[&amp;quot;notext&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
			[&amp;quot;noalts&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
			[&amp;quot;noparent&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		params = {&lt;br /&gt;
			[1] = { required = true },&lt;br /&gt;
			[2] = {},&lt;br /&gt;
			[&amp;quot;alts&amp;quot;] = { type = &amp;quot;boolean&amp;quot; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs({&lt;br /&gt;
		[3] = {},&lt;br /&gt;
		[4] = { alias_of = &amp;quot;gloss&amp;quot; },&lt;br /&gt;
		[&amp;quot;g&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;gloss&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;lit&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;t&amp;quot;] = { alias_of = &amp;quot;gloss&amp;quot; },&lt;br /&gt;
		[&amp;quot;tr&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;ts&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sc&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;bor&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;lbor&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;slb&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;der&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;clq&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;cal&amp;quot;] = { alias_of = &amp;quot;clq&amp;quot; },&lt;br /&gt;
		[&amp;quot;calq&amp;quot;] = { alias_of = &amp;quot;clq&amp;quot; },&lt;br /&gt;
		[&amp;quot;calque&amp;quot;] = { alias_of = &amp;quot;clq&amp;quot; },&lt;br /&gt;
		[&amp;quot;pclq&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;sml&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;unc&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;sclb&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;nolb&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
		[&amp;quot;q&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sandbox&amp;quot;] = { type = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
	}) do&lt;br /&gt;
		params[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local namespace = mw.title.getCurrentTitle().nsText&lt;br /&gt;
&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args[1] then&lt;br /&gt;
		args = require(&amp;quot;Module:parameters&amp;quot;).process(frame.args, params)&lt;br /&gt;
	else&lt;br /&gt;
		args = require(&amp;quot;Module:parameters&amp;quot;).process(frame:getParent().args, params)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.sandbox then&lt;br /&gt;
		if namespace == &amp;quot;&amp;quot; or namespace == &amp;quot;Reconstruction&amp;quot; then&lt;br /&gt;
			error(&amp;#039;The sandbox module, Module:descendants tree/sandbox, should not be used in entries.&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local lang = args[1]&lt;br /&gt;
	local term = args[2]&lt;br /&gt;
	local alt = args[3]&lt;br /&gt;
	local gloss = args[&amp;quot;gloss&amp;quot;]&lt;br /&gt;
	local tr = args[&amp;quot;tr&amp;quot;]&lt;br /&gt;
	local ts = args[&amp;quot;ts&amp;quot;]&lt;br /&gt;
	local sc = args[&amp;quot;sc&amp;quot;]&lt;br /&gt;
	local id = args[&amp;quot;id&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	if namespace == &amp;quot;Template&amp;quot; then&lt;br /&gt;
		if not ( sc or lang ) then&lt;br /&gt;
			sc = &amp;quot;Latn&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if not lang then&lt;br /&gt;
			lang = &amp;quot;en&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if not term then&lt;br /&gt;
			term = &amp;quot;word&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	lang = m_languages.getByCode(lang)&lt;br /&gt;
		or require(&amp;quot;Module:etymology languages&amp;quot;).getByCode(lang)&lt;br /&gt;
		or m_languages.err(lang, 1)&lt;br /&gt;
		&lt;br /&gt;
	local entryLang = require(&amp;quot;Module:etymology&amp;quot;).getNonEtymological(lang)&lt;br /&gt;
	&lt;br /&gt;
	if not desc_tree and entryLang:getType() == &amp;quot;family&amp;quot; then&lt;br /&gt;
		error(&amp;quot;Cannot use language family code in [[Template:desc]].&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if lang:getCode() ~= entryLang:getCode() then&lt;br /&gt;
		-- [[Special:WhatLinksHere/Template:tracking/descendant/etymological]]&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;descendant/etymological&amp;quot;)&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;descendant/etymological/&amp;quot; .. lang:getCode())&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if sc then&lt;br /&gt;
		sc = require(&amp;quot;Module:scripts&amp;quot;).getByCode(sc) or error(&amp;quot;The script code \&amp;quot;&amp;quot; .. sc .. &amp;quot;\&amp;quot; is not valid.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local languageName = lang:getCanonicalName()&lt;br /&gt;
	languageName = mw.ustring.gsub(languageName, &amp;quot;^Proto%-&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local link = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if term ~= &amp;quot;-&amp;quot; then&lt;br /&gt;
		link = require(&amp;quot;Module:links&amp;quot;).full_link(&lt;br /&gt;
			{&lt;br /&gt;
				lang = entryLang,&lt;br /&gt;
				sc = sc,&lt;br /&gt;
				term = term,&lt;br /&gt;
				alt = alt,&lt;br /&gt;
				id = id,&lt;br /&gt;
				tr = tr,&lt;br /&gt;
				ts = ts,&lt;br /&gt;
				genders = args[&amp;quot;g&amp;quot;],&lt;br /&gt;
				gloss = gloss,&lt;br /&gt;
				pos = args[&amp;quot;pos&amp;quot;],&lt;br /&gt;
				lit = args[&amp;quot;lit&amp;quot;],&lt;br /&gt;
			},&lt;br /&gt;
			nil,&lt;br /&gt;
			true)&lt;br /&gt;
	elseif ts or gloss or #args[&amp;quot;g&amp;quot;] &amp;gt; 0 then&lt;br /&gt;
		-- [[Special:WhatLinksHere/Template:tracking/descendant/no term]]&lt;br /&gt;
		require &amp;quot;Module:debug&amp;quot;.track(&amp;quot;descendant/no term&amp;quot;)&lt;br /&gt;
		link = require(&amp;quot;Module:links&amp;quot;).full_link(&lt;br /&gt;
			{&lt;br /&gt;
				lang = entryLang,&lt;br /&gt;
				sc = sc,&lt;br /&gt;
				ts = ts,&lt;br /&gt;
				gloss = gloss,&lt;br /&gt;
				genders = args[&amp;quot;g&amp;quot;],&lt;br /&gt;
			},&lt;br /&gt;
			nil,&lt;br /&gt;
			true)&lt;br /&gt;
		link = link&lt;br /&gt;
			:gsub(&amp;quot;&amp;lt;small&amp;gt;%[Term%?%]&amp;lt;/small&amp;gt; &amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			:gsub(&amp;quot;&amp;lt;small&amp;gt;%[Term%?%]&amp;lt;/small&amp;gt;&amp;amp;nbsp;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			:gsub(&amp;quot;%[%[Category:[^%[%]]+ term requests%]%]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	else -- display no link at all&lt;br /&gt;
		-- [[Special:WhatLinksHere/Template:tracking/descendant/no term or annotations]]&lt;br /&gt;
		require &amp;quot;Module:debug&amp;quot;.track(&amp;quot;descendant/no term or annotations&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function add_tooltip(text, tooltip)&lt;br /&gt;
		return &amp;#039;&amp;lt;span class=&amp;quot;desc-arr&amp;quot; title=&amp;quot;&amp;#039; .. tooltip .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. text .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local label, arrow, descendants, alts, semi_learned, calque, partial_calque, semantic_loan, qual&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;sclb&amp;quot;] then&lt;br /&gt;
		if sc then&lt;br /&gt;
			label = sc:getCanonicalName()&lt;br /&gt;
		else&lt;br /&gt;
			label = require(&amp;quot;Module:scripts&amp;quot;).findBestScript(term, lang):getCanonicalName()&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		label = languageName&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;bor&amp;quot;] then&lt;br /&gt;
		arrow = add_tooltip(&amp;quot;→&amp;quot;, &amp;quot;borrowed&amp;quot;)&lt;br /&gt;
	elseif args[&amp;quot;lbor&amp;quot;] then&lt;br /&gt;
		arrow = add_tooltip(&amp;quot;→&amp;quot;, &amp;quot;learned borrowed&amp;quot;)&lt;br /&gt;
	elseif args[&amp;quot;slb&amp;quot;] then&lt;br /&gt;
		arrow = add_tooltip(&amp;quot;→&amp;quot;, &amp;quot;semi-learned borrowing&amp;quot;)&lt;br /&gt;
	elseif args[&amp;quot;clq&amp;quot;] then&lt;br /&gt;
		arrow = add_tooltip(&amp;quot;→&amp;quot;, &amp;quot;calque&amp;quot;)&lt;br /&gt;
	elseif args[&amp;quot;pclq&amp;quot;] then&lt;br /&gt;
		arrow = add_tooltip(&amp;quot;→&amp;quot;, &amp;quot;partial calque&amp;quot;)&lt;br /&gt;
	elseif args[&amp;quot;sml&amp;quot;] then&lt;br /&gt;
		arrow = add_tooltip(&amp;quot;→&amp;quot;, &amp;quot;semantic loan&amp;quot;)&lt;br /&gt;
	elseif args[&amp;quot;unc&amp;quot;] and not args[&amp;quot;der&amp;quot;] then&lt;br /&gt;
		arrow = add_tooltip(&amp;quot;&amp;gt;&amp;quot;, &amp;quot;inherited&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		arrow = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- allow der=1 in conjunction with bor=1 to indicate e.g. English &amp;quot;pars recta&amp;quot;&lt;br /&gt;
	-- derived and borrowed from Latin &amp;quot;pars&amp;quot;.&lt;br /&gt;
	if args[&amp;quot;der&amp;quot;] then&lt;br /&gt;
		arrow = arrow .. add_tooltip(&amp;quot;⇒&amp;quot;, &amp;quot;reshaped by analogy or addition of morphemes&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;unc&amp;quot;]then&lt;br /&gt;
		arrow = arrow .. add_tooltip(&amp;quot;?&amp;quot;, &amp;quot;uncertain&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local m_desctree&lt;br /&gt;
	if desc_tree or args[&amp;quot;alts&amp;quot;] then&lt;br /&gt;
		if args.sandbox or require(&amp;quot;Module:yesno&amp;quot;)(frame.args.sandbox, false) then&lt;br /&gt;
			m_desctree = require(&amp;quot;Module:descendants tree/sandbox&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			m_desctree = require(&amp;quot;Module:descendants tree&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if desc_tree then&lt;br /&gt;
		descendants = m_desctree.getDescendants(entryLang, term, id)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if desc_tree and not args[&amp;quot;noalts&amp;quot;] or not desc_tree and args[&amp;quot;alts&amp;quot;] then&lt;br /&gt;
		-- [[Special:WhatLinksHere/Template:tracking/desc/alts]]&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(&amp;quot;desc/alts&amp;quot;)&lt;br /&gt;
		alts = m_desctree.getAlternativeForms(entryLang, term)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;lbor&amp;quot;] then&lt;br /&gt;
		learned = &amp;quot; &amp;quot; .. qualifier(&amp;quot;learned&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		learned = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;slb&amp;quot;] then&lt;br /&gt;
		semi_learned = &amp;quot; &amp;quot; .. qualifier(&amp;quot;semi-learned&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		semi_learned = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;clq&amp;quot;] then&lt;br /&gt;
		calque = &amp;quot; &amp;quot; .. qualifier(&amp;quot;calque&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		calque = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;pclq&amp;quot;] then&lt;br /&gt;
		partial_calque = &amp;quot; &amp;quot; .. qualifier(&amp;quot;partial calque&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		partial_calque = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;quot;sml&amp;quot;] then&lt;br /&gt;
		semantic_loan = &amp;quot; &amp;quot; .. qualifier(&amp;quot;semantic loan&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		semantic_loan = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;q&amp;quot;] then&lt;br /&gt;
		qual = &amp;quot; &amp;quot; .. require(&amp;quot;Module:qualifier&amp;quot;).format_qualifier(args[&amp;quot;q&amp;quot;])&lt;br /&gt;
	else&lt;br /&gt;
		qual = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;quot;noparent&amp;quot;] then&lt;br /&gt;
		return descendants&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if arrow and arrow ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		arrow = arrow .. &amp;quot; &amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local linktext = table.concat{link, alts or &amp;quot;&amp;quot;, learned, semi_learned, calque,&lt;br /&gt;
		partial_calque, semantic_loan, qual, descendants or &amp;quot;&amp;quot;}&lt;br /&gt;
	if args[&amp;quot;notext&amp;quot;] then&lt;br /&gt;
		return linktext&lt;br /&gt;
	elseif args[&amp;quot;nolb&amp;quot;] then&lt;br /&gt;
		return arrow .. linktext&lt;br /&gt;
	else&lt;br /&gt;
		return table.concat{arrow, label, &amp;quot;:&amp;quot;, linktext ~= &amp;quot;&amp;quot; and &amp;quot; &amp;quot; or &amp;quot;&amp;quot;, linktext}&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function export.descendant(frame)&lt;br /&gt;
	return desc_or_desc_tree(frame, false) .. require(&amp;quot;Module:TemplateStyles&amp;quot;)(&amp;quot;Module:etymology/style.css&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.descendants_tree(frame)&lt;br /&gt;
	return desc_or_desc_tree(frame, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implementation of miscellaneous templates such as {{back-formation}}, {{clipping}},&lt;br /&gt;
-- {{ellipsis}}, {{rebracketing}}, and {{reduplication}} that have a single&lt;br /&gt;
-- associated term.&lt;br /&gt;
function export.misc_variant(frame)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {required = true, default = &amp;quot;und&amp;quot;},&lt;br /&gt;
		[2] = {},&lt;br /&gt;
		[3] = {alias_of = &amp;quot;alt&amp;quot;},&lt;br /&gt;
		[4] = {alias_of = &amp;quot;t&amp;quot;},&lt;br /&gt;
		&lt;br /&gt;
		[&amp;quot;alt&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;gloss&amp;quot;] = {alias_of = &amp;quot;t&amp;quot;},&lt;br /&gt;
		[&amp;quot;g&amp;quot;] = {list = true},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;lit&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;t&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;tr&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;ts&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sc&amp;quot;] = {},&lt;br /&gt;
		&lt;br /&gt;
		[&amp;quot;nocap&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}, -- should be processed in the template itself&lt;br /&gt;
		[&amp;quot;notext&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;nocat&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&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;
	local lang = fetch_lang(args[1], 1)&lt;br /&gt;
	local sc = fetch_script(args[&amp;quot;sc&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	if not args[&amp;quot;notext&amp;quot;] then&lt;br /&gt;
		table.insert(parts, frame.args[&amp;quot;text&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
	if args[2] or args[&amp;quot;alt&amp;quot;] then&lt;br /&gt;
		if not args[&amp;quot;notext&amp;quot;] then&lt;br /&gt;
			table.insert(parts, &amp;quot; &amp;quot;)&lt;br /&gt;
			table.insert(parts, frame.args[&amp;quot;oftext&amp;quot;] or &amp;quot;of&amp;quot;)&lt;br /&gt;
			table.insert(parts, &amp;quot; &amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(parts, require(&amp;quot;Module:links&amp;quot;).full_link(&lt;br /&gt;
			{&lt;br /&gt;
				lang = lang,&lt;br /&gt;
				sc = sc,&lt;br /&gt;
				term = args[2],&lt;br /&gt;
				alt = args[&amp;quot;alt&amp;quot;],&lt;br /&gt;
				id = args[&amp;quot;id&amp;quot;],&lt;br /&gt;
				tr = args[&amp;quot;tr&amp;quot;],&lt;br /&gt;
				ts = args[&amp;quot;ts&amp;quot;],&lt;br /&gt;
				genders = args[&amp;quot;g&amp;quot;],&lt;br /&gt;
				gloss = args[&amp;quot;t&amp;quot;],&lt;br /&gt;
				pos = args[&amp;quot;pos&amp;quot;],&lt;br /&gt;
				lit = args[&amp;quot;lit&amp;quot;],&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;term&amp;quot;,&lt;br /&gt;
			true))&lt;br /&gt;
	end&lt;br /&gt;
	if not args[&amp;quot;nocat&amp;quot;] and frame.args[&amp;quot;cat&amp;quot;] then&lt;br /&gt;
		local categories = {}&lt;br /&gt;
		table.insert(categories, lang:getCanonicalName() .. &amp;quot; &amp;quot; .. frame.args[&amp;quot;cat&amp;quot;])&lt;br /&gt;
		table.insert(parts, require(&amp;quot;Module:utilities&amp;quot;).format_categories(categories, lang, args[&amp;quot;sort&amp;quot;]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_parsed_part(template, lang, args, terms, i)&lt;br /&gt;
	local term = terms[i]&lt;br /&gt;
	local alt = args[&amp;quot;alt&amp;quot;][i]&lt;br /&gt;
	local id = args[&amp;quot;id&amp;quot;][i]&lt;br /&gt;
	local sc = fetch_script(args[&amp;quot;sc&amp;quot;][i])&lt;br /&gt;
&lt;br /&gt;
	local tr = args[&amp;quot;tr&amp;quot;][i]&lt;br /&gt;
	local ts = args[&amp;quot;ts&amp;quot;][i]&lt;br /&gt;
	local gloss = args[&amp;quot;t&amp;quot;][i]&lt;br /&gt;
	local pos = args[&amp;quot;pos&amp;quot;][i]&lt;br /&gt;
	local lit = args[&amp;quot;lit&amp;quot;][i]&lt;br /&gt;
	local g = args[&amp;quot;g&amp;quot;][i]&lt;br /&gt;
&lt;br /&gt;
	if not (term or alt or tr or ts) then&lt;br /&gt;
		require(&amp;quot;Module:debug&amp;quot;).track(template .. &amp;quot;/no term or alt or tr&amp;quot;)&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		return require(&amp;quot;Module:links&amp;quot;).full_link(&lt;br /&gt;
			{ term = term, alt = alt, id = id, lang = lang, sc = sc, tr = tr,&lt;br /&gt;
			ts = ts, gloss = gloss, pos = pos, lit = lit,&lt;br /&gt;
			genders = g and rsplit(g, &amp;quot;,&amp;quot;) or {}&lt;br /&gt;
		}, &amp;quot;term&amp;quot;, true)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_parsed_parts(template, lang, args, terms)&lt;br /&gt;
	local parts = {}&lt;br /&gt;
&lt;br /&gt;
	-- Find the maximum index among any of the list parameters.&lt;br /&gt;
	local maxmaxindex = 0&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(v) == &amp;quot;table&amp;quot; and v.maxindex and v.maxindex &amp;gt; maxmaxindex then&lt;br /&gt;
			maxmaxindex = v.maxindex&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for index = 1, maxmaxindex do&lt;br /&gt;
		table.insert(parts, get_parsed_part(template, lang, args, terms, index))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return parts&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Implementation of miscellaneous templates such as {{doublet}} that can take&lt;br /&gt;
-- multiple terms. Doesn&amp;#039;t handle {{blend}} or {{univerbation}}, which display&lt;br /&gt;
-- + signs between elements and use compound_like in [[Module:compound/templates]].&lt;br /&gt;
function export.misc_variant_multiple_terms(frame)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {required = true, default = &amp;quot;und&amp;quot;},&lt;br /&gt;
		[2] = {list = true, allow_holes = true},&lt;br /&gt;
&lt;br /&gt;
		[&amp;quot;t&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;gloss&amp;quot;] = {list = true, allow_holes = true, require_index = true, alias_of = &amp;quot;t&amp;quot;},&lt;br /&gt;
		[&amp;quot;tr&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;ts&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;g&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;alt&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;lit&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;sc&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
&lt;br /&gt;
		[&amp;quot;nocap&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}, -- should be processed in the template itself&lt;br /&gt;
		[&amp;quot;notext&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;nocat&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&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;
	local lang = fetch_lang(args[1], 1)&lt;br /&gt;
&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	if not args[&amp;quot;notext&amp;quot;] then&lt;br /&gt;
		table.insert(parts, frame.args[&amp;quot;text&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
	if #args[2] &amp;gt; 0 or #args[&amp;quot;alt&amp;quot;] &amp;gt; 0 then&lt;br /&gt;
		if not args[&amp;quot;notext&amp;quot;] then&lt;br /&gt;
			table.insert(parts, &amp;quot; &amp;quot;)&lt;br /&gt;
			table.insert(parts, frame.args[&amp;quot;oftext&amp;quot;] or &amp;quot;of&amp;quot;)&lt;br /&gt;
			table.insert(parts, &amp;quot; &amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		local formatted_terms = get_parsed_parts(mw.ustring.lower(&lt;br /&gt;
			-- Remove link and convert uppercase to lowercase to get an&lt;br /&gt;
			-- approximation of the original template name.&lt;br /&gt;
			rsub(rsub(frame.args[&amp;quot;text&amp;quot;], &amp;quot;^%[%[.*|&amp;quot;, &amp;quot;&amp;quot;), &amp;quot;%]%]$&amp;quot;, &amp;quot;&amp;quot;)),&lt;br /&gt;
			lang, args, args[2])&lt;br /&gt;
		table.insert(parts, require(&amp;quot;Module:table&amp;quot;).serialCommaJoin(formatted_terms))&lt;br /&gt;
	end&lt;br /&gt;
	if not args[&amp;quot;nocat&amp;quot;] and frame.args[&amp;quot;cat&amp;quot;] then&lt;br /&gt;
		local categories = {}&lt;br /&gt;
		table.insert(categories, lang:getCanonicalName() .. &amp;quot; &amp;quot; .. frame.args[&amp;quot;cat&amp;quot;])&lt;br /&gt;
		table.insert(parts, require(&amp;quot;Module:utilities&amp;quot;).format_categories(categories, lang, args[&amp;quot;sort&amp;quot;]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Implementation of miscellaneous templates such as {{unknown}} that have no&lt;br /&gt;
-- associated terms.&lt;br /&gt;
function export.misc_variant_no_term(frame)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[1] = {required = true, default = &amp;quot;und&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
		[&amp;quot;title&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;nocap&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}, -- should be processed in the template itself&lt;br /&gt;
		[&amp;quot;notext&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;nocat&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if frame.args[&amp;quot;title2_alias&amp;quot;] then&lt;br /&gt;
		params[2] = {alias_of = &amp;quot;title&amp;quot;}&lt;br /&gt;
	end&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;
	local lang = fetch_lang(args[1], 1)&lt;br /&gt;
&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	if not args[&amp;quot;notext&amp;quot;] then&lt;br /&gt;
		table.insert(parts, args[&amp;quot;title&amp;quot;] or frame.args[&amp;quot;text&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
	if not args[&amp;quot;nocat&amp;quot;] and frame.args[&amp;quot;cat&amp;quot;] then&lt;br /&gt;
		local categories = {}&lt;br /&gt;
		table.insert(categories, lang:getCanonicalName() .. &amp;quot; &amp;quot; .. frame.args[&amp;quot;cat&amp;quot;])&lt;br /&gt;
		table.insert(parts, require(&amp;quot;Module:utilities&amp;quot;).format_categories(categories, lang, args[&amp;quot;sort&amp;quot;]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>imported&gt;-sche</name></author>
	</entry>
</feed>