<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Aetymology%2Fspecialized</id>
	<title>Module:etymology/specialized - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Aetymology%2Fspecialized"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:etymology/specialized&amp;action=history"/>
	<updated>2026-04-06T00:33:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:etymology/specialized&amp;diff=491416&amp;oldid=prev</id>
		<title>Sware: Created page with &quot;local export = {}  local m_str_utils = require(&quot;Module:string utilities&quot;) local en_utilities_module = &quot;Module:en-utilities&quot; local etymology_module = &quot;Module:etymology&quot;  local gsub = m_str_utils.gsub local insert = table.insert local pluralize = require(en_utilities_module).pluralize local upper = m_str_utils.upper  -- This function handles all the messiness of different types of specialized borrowings. It should insert any -- borrowing-type-specific categories into `cate...&quot;</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:etymology/specialized&amp;diff=491416&amp;oldid=prev"/>
		<updated>2026-03-24T23:17:09Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local export = {}  local m_str_utils = require(&amp;quot;Module:string utilities&amp;quot;) local en_utilities_module = &amp;quot;Module:en-utilities&amp;quot; local etymology_module = &amp;quot;Module:etymology&amp;quot;  local gsub = m_str_utils.gsub local insert = table.insert local pluralize = require(en_utilities_module).pluralize local upper = m_str_utils.upper  -- This function handles all the messiness of different types of specialized borrowings. It should insert any -- borrowing-type-specific categories into `cate...&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_str_utils = require(&amp;quot;Module:string utilities&amp;quot;)&lt;br /&gt;
local en_utilities_module = &amp;quot;Module:en-utilities&amp;quot;&lt;br /&gt;
local etymology_module = &amp;quot;Module:etymology&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local gsub = m_str_utils.gsub&lt;br /&gt;
local insert = table.insert&lt;br /&gt;
local pluralize = require(en_utilities_module).pluralize&lt;br /&gt;
local upper = m_str_utils.upper&lt;br /&gt;
&lt;br /&gt;
-- This function handles all the messiness of different types of specialized borrowings. It should insert any&lt;br /&gt;
-- borrowing-type-specific categories into `categories` unless `nocat` is given, and return the text to display&lt;br /&gt;
-- before the source + term (or &amp;quot;&amp;quot; for no text).&lt;br /&gt;
local function get_specialized_borrowing_text_insert_cats(data)&lt;br /&gt;
	local bortype, categories, lang, terms, source, nocap, nocat, senseid =&lt;br /&gt;
		data.bortype, data.categories, data.lang, data.terms, data.source, data.nocap, data.nocat, data.senseid&lt;br /&gt;
&lt;br /&gt;
	local function inscat(cat)&lt;br /&gt;
		if not nocat then&lt;br /&gt;
			local display, sourcedisp = require(etymology_module).get_display_and_cat_name(source, &amp;quot;raw&amp;quot;)&lt;br /&gt;
			if cat:find(&amp;quot;DISPLAY&amp;quot;) then&lt;br /&gt;
				cat = cat:gsub(&amp;quot;DISPLAY&amp;quot;, display)&lt;br /&gt;
			elseif cat:find(&amp;quot;SOURCE&amp;quot;) then&lt;br /&gt;
				cat = cat:gsub(&amp;quot;SOURCE&amp;quot;, sourcedisp)&lt;br /&gt;
			else&lt;br /&gt;
				cat = cat .. &amp;quot; &amp;quot; .. sourcedisp&lt;br /&gt;
			end&lt;br /&gt;
			insert(categories, lang:getFullName() .. &amp;quot; &amp;quot; .. cat)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- `text` is the display text for the borrowing type, which gets converted&lt;br /&gt;
	--	into a link.&lt;br /&gt;
	-- `appendix` is a the glossary anchor, which defaults to `text`&lt;br /&gt;
	-- `prep` is the preposition between the borrowing type and the language&lt;br /&gt;
	--	name (e.g. &amp;quot;of&amp;quot;, &amp;quot;from&amp;quot;)&lt;br /&gt;
	-- `pos` is the part of speech for the borrowing type (&amp;quot;noun&amp;quot; or&lt;br /&gt;
	--	&amp;quot;adjective&amp;quot;; defaults to &amp;quot;noun&amp;quot;)&lt;br /&gt;
	-- `plural` is the plural form of the borrowing type; if not specified,&lt;br /&gt;
	--	the pluralize function is used&lt;br /&gt;
	local text, appendix, prep, pos, plural&lt;br /&gt;
	&lt;br /&gt;
	if bortype == &amp;quot;calque&amp;quot; then&lt;br /&gt;
		text, prep = &amp;quot;calque&amp;quot;, &amp;quot;of&amp;quot;&lt;br /&gt;
		inscat(&amp;quot;terms calqued from&amp;quot;)&lt;br /&gt;
	elseif bortype == &amp;quot;partial-calque&amp;quot; then&lt;br /&gt;
		text, prep = &amp;quot;partial calque&amp;quot;, &amp;quot;of&amp;quot;&lt;br /&gt;
		inscat(&amp;quot;terms partially calqued from&amp;quot;)&lt;br /&gt;
	elseif bortype == &amp;quot;semantic-loan&amp;quot; then&lt;br /&gt;
		text, prep = &amp;quot;semantic loan&amp;quot;, &amp;quot;from&amp;quot;&lt;br /&gt;
		inscat(&amp;quot;semantic loans from&amp;quot;)&lt;br /&gt;
	elseif bortype == &amp;quot;transliteration&amp;quot; then&lt;br /&gt;
		text, prep = &amp;quot;transliteration&amp;quot;, &amp;quot;of&amp;quot;&lt;br /&gt;
		inscat(&amp;quot;terms borrowed from&amp;quot;)&lt;br /&gt;
		inscat(&amp;quot;transliterations of DISPLAY terms&amp;quot;)&lt;br /&gt;
	elseif bortype == &amp;quot;phono-semantic-matching&amp;quot; then&lt;br /&gt;
		text, prep = &amp;quot;phono-semantic matching&amp;quot;, &amp;quot;of&amp;quot;&lt;br /&gt;
		inscat(&amp;quot;phono-semantic matchings from&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		local langcode = lang:getCode()&lt;br /&gt;
		local lang_is_source = langcode == source:getCode()&lt;br /&gt;
		if lang_is_source then&lt;br /&gt;
			inscat(&amp;quot;terms borrowed back into&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			inscat(&amp;quot;terms borrowed from&amp;quot;)&lt;br /&gt;
			if bortype ~= &amp;quot;borrowing&amp;quot; then&lt;br /&gt;
				inscat(bortype .. &amp;quot; borrowings from&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if bortype == &amp;quot;borrowing&amp;quot; then&lt;br /&gt;
			text, appendix, prep, pos = &amp;quot;borrowed&amp;quot;, &amp;quot;loanword&amp;quot;, &amp;quot;from&amp;quot;, &amp;quot;adjective&amp;quot;&lt;br /&gt;
		elseif (&lt;br /&gt;
			bortype == &amp;quot;learned&amp;quot; or&lt;br /&gt;
			bortype == &amp;quot;semi-learned&amp;quot; or&lt;br /&gt;
			bortype == &amp;quot;orthographic&amp;quot; or&lt;br /&gt;
			bortype == &amp;quot;unadapted&amp;quot;&lt;br /&gt;
		) then&lt;br /&gt;
			text, prep = bortype .. &amp;quot; borrowing&amp;quot;, &amp;quot;from&amp;quot;&lt;br /&gt;
		elseif bortype == &amp;quot;adapted&amp;quot; then &lt;br /&gt;
			text, prep = bortype .. &amp;quot; borrowing&amp;quot;, &amp;quot;of&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;Internal error: Unrecognized bortype: &amp;quot; .. bortype)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- If the term is suppressed, the preposition should always be &amp;quot;from&amp;quot;:&lt;br /&gt;
		-- &amp;quot;Calque of Chinese 中國&amp;quot;.&lt;br /&gt;
		-- &amp;quot;Calque from Chinese&amp;quot; (not &amp;quot;Calque of Chinese&amp;quot;).&lt;br /&gt;
	if terms[1].term == &amp;quot;-&amp;quot; then&lt;br /&gt;
		prep = &amp;quot;from&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	appendix = &amp;quot;Appendix:Glossary#&amp;quot; .. (appendix or text)&lt;br /&gt;
&lt;br /&gt;
	if senseid then&lt;br /&gt;
		local senseids, output = mw.text.split(senseid, &amp;#039;!!&amp;#039;), {}&lt;br /&gt;
		for i, id in ipairs(senseids) do&lt;br /&gt;
			-- FIXME: This should be done via a function.&lt;br /&gt;
			insert(output, mw.getCurrentFrame():preprocess(&amp;#039;{{senseno|&amp;#039; .. lang:getCode() .. &amp;#039;|&amp;#039; .. id .. (i == 1 and not nocap and &amp;quot;|uc=1&amp;quot; or &amp;quot;&amp;quot;) .. &amp;#039;}}&amp;#039;))&lt;br /&gt;
		end&lt;br /&gt;
		local link&lt;br /&gt;
		if senseid:find(&amp;#039;!!&amp;#039;) then&lt;br /&gt;
			link, text = &amp;quot;are&amp;quot;, pos == &amp;quot;adjective&amp;quot; and text or plural or pluralize(text)&lt;br /&gt;
		else&lt;br /&gt;
			link = pos == &amp;quot;adjective&amp;quot; and &amp;quot;is&amp;quot; or &amp;quot;is a&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		text = mw.text.listToText(output) .. &amp;quot; &amp;quot; .. link .. &amp;quot; &amp;quot; .. &amp;#039;[[&amp;#039; .. appendix .. &amp;#039;|&amp;#039; .. text .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		text = &amp;quot;[[&amp;quot; .. appendix .. &amp;quot;|&amp;quot; .. (nocap and text or gsub(text, &amp;quot;^.&amp;quot;, upper)) .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return text .. &amp;quot; &amp;quot; .. prep .. &amp;quot; &amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.specialized_borrowing(data)&lt;br /&gt;
	local lang, sources, terms = data.lang, data.sources, data.terms&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	local text&lt;br /&gt;
&lt;br /&gt;
	for _, source in ipairs(sources) do&lt;br /&gt;
		text = get_specialized_borrowing_text_insert_cats {&lt;br /&gt;
			bortype = data.bortype,&lt;br /&gt;
			categories = categories,&lt;br /&gt;
			lang = lang,&lt;br /&gt;
			terms = terms,&lt;br /&gt;
			source = source,&lt;br /&gt;
			nocap = data.nocap,&lt;br /&gt;
			nocat = data.nocat,&lt;br /&gt;
			senseid = data.senseid,&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	text = data.notext and &amp;quot;&amp;quot; or text&lt;br /&gt;
	local sourcetext = require(etymology_module).format_sources {&lt;br /&gt;
		lang = lang,&lt;br /&gt;
		sources = sources,&lt;br /&gt;
		terms = terms,&lt;br /&gt;
		sort_key = data.sort_key,&lt;br /&gt;
		categories = categories,&lt;br /&gt;
		nocat = data.nocat,&lt;br /&gt;
		sourceconj = data.sourceconj,&lt;br /&gt;
	}&lt;br /&gt;
	return text .. require(etymology_module).format_links(terms, data.conj, &amp;quot;etymology/specialized&amp;quot;, sourcetext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
</feed>