<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://the.satanic.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AT</id>
	<title>Module:T - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://the.satanic.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AT"/>
	<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:T&amp;action=history"/>
	<updated>2026-04-08T05:43:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Module:T&amp;diff=11017&amp;oldid=prev</id>
		<title>WikiGOD at 03:33, 30 April 2021</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:T&amp;diff=11017&amp;oldid=prev"/>
		<updated>2021-04-30T03:33:49Z</updated>

		<summary type="html">&lt;p&gt;&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 03:33, 30 April 2021&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-l22&quot;&gt;Line 22:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 22:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&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 checkType = libraryUtil.checkType&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&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 checkType = libraryUtil.checkType&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&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;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&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;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&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 getArgs = require(&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dev&lt;/del&gt;:Arguments&quot;).getArgs&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&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 getArgs = require(&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module&lt;/ins&gt;:Arguments&quot;).getArgs&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&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 userError = require(&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dev&lt;/del&gt;:User error&quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&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 userError = require(&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module&lt;/ins&gt;:User error&quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&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 yesno = require(&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dev&lt;/del&gt;:Yesno&quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&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 yesno = require(&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module&lt;/ins&gt;:Yesno&quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&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;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&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;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&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 p = {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&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 p = {}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key zzegtzyr_mw19226-mwjf_:diff:1.41:old-10956:rev-11017:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiGOD</name></author>
	</entry>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Module:T&amp;diff=10956&amp;oldid=prev</id>
		<title>WikiGOD: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:T&amp;diff=10956&amp;oldid=prev"/>
		<updated>2021-04-30T02:24:03Z</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 02:24, 30 April 2021&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 zzegtzyr_mw19226-mwjf_:diff:1.41:old-10955:rev-10956 --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiGOD</name></author>
	</entry>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Module:T&amp;diff=10955&amp;oldid=prev</id>
		<title>Mediawiki&gt;ExE Boss: Add support for linking to templates that aren’t in the `Template:` namespace</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:T&amp;diff=10955&amp;oldid=prev"/>
		<updated>2021-04-24T00:34:43Z</updated>

		<summary type="html">&lt;p&gt;Add support for linking to templates that aren’t in the `Template:` namespace&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- A feature-packed example generator for brace-based wikitext.&lt;br /&gt;
--&lt;br /&gt;
-- @module T&lt;br /&gt;
-- @alias p&lt;br /&gt;
-- @version 0.6.3&lt;br /&gt;
-- @release experimental&lt;br /&gt;
-- @requires [[Global Lua Modules/Arguments|Module:Arguments]]&lt;br /&gt;
-- @requires [[Global Lua Modules/User error|Module:User error]]&lt;br /&gt;
-- @requires [[Global Lua Modules/Yesno|Module:Yesno]]&lt;br /&gt;
-- @author [[User:DarthKitty]]&lt;br /&gt;
-- @author [[User:Speedit]]&lt;br /&gt;
-- @author [[User:ExE Boss]]&lt;br /&gt;
--&lt;br /&gt;
-- @todo Extract CSS to stylesheet; transition from data-attributes to classes.&lt;br /&gt;
-- @todo Consider adding i18n for error messages, flags, &amp;amp;c.&lt;br /&gt;
-- @todo Consider adding generator(s?) for magic words and parser functions.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&amp;quot;libraryUtil&amp;quot;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&amp;quot;Dev:Arguments&amp;quot;).getArgs&lt;br /&gt;
local userError = require(&amp;quot;Dev:User error&amp;quot;)&lt;br /&gt;
local yesno = require(&amp;quot;Dev:Yesno&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Parses a parameter to get its components: its name (optional), and either its&lt;br /&gt;
-- value or its description (but not both).&lt;br /&gt;
--&lt;br /&gt;
-- @param {string} param&lt;br /&gt;
--     A parameter.&lt;br /&gt;
-- @returns {table}&lt;br /&gt;
--     The components of a parameter.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
local function parseParam(param)&lt;br /&gt;
    local tmp = param&lt;br /&gt;
    local name, value, description&lt;br /&gt;
&lt;br /&gt;
    -- the parameter&amp;#039;s name is anything to the left of the first equals sign;&lt;br /&gt;
    -- the equals sign can be escaped, for wikis that don&amp;#039;t have [[Template:=]]&lt;br /&gt;
    if tmp:find(&amp;quot;=&amp;quot;) or tmp:find(mw.text.nowiki(&amp;quot;=&amp;quot;)) then&lt;br /&gt;
        name, tmp = tmp&lt;br /&gt;
            :gsub(mw.text.nowiki(&amp;quot;=&amp;quot;), &amp;quot;=&amp;quot;, 1)&lt;br /&gt;
            :match(&amp;quot;^(.-)%s*=%s*(.-)$&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- if the remaining text is wrapped in matching quotes, then it&amp;#039;s a literal&lt;br /&gt;
    -- value; otherwise, it&amp;#039;s a description of the parameter&lt;br /&gt;
    local first = tmp:sub(1, 1)&lt;br /&gt;
    local last = tmp:sub(-1)&lt;br /&gt;
&lt;br /&gt;
    if (first == &amp;#039;&amp;quot;&amp;#039; and last == &amp;#039;&amp;quot;&amp;#039;) or (first == &amp;quot;&amp;#039;&amp;quot; and last == &amp;quot;&amp;#039;&amp;quot;) then&lt;br /&gt;
        value = tmp:sub(2, -2)&lt;br /&gt;
    elseif tmp == &amp;quot;&amp;quot; then&lt;br /&gt;
        description = &amp;quot;...&amp;quot; -- the description cannot be an empty string&lt;br /&gt;
    else&lt;br /&gt;
        description = tmp&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return {&lt;br /&gt;
        name = name,&lt;br /&gt;
        value = value,&lt;br /&gt;
        description = description&lt;br /&gt;
    }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- The heart of the module. Transforms a list of parameters into wikitext&lt;br /&gt;
-- syntax.&lt;br /&gt;
--&lt;br /&gt;
-- @param {string} mode&lt;br /&gt;
--     Which kind of brace-based wikitext we&amp;#039;re dealing with.&lt;br /&gt;
-- @param {string} opener&lt;br /&gt;
--     Text to insert between the two left-braces and the first parameter.&lt;br /&gt;
-- @param[opt] {table|nil} params&lt;br /&gt;
--     A sequentual table of parameters.&lt;br /&gt;
-- @param[opt] {table|nil} options&lt;br /&gt;
--     A table with configuration flags.&lt;br /&gt;
-- @returns {string}&lt;br /&gt;
--     A blob of wikitext describing any brace-based syntax.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
local function builder(mode, opener, params, options)&lt;br /&gt;
    checkType(&amp;quot;builder&amp;quot;, 2, opener, &amp;quot;string&amp;quot;)&lt;br /&gt;
    checkType(&amp;quot;builder&amp;quot;, 3, params, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
    checkType(&amp;quot;builder&amp;quot;, 4, options, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
    params = params or {}&lt;br /&gt;
    options = options or {}&lt;br /&gt;
&lt;br /&gt;
    local html = mw.html.create(&amp;quot;code&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-t-role&amp;quot;, &amp;quot;wrapper&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-t-mode&amp;quot;, mode)&lt;br /&gt;
        :css(&amp;quot;all&amp;quot;, &amp;quot;unset&amp;quot;)&lt;br /&gt;
        :css(&amp;quot;font-family&amp;quot;, &amp;quot;monospace&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :attr(&amp;quot;data-t-role&amp;quot;, &amp;quot;opener&amp;quot;)&lt;br /&gt;
            :wikitext(mw.text.nowiki(&amp;quot;{&amp;quot;):rep(2))&lt;br /&gt;
            :wikitext(opener)&lt;br /&gt;
            :done()&lt;br /&gt;
&lt;br /&gt;
    if options.multiline then&lt;br /&gt;
        html:attr(&amp;quot;data-t-multiline&amp;quot;, &amp;quot;data-t-multiline&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i, param in ipairs(params) do&lt;br /&gt;
        if type(param) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
            error(&amp;quot;invalid entry #&amp;quot; .. i .. &amp;quot; in parameter list&amp;quot;, 3)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        local components = parseParam(param)&lt;br /&gt;
        local paramHtml = html:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
            :attr(&amp;quot;data-t-role&amp;quot;, &amp;quot;parameter&amp;quot;)&lt;br /&gt;
            :attr(&amp;quot;data-t-index&amp;quot;, i)&lt;br /&gt;
            :wikitext(mw.text.nowiki(&amp;quot;|&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        if options.multiline then&lt;br /&gt;
            paramHtml:css(&amp;quot;display&amp;quot;, &amp;quot;block&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if components.name then&lt;br /&gt;
            paramHtml:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
                :attr(&amp;quot;data-t-role&amp;quot;, &amp;quot;parameter-name&amp;quot;)&lt;br /&gt;
                :css(&amp;quot;font-weight&amp;quot;, &amp;quot;bold&amp;quot;)&lt;br /&gt;
                :wikitext(components.name)&lt;br /&gt;
&lt;br /&gt;
            paramHtml:wikitext(&amp;quot; = &amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if components.value then&lt;br /&gt;
            paramHtml:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
                :attr(&amp;quot;data-t-role&amp;quot;, &amp;quot;parameter-value&amp;quot;)&lt;br /&gt;
                :wikitext(components.value)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if components.description then&lt;br /&gt;
            paramHtml:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
                :attr(&amp;quot;data-t-role&amp;quot;, &amp;quot;parameter-description&amp;quot;)&lt;br /&gt;
                :css(&amp;quot;opacity&amp;quot;, &amp;quot;0.65&amp;quot;)&lt;br /&gt;
                :wikitext(mw.text.nowiki(&amp;quot;&amp;lt;&amp;quot;))&lt;br /&gt;
                :wikitext(components.description)&lt;br /&gt;
                :wikitext(mw.text.nowiki(&amp;quot;&amp;gt;&amp;quot;))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    html:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;data-t-role&amp;quot;, &amp;quot;closer&amp;quot;)&lt;br /&gt;
        :wikitext(mw.text.nowiki(&amp;quot;}&amp;quot;):rep(2))&lt;br /&gt;
&lt;br /&gt;
    return tostring(html)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Resolves a transclusion according to the MediaWiki&lt;br /&gt;
-- transclusion resolution algorithm.&lt;br /&gt;
--&lt;br /&gt;
-- @param {string} title&lt;br /&gt;
--        The name of the transclusion to resolve.&lt;br /&gt;
-- @return {string}&lt;br /&gt;
--         The resolved transclusion with the namespace prefix.&lt;br /&gt;
-- @see [[w:Template:Transclude]]&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function resolveTransclusion(title)&lt;br /&gt;
	checkType(&amp;quot;resolveTransclusion&amp;quot;, 1, title, &amp;quot;string&amp;quot;)&lt;br /&gt;
	local i = mw.ustring.find(title, &amp;quot;%:&amp;quot;)&lt;br /&gt;
	if i == 1 then&lt;br /&gt;
		return mw.ustring.sub(title, 2)&lt;br /&gt;
	elseif i ~= nil then&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;Template:&amp;quot; .. title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Generator for transclusion syntax, e.g. `{{foo}}`, `{{:foo}}`,&lt;br /&gt;
-- or `{{Template:Foo}}`.&lt;br /&gt;
--&lt;br /&gt;
-- @param {string} title&lt;br /&gt;
--     The name of the template to link to.&lt;br /&gt;
-- @param[opt] {table|nil} params&lt;br /&gt;
--     A sequentual table of parameters.&lt;br /&gt;
-- @param[opt] {table|nil} options&lt;br /&gt;
--     A table with configuration flags.&lt;br /&gt;
-- @returns {string}&lt;br /&gt;
--     A blob of wikitext describing a template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.transclusion(title, params, options)&lt;br /&gt;
    if type(title) ~= &amp;quot;string&amp;quot; or title == &amp;quot;&amp;quot; then&lt;br /&gt;
        error(&amp;quot;no title specified&amp;quot;, 2)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return builder(&lt;br /&gt;
        &amp;quot;transclusion&amp;quot;,&lt;br /&gt;
        &amp;quot;[[:&amp;quot; .. resolveTransclusion(title) .. &amp;quot;|&amp;quot; .. title .. &amp;quot;]]&amp;quot;,&lt;br /&gt;
        params,&lt;br /&gt;
        options&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Generator for invocation syntax, e.g. `{{#invoke:foo|bar}}`.&lt;br /&gt;
--&lt;br /&gt;
-- @param {string} title&lt;br /&gt;
--     The name of the module to link to, without the namespace prefix.&lt;br /&gt;
-- @param {string} func&lt;br /&gt;
--     The name of the function to call.&lt;br /&gt;
-- @param {table|nil} params&lt;br /&gt;
--     A sequentual table of parameters.&lt;br /&gt;
-- @param {table|nil} options&lt;br /&gt;
--     A table with configuration flags.&lt;br /&gt;
-- @returns {string}&lt;br /&gt;
--     A blob of wikitext describing a module.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.invocation(title, func, params, options)&lt;br /&gt;
    if type(title) ~= &amp;quot;string&amp;quot; or title == &amp;quot;&amp;quot; then&lt;br /&gt;
        error(&amp;quot;no module specified&amp;quot;, 2)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if type(func) ~= &amp;quot;string&amp;quot; or func == &amp;quot;&amp;quot; then&lt;br /&gt;
        error(&amp;quot;no function specified&amp;quot;, 2)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local link = &amp;quot;[[Module:&amp;quot; .. title .. &amp;quot;|&amp;quot; .. title .. &amp;quot;]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return builder(&lt;br /&gt;
        &amp;quot;invocation&amp;quot;,&lt;br /&gt;
        &amp;quot;#invoke:&amp;quot; .. link .. mw.text.nowiki(&amp;quot;|&amp;quot;) .. func,&lt;br /&gt;
        params,&lt;br /&gt;
        options&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Entry point from the wikitext side. Determines which generator to use based&lt;br /&gt;
-- on the provided arguments.&lt;br /&gt;
--&lt;br /&gt;
-- @param {Frame} frame&lt;br /&gt;
--     A frame object whose arguments will determine the correct generator to&lt;br /&gt;
--     use.&lt;br /&gt;
-- @returns {string}&lt;br /&gt;
--     A blob of wikitext describing any brace-based syntax.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    local args = getArgs(frame, {removeBlanks = false})&lt;br /&gt;
    local mode, minimumArity&lt;br /&gt;
&lt;br /&gt;
    if yesno(args.invocation) or yesno(args.i) then&lt;br /&gt;
        mode = &amp;quot;invocation&amp;quot;&lt;br /&gt;
        minimumArity = 2&lt;br /&gt;
    else&lt;br /&gt;
        mode = &amp;quot;transclusion&amp;quot;&lt;br /&gt;
        minimumArity = 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local params = {}&lt;br /&gt;
    local options = {&lt;br /&gt;
        multiline = yesno(args.multiline) or yesno(args.m)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    -- a dynamically-generated list of arguments to the generator&lt;br /&gt;
    -- required arguments are inserted before `params` and `options`&lt;br /&gt;
    local varargs = {params, options}&lt;br /&gt;
&lt;br /&gt;
    for i, value in ipairs(args) do&lt;br /&gt;
        if i &amp;lt;= minimumArity then&lt;br /&gt;
            -- pass the first few values directly to the generator&lt;br /&gt;
            -- these are used to calculate the opener&lt;br /&gt;
            table.insert(varargs, i, value)&lt;br /&gt;
        else&lt;br /&gt;
            -- put the remaining values in a table, and pass it to the generator&lt;br /&gt;
            -- these are shown as parameters in the resulting wikitext&lt;br /&gt;
            params[#params + 1] = value&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local success, response = pcall(p[mode], unpack(varargs))&lt;br /&gt;
&lt;br /&gt;
    return success and response or userError(response)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Mediawiki&gt;ExE Boss</name></author>
	</entry>
</feed>