<?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%3AEtymology</id>
	<title>Module:Etymology - 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%3AEtymology"/>
	<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Etymology&amp;action=history"/>
	<updated>2026-04-10T21:02:16Z</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:Etymology&amp;diff=499&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:Etymology&amp;diff=499&amp;oldid=prev"/>
		<updated>2026-04-10T07:29:49Z</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-498:rev-499 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jsrs701</name></author>
	</entry>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Etymology&amp;diff=498&amp;oldid=prev</id>
		<title>bob&gt;Juelos: Undo revision 536382 by Juelos (talk)</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Etymology&amp;diff=498&amp;oldid=prev"/>
		<updated>2024-09-06T07:40:06Z</updated>

		<summary type="html">&lt;p&gt;Undo revision &lt;a href=&quot;/index.php?title=Special:Diff/536382&quot; title=&quot;Special:Diff/536382&quot;&gt;536382&lt;/a&gt; by &lt;a href=&quot;/index.php?title=Special:Contributions/Juelos&quot; title=&quot;Special:Contributions/Juelos&quot;&gt;Juelos&lt;/a&gt; (&lt;a href=&quot;/index.php?title=User_talk:Juelos&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Juelos (page does not exist)&quot;&gt;talk&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;
-- For testing&lt;br /&gt;
local force_cat = false&lt;br /&gt;
&lt;br /&gt;
local function term_error(terminfo)&lt;br /&gt;
	if terminfo.lang:hasType(&amp;quot;family&amp;quot;) then&lt;br /&gt;
		if terminfo.term and terminfo.term ~= &amp;quot;-&amp;quot; then&lt;br /&gt;
			require(&amp;quot;Module:debug/track&amp;quot;)(&amp;quot;etymology/family/has-term&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		terminfo.term = &amp;quot;-&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return terminfo&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function create_link(terminfo, template_name)&lt;br /&gt;
	local link = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if terminfo.term == &amp;quot;-&amp;quot; then&lt;br /&gt;
		--[=[&lt;br /&gt;
		[[Special:WhatLinksHere/Template:tracking/cognate/no-term]]&lt;br /&gt;
		[[Special:WhatLinksHere/Template:tracking/derived/no-term]]&lt;br /&gt;
		[[Special:WhatLinksHere/Template:tracking/borrowed/no-term]]&lt;br /&gt;
		[[Special:WhatLinksHere/Template:tracking/calque/no-term]]&lt;br /&gt;
		]=]&lt;br /&gt;
		require(&amp;quot;Module:debug/track&amp;quot;)(template_name .. &amp;quot;/no-term&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
--		mw.log(terminfo.term)&lt;br /&gt;
		link = require(&amp;quot;Module:links&amp;quot;).full_link(terminfo, &amp;quot;term&amp;quot;, true)&lt;br /&gt;
		if (link ~= &amp;quot;&amp;quot;) then link = &amp;quot; &amp;quot; .. link end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return link&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.process_and_create_link(terminfo, template_name)&lt;br /&gt;
	terminfo = term_error(terminfo)&lt;br /&gt;
	return create_link(terminfo, template_name or &amp;quot;derived&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
function export.get_display_and_cat_name(source, raw)&lt;br /&gt;
	local display, cat_name&lt;br /&gt;
	if source:getCode() == &amp;quot;und&amp;quot; then&lt;br /&gt;
		display = &amp;quot;undetermined&amp;quot;&lt;br /&gt;
		cat_name = &amp;quot;other languages&amp;quot;&lt;br /&gt;
	elseif source:getCode() == &amp;quot;mul&amp;quot; then&lt;br /&gt;
		display = &amp;quot;[[Wikipedia:Translingualism|translingual]]&amp;quot;&lt;br /&gt;
		cat_name = &amp;quot;Translingual&amp;quot;&lt;br /&gt;
	elseif source:getCode() == &amp;quot;mul-tax&amp;quot; then&lt;br /&gt;
		display = &amp;quot;[[Wikipedia:taxonomic name|taxonomic name]]&amp;quot;&lt;br /&gt;
		cat_name = &amp;quot;taxonomic names&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		display = raw and source:getCanonicalName() or source:makeWikipediaLink()&lt;br /&gt;
		cat_name = source:getDisplayForm()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return display, cat_name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.insert_source_cat_get_display(categories, lang, source, raw, nocat)&lt;br /&gt;
	local display, cat_name = export.get_display_and_cat_name(source, raw)&lt;br /&gt;
&lt;br /&gt;
	if lang and not nocat then&lt;br /&gt;
		-- Add the category, but only if there is a current language&lt;br /&gt;
		if not categories then&lt;br /&gt;
			categories = {}&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if lang:getCode() == source:getCode() then&lt;br /&gt;
			table.insert(categories, lang:getCanonicalName() .. &amp;quot; twice-borrowed terms&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(categories, lang:getCanonicalName() .. &amp;quot; terms derived from &amp;quot; .. cat_name)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return display, categories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- FIXME: rename to format_source()&lt;br /&gt;
function export.format_etyl(lang, source, sort_key, categories, nocat)&lt;br /&gt;
	-- [[Special:WhatLinksHere/Template:tracking/etymology/sortkey]]&lt;br /&gt;
	if sort_key then&lt;br /&gt;
		require(&amp;quot;Module:debug/track&amp;quot;)(&amp;quot;etymology/sortkey&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local display&lt;br /&gt;
	display, categories = export.insert_source_cat_get_display(categories, lang, source, false, nocat)&lt;br /&gt;
	if lang and not nocat then&lt;br /&gt;
		-- Format categories, but only if there is a current language; {{cog}} currently gets no categories&lt;br /&gt;
		categories = require(&amp;quot;Module:utilities&amp;quot;).format_categories(categories, lang, sort_key, nil, force_cat)&lt;br /&gt;
	else&lt;br /&gt;
		categories = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return &amp;quot;&amp;lt;span class=\&amp;quot;etyl\&amp;quot;&amp;gt;&amp;quot; .. display .. categories .. &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Internal implementation of {{cognate|...}} template&lt;br /&gt;
function export.format_cognate(terminfo, sort_key)&lt;br /&gt;
	return export.format_derived(nil, terminfo, sort_key, nil, &amp;quot;cognate&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Internal implementation of {{derived|...}} template&lt;br /&gt;
function export.format_derived(lang, terminfo, sort_key, nocat, template_name)&lt;br /&gt;
	local source = terminfo.lang&lt;br /&gt;
	return export.format_etyl(lang, source, sort_key, nil, nocat) .. export.process_and_create_link(terminfo, template_name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Check that `lang` has `otherlang` (which may be an etymology-only language) as an ancestor. Throw an error if not.&lt;br /&gt;
local function check_ancestor(lang, otherlang)&lt;br /&gt;
	if not lang:hasAncestor(otherlang) and mw.title.getCurrentTitle().nsText ~= &amp;quot;Template&amp;quot; then&lt;br /&gt;
		-- Generate the non-ancestor error message.&lt;br /&gt;
		local function showLanguage(lang)&lt;br /&gt;
			local retval = (&amp;quot;%s (%s)&amp;quot;):format(lang:makeCategoryLink(), lang:getCode())&lt;br /&gt;
			if lang:hasType(&amp;quot;etymology-only&amp;quot;) then&lt;br /&gt;
				retval = retval .. (&amp;quot; (an etymology-only language whose regular parent is %s)&amp;quot;):format(&lt;br /&gt;
					showLanguage(lang:getParent()))&lt;br /&gt;
			end&lt;br /&gt;
			return retval&lt;br /&gt;
		end&lt;br /&gt;
		local postscript&lt;br /&gt;
		local ancestors = lang:getAncestors()&lt;br /&gt;
		local moduleLink = &amp;quot;[[Module:&amp;quot;&lt;br /&gt;
			.. require(&amp;quot;Module:languages&amp;quot;).getDataModuleName(lang:getCode())&lt;br /&gt;
			.. &amp;quot;]]&amp;quot;&lt;br /&gt;
		if not ancestors[1] then&lt;br /&gt;
			postscript = showLanguage(lang) .. &amp;quot; has no ancestors.&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			local ancestorList = table.concat(&lt;br /&gt;
				require(&amp;quot;Module:fun&amp;quot;).map(&lt;br /&gt;
					showLanguage,&lt;br /&gt;
					ancestors),&lt;br /&gt;
				&amp;quot; and &amp;quot;)&lt;br /&gt;
			postscript = (&amp;quot;The ancestor%s of %s %s %s.&amp;quot;):format(&lt;br /&gt;
				ancestors[2] and &amp;quot;s&amp;quot; or &amp;quot;&amp;quot;, lang:getCanonicalName(),&lt;br /&gt;
				ancestors[2] and &amp;quot;are&amp;quot; or &amp;quot;is&amp;quot;, ancestorList)&lt;br /&gt;
		end&lt;br /&gt;
		error((&amp;quot;%s is not set as an ancestor of %s in %s. %s&amp;quot;)&lt;br /&gt;
			:format(showLanguage(otherlang), showLanguage(lang), moduleLink, postscript))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Internal implementation of {{inherited|...}} template&lt;br /&gt;
function export.format_inherited(lang, terminfo, sort_key, nocat)&lt;br /&gt;
	local source = terminfo.lang&lt;br /&gt;
	&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	if not nocat then&lt;br /&gt;
		table.insert(categories, lang:getCanonicalName() .. &amp;quot; terms inherited from &amp;quot; .. source:getCanonicalName())&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local link = export.process_and_create_link(terminfo, &amp;quot;inherited&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	check_ancestor(lang, source)&lt;br /&gt;
&lt;br /&gt;
	return export.format_etyl(lang, source, sort_key, categories, nocat) .. link&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.insert_borrowed_cat(categories, lang, source)&lt;br /&gt;
	local category&lt;br /&gt;
	if lang:getCode() == source:getCode() then&lt;br /&gt;
		category = &amp;quot; twice-borrowed terms&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		category = &amp;quot; terms borrowed from &amp;quot; .. source:getDisplayForm()&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(categories, lang:getCanonicalName() .. category)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Internal implementation of {{borrowed|...}} template.&lt;br /&gt;
function export.format_borrowed(lang, terminfo, sort_key, nocat)&lt;br /&gt;
	local source = terminfo.lang&lt;br /&gt;
	&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	if not nocat then&lt;br /&gt;
		export.insert_borrowed_cat(categories, lang, source)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return export.format_etyl(lang, source, sort_key, categories, nocat) ..&lt;br /&gt;
		export.process_and_create_link(terminfo, &amp;quot;borrowed&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>bob&gt;Juelos</name></author>
	</entry>
</feed>