<?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%3AEtymology%2Ftemplates%2Fdoublet</id>
	<title>Module:Etymology/templates/doublet - 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%3AEtymology%2Ftemplates%2Fdoublet"/>
	<link rel="alternate" type="text/html" href="https://tes5.st34an.tech/index.php?title=Module:Etymology/templates/doublet&amp;action=history"/>
	<updated>2026-04-17T19:52:06Z</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:Etymology/templates/doublet&amp;diff=3272&amp;oldid=prev</id>
		<title>imported&gt;Juelos: Created page with &quot;local export = {}  local m_internal = require(&quot;Module:etymology/templates/internal&quot;)  local rsplit = mw.text.split local rsubn = mw.ustring.gsub  -- version of rsubn() that di...&quot;</title>
		<link rel="alternate" type="text/html" href="https://tes5.st34an.tech/index.php?title=Module:Etymology/templates/doublet&amp;diff=3272&amp;oldid=prev"/>
		<updated>2023-05-27T09:37:17Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local export = {}  local m_internal = require(&amp;quot;Module:etymology/templates/internal&amp;quot;)  local rsplit = mw.text.split local rsubn = mw.ustring.gsub  -- version of rsubn() that di...&amp;quot;&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_internal = require(&amp;quot;Module:etymology/templates/internal&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;
&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 = m_internal.fetch_script(args[&amp;quot;sc&amp;quot;][i], &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/track&amp;quot;)(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;
-- 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 = m_internal.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;
return export&lt;/div&gt;</summary>
		<author><name>imported&gt;Juelos</name></author>
	</entry>
</feed>