<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://youjo.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ACompound%2Ftemplates</id>
	<title>Module:Compound/templates - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://youjo.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ACompound%2Ftemplates"/>
	<link rel="alternate" type="text/html" href="https://youjo.wiki/index.php?title=Module:Compound/templates&amp;action=history"/>
	<updated>2026-10-17T17:04:13Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://youjo.wiki/index.php?title=Module:Compound/templates&amp;diff=1476&amp;oldid=prev</id>
		<title>Chizu: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://youjo.wiki/index.php?title=Module:Compound/templates&amp;diff=1476&amp;oldid=prev"/>
		<updated>2022-09-23T19:42:14Z</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;tr class=&quot;diff-title&quot; lang=&quot;en-GB&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 19:42, 23 September 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en-GB&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>Chizu</name></author>
	</entry>
	<entry>
		<id>https://youjo.wiki/index.php?title=Module:Compound/templates&amp;diff=1475&amp;oldid=prev</id>
		<title>Wiktionary&gt;Benwing2: &#039;words&#039; -&gt; &#039;terms&#039; in affix and compound categories (see Wiktionary:Beer parlour/2022/August)</title>
		<link rel="alternate" type="text/html" href="https://youjo.wiki/index.php?title=Module:Compound/templates&amp;diff=1475&amp;oldid=prev"/>
		<updated>2022-09-02T05:38:40Z</updated>

		<summary type="html">&lt;p&gt;&amp;#039;words&amp;#039; -&amp;gt; &amp;#039;terms&amp;#039; in affix and compound categories (see &lt;a href=&quot;https://en.wiktionary.org/wiki/Beer_parlour/2022/August&quot; class=&quot;extiw&quot; title=&quot;wiktionary:Beer parlour/2022/August&quot;&gt;Wiktionary:Beer parlour/2022/August&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_compound = require(&amp;quot;Module:compound&amp;quot;)&lt;br /&gt;
local m_languages = require(&amp;quot;Module:languages&amp;quot;)&lt;br /&gt;
local m_debug = require(&amp;quot;Module:debug&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local rsplit = mw.text.split&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fetch_script(sc, param)&lt;br /&gt;
	return sc and require(&amp;quot;Module:scripts&amp;quot;).getByCode(sc, param) or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function parse_args(args, allow_compat, hack_params, has_source)&lt;br /&gt;
	local compat = args[&amp;quot;lang&amp;quot;]&lt;br /&gt;
	if compat and not allow_compat then&lt;br /&gt;
		error(&amp;quot;The |lang= parameter is not used by this template. Place the language code in parameter 1 instead.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lang_index = compat and &amp;quot;lang&amp;quot; or 1&lt;br /&gt;
	local term_index = (compat and 1 or 2) + (has_source and 1 or 0)&lt;br /&gt;
	local params = {&lt;br /&gt;
		[lang_index] = {required = true, default = &amp;quot;und&amp;quot;},&lt;br /&gt;
		[term_index] = {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;q&amp;quot;] = {list = true, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;lit&amp;quot;] = {},&lt;br /&gt;
		-- Note, lit1=, lit2=, ... are different from lit=&lt;br /&gt;
		[&amp;quot;partlit&amp;quot;] = {list = &amp;quot;lit&amp;quot;, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {},&lt;br /&gt;
		-- Note, pos1=, pos2=, ... are different from pos=&lt;br /&gt;
		[&amp;quot;partpos&amp;quot;] = {list = &amp;quot;pos&amp;quot;, allow_holes = true, require_index = true},&lt;br /&gt;
		-- Note, lang1=, lang2=, ... are different from lang=; the former apply to&lt;br /&gt;
		-- individual arguments, while the latter applies to all arguments&lt;br /&gt;
		[&amp;quot;partlang&amp;quot;] = {list = &amp;quot;lang&amp;quot;, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;sc&amp;quot;] = {},&lt;br /&gt;
		-- Note, sc1=, sc2=, ... are different from sc=; the former apply to&lt;br /&gt;
		-- individual arguments when lang1=, lang2=, ... is specified, while&lt;br /&gt;
		-- the latter applies to all arguments where langN=... isn&amp;#039;t specified&lt;br /&gt;
		[&amp;quot;partsc&amp;quot;] = {list = &amp;quot;sc&amp;quot;, allow_holes = true, require_index = true},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;nocat&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;force_cat&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local source_index&lt;br /&gt;
	if has_source then&lt;br /&gt;
		source_index = term_index - 1&lt;br /&gt;
		params[source_index] = {required = true, default = &amp;quot;und&amp;quot;}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if hack_params then&lt;br /&gt;
		hack_params(params)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	args = require(&amp;quot;Module:parameters&amp;quot;).process(args, params)&lt;br /&gt;
	local lang = m_languages.getByCode(args[lang_index], lang_index)&lt;br /&gt;
	local source&lt;br /&gt;
	if has_source then&lt;br /&gt;
		source = m_languages.getByCode(args[source_index], source_index, &amp;quot;allow etym&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return args, term_index, lang, fetch_script(args[&amp;quot;sc&amp;quot;], &amp;quot;sc&amp;quot;), source&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_parsed_part(template, args, term_index, i)&lt;br /&gt;
	local term = args[term_index][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 lang = args[&amp;quot;partlang&amp;quot;][i]&lt;br /&gt;
	local sc = fetch_script(args[&amp;quot;partsc&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;partpos&amp;quot;][i]&lt;br /&gt;
	local lit = args[&amp;quot;partlit&amp;quot;][i]&lt;br /&gt;
	local q = args[&amp;quot;q&amp;quot;][i]&lt;br /&gt;
	local g = args[&amp;quot;g&amp;quot;][i]&lt;br /&gt;
&lt;br /&gt;
	if lang then&lt;br /&gt;
		lang = m_languages.getByCode(lang, &amp;quot;lang&amp;quot; .. i, &amp;quot;allow etym&amp;quot;)&lt;br /&gt;
	end&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;
		local termlang, actual_term&lt;br /&gt;
		if term then&lt;br /&gt;
			termlang, actual_term = term:match(&amp;quot;^([A-Za-z0-9._-]+):(.*)$&amp;quot;)&lt;br /&gt;
			if termlang and termlang ~= &amp;quot;w&amp;quot; then -- special handling for w:... links to Wikipedia&lt;br /&gt;
				-- -1 since i is one-based&lt;br /&gt;
				termlang = m_languages.getByCode(termlang, term_index + i - 1, &amp;quot;allow etym&amp;quot;)&lt;br /&gt;
			else&lt;br /&gt;
				termlang = nil&lt;br /&gt;
				actual_term = term&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if lang and termlang then&lt;br /&gt;
			error((&amp;quot;Both lang%s= and a language in %s= given; specify one or the other&amp;quot;):format(i, term_index + i - 1))&lt;br /&gt;
		end&lt;br /&gt;
		return { term = actual_term, alt = alt, id = id, lang = lang or termlang, sc = sc, tr = tr,&lt;br /&gt;
			ts = ts, gloss = gloss, pos = pos, lit = lit, q = q,&lt;br /&gt;
			genders = g and rsplit(g, &amp;quot;,&amp;quot;) or {}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function get_parsed_parts(template, args, term_index, start_index)&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	start_index = start_index or 1&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 = start_index, maxmaxindex do&lt;br /&gt;
		local part = get_parsed_part(template, args, term_index, index)&lt;br /&gt;
		parts[index - start_index + 1] = part&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;
function export.affix(frame)&lt;br /&gt;
	local function hack_params(params)&lt;br /&gt;
		params[&amp;quot;type&amp;quot;] = {}&lt;br /&gt;
		params[&amp;quot;nocap&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
		params[&amp;quot;notext&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args, term_index, lang, sc = parse_args(frame:getParent().args, nil, hack_params)&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;quot;type&amp;quot;] and not m_compound.compound_types[args[&amp;quot;type&amp;quot;]] then&lt;br /&gt;
		error(&amp;quot;Unrecognized compound type: &amp;#039;&amp;quot; .. args[&amp;quot;type&amp;quot;] .. &amp;quot;&amp;#039;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local parts = get_parsed_parts(&amp;quot;affix&amp;quot;, args, term_index)&lt;br /&gt;
	&lt;br /&gt;
	-- There must be at least one part to display. If there are gaps, a term&lt;br /&gt;
	-- request will be shown.&lt;br /&gt;
	if not next(parts) and not args[&amp;quot;type&amp;quot;] then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			parts = { {term = &amp;quot;prefix-&amp;quot;}, {term = &amp;quot;base&amp;quot;}, {term = &amp;quot;-suffix&amp;quot;} }&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;You must provide at least one part.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return m_compound.show_affixes(lang, sc, parts, args[&amp;quot;pos&amp;quot;], args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;type&amp;quot;], args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.compound(frame)&lt;br /&gt;
	local function hack_params(params)&lt;br /&gt;
		params[&amp;quot;type&amp;quot;] = {}&lt;br /&gt;
		params[&amp;quot;nocap&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
		params[&amp;quot;notext&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args, term_index, lang, sc = parse_args(frame:getParent().args, nil, hack_params)&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;quot;type&amp;quot;] and not m_compound.compound_types[args[&amp;quot;type&amp;quot;]] then&lt;br /&gt;
		error(&amp;quot;Unrecognized compound type: &amp;#039;&amp;quot; .. args[&amp;quot;type&amp;quot;] .. &amp;quot;&amp;#039;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local parts = get_parsed_parts(&amp;quot;compound&amp;quot;, args, term_index)&lt;br /&gt;
	&lt;br /&gt;
	-- There must be at least one part to display. If there are gaps, a term&lt;br /&gt;
	-- request will be shown.&lt;br /&gt;
	if not next(parts) and not args[&amp;quot;type&amp;quot;] then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			parts = { {term = &amp;quot;first&amp;quot;}, {term = &amp;quot;second&amp;quot;} }&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;You must provide at least one part of a compound.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return m_compound.show_compound(lang, sc, parts, args[&amp;quot;pos&amp;quot;], args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;type&amp;quot;], args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.compound_like(frame)&lt;br /&gt;
	local function hack_params(params)&lt;br /&gt;
		params[&amp;quot;pos&amp;quot;] = nil&lt;br /&gt;
		params[&amp;quot;nocap&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
		params[&amp;quot;notext&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args, term_index, lang, sc = parse_args(frame:getParent().args, nil, hack_params)&lt;br /&gt;
&lt;br /&gt;
	local template = frame.args[&amp;quot;template&amp;quot;]&lt;br /&gt;
	local nocat = args[&amp;quot;nocat&amp;quot;]&lt;br /&gt;
	local notext = args[&amp;quot;notext&amp;quot;]&lt;br /&gt;
	local text = not notext and frame.args[&amp;quot;text&amp;quot;]&lt;br /&gt;
	local oftext = not notext and (frame.args[&amp;quot;oftext&amp;quot;] or text and &amp;quot;of&amp;quot;)&lt;br /&gt;
	local cat = not nocat and frame.args[&amp;quot;cat&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
	local parts = get_parsed_parts(template, args, term_index)&lt;br /&gt;
&lt;br /&gt;
	if not next(parts) then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			parts = { {term = &amp;quot;first&amp;quot;}, {term = &amp;quot;second&amp;quot;} }&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return m_compound.show_compound_like(lang, sc, parts, args[&amp;quot;sort&amp;quot;], text, oftext, cat, args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.interfix_compound(frame)&lt;br /&gt;
	local args, term_index, lang, sc = parse_args(frame:getParent().args)&lt;br /&gt;
&lt;br /&gt;
	local parts = get_parsed_parts(&amp;quot;interfix-compound&amp;quot;, args, term_index)&lt;br /&gt;
	local base1 = parts[1]&lt;br /&gt;
	local interfix = parts[2]&lt;br /&gt;
	local base2 = parts[3]&lt;br /&gt;
	&lt;br /&gt;
	-- Just to make sure someone didn&amp;#039;t use the template in a silly way&lt;br /&gt;
	if not (base1 and interfix and base2) then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			base1 = {term = &amp;quot;base1&amp;quot;}&lt;br /&gt;
			interfix = {term = &amp;quot;interfix&amp;quot;}&lt;br /&gt;
			base2 = {term = &amp;quot;base2&amp;quot;}&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;You must provide a base term, an interfix and a second base term.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return m_compound.show_interfix_compound(lang, sc, base1, interfix, base2, args[&amp;quot;pos&amp;quot;], args[&amp;quot;sort&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.circumfix(frame)&lt;br /&gt;
	local args, term_index, lang, sc = parse_args(frame:getParent().args)&lt;br /&gt;
&lt;br /&gt;
	local parts = get_parsed_parts(&amp;quot;circumfix&amp;quot;, args, term_index)&lt;br /&gt;
	local prefix = parts[1]&lt;br /&gt;
	local base = parts[2]&lt;br /&gt;
	local suffix = parts[3]&lt;br /&gt;
	&lt;br /&gt;
	-- Just to make sure someone didn&amp;#039;t use the template in a silly way&lt;br /&gt;
	if not (prefix and base and suffix) then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			prefix = {term = &amp;quot;circumfix&amp;quot;, alt = &amp;quot;prefix&amp;quot;}&lt;br /&gt;
			base = {term = &amp;quot;base&amp;quot;}&lt;br /&gt;
			suffix = {term = &amp;quot;circumfix&amp;quot;, alt = &amp;quot;suffix&amp;quot;}&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;You must specify a prefix part, a base term and a suffix part.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	return m_compound.show_circumfix(lang, sc, prefix, base, suffix, args[&amp;quot;pos&amp;quot;], args[&amp;quot;sort&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.confix(frame)&lt;br /&gt;
	local args, term_index, lang, sc = parse_args(frame:getParent().args)&lt;br /&gt;
&lt;br /&gt;
	local parts = get_parsed_parts(&amp;quot;confix&amp;quot;, args, term_index)&lt;br /&gt;
	local prefix = parts[1]&lt;br /&gt;
	local base = #parts &amp;gt;= 3 and parts[2] or nil&lt;br /&gt;
	local suffix = #parts &amp;gt;= 3 and parts[3] or parts[2]&lt;br /&gt;
	&lt;br /&gt;
	-- Just to make sure someone didn&amp;#039;t use the template in a silly way&lt;br /&gt;
	if not (prefix and suffix) then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			prefix = {term = &amp;quot;prefix&amp;quot;}&lt;br /&gt;
			suffix = {term = &amp;quot;suffix&amp;quot;}&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;You must specify a prefix part, an optional base term and a suffix part.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	return m_compound.show_confix(lang, sc, prefix, base, suffix, args[&amp;quot;pos&amp;quot;], args[&amp;quot;sort&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.pseudo_loan(frame)&lt;br /&gt;
	local function hack_params(params)&lt;br /&gt;
		params[&amp;quot;pos&amp;quot;] = nil&lt;br /&gt;
		params[&amp;quot;nocap&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
		params[&amp;quot;notext&amp;quot;] = {type = &amp;quot;boolean&amp;quot;}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local args, term_index, lang, sc, source = parse_args(frame:getParent().args, nil, hack_params, &amp;quot;has source&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local parts = get_parsed_parts(&amp;quot;pseudo-loan&amp;quot;, args, term_index)&lt;br /&gt;
	&lt;br /&gt;
	return require(&amp;quot;Module:compound/pseudo-loan&amp;quot;).show_pseudo_loan(lang, source, sc, parts, args[&amp;quot;sort&amp;quot;],&lt;br /&gt;
		args[&amp;quot;nocap&amp;quot;], args[&amp;quot;notext&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.infix(frame)&lt;br /&gt;
	local args, term_index, lang, sc = parse_args(frame:getParent().args)&lt;br /&gt;
&lt;br /&gt;
	local parts = get_parsed_parts(&amp;quot;infix&amp;quot;, args, term_index)&lt;br /&gt;
	local base = parts[1]&lt;br /&gt;
	local infix = parts[2]&lt;br /&gt;
	&lt;br /&gt;
	-- Just to make sure someone didn&amp;#039;t use the template in a silly way&lt;br /&gt;
	if not (base and infix) then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			base = {term = &amp;quot;base&amp;quot;}&lt;br /&gt;
			infix = {term = &amp;quot;infix&amp;quot;}&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;You must provide a base term and an infix.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return m_compound.show_infix(lang, sc, base, infix, args[&amp;quot;pos&amp;quot;], args[&amp;quot;sort&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.prefix(frame)&lt;br /&gt;
	local args, term_index, lang, sc = parse_args(frame:getParent().args)&lt;br /&gt;
&lt;br /&gt;
	local prefixes = get_parsed_parts(&amp;quot;prefix&amp;quot;, args, term_index)&lt;br /&gt;
	local base = nil&lt;br /&gt;
	&lt;br /&gt;
	if #prefixes &amp;gt;= 2 then&lt;br /&gt;
		base = prefixes[#prefixes]&lt;br /&gt;
		prefixes[#prefixes] = nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Just to make sure someone didn&amp;#039;t use the template in a silly way&lt;br /&gt;
	if #prefixes == 0 then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			base = {term = &amp;quot;base&amp;quot;}&lt;br /&gt;
			prefixes = { {term = &amp;quot;prefix&amp;quot;} }&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;You must provide at least one prefix.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return m_compound.show_prefixes(lang, sc, prefixes, base, args[&amp;quot;pos&amp;quot;], args[&amp;quot;sort&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.suffix(frame)&lt;br /&gt;
	local args, term_index, lang, sc = parse_args(frame:getParent().args)&lt;br /&gt;
&lt;br /&gt;
	local base = get_parsed_part(&amp;quot;suffix&amp;quot;, args, term_index, 1)&lt;br /&gt;
	local suffixes = get_parsed_parts(&amp;quot;suffix&amp;quot;, args, term_index, 2)&lt;br /&gt;
	&lt;br /&gt;
	-- Just to make sure someone didn&amp;#039;t use the template in a silly way&lt;br /&gt;
	if #suffixes == 0 then&lt;br /&gt;
		if mw.title.getCurrentTitle().nsText == &amp;quot;Template&amp;quot; then&lt;br /&gt;
			base = {term = &amp;quot;base&amp;quot;}&lt;br /&gt;
			suffixes = { {term = &amp;quot;suffix&amp;quot;} }&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;You must provide at least one suffix.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return m_compound.show_suffixes(lang, sc, base, suffixes, args[&amp;quot;pos&amp;quot;], args[&amp;quot;sort&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.transfix(frame)&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;base&amp;quot;},&lt;br /&gt;
		[3] = {required = true, default = &amp;quot;transfix&amp;quot;},&lt;br /&gt;
		&lt;br /&gt;
		[&amp;quot;nocat&amp;quot;] = {type = &amp;quot;boolean&amp;quot;},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sc&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;lit&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_languages.getByCode(args[1], 1)&lt;br /&gt;
	local sc = fetch_script(args[&amp;quot;sc&amp;quot;], &amp;quot;sc&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	local base = {term = args[2]}&lt;br /&gt;
	local transfix = {term = args[3]}&lt;br /&gt;
	&lt;br /&gt;
	return m_compound.show_transfix(lang, sc, base, transfix, args[&amp;quot;pos&amp;quot;], args[&amp;quot;sort&amp;quot;], args[&amp;quot;nocat&amp;quot;], args[&amp;quot;lit&amp;quot;], args[&amp;quot;force_cat&amp;quot;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function export.derivsee(frame)&lt;br /&gt;
	local iargs = frame.args&lt;br /&gt;
	local iparams = {&lt;br /&gt;
		[&amp;quot;derivtype&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;mode&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
	local iargs = require(&amp;quot;Module:parameters&amp;quot;).process(frame.args, iparams)&lt;br /&gt;
&lt;br /&gt;
	local params = {&lt;br /&gt;
		[&amp;quot;head&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;id&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sc&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;pos&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
	local derivtype = iargs.derivtype&lt;br /&gt;
	if derivtype == &amp;quot;PIE root&amp;quot; then&lt;br /&gt;
		params[1] = {}&lt;br /&gt;
	else&lt;br /&gt;
		params[1] = {required = &amp;quot;true&amp;quot;, default = &amp;quot;und&amp;quot;}&lt;br /&gt;
		params[2] = {}&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&lt;br /&gt;
	local term&lt;br /&gt;
	&lt;br /&gt;
	if derivtype == &amp;quot;PIE root&amp;quot; then&lt;br /&gt;
		lang = m_languages.getByCode(&amp;quot;ine-pro&amp;quot;)&lt;br /&gt;
		term = args[1] or args[&amp;quot;head&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
		if term then&lt;br /&gt;
			term = &amp;quot;*&amp;quot; .. term .. &amp;quot;-&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		lang = m_languages.getByCode(args[1], 1)&lt;br /&gt;
		term = args[2] or args[&amp;quot;head&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local id = args.id&lt;br /&gt;
	local sc = fetch_script(args.sc, &amp;quot;sc&amp;quot;)&lt;br /&gt;
	local pos = require(&amp;quot;Module:string utilities&amp;quot;).pluralize(args.pos or &amp;quot;term&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if not term then&lt;br /&gt;
		local SUBPAGE = mw.title.getCurrentTitle().subpageText&lt;br /&gt;
		if lang:getType() == &amp;quot;reconstructed&amp;quot; then&lt;br /&gt;
			term = &amp;quot;*&amp;quot; .. SUBPAGE&lt;br /&gt;
		elseif lang:getType() == &amp;quot;appendix-constructed&amp;quot; then&lt;br /&gt;
			term = SUBPAGE&lt;br /&gt;
		elseif mw.title.getCurrentTitle().nsText == &amp;quot;Reconstruction&amp;quot; then&lt;br /&gt;
			term = &amp;quot;*&amp;quot; .. SUBPAGE&lt;br /&gt;
		else&lt;br /&gt;
			term = SUBPAGE&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if derivtype == &amp;quot;PIE root&amp;quot; then&lt;br /&gt;
		return frame:callParserFunction{&lt;br /&gt;
			name = &amp;quot;#categorytree&amp;quot;,&lt;br /&gt;
			args = {&lt;br /&gt;
				&amp;quot;Terms derived from the Proto-Indo-European root &amp;quot; .. term .. (id and &amp;quot; (&amp;quot; .. id .. &amp;quot;)&amp;quot; or &amp;quot;&amp;quot;),&lt;br /&gt;
				depth = 0,&lt;br /&gt;
				class = &amp;quot;\&amp;quot;derivedterms\&amp;quot;&amp;quot;,&lt;br /&gt;
				mode = iargs.mode,&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local category = nil&lt;br /&gt;
	local langname = lang:getCanonicalName()&lt;br /&gt;
	if (derivtype == &amp;quot;compound&amp;quot; and pos == nil) then&lt;br /&gt;
		category = langname .. &amp;quot; compounds with &amp;quot; .. term&lt;br /&gt;
	elseif derivtype == &amp;quot;compound&amp;quot; then&lt;br /&gt;
		category = langname .. &amp;quot; compound &amp;quot; .. pos .. &amp;quot; with &amp;quot; .. term&lt;br /&gt;
	else&lt;br /&gt;
		category = langname .. &amp;quot; &amp;quot; .. pos .. &amp;quot; &amp;quot; .. derivtype .. &amp;quot;ed with &amp;quot; .. term .. (id and &amp;quot; (&amp;quot; .. id .. &amp;quot;)&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return frame:callParserFunction{&lt;br /&gt;
		name = &amp;quot;#categorytree&amp;quot;,&lt;br /&gt;
		args = {&lt;br /&gt;
			category,&lt;br /&gt;
			depth = 0,&lt;br /&gt;
			class = &amp;quot;\&amp;quot;derivedterms&amp;quot; .. (sc and &amp;quot; &amp;quot; .. sc:getCode() or &amp;quot;&amp;quot;) .. &amp;quot;\&amp;quot;&amp;quot;,&lt;br /&gt;
			namespaces = &amp;quot;-&amp;quot; .. (mw.title.getCurrentTitle().nsText == &amp;quot;Reconstruction&amp;quot; and &amp;quot; Reconstruction&amp;quot; or &amp;quot;&amp;quot;),&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>Wiktionary&gt;Benwing2</name></author>
	</entry>
</feed>