<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ancestry.jonesipedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>Jonesipedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://ancestry.jonesipedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/genealogy/Special:Contributions/Admin"/>
	<updated>2026-05-10T12:07:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-wmf.1</generator>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Stephen_S._Jones_%26_Susanna_Edward_Wilburn_Family&amp;diff=4035</id>
		<title>Template:Stephen S. Jones &amp; Susanna Edward Wilburn Family</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Stephen_S._Jones_%26_Susanna_Edward_Wilburn_Family&amp;diff=4035"/>
		<updated>2025-01-10T21:44:06Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{documentation}}&lt;br /&gt;
&lt;br /&gt;
{{navbox&lt;br /&gt;
|style = width:auto; text-align:center;&lt;br /&gt;
|name  = Stephen S. Jones &amp;amp; Susanna Edward Wilburn Family&lt;br /&gt;
|title = Stephen S. Jones &amp;amp; Susanna Edward Wilburn Family&lt;br /&gt;
|titlestyle = background: #CEF2E0;&lt;br /&gt;
|state = {{{state&amp;lt;includeonly&amp;gt;|uncollapsed&amp;lt;/includeonly&amp;gt;}}} &lt;br /&gt;
|list1 = &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{chart/start|align=center|summary=Family - Stephen S. Jones with Susanna Edward Wilburn}}&lt;br /&gt;
{{chart | | | | | | | | | |FA|-|v|-|MO||FA=[[Stephen S. Jones Sr. 1750 - 1844|Stephen Jones Sr.&amp;lt;br&amp;gt;1750-1844]]|MO=[[Susanna Edward Wilburn Unk - Unk|Susanna Edward Wilburn&amp;lt;br&amp;gt;Unk - Unk]]&lt;br /&gt;
|border=1&lt;br /&gt;
|boxstyle_FA = background-color: #CEF2E0; border-color: #aaaaaa;&lt;br /&gt;
|boxstyle_MO = background-color: #CEF2E0; border-color: #aaaaaa;&lt;br /&gt;
}}&lt;br /&gt;
{{chart | | | |,|-|-|-|v|-|-|-|v|-|^|-|v|-|-|-|v|-|-|-|.| |}}&lt;br /&gt;
{{chart | | |SON1| |SON2| |SON3| |DAU1| |SON4| |SON5|&lt;br /&gt;
|SON1=[[Gabriel Jones 1771 - 1831|Gabriel&amp;lt;br&amp;gt;1771-1831]]&lt;br /&gt;
|SON2=[[John Jones Sr. 1774 - 1870|John Sr.&amp;lt;br&amp;gt; 1774-1870]]&lt;br /&gt;
|SON3=[[Elijah Jones  1778 - 1860|Elijah&amp;lt;br&amp;gt;1778-1860]]&lt;br /&gt;
|DAU1=[[Mary Anna Jones 1778 - 1848|Mary A.&amp;lt;br&amp;gt;1778-1848]]&lt;br /&gt;
|SON4=[[Zachariah Martin Jones 1787 - 1895|Zachariah M.&amp;lt;br&amp;gt;1787-1859]]&lt;br /&gt;
|SON5=[[Stephen Zachary Jones Jr. 1793 - 1888|Stephen Jr.&amp;lt;br&amp;gt;1793-1888]]&lt;br /&gt;
|border=1&lt;br /&gt;
&lt;br /&gt;
|boxstyle_SON1 = background-color: #CEE0F2; border-color:#A3B1BF;&lt;br /&gt;
|boxstyle_SON2 = background-color: #CEE0F2; border-color:#A3B1BF;&lt;br /&gt;
|boxstyle_SON3 = background-color: #CEE0F2; border-color:#A3B1BF;&lt;br /&gt;
|boxstyle_SON4 = background-color: #CEE0F2; border-color:#A3B1BF;&lt;br /&gt;
|boxstyle_SON5 = background-color: #CEE0F2; border-color:#A3B1BF;&lt;br /&gt;
|boxstyle_SON6 = background-color: #CEE0F2; border-color:#A3B1BF;&lt;br /&gt;
|boxstyle_DAU1 = background-color: #F2CEE0; border-color:#BFA3B1;&lt;br /&gt;
|boxstyle_DAU2 = background-color: #F2CEE0; border-color:#BFA3B1;&lt;br /&gt;
}}&lt;br /&gt;
{{chart/end}}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|list2style=text-align: left&lt;br /&gt;
|list2=&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
{{notelist-lr}} https://www.jonesipedia.com/index.php?route=%2Ftree%2FJones-Herrell%2520Hood-Brown%2520Genealogy%2Findividual%2FI121%2FStephen-S-Jones-Sr&amp;lt;!--- use either {{Efn-lr}} and/or &amp;lt;ref group=lower-roman /&amp;gt; To fill this notelist --&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
|list3style=text-align: left&lt;br /&gt;
|list3=&#039;&#039;&#039;References&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*{{cite ODNB |id=9548 |title=Edward FitzGerald (poet)}}&lt;br /&gt;
*{{cite ODNB |id=1595 |title=Bernard Barton}}&lt;br /&gt;
*{{cite ODNB |id=11834 |title=Maria Hack}}&lt;br /&gt;
*{{cite ODNB |id=37160 |title=John Barton (economist)}} &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|below = Family of Stephen S. Jones &amp;amp; Susanna Edward Wilburn&lt;br /&gt;
|belowstyle = background: #CEF2E0;&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Stephen_S._Jones_%26_Susanna_Edward_Wilburn_Family/doc&amp;diff=4034</id>
		<title>Template:Stephen S. Jones &amp; Susanna Edward Wilburn Family/doc</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Stephen_S._Jones_%26_Susanna_Edward_Wilburn_Family/doc&amp;diff=4034"/>
		<updated>2025-01-10T21:36:10Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;this is documentation for this page&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is documentation for this page&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Anchor&amp;diff=4033</id>
		<title>Template:Anchor</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Anchor&amp;diff=4033"/>
		<updated>2025-01-06T20:02:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:anchor|main}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Template_test_cases_notice&amp;diff=4031</id>
		<title>Template:Template test cases notice</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Template_test_cases_notice&amp;diff=4031"/>
		<updated>2025-01-06T19:56:27Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Testcases notice]]&lt;br /&gt;
&lt;br /&gt;
{{Rcat shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
{{R from alternative name}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Anchor/sandbox&amp;diff=4029</id>
		<title>Module:Anchor/sandbox</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Anchor/sandbox&amp;diff=4029"/>
		<updated>2025-01-06T19:56:26Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{anchor}}.&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local tableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	-- Get the positional arguments from #invoke, remove any nil values,&lt;br /&gt;
	-- and pass them to p._main.&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local argArray = tableTools.compressSparseArray(args)&lt;br /&gt;
	return p._main(unpack(argArray))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(...)&lt;br /&gt;
	-- Generate the list of anchors.&lt;br /&gt;
	local anchors = {...}&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for _, anchor in ipairs(anchors) do&lt;br /&gt;
		ret[#ret + 1] = &#039;&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;&#039; .. anchor .. &#039;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Pagetype/rfd&amp;diff=4027</id>
		<title>Module:Pagetype/rfd</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Pagetype/rfd&amp;diff=4027"/>
		<updated>2025-01-06T19:56:25Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This page contains a table of all RfD templates and their&lt;br /&gt;
-- redirects. Templates names are capitalized, and the Template: prefix is&lt;br /&gt;
-- removed. Templates are grouped with the main template first, followed by&lt;br /&gt;
-- its redirects.&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	-- Template forms (these should be substituted so we should rarely see these)&lt;br /&gt;
	[&amp;quot;Redirect for discussion&amp;quot;] = true,&lt;br /&gt;
		[&amp;quot;RFD&amp;quot;] = true,&lt;br /&gt;
		[&amp;quot;RfD&amp;quot;] = true,&lt;br /&gt;
		[&amp;quot;Rfd1&amp;quot;] = true,&lt;br /&gt;
		[&amp;quot;Rfd-t&amp;quot;] = true,&lt;br /&gt;
		[&amp;quot;Rfd&amp;quot;] = true,&lt;br /&gt;
		[&amp;quot;Rfd-NPF&amp;quot;] = true,&lt;br /&gt;
		[&amp;quot;Rfd-NPF/core&amp;quot;] = true,&lt;br /&gt;
	-- Module forms&lt;br /&gt;
	[&amp;quot;#invoke:RfD&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:RfD&amp;quot;] = true, -- The form made by substituting RfD&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Pagetype/softredirect&amp;diff=4025</id>
		<title>Module:Pagetype/softredirect</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Pagetype/softredirect&amp;diff=4025"/>
		<updated>2025-01-06T19:56:25Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This page contains a table of all soft redirect templates and their&lt;br /&gt;
-- redirects. Templates names are capitalized, and the Template: prefix is&lt;br /&gt;
-- removed. Templates are grouped with the main template first, followed by&lt;br /&gt;
-- its redirects.&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	[&amp;quot;R from category navigation&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Redirect from category navigation&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Category redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Cat move&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Cat red&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Cat redir&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Cat redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Category move&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Category Redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Categoryredirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Catr&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Catred&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Catredir&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Catredirect&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;R from template-generated category&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Redirect from template-generated category&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Portal soft redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Portal Redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Portal redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Portal Soft Redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Portalredirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Portalsoftredirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;PortRed&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Portred&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Portsoftred&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;PSR&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Psr&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Soft portal redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Soft redirect portal&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;SPR&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Spr&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;SRP&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Srp&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Salted redirect&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Soft redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Interwiki redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Plain soft redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Soft&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Soft link&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Soft redir&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Soft Redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Softr&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Softredir&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;SoftRedirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Softredirect&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Userrename&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Wikibooks redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;WBOOK&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wbook&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wikibook redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wikibooks Redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;WikibooksRedirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wikibooksredirect&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Wikimedia Commons redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;COMM&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Comm&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Commons Redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Commons redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;CommonsRedirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Commonsredirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wikimedia commons redirect&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Wikiquote redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wq&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Wikisource redirect&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Wikispecies redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wikispecies Redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;WikispeciesRedirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wikispeciesredirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;WSPEC&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wspec&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Wikivoyage redirect&amp;quot;] = true,&lt;br /&gt;
&lt;br /&gt;
	[&amp;quot;Wiktionary redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Moved to Wiktionary&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;RedirecttoWiktionary&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wi&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wikt red&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wikt redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wiktionary Redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wiktionary-redirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;WiktionaryRedirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wiktionaryredirect&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wiktr&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wiktred&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wiktredir&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wtr&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;Wtsr&amp;quot;] = true,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Wikitext_Parsing&amp;diff=4023</id>
		<title>Module:Wikitext Parsing</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Wikitext_Parsing&amp;diff=4023"/>
		<updated>2025-01-06T19:56:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&amp;quot;strict&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
--Helper functions&lt;br /&gt;
local function startswith(text, subtext)&lt;br /&gt;
	return string.sub(text, 1, #subtext) == subtext&lt;br /&gt;
end&lt;br /&gt;
local function endswith(text, subtext)&lt;br /&gt;
	return string.sub(text, -#subtext, -1) == subtext&lt;br /&gt;
end&lt;br /&gt;
local function allcases(s)&lt;br /&gt;
	return s:gsub(&amp;quot;%a&amp;quot;, function(c) &lt;br /&gt;
		return &amp;quot;[&amp;quot;..c:upper()..c:lower()..&amp;quot;]&amp;quot;&lt;br /&gt;
	end)&lt;br /&gt;
end&lt;br /&gt;
local trimcache = {}&lt;br /&gt;
local whitespace = {[&amp;quot; &amp;quot;]=1, [&amp;quot;\n&amp;quot;]=1, [&amp;quot;\t&amp;quot;]=1, [&amp;quot;\r&amp;quot;]=1}&lt;br /&gt;
local function cheaptrim(str) --mw.text.trim is surprisingly expensive, so here&#039;s an alternative approach&lt;br /&gt;
	local quick = trimcache[str]&lt;br /&gt;
	if quick then&lt;br /&gt;
		return quick&lt;br /&gt;
	else&lt;br /&gt;
		-- local out = string.gsub(str, &amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
		local lowEnd&lt;br /&gt;
		for i = 1,#str do&lt;br /&gt;
			if not whitespace[string.sub(str, i, i)] then&lt;br /&gt;
				lowEnd = i&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not lowEnd then&lt;br /&gt;
			trimcache[str] = &amp;quot;&amp;quot;&lt;br /&gt;
			return &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		for i = #str,1,-1 do&lt;br /&gt;
			if not whitespace[string.sub(str, i, i)] then&lt;br /&gt;
				local out = string.sub(str, lowEnd, i)&lt;br /&gt;
				trimcache[str] = out&lt;br /&gt;
				return out&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[ Implementation notes&lt;br /&gt;
---- NORMAL HTML TAGS ----&lt;br /&gt;
Tags are very strict on how they want to start, but loose on how they end.&lt;br /&gt;
The start must strictly follow &amp;lt;[tAgNaMe](%s|&amp;gt;) with no room for whitespace in&lt;br /&gt;
the tag&#039;s name, but may then flow as they want afterwards, making&lt;br /&gt;
&amp;lt;div\nclass\n=\n&amp;quot;\nerror\n&amp;quot;\n&amp;gt; valid&lt;br /&gt;
&lt;br /&gt;
There&#039;s no sense of escaping &amp;lt; or &amp;gt;&lt;br /&gt;
E.g.&lt;br /&gt;
 &amp;lt;div class=&amp;quot;error\&amp;gt;&amp;quot;&amp;gt; will end at \&amp;gt; despite it being inside a quote&lt;br /&gt;
 &amp;lt;div class=&amp;quot;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;error&amp;lt;/span&amp;gt;&amp;quot;&amp;gt; will not process the larger div&lt;br /&gt;
&lt;br /&gt;
If a tag has no end, it will consume all text instead of not processing&lt;br /&gt;
&lt;br /&gt;
---- NOPROCESSING TAGS (nowiki, pre, syntaxhighlight, source, etc.) ----&lt;br /&gt;
(In most comments, &amp;lt;source&amp;gt; will not be mentioned. This is because it is the&lt;br /&gt;
deprecated version of &amp;lt;syntaxhighlight&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
No-Processing tags have some interesting differences to the above rules.&lt;br /&gt;
For example, their syntax is a lot stricter. While an opening tag appears to&lt;br /&gt;
follow the same set of rules, A closing tag can&#039;t have any sort of extra&lt;br /&gt;
formatting period. While &amp;lt;/div a/a&amp;gt; is valid, &amp;lt;/nowiki a/a&amp;gt; isn&#039;t - only&lt;br /&gt;
newlines and spaces/tabs are allowed in closing tags.&lt;br /&gt;
Note that, even though &amp;lt;pre&amp;gt; tags cause a visual change when the ending tag has&lt;br /&gt;
extra formatting, it won&#039;t cause the no-processing effects. For some reason, the&lt;br /&gt;
format must be strict for that to apply.&lt;br /&gt;
&lt;br /&gt;
Both the content inside the tag pair and the content inside each side of the&lt;br /&gt;
pair is not processed. E.g. &amp;lt;nowiki |}}&amp;gt;|}}&amp;lt;/nowiki&amp;gt; would have both of the |}}&lt;br /&gt;
escaped in practice.&lt;br /&gt;
&lt;br /&gt;
When something in the code is referenced to as a &amp;quot;Nowiki Tag&amp;quot;, it means a tag&lt;br /&gt;
which causes wiki text to not be processed, which includes &amp;lt;nowiki&amp;gt;, &amp;lt;pre&amp;gt;,&lt;br /&gt;
and &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since we only care about these tags, we can ignore the idea of an intercepting&lt;br /&gt;
tag preventing processing, and just go straight for the first ending we can find&lt;br /&gt;
If there is no ending to find, the tag will NOT consume the rest of the text in&lt;br /&gt;
terms of processing behaviour (though &amp;lt;pre&amp;gt; will appear to have an effect).&lt;br /&gt;
Even if there is no end of the tag, the content inside the opening half will&lt;br /&gt;
still be unprocessed, meaning {{X20|&amp;lt;nowiki }}&amp;gt;}} wouldn&#039;t end at the first }}&lt;br /&gt;
despite there being no ending to the tag.&lt;br /&gt;
&lt;br /&gt;
Note that there are some tags, like &amp;lt;math&amp;gt;, which also function like &amp;lt;nowiki&amp;gt;&lt;br /&gt;
which are included in this aswell. Some other tags, like &amp;lt;ref&amp;gt;, have far too&lt;br /&gt;
unpredictable behaviour to be handled currently (they&#039;d have to be split and&lt;br /&gt;
processed as something seperate - its complicated, but maybe not impossible.)&lt;br /&gt;
I suspect that every tag listed in [[Special:Version]] may behave somewhat like&lt;br /&gt;
this, but that&#039;s far too many cases worth checking for rarely used tags that may&lt;br /&gt;
not even have a good reason to contain {{ or }} anyways, so we leave them alone.&lt;br /&gt;
&lt;br /&gt;
---- HTML COMMENTS AND INCLUDEONLY ----&lt;br /&gt;
HTML Comments are about as basic as it could get for this&lt;br /&gt;
Start at &amp;lt;!--, end at --&amp;gt;, no extra conditions. Simple enough&lt;br /&gt;
If a comment has no end, it will eat all text instead of not being processed&lt;br /&gt;
&lt;br /&gt;
includeonly tags function mostly like a regular nowiki tag, with the exception&lt;br /&gt;
that the tag will actually consume all future text if not given an ending as&lt;br /&gt;
opposed to simply giving up and not changing anything. Due to complications and&lt;br /&gt;
the fact that this is far less likely to be present on a page, aswell as being&lt;br /&gt;
something that may not want to be escaped, includeonly tags are ignored during&lt;br /&gt;
our processing&lt;br /&gt;
--]=]&lt;br /&gt;
local validtags = {nowiki=1, pre=1, syntaxhighlight=1, source=1, math=1}&lt;br /&gt;
--This function expects the string to start with the tag&lt;br /&gt;
local function TestForNowikiTag(text, scanPosition)&lt;br /&gt;
	local tagName = (string.match(text, &amp;quot;^&amp;lt;([^\n /&amp;gt;]+)&amp;quot;, scanPosition) or &amp;quot;&amp;quot;):lower()&lt;br /&gt;
	if not validtags[tagName] then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local nextOpener = string.find(text, &amp;quot;&amp;lt;&amp;quot;, scanPosition+1) or -1&lt;br /&gt;
	local nextCloser = string.find(text, &amp;quot;&amp;gt;&amp;quot;, scanPosition+1) or -1&lt;br /&gt;
	if nextCloser &amp;gt; -1 and (nextOpener == -1 or nextCloser &amp;lt; nextOpener) then&lt;br /&gt;
		local startingTag = string.sub(text, scanPosition, nextCloser)&lt;br /&gt;
		--We have our starting tag (E.g. &#039;&amp;lt;pre style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;)&lt;br /&gt;
		--Now find our ending...&lt;br /&gt;
		if endswith(startingTag, &amp;quot;/&amp;gt;&amp;quot;) then --self-closing tag (we are our own ending)&lt;br /&gt;
			return {&lt;br /&gt;
				Tag = tagName,&lt;br /&gt;
				Start = startingTag,&lt;br /&gt;
				Content = &amp;quot;&amp;quot;, End = &amp;quot;&amp;quot;,&lt;br /&gt;
				Length = #startingTag&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		else&lt;br /&gt;
			local endingTagStart, endingTagEnd = string.find(text, &amp;quot;&amp;lt;/&amp;quot;..allcases(tagName)..&amp;quot;[ \t\n]*&amp;gt;&amp;quot;, scanPosition)&lt;br /&gt;
			if endingTagStart then --Regular tag formation&lt;br /&gt;
				local endingTag = string.sub(text, endingTagStart, endingTagEnd)&lt;br /&gt;
				local tagContent = string.sub(text, nextCloser+1, endingTagStart-1)&lt;br /&gt;
				return {&lt;br /&gt;
					Tag = tagName,&lt;br /&gt;
					Start = startingTag,&lt;br /&gt;
					Content = tagContent,&lt;br /&gt;
					End = endingTag,&lt;br /&gt;
					Length = #startingTag + #tagContent + #endingTag&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			else --Content inside still needs escaping (also linter error!)&lt;br /&gt;
				return {&lt;br /&gt;
					Tag = tagName,&lt;br /&gt;
					Start = startingTag,&lt;br /&gt;
					Content = &amp;quot;&amp;quot;, End = &amp;quot;&amp;quot;,&lt;br /&gt;
					Length = #startingTag&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
local function TestForComment(text, scanPosition) --Like TestForNowikiTag but for &amp;lt;!-- --&amp;gt;&lt;br /&gt;
	if string.match(text, &amp;quot;^&amp;lt;!%-%-&amp;quot;, scanPosition) then&lt;br /&gt;
		local commentEnd = string.find(text, &amp;quot;--&amp;gt;&amp;quot;, scanPosition+4, true)&lt;br /&gt;
		if commentEnd then&lt;br /&gt;
			return {&lt;br /&gt;
				Start = &amp;quot;&amp;lt;!--&amp;quot;, End = &amp;quot;--&amp;gt;&amp;quot;,&lt;br /&gt;
				Content = string.sub(text, scanPosition+4, commentEnd-1),&lt;br /&gt;
				Length = commentEnd-scanPosition+3&lt;br /&gt;
			}&lt;br /&gt;
		else --Consumes all text if not given an ending&lt;br /&gt;
			return {&lt;br /&gt;
				Start = &amp;quot;&amp;lt;!--&amp;quot;, End = &amp;quot;&amp;quot;,&lt;br /&gt;
				Content = string.sub(text, scanPosition+4),&lt;br /&gt;
				Length = #text-scanPosition+1&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ Implementation notes&lt;br /&gt;
The goal of this function is to escape all text that wouldn&#039;t be parsed if it&lt;br /&gt;
was preprocessed (see above implementation notes).&lt;br /&gt;
&lt;br /&gt;
Using keepComments will keep all HTML comments instead of removing them. They&lt;br /&gt;
will still be escaped regardless to avoid processing errors&lt;br /&gt;
--]]&lt;br /&gt;
local function PrepareText(text, keepComments)&lt;br /&gt;
	local newtext = {}&lt;br /&gt;
	local scanPosition = 1&lt;br /&gt;
	while true do&lt;br /&gt;
		local NextCheck = string.find(text, &amp;quot;&amp;lt;[NnSsPpMm!]&amp;quot;, scanPosition) --Advance to the next potential tag we care about&lt;br /&gt;
		if not NextCheck then --Done&lt;br /&gt;
			newtext[#newtext+1] =  string.sub(text,scanPosition)&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		newtext[#newtext+1] = string.sub(text,scanPosition,NextCheck-1)&lt;br /&gt;
		scanPosition = NextCheck&lt;br /&gt;
		local Comment = TestForComment(text, scanPosition)&lt;br /&gt;
		if Comment then&lt;br /&gt;
			if keepComments then&lt;br /&gt;
				newtext[#newtext+1] = Comment.Start .. mw.text.nowiki(Comment.Content) .. Comment.End&lt;br /&gt;
			end&lt;br /&gt;
			scanPosition = scanPosition + Comment.Length&lt;br /&gt;
		else&lt;br /&gt;
			local Tag = TestForNowikiTag(text, scanPosition)&lt;br /&gt;
			if Tag then&lt;br /&gt;
				local newTagStart = &amp;quot;&amp;lt;&amp;quot; .. mw.text.nowiki(string.sub(Tag.Start,2,-2)) .. &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				local newTagEnd = &lt;br /&gt;
					Tag.End == &amp;quot;&amp;quot; and &amp;quot;&amp;quot; or --Respect no tag ending&lt;br /&gt;
					&amp;quot;&amp;lt;/&amp;quot; .. mw.text.nowiki(string.sub(Tag.End,3,-2)) .. &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
				local newContent = mw.text.nowiki(Tag.Content)&lt;br /&gt;
				newtext[#newtext+1] = newTagStart .. newContent .. newTagEnd&lt;br /&gt;
				scanPosition = scanPosition + Tag.Length&lt;br /&gt;
			else --Nothing special, move on...&lt;br /&gt;
				newtext[#newtext+1] = string.sub(text, scanPosition, scanPosition)&lt;br /&gt;
				scanPosition = scanPosition + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(newtext, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[ Implementation notes&lt;br /&gt;
This function is an alternative to Transcluder&#039;s getParameters which considers&lt;br /&gt;
the potential for a singular { or } or other odd syntax that %b doesn&#039;t like to&lt;br /&gt;
be in a parameter&#039;s value.&lt;br /&gt;
&lt;br /&gt;
When handling the difference between {{ and {{{, mediawiki will attempt to match&lt;br /&gt;
as many sequences of {{{ as possible before matching a {{&lt;br /&gt;
E.g.&lt;br /&gt;
 {{{{A}}}} -&amp;gt; { {{{A}}} }&lt;br /&gt;
 {{{{{{{{Text|A}}}}}}}} -&amp;gt; {{ {{{ {{{Text|A}}} }}} }}&lt;br /&gt;
If there aren&#039;t enough triple braces on both sides, the parser will compromise&lt;br /&gt;
for a template interpretation.&lt;br /&gt;
E.g.&lt;br /&gt;
 {{{{A}} }} -&amp;gt; {{ {{ A }} }}&lt;br /&gt;
&lt;br /&gt;
While there are technically concerns about things such as wikilinks breaking&lt;br /&gt;
template processing (E.g. {{[[}}]]}} doesn&#039;t stop at the first }}), it shouldn&#039;t&lt;br /&gt;
be our job to process inputs perfectly when the input has garbage ({ / } isn&#039;t&lt;br /&gt;
legal in titles anyways, so if something&#039;s unmatched in a wikilink, it&#039;s&lt;br /&gt;
guaranteed GIGO)&lt;br /&gt;
&lt;br /&gt;
Setting dontEscape will prevent running the input text through EET. Avoid&lt;br /&gt;
setting this to true if you don&#039;t have to set it.&lt;br /&gt;
&lt;br /&gt;
Returned values:&lt;br /&gt;
A table of all templates. Template data goes as follows:&lt;br /&gt;
 Text: The raw text of the template&lt;br /&gt;
 Name: The name of the template&lt;br /&gt;
 Args: A list of arguments&lt;br /&gt;
 Children: A list of immediate template children&lt;br /&gt;
--]=]&lt;br /&gt;
--Helper functions&lt;br /&gt;
local function boundlen(pair)&lt;br /&gt;
	return pair.End-pair.Start+1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Main function&lt;br /&gt;
local function ParseTemplates(InputText, dontEscape)&lt;br /&gt;
	--Setup&lt;br /&gt;
	if not dontEscape then&lt;br /&gt;
		InputText = PrepareText(InputText)&lt;br /&gt;
	end&lt;br /&gt;
	local function finalise(text)&lt;br /&gt;
		if not dontEscape then&lt;br /&gt;
			return mw.text.decode(text)&lt;br /&gt;
		else&lt;br /&gt;
			return text&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function CreateContainerObj(Container)&lt;br /&gt;
		Container.Text = {}&lt;br /&gt;
		Container.Args = {}&lt;br /&gt;
		Container.ArgOrder = {}&lt;br /&gt;
		Container.Children = {}&lt;br /&gt;
		-- Container.Name = nil&lt;br /&gt;
		-- Container.Value = nil&lt;br /&gt;
		-- Container.Key = nil&lt;br /&gt;
		Container.BeyondStart = false&lt;br /&gt;
		Container.LastIndex = 1&lt;br /&gt;
		Container.finalise = finalise&lt;br /&gt;
		function Container:HandleArgInput(character, internalcall)&lt;br /&gt;
			if not internalcall then&lt;br /&gt;
				self.Text[#self.Text+1] = character&lt;br /&gt;
			end&lt;br /&gt;
			if character == &amp;quot;=&amp;quot; then&lt;br /&gt;
				if self.Key then&lt;br /&gt;
					self.Value[#self.Value+1] = character&lt;br /&gt;
				else&lt;br /&gt;
					self.Key = cheaptrim(self.Value and table.concat(self.Value, &amp;quot;&amp;quot;) or &amp;quot;&amp;quot;)&lt;br /&gt;
					self.Value = {}&lt;br /&gt;
				end&lt;br /&gt;
			else --&amp;quot;|&amp;quot; or &amp;quot;}&amp;quot;&lt;br /&gt;
				if not self.Name then&lt;br /&gt;
					self.Name = cheaptrim(self.Value and table.concat(self.Value, &amp;quot;&amp;quot;) or &amp;quot;&amp;quot;)&lt;br /&gt;
					self.Value = nil&lt;br /&gt;
				else&lt;br /&gt;
					self.Value = self.finalise(self.Value and table.concat(self.Value, &amp;quot;&amp;quot;) or &amp;quot;&amp;quot;)&lt;br /&gt;
					if self.Key then&lt;br /&gt;
						self.Key = self.finalise(self.Key)&lt;br /&gt;
						self.Args[self.Key] = cheaptrim(self.Value)&lt;br /&gt;
						self.ArgOrder[#self.ArgOrder+1] = self.Key&lt;br /&gt;
					else&lt;br /&gt;
						local Key = tostring(self.LastIndex)&lt;br /&gt;
						self.Args[Key] = self.Value&lt;br /&gt;
						self.ArgOrder[#self.ArgOrder+1] = Key&lt;br /&gt;
						self.LastIndex = self.LastIndex + 1&lt;br /&gt;
					end&lt;br /&gt;
					self.Key = nil&lt;br /&gt;
					self.Value = nil&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		function Container:AppendText(text, ftext)&lt;br /&gt;
			self.Text[#self.Text+1] = (ftext or text)&lt;br /&gt;
			if not self.Value then&lt;br /&gt;
				self.Value = {}&lt;br /&gt;
			end&lt;br /&gt;
			self.BeyondStart = self.BeyondStart or (#table.concat(self.Text, &amp;quot;&amp;quot;) &amp;gt; 2)&lt;br /&gt;
			if self.BeyondStart then&lt;br /&gt;
				self.Value[#self.Value+1] = text&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		function Container:Clean(IsTemplate)&lt;br /&gt;
			self.Text = table.concat(self.Text, &amp;quot;&amp;quot;)&lt;br /&gt;
			if self.Value and IsTemplate then&lt;br /&gt;
				self.Value = {string.sub(table.concat(self.Value, &amp;quot;&amp;quot;), 1, -3)} --Trim ending }}&lt;br /&gt;
				self:HandleArgInput(&amp;quot;|&amp;quot;, true) --Simulate ending&lt;br /&gt;
			end&lt;br /&gt;
			self.Value = nil&lt;br /&gt;
			self.Key = nil&lt;br /&gt;
			self.BeyondStart = nil&lt;br /&gt;
			self.LastIndex = nil&lt;br /&gt;
			self.finalise = nil&lt;br /&gt;
			self.HandleArgInput = nil&lt;br /&gt;
			self.AppendText = nil&lt;br /&gt;
			self.Clean = nil&lt;br /&gt;
		end&lt;br /&gt;
		return Container&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Step 1: Find and escape the content of all wikilinks on the page, which are stronger than templates (see implementation notes)&lt;br /&gt;
	local scannerPosition = 1&lt;br /&gt;
	local wikilinks = {}&lt;br /&gt;
	local openWikilinks = {}&lt;br /&gt;
	while true do&lt;br /&gt;
		local Position, _, Character = string.find(InputText, &amp;quot;([%[%]])%1&amp;quot;, scannerPosition)&lt;br /&gt;
		if not Position then --Done&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		scannerPosition = Position+2 --+2 to pass the [[ / ]]&lt;br /&gt;
		if Character == &amp;quot;[&amp;quot; then --Add a [[ to the pending wikilink queue&lt;br /&gt;
			openWikilinks[#openWikilinks+1] = Position&lt;br /&gt;
		else --Pair up the ]] to any available [[&lt;br /&gt;
			if #openWikilinks &amp;gt;= 1 then&lt;br /&gt;
				local start = table.remove(openWikilinks) --Pop the latest [[&lt;br /&gt;
				wikilinks[start] = {Start=start, End=Position+1, Type=&amp;quot;Wikilink&amp;quot;} --Note the pair&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Step 2: Find the bounds of every valid template and variable ({{ and {{{)&lt;br /&gt;
	local scannerPosition = 1&lt;br /&gt;
	local templates = {}&lt;br /&gt;
	local variables = {}&lt;br /&gt;
	local openBrackets = {}&lt;br /&gt;
	while true do&lt;br /&gt;
		local Start, _, Character = string.find(InputText, &amp;quot;([{}])%1&amp;quot;, scannerPosition)&lt;br /&gt;
		if not Start then --Done (both 9e9)&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		local _, End = string.find(InputText, &amp;quot;^&amp;quot;..Character..&amp;quot;+&amp;quot;, Start)&lt;br /&gt;
&lt;br /&gt;
		scannerPosition = Start --Get to the {{ / }} set&lt;br /&gt;
		if Character == &amp;quot;{&amp;quot; then --Add the {{+ set to the queue&lt;br /&gt;
			openBrackets[#openBrackets+1] = {Start=Start, End=End}&lt;br /&gt;
&lt;br /&gt;
		else --Pair up the }} to any available {{, accounting for {{{ / }}}&lt;br /&gt;
			local BracketCount = End-Start+1&lt;br /&gt;
			while BracketCount &amp;gt;= 2 and #openBrackets &amp;gt;= 1 do&lt;br /&gt;
				local OpenSet = table.remove(openBrackets)&lt;br /&gt;
				if boundlen(OpenSet) &amp;gt;= 3 and BracketCount &amp;gt;= 3 then --We have a {{{variable}}} (both sides have 3 spare)&lt;br /&gt;
					variables[OpenSet.End-2] = {Start=OpenSet.End-2, End=scannerPosition+2, Type=&amp;quot;Variable&amp;quot;} --Done like this to ensure chronological order&lt;br /&gt;
					BracketCount = BracketCount - 3&lt;br /&gt;
					OpenSet.End = OpenSet.End - 3&lt;br /&gt;
					scannerPosition = scannerPosition + 3&lt;br /&gt;
&lt;br /&gt;
				else --We have a {{template}} (both sides have 2 spare, but at least one side doesn&#039;t have 3 spare)&lt;br /&gt;
					templates[OpenSet.End-1] = {Start=OpenSet.End-1, End=scannerPosition+1, Type=&amp;quot;Template&amp;quot;} --Done like this to ensure chronological order&lt;br /&gt;
					BracketCount = BracketCount - 2&lt;br /&gt;
					OpenSet.End = OpenSet.End - 2&lt;br /&gt;
					scannerPosition = scannerPosition + 2&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if boundlen(OpenSet) &amp;gt;= 2 then --Still has enough data left, leave it in&lt;br /&gt;
					openBrackets[#openBrackets+1] = OpenSet&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		scannerPosition = End --Now move past the bracket set&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Step 3: Re-trace every object using their known bounds, collecting our parameters with (slight) ease&lt;br /&gt;
	local scannerPosition = 1&lt;br /&gt;
	local activeObjects = {}&lt;br /&gt;
	local finalObjects = {}&lt;br /&gt;
	while true do&lt;br /&gt;
		local LatestObject = activeObjects[#activeObjects] --Commonly needed object&lt;br /&gt;
		local NNC, _, Character --NNC = NextNotableCharacter&lt;br /&gt;
		if LatestObject then&lt;br /&gt;
			NNC, _, Character = string.find(InputText, &amp;quot;([{}%[%]|=])&amp;quot;, scannerPosition)&lt;br /&gt;
		else&lt;br /&gt;
			NNC, _, Character = string.find(InputText, &amp;quot;([{}])&amp;quot;, scannerPosition) --We are only after templates right now&lt;br /&gt;
		end&lt;br /&gt;
		if not NNC then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		if NNC &amp;gt; scannerPosition and LatestObject then&lt;br /&gt;
			local scannedContent = string.sub(InputText, scannerPosition, NNC-1)&lt;br /&gt;
			LatestObject:AppendText(scannedContent, finalise(scannedContent))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		scannerPosition = NNC+1&lt;br /&gt;
		if Character == &amp;quot;{&amp;quot; or Character == &amp;quot;[&amp;quot; then&lt;br /&gt;
			local Container = templates[NNC] or variables[NNC] or wikilinks[NNC]&lt;br /&gt;
			if Container then&lt;br /&gt;
				CreateContainerObj(Container)&lt;br /&gt;
				if Container.Type == &amp;quot;Template&amp;quot; then&lt;br /&gt;
					Container:AppendText(&amp;quot;{{&amp;quot;)&lt;br /&gt;
					scannerPosition = NNC+2&lt;br /&gt;
				elseif Container.Type == &amp;quot;Variable&amp;quot; then&lt;br /&gt;
					Container:AppendText(&amp;quot;{{{&amp;quot;)&lt;br /&gt;
					scannerPosition = NNC+3&lt;br /&gt;
				else --Wikilink&lt;br /&gt;
					Container:AppendText(&amp;quot;[[&amp;quot;)&lt;br /&gt;
					scannerPosition = NNC+2&lt;br /&gt;
				end&lt;br /&gt;
				if LatestObject and Container.Type == &amp;quot;Template&amp;quot; then --Only templates count as children&lt;br /&gt;
					LatestObject.Children[#LatestObject.Children+1] = Container&lt;br /&gt;
				end&lt;br /&gt;
				activeObjects[#activeObjects+1] = Container&lt;br /&gt;
			elseif LatestObject then&lt;br /&gt;
				LatestObject:AppendText(Character)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		elseif Character == &amp;quot;}&amp;quot; or Character == &amp;quot;]&amp;quot; then&lt;br /&gt;
			if LatestObject then&lt;br /&gt;
				LatestObject:AppendText(Character)&lt;br /&gt;
				if LatestObject.End == NNC then&lt;br /&gt;
					if LatestObject.Type == &amp;quot;Template&amp;quot; then&lt;br /&gt;
						LatestObject:Clean(true)&lt;br /&gt;
						finalObjects[#finalObjects+1] = LatestObject&lt;br /&gt;
					else&lt;br /&gt;
						LatestObject:Clean(false)&lt;br /&gt;
					end&lt;br /&gt;
					activeObjects[#activeObjects] = nil&lt;br /&gt;
					local NewLatest = activeObjects[#activeObjects]&lt;br /&gt;
					if NewLatest then&lt;br /&gt;
						NewLatest:AppendText(LatestObject.Text) --Append to new latest&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		else --| or =&lt;br /&gt;
			if LatestObject then&lt;br /&gt;
				LatestObject:HandleArgInput(Character)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Step 4: Fix the order&lt;br /&gt;
	local FixedOrder = {}&lt;br /&gt;
	local SortableReference = {}&lt;br /&gt;
	for _,Object in next,finalObjects do&lt;br /&gt;
		SortableReference[#SortableReference+1] = Object.Start&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(SortableReference)&lt;br /&gt;
	for i = 1,#SortableReference do&lt;br /&gt;
		local start = SortableReference[i]&lt;br /&gt;
		for n,Object in next,finalObjects do&lt;br /&gt;
			if Object.Start == start then&lt;br /&gt;
				finalObjects[n] = nil&lt;br /&gt;
				Object.Start = nil --Final cleanup&lt;br /&gt;
				Object.End = nil&lt;br /&gt;
				Object.Type = nil&lt;br /&gt;
				FixedOrder[#FixedOrder+1] = Object&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Finished, return&lt;br /&gt;
	return FixedOrder&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
--Main entry points&lt;br /&gt;
p.PrepareText = PrepareText&lt;br /&gt;
p.ParseTemplates = ParseTemplates&lt;br /&gt;
--Extra entry points, not really required&lt;br /&gt;
p.TestForNowikiTag = TestForNowikiTag&lt;br /&gt;
p.TestForComment = TestForComment&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&lt;br /&gt;
--[==[ console tests&lt;br /&gt;
&lt;br /&gt;
local s = [=[Hey!{{Text|&amp;lt;nowiki | ||&amp;gt;&lt;br /&gt;
Hey! }}&lt;br /&gt;
A&amp;lt;/nowiki&amp;gt;|&amp;lt;!--AAAAA|AAA--&amp;gt;Should see|Shouldn&#039;t see}}]=]&lt;br /&gt;
local out = p.PrepareText(s)&lt;br /&gt;
mw.logObject(out)&lt;br /&gt;
&lt;br /&gt;
local s = [=[B&amp;lt;!--&lt;br /&gt;
Hey!&lt;br /&gt;
--&amp;gt;A]=]&lt;br /&gt;
local out = p.TestForComment(s, 2)&lt;br /&gt;
mw.logObject(out); mw.log(string.sub(s, 2, out.Length))&lt;br /&gt;
&lt;br /&gt;
local a = p.ParseTemplates([=[&lt;br /&gt;
{{User:Aidan9382/templates/dummy&lt;br /&gt;
|A|B|C {{{A|B}}} { } } {&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;E&lt;br /&gt;
|F&amp;lt;/pre&amp;gt;&lt;br /&gt;
|G|=|a=|A  =  [[{{PAGENAME}}|A=B]]{{Text|1==&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;}}|A B=Success}}&lt;br /&gt;
]=])&lt;br /&gt;
mw.logObject(a)&lt;br /&gt;
&lt;br /&gt;
]==]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Transclusion_count/data/A&amp;diff=4021</id>
		<title>Module:Transclusion count/data/A</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Transclusion_count/data/A&amp;diff=4021"/>
		<updated>2025-01-06T19:56:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;A-Class&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;ACArt&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;AFB_game_box_end&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFB_game_box_start&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFC_comment&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;AFC_submission&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;AFC_submission_category_header&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;AFD_help&amp;quot;] = 135000,&lt;br /&gt;
[&amp;quot;AFD_help/styles.css&amp;quot;] = 135000,&lt;br /&gt;
[&amp;quot;AFI/Picture_box/show_picture&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;AFI_film&amp;quot;] = 9100,&lt;br /&gt;
[&amp;quot;AFL_Car&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;AFL_Col&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;AFL_Ess&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;AFL_Gee&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;AFL_Haw&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;AFL_Mel&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;AFL_NM&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;AFL_Ric&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;AFL_StK&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;AFL_Tables&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;AFL_Year&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;AFL_player&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;ALG&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;AMARB&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;AM_station_data&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;ARBPIA&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;ARE&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;ARG&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;ASIN&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;ASN&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;ATP&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;AUS&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;AUT&amp;quot;] = 9900,&lt;br /&gt;
[&amp;quot;AZE&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;A_note&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;A_or_an&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Aan&amp;quot;] = 57000,&lt;br /&gt;
[&amp;quot;Abbr&amp;quot;] = 875000,&lt;br /&gt;
[&amp;quot;Abbreviation&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Abbrlink&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Abot&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;About&amp;quot;] = 161000,&lt;br /&gt;
[&amp;quot;Absolute_page_title&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Acad&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Access_icon&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;According_to_whom&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;AchievementTable&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;AdSenseSummary&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Added&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Adjacent_communities&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Adjacent_stations&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Adjacent_stations/styles.css&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Adjacent_stations_doc&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Adjstn&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Admin&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Admin_help/helped&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Administrator_note&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;Administrators&#039;_noticeboard_archives_all&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Administrators&#039;_noticeboard_navbox_all&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Adminnote&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Advert&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Aet&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;AfC_accept/C_percentage&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;AfC_comment&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;AfC_date_category&amp;quot;] = 226000,&lt;br /&gt;
[&amp;quot;AfC_status/backlog&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;AfC_submission&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;AfC_submission/comments&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;AfC_submission/declined&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;AfC_submission/draft&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;AfC_submission/helptools&amp;quot;] = 36000,&lt;br /&gt;
[&amp;quot;AfC_submission/styles.css&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;AfC_submission_category_header&amp;quot;] = 6200,&lt;br /&gt;
[&amp;quot;AfC_submission_category_header/day&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;AfC_submission_category_header/td&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;AfC_talk/C_percentage&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;AfC_topic&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;AfD_categories_horizontal_shortnames&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;AfD_count_link&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Afd-merged-from&amp;quot;] = 9200,&lt;br /&gt;
[&amp;quot;Africa_topic&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;After_extra_time&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Age&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;Age_in_days&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Age_in_years&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Age_in_years,_months,_weeks_and_days&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Age_in_years,_months_and_days&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Age_in_years_and_days&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Age_in_years_and_days_nts&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Agree&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Ahnentafel&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Ahnentafel/styles.css&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Air_Force_Historical_Research_Agency&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Air_force&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Air_force/core&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Aircontent&amp;quot;] = 9400,&lt;br /&gt;
[&amp;quot;Aircraft_specs&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/convert&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/eng&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/length&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/range&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Aircraft_specs/speed&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Airport-dest-list&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Airport_codes&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Airport_destination_list&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Al&amp;quot;] = 72000,&lt;br /&gt;
[&amp;quot;Album_chart&amp;quot;] = 33000,&lt;br /&gt;
[&amp;quot;Album_chart/chartnote&amp;quot;] = 33000,&lt;br /&gt;
[&amp;quot;Album_cover_fur&amp;quot;] = 53000,&lt;br /&gt;
[&amp;quot;Album_label_category&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Album_label_category/core&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Album_ratings&amp;quot;] = 70000,&lt;br /&gt;
[&amp;quot;Album_reviews&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Albums_category&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Albums_category/core&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Albums_category/type/default&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Align&amp;quot;] = 189000,&lt;br /&gt;
[&amp;quot;Aligned_table&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;AllIrelandByCountyCatNav&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;AllMusic&amp;quot;] = 76000,&lt;br /&gt;
[&amp;quot;All_Ireland_by_county_category_navigation&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Allcaps&amp;quot;] = 9800,&lt;br /&gt;
[&amp;quot;Allcaps/styles.css&amp;quot;] = 9800,&lt;br /&gt;
[&amp;quot;Allmusic&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Allow_wrap&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Already_done&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Also&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Also_known_as&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Alternating_rows_table&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Alternating_rows_table/styles.css&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Alumni&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Always_substitute&amp;quot;] = 8700,&lt;br /&gt;
[&amp;quot;Ambox&amp;quot;] = 1450000,&lt;br /&gt;
[&amp;quot;Ambox_globe&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Ambox_globe_current_red&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;American_English&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;American_football_roster/Footer&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;American_football_roster/Header&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;American_football_roster/Player&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Americanfootballbox&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Anarchism_announcements&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Anarchism_announcements/shell&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Anchor&amp;quot;] = 86000,&lt;br /&gt;
[&amp;quot;Angbr&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Angbr_IPA&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Angle_bracket&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Anglican_navbox_titlestyle&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Anglicise_rank&amp;quot;] = 594000,&lt;br /&gt;
[&amp;quot;Animal_tasks&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;Anime_News_Network&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Ann&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Annotated_link&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Annual_readership&amp;quot;] = 53000,&lt;br /&gt;
[&amp;quot;Anonblock&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Antonym_of_(dis)establish&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Apostrophe&amp;quot;] = 86000,&lt;br /&gt;
[&amp;quot;ArbCom_Arab-Israeli_editnotice&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;ArbCom_Arab-Israeli_enforcement&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Arbitration_Committee_candidate/data&amp;quot;] = 98000,&lt;br /&gt;
[&amp;quot;Archive&amp;quot;] = 313000,&lt;br /&gt;
[&amp;quot;Archive_bottom&amp;quot;] = 55000,&lt;br /&gt;
[&amp;quot;Archive_box&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Archive_list&amp;quot;] = 85000,&lt;br /&gt;
[&amp;quot;Archive_top&amp;quot;] = 36000,&lt;br /&gt;
[&amp;quot;Archive_top/styles.css&amp;quot;] = 36000,&lt;br /&gt;
[&amp;quot;Archive_top_green&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Archive_top_green/styles.css&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Archive_top_red&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Archive_top_red/styles.css&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Archivebottom&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Archivebox&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Archives&amp;quot;] = 52000,&lt;br /&gt;
[&amp;quot;Archivetop&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Army&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Army/core&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Art_UK_bio&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Art_UK_bio/plural&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Article&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;ArticleHistory&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;Article_alerts_box&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Article_alerts_box/styles.css&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Article_for_improvement_banner/Picture_box&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Article_for_improvement_banner/Picture_box/show_picture&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Article_history&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Article_links&amp;quot;] = 482000,&lt;br /&gt;
[&amp;quot;Article_or_page&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Articles_by_Quality&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Articles_by_Quality/down&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Articles_by_Quality/total&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Articles_by_Quality/up&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;As_of&amp;quot;] = 125000,&lt;br /&gt;
[&amp;quot;As_written&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Asbox&amp;quot;] = 2380000,&lt;br /&gt;
[&amp;quot;Asbox/styles.css&amp;quot;] = 2380000,&lt;br /&gt;
[&amp;quot;Asia_topic&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Asof&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;Assessed-Class&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Assignment&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Assignment_milestones&amp;quot;] = 5300,&lt;br /&gt;
[&amp;quot;Association_of_Tennis_Professionals_link&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;AstDys&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Asterisk&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;AthAbbr&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Atnhead&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Atop&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Atopg&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;Atopr&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Attached_KML&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Au&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;AuEduNewbie&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Audio&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;Audio_sample&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;AustralianFootball&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Australian_Dictionary_of_Biography&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Australian_English&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Australian_party_style&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;Australian_politics/name&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Australian_politics/party_colours&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Austria_metadata_Wikidata&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Austria_population_Wikidata&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Aut&amp;quot;] = 7900,&lt;br /&gt;
[&amp;quot;Authority_control&amp;quot;] = 2140000,&lt;br /&gt;
[&amp;quot;Authority_control_(arts)&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Auto_link&amp;quot;] = 84000,&lt;br /&gt;
[&amp;quot;Autobiography&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Automated_tools&amp;quot;] = 82000,&lt;br /&gt;
[&amp;quot;Automated_tools/core&amp;quot;] = 82000,&lt;br /&gt;
[&amp;quot;Automatic_archive_navigator&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Automatic_category_TOC&amp;quot;] = 812000,&lt;br /&gt;
[&amp;quot;Automatic_category_TOC/core&amp;quot;] = 811000,&lt;br /&gt;
[&amp;quot;Automatic_taxobox&amp;quot;] = 84000,&lt;br /&gt;
[&amp;quot;Aviation_Safety_Network_accident_history&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Aviation_accidents_and_incidents&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Avoid_wrap&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Awaiting_admin&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Awaitingadmin&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Award2&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Awards&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Awards_table&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Awards_table/styles.css&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Ayd&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Aye&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:A_or_an&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Module:A_or_an/words&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Module:About&amp;quot;] = 161000,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations&amp;quot;] = 77000,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations/Amtrak&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations/Indian_Railways&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations/JR_East&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Module:Adjacent_stations/i18n&amp;quot;] = 77000,&lt;br /&gt;
[&amp;quot;Module:Administrators&#039;_noticeboard_archives&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Module:AfC_submission_catcheck&amp;quot;] = 388000,&lt;br /&gt;
[&amp;quot;Module:AfC_topic&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Module:Age&amp;quot;] = 1270000,&lt;br /&gt;
[&amp;quot;Module:Ahnentafel&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Module:Airport_destination_list&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Module:Aligned_dates_list&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Module:Aligned_table&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:All_Ireland_by_county_category_navigation&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Module:Anchor&amp;quot;] = 86000,&lt;br /&gt;
[&amp;quot;Module:Ancient_Egypt_era&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Ancient_Egypt_era/data&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Ancient_Egypt_kings&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Ancient_Egypt_kings/data&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Ancient_Olympiads&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Ancient_Olympiads/data&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Annotated_link&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Module:Archive&amp;quot;] = 313000,&lt;br /&gt;
[&amp;quot;Module:Archive/config&amp;quot;] = 313000,&lt;br /&gt;
[&amp;quot;Module:Archive_list&amp;quot;] = 87000,&lt;br /&gt;
[&amp;quot;Module:Arguments&amp;quot;] = 33900000,&lt;br /&gt;
[&amp;quot;Module:Armenian&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Article_history&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Module:Article_history/Category&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Module:Article_history/config&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Module:Article_history/styles.css&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Module:Articles_by_importance&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Module:Articles_by_quality&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Module:Asbox&amp;quot;] = 2380000,&lt;br /&gt;
[&amp;quot;Module:Asbox_stubtree&amp;quot;] = 37000,&lt;br /&gt;
[&amp;quot;Module:Attached_KML&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Attached_KML/styles.css&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Australian_place_map&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Module:Authority_control&amp;quot;] = 2160000,&lt;br /&gt;
[&amp;quot;Module:Authority_control/auxiliary&amp;quot;] = 693000,&lt;br /&gt;
[&amp;quot;Module:Authority_control/config&amp;quot;] = 2160000,&lt;br /&gt;
[&amp;quot;Module:Automated_taxobox&amp;quot;] = 427000,&lt;br /&gt;
[&amp;quot;Module:Autotaxobox&amp;quot;] = 594000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Bot_use_warning&amp;diff=4019</id>
		<title>Template:Bot use warning</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Bot_use_warning&amp;diff=4019"/>
		<updated>2025-01-06T19:56:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|image=[[File:Logo wikibot.svg|60px|link=|alt=]]&lt;br /&gt;
|textstyle=text-align: center&lt;br /&gt;
|text=&amp;lt;span style=&amp;quot;font-size: larger; font-weight: bold&amp;quot;&amp;gt;This {{{namespace|{{pagetype|defaultns=extended}}}}} {{#if:{{yesno|{{{subcats|}}}}}| and subcategories are | is }} used by one or more [[Wikipedia:Bots|bots]].&amp;lt;/span&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
If you intend to make significant changes to this {{{namespace|{{pagetype|defaultns=extended}}}}}, move it, or nominate it for deletion, &#039;&#039;&#039;please notify the bot operator(s) in advance&#039;&#039;&#039;. {{#if:{{{bot|{{{bots|}}}}}}|The relevant bots are: {{{bot|{{{bots}}}}}}.}}}}&amp;lt;includeonly&amp;gt;{{Sandbox other||[[Category:Pages monitored by Wikipedia bots]]}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&amp;lt;!-- Please place categories and language links on the /doc page, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:TemplateDataHeader&amp;diff=4017</id>
		<title>Template:TemplateDataHeader</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:TemplateDataHeader&amp;diff=4017"/>
		<updated>2025-01-06T19:56:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:TemplateData header]]&lt;br /&gt;
{{R from move}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Template_parameter_usage&amp;diff=4015</id>
		<title>Template:Template parameter usage</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Template_parameter_usage&amp;diff=4015"/>
		<updated>2025-01-06T19:56:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:{{{label|}}}&lt;br /&gt;
 |=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&amp;amp;template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|S|s}}ee a monthly parameter usage report] for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|this template}} in articles{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&amp;amp;#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}}.&lt;br /&gt;
 |None|none=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&amp;amp;template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report]{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&amp;amp;#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}}&lt;br /&gt;
 |for|For=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&amp;amp;template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report] for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|[[Template:{{ROOTPAGENAME}}]]}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&amp;amp;#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}}.&lt;br /&gt;
 |#default=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&amp;amp;template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{{label|}}}]{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&amp;amp;#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:TemplateData_header&amp;diff=4013</id>
		<title>Template:TemplateData header</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:TemplateData_header&amp;diff=4013"/>
		<updated>2025-01-06T19:56:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;templatedata-header&amp;quot;&amp;gt;{{#if:{{{noheader|}}}|&amp;lt;!--&lt;br /&gt;
 noheader:&lt;br /&gt;
--&amp;gt;{{Template parameter usage|{{{1|{{BASEPAGENAME}}}}}|based=y}}|&amp;lt;!--&lt;br /&gt;
 +header:&lt;br /&gt;
--&amp;gt;This is the {{#if:{{{nolink|}}}|&amp;lt;!--&lt;br /&gt;
  +header, nolink TD&lt;br /&gt;
  --&amp;gt;TemplateData|&amp;lt;!--&lt;br /&gt;
  +header,  +link [[TD]]; DEFAULT:&lt;br /&gt;
--&amp;gt;[[Wikipedia:TemplateData|TemplateData]]}}&amp;lt;!--&lt;br /&gt;
   e.o. #if:nolink; DEFAULT:&lt;br /&gt;
--&amp;gt; for this template used by [[mw:Extension:TemplateWizard|TemplateWizard]], [[Wikipedia:VisualEditor|VisualEditor]] and other tools. {{Template parameter usage|{{{1|{{BASEPAGENAME}}}}}|based=y}}&amp;lt;!--&lt;br /&gt;
   e.o. #if:noheader&lt;br /&gt;
--&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TemplateData for {{{1|{{BASEPAGENAME}}}}}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
 check parameters&lt;br /&gt;
--&amp;gt;{{#invoke:Check for unknown parameters|check&lt;br /&gt;
|unknown={{template other|1=[[Category:Pages using TemplateData header with unknown parameters|_VALUE_]]}}&lt;br /&gt;
|template=Template:TemplateData header&lt;br /&gt;
|1 |nolink |noheader&lt;br /&gt;
|preview=&amp;lt;div class=&amp;quot;error&amp;quot; style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;Unknown parameter &#039;_VALUE_&#039; in [[Template:TemplateData header]].&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{template other|{{sandbox other||&lt;br /&gt;
[[Category:Templates using TemplateData]]&lt;br /&gt;
&lt;br /&gt;
}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Template_link_code&amp;diff=4011</id>
		<title>Template:Template link code</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Template_link_code&amp;diff=4011"/>
		<updated>2025-01-06T19:56:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#Invoke:Template link general|main|nolink=yes|code=yes|nowrap=yes}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|1=Template:Tlg/doc&lt;br /&gt;
|content = {{tlg/doc|tlc}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Tlc&amp;diff=4009</id>
		<title>Template:Tlc</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Tlc&amp;diff=4009"/>
		<updated>2025-01-06T19:56:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Template link code]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from template shortcut}}&lt;br /&gt;
{{R from high-use template}}&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Warning&amp;diff=4007</id>
		<title>Template:Warning</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Warning&amp;diff=4007"/>
		<updated>2025-01-06T19:56:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Mbox&lt;br /&gt;
| name       = Warning&lt;br /&gt;
| demospace  = {{{demospace|}}}&lt;br /&gt;
| style      = {{#if:{{{style|}}} |{{{style}}} }}&lt;br /&gt;
| subst      = &amp;lt;includeonly&amp;gt;{{subst:substcheck}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
| type       = content&lt;br /&gt;
| image      = {{#if:{{{image|}}}| [[File:{{{image}}}|{{{imagesize|40px}}}|Warning]] }}&lt;br /&gt;
| small      = {{{small|}}}&lt;br /&gt;
| smallimage = {{#if:{{{image|}}}| [[File:{{{image}}}|30px|Warning]]}}&lt;br /&gt;
| imageright = {{#if:{{{imageright|}}} |{{{imageright}}} |{{#if:{{{shortcut|{{{shortcut1|}}}}}} |{{Ombox/shortcut|{{{shortcut|{{{shortcut1|}}}}}}|{{{shortcut2|}}}|{{{shortcut3|}}}|{{{shortcut4|}}}|{{{shortcut5|}}}}}}} }}&lt;br /&gt;
| textstyle  = {{{textstyle|text-align: {{#if:{{{center|}}}|center|{{{align|left}}}}};}}}&lt;br /&gt;
| text       = {{#if:{{{header|{{{heading|{{{title|}}}}}}}}} |&amp;lt;div style=&amp;quot;{{{headstyle|text-align: {{#if:{{{center|}}}|center|left}};}}}&amp;quot;&amp;gt;&#039;&#039;&#039;{{{header|{{{heading|{{{title|}}}}}}}}}&#039;&#039;&#039;&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
            --&amp;gt;{{{text|{{{content|{{{reason|{{{1}}}}}}}}}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage; interwikis go to Wikidata. --&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:N/a&amp;diff=4005</id>
		<title>Template:N/a</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:N/a&amp;diff=4005"/>
		<updated>2025-01-06T19:56:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
   | &amp;lt;/noinclude&amp;gt;&amp;lt;onlyinclude&amp;gt;data-sort-value=&amp;quot;{{{sort|}}}&amp;quot; style=&amp;quot;background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: {{{align|center}}}; {{{style|}}}&amp;quot; class=&amp;quot;table-na&amp;quot; &amp;lt;!--&lt;br /&gt;
--&amp;gt;| {{{1|—}}}&amp;lt;/onlyinclude&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
|}{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Code&amp;diff=4003</id>
		<title>Template:Code</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Code&amp;diff=4003"/>
		<updated>2025-01-06T19:56:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#tag:syntaxhighlight|{{{code|{{{1}}}}}}|lang={{{lang|{{{2|text}}}}}}|class={{{class|}}}|style={{{style|}}}|inline=1}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Pagetype/config&amp;diff=4001</id>
		<title>Module:Pagetype/config</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Pagetype/config&amp;diff=4001"/>
		<updated>2025-01-06T19:56:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                  Module:Pagetype configuration data                        --&lt;br /&gt;
-- This page holds localisation and configuration data for Module:Pagetype.   --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Don&#039;t edit this line.&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                        Start configuration data                            --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- This table holds the default page types for each namespace. Keys to this&lt;br /&gt;
-- table should be integers that can be used as keys to mw.site.namespaces.&lt;br /&gt;
cfg.pagetypes = {&lt;br /&gt;
	[0]    = &#039;article&#039;, -- Main namespace&lt;br /&gt;
	[2]    = &#039;user page&#039;,&lt;br /&gt;
	[4]    = &#039;project page&#039;,&lt;br /&gt;
	[6]    = &#039;file&#039;,&lt;br /&gt;
	[8]    = &#039;interface page&#039;, -- MediaWiki namespace&lt;br /&gt;
	[10]   = &#039;template&#039;,&lt;br /&gt;
	[12]   = &#039;help page&#039;,&lt;br /&gt;
	[14]   = &#039;category&#039;,&lt;br /&gt;
	[100]  = &#039;portal&#039;,&lt;br /&gt;
	[118]  = &#039;draft&#039;,&lt;br /&gt;
	[710]  = &#039;Timed Text page&#039;,&lt;br /&gt;
	[828]  = &#039;module&#039;,&lt;br /&gt;
	[2300] = &#039;gadget&#039;,&lt;br /&gt;
	[2302] = &#039;gadget definition&#039;,&lt;br /&gt;
	[-1]   = &#039;special page&#039;,&lt;br /&gt;
	[-2]   = &#039;file&#039;, -- Media namespace&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- This table holds the namespaces to be looked up from cfg.pagetypes by&lt;br /&gt;
-- default.&lt;br /&gt;
cfg.defaultNamespaces = {&lt;br /&gt;
	[0] = true,   -- main&lt;br /&gt;
	[6] = true,   -- file&lt;br /&gt;
	[10] = true,  -- template&lt;br /&gt;
	[14] = true,  -- category&lt;br /&gt;
	[828] = true, -- module&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- This table holds the namespaces to be looked up from cfg.pagetypes if&lt;br /&gt;
-- cfg.defaultnsExtended is set.&lt;br /&gt;
cfg.extendedNamespaces = {&lt;br /&gt;
	[0] = true,   -- main&lt;br /&gt;
	[2] = true,   -- user&lt;br /&gt;
	[4] = true,   -- project&lt;br /&gt;
	[6] = true,   -- file&lt;br /&gt;
	[8] = true,   -- mediawiki&lt;br /&gt;
	[10] = true,  -- template&lt;br /&gt;
	[12] = true,  -- help&lt;br /&gt;
	[14] = true,  -- category&lt;br /&gt;
	[100] = true, -- portal&lt;br /&gt;
	[118] = true, -- draft&lt;br /&gt;
	[828] = true, -- module&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- This table holds custom aliases for each namespace.&lt;br /&gt;
cfg.customNamespaceAliases = {&lt;br /&gt;
	[0] = {&#039;main&#039;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to set which default namespace values to be looked up from&lt;br /&gt;
-- cfg.pagetypes.&lt;br /&gt;
cfg.defaultns = &#039;defaultns&#039;&lt;br /&gt;
&lt;br /&gt;
-- The value of cfg.defaultns to set all namespaces, including talk.&lt;br /&gt;
cfg.defaultnsAll = &#039;all&#039;&lt;br /&gt;
&lt;br /&gt;
-- The value of cfg.defaultns to set the namespaces listed in&lt;br /&gt;
-- cfg.extendedNamespaces&lt;br /&gt;
cfg.defaultnsExtended = &#039;extended&#039;&lt;br /&gt;
&lt;br /&gt;
-- The value of cfg.defaultns to set no default namespaces.&lt;br /&gt;
cfg.defaultnsNone = &#039;none&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to use for talk pages.&lt;br /&gt;
cfg.talk = &#039;talk&#039;&lt;br /&gt;
&lt;br /&gt;
-- The default value for talk pages.&lt;br /&gt;
cfg.talkDefault = &#039;talk page&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to use for disambiguation pages page.&lt;br /&gt;
cfg.dab = &#039;dab&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to use for non-existent pages.&lt;br /&gt;
cfg.ne = &#039;nonexistent&#039;&lt;br /&gt;
cfg.neDefault = &#039;page&#039;&lt;br /&gt;
&lt;br /&gt;
cfg.softRedirect = &#039;soft_redirect&#039;&lt;br /&gt;
cfg.softRedirectDefault = &#039;redirect&#039;&lt;br /&gt;
&lt;br /&gt;
cfg.sia = &#039;sia&#039;&lt;br /&gt;
cfg.siaDefault = &#039;article&#039;&lt;br /&gt;
&lt;br /&gt;
cfg.rfd = &#039;redirect&#039;&lt;br /&gt;
cfg.rfdDefault = &#039;redirect&#039;&lt;br /&gt;
&lt;br /&gt;
-- This table holds the different possible aliases for disambiguation-class&lt;br /&gt;
-- pages. These should be lower-case.&lt;br /&gt;
cfg.dabAliases = {&lt;br /&gt;
	[&#039;disambiguation&#039;] = true,&lt;br /&gt;
	[&#039;disambig&#039;] = true,&lt;br /&gt;
	[&#039;disamb&#039;] = true,&lt;br /&gt;
	[&#039;dab&#039;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- The default value for disambiguation pages.&lt;br /&gt;
cfg.dabDefault = &#039;page&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to use for N/A-class page.&lt;br /&gt;
cfg.na = &#039;na&#039;&lt;br /&gt;
&lt;br /&gt;
-- This table holds the different possible aliases for N/A-class pages. These&lt;br /&gt;
-- should be lower-case.&lt;br /&gt;
cfg.naAliases = {&lt;br /&gt;
	[&#039;na&#039;] = true,&lt;br /&gt;
	[&#039;n/a&#039;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- The default value for N/A-class pages.&lt;br /&gt;
cfg.naDefault = &#039;page&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name to use for redirects.&lt;br /&gt;
cfg.redirect = &#039;redirect&#039;&lt;br /&gt;
&lt;br /&gt;
-- The default value to use for redirects.&lt;br /&gt;
cfg.redirectDefault = &#039;redirect&#039;&lt;br /&gt;
&lt;br /&gt;
-- The parameter name for undefined namespaces.&lt;br /&gt;
cfg.other = &#039;other&#039;&lt;br /&gt;
&lt;br /&gt;
-- The value used if the module detects an undefined namespace.&lt;br /&gt;
cfg.otherDefault = &#039;page&#039;&lt;br /&gt;
&lt;br /&gt;
-- The usual suffix denoting a plural.&lt;br /&gt;
cfg.plural = &#039;s&#039;&lt;br /&gt;
&lt;br /&gt;
-- This table holds plurals not formed by a simple suffix.&lt;br /&gt;
cfg.irregularPlurals = {&lt;br /&gt;
	[&amp;quot;category&amp;quot;] = &amp;quot;categories&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                        End configuration data                              --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don&#039;t edit this line&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Pagetype&amp;diff=3999</id>
		<title>Module:Pagetype</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Pagetype&amp;diff=3999"/>
		<updated>2025-01-06T19:56:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--      This meta-module which automatically detects namespaces, and allows   --&lt;br /&gt;
--      for a great deal of customisation. It can easily be ported to other   --&lt;br /&gt;
--      wikis by changing the values in the [[Module:Pagetype/config]].       --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Load config.&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Pagetype/config&#039;)&lt;br /&gt;
&lt;br /&gt;
-- Load required modules.&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Look up a namespace argument in the args table.&lt;br /&gt;
local function lookUpNamespaceArg(args, key)&lt;br /&gt;
	local arg = args[key]&lt;br /&gt;
	-- Convert &amp;quot;yes&amp;quot;, &amp;quot;1&amp;quot; etc. to true, &amp;quot;no&amp;quot;, &amp;quot;0&amp;quot; etc. to false, and leave&lt;br /&gt;
	-- other values the same.&lt;br /&gt;
	return yesno(arg, arg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Append multiple values to an array&lt;br /&gt;
local function appendMultiple(target, source)&lt;br /&gt;
	for _, value in ipairs(source) do&lt;br /&gt;
		table.insert(target, value)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get argument keys for a title&#039;s namespace&lt;br /&gt;
local function getNamespaceArgKeys(title)&lt;br /&gt;
	local nsInfo = mw.site.namespaces[title.namespace]&lt;br /&gt;
	local customAliases = cfg.customNamespaceAliases[title.namespace] or {}&lt;br /&gt;
	local keys = {}&lt;br /&gt;
	if nsInfo.name ~= &#039;&#039; then&lt;br /&gt;
		table.insert(keys, nsInfo.name)&lt;br /&gt;
	end&lt;br /&gt;
	if nsInfo.canonicalName ~= nsInfo.name and nsInfo.canonicalName ~= &#039;&#039; then&lt;br /&gt;
		table.insert(keys, nsInfo.canonicalName)&lt;br /&gt;
	end&lt;br /&gt;
	appendMultiple(keys, nsInfo.aliases)&lt;br /&gt;
	appendMultiple(keys, customAliases)&lt;br /&gt;
	return keys&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the argument for a title&#039;s namespace, if it was specified in the args table.&lt;br /&gt;
local function getNamespaceArg(title, args)&lt;br /&gt;
	if title.isTalkPage then&lt;br /&gt;
		return lookUpNamespaceArg(args, cfg.talk)&lt;br /&gt;
	end&lt;br /&gt;
	for _, key in ipairs(getNamespaceArgKeys(title)) do&lt;br /&gt;
		local arg = lookUpNamespaceArg(args, mw.ustring.lower(key))&lt;br /&gt;
		if arg ~= nil then&lt;br /&gt;
			return arg&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Look up a page type specific to the title&#039;s namespace&lt;br /&gt;
local function getExplicitPageType(title)&lt;br /&gt;
	if title.isTalkPage then&lt;br /&gt;
		return cfg.talkDefault&lt;br /&gt;
	else&lt;br /&gt;
		return cfg.pagetypes[title.namespace]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get a default page type that is not specific to the title&#039;s namespace&lt;br /&gt;
local function getDefaultPageType(args)&lt;br /&gt;
	local other = lookUpNamespaceArg(args, cfg.other)&lt;br /&gt;
	if type(other) == &#039;string&#039; then&lt;br /&gt;
		return other&lt;br /&gt;
	else&lt;br /&gt;
		return cfg.otherDefault&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function detectRedirects(title, args)&lt;br /&gt;
	local redirect = lookUpNamespaceArg(args, cfg.redirect)&lt;br /&gt;
	if redirect == false then&lt;br /&gt;
		-- Don&#039;t detect redirects if they have been specifically disallowed.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Allow custom values for redirects.&lt;br /&gt;
	if not title.isRedirect then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif type(redirect) == &#039;string&#039; then&lt;br /&gt;
		return redirect&lt;br /&gt;
	else&lt;br /&gt;
		return cfg.redirectDefault&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function capitalize(pageType)&lt;br /&gt;
	local first = mw.ustring.sub(pageType, 1, 1)&lt;br /&gt;
	local rest = mw.ustring.sub(pageType, 2)&lt;br /&gt;
	return mw.ustring.upper(first) .. rest&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function pluralize(pageType)&lt;br /&gt;
	if cfg.irregularPlurals[pageType] then&lt;br /&gt;
		return cfg.irregularPlurals[pageType]&lt;br /&gt;
	else&lt;br /&gt;
		return pageType .. cfg.plural -- often &#039;s&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseContent(title, args, optionsList)&lt;br /&gt;
	if title.namespace==828 and title.subpageText~=&#039;doc&#039; -- don&#039;t detect modules&lt;br /&gt;
		or not title.exists -- can&#039;t check unless page exists&lt;br /&gt;
	then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local content = title:getContent()&lt;br /&gt;
	if content == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local templates -- lazily evaluated&lt;br /&gt;
	for _, options in next, optionsList do&lt;br /&gt;
		local list, parameter, default, articleOnly = unpack(options, 1, 4)&lt;br /&gt;
		if not articleOnly or title.namespace==0 then -- only check for templates if we should...&lt;br /&gt;
			local out = lookUpNamespaceArg(args, parameter)&lt;br /&gt;
			if type(out) == &amp;quot;string&amp;quot; or (out ~= false and default) then -- ...and if we actually have anything to say about them&lt;br /&gt;
				if not templates then&lt;br /&gt;
					templates = {} -- do our delayed evaluation now that we are required to&lt;br /&gt;
					content = require(&#039;Module:Wikitext Parsing&#039;).PrepareText(content) -- disregard templates which do not have any affect&lt;br /&gt;
					for template in string.gmatch(content, &amp;quot;{{%s*([^|}]-)%s*[|}]&amp;quot;) do&lt;br /&gt;
						templates[#templates+1] = capitalize(template)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				local wantedTemplates = mw.loadData(&#039;Module:Pagetype/&#039; .. list)&lt;br /&gt;
				local templateFound = false&lt;br /&gt;
				for _, template in next, templates do&lt;br /&gt;
					if wantedTemplates[template] then&lt;br /&gt;
						templateFound = true&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if templateFound then&lt;br /&gt;
					if type(out)==&#039;string&#039; then&lt;br /&gt;
						return out&lt;br /&gt;
					elseif out ~= false and default then&lt;br /&gt;
						return default&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Find pages which do not exist&lt;br /&gt;
local function nonExistent(title, args)&lt;br /&gt;
	local arg = lookUpNamespaceArg(args, cfg.ne)&lt;br /&gt;
	if arg == false then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local exists = false&lt;br /&gt;
	if title.exists then -- not an article if it does not exist&lt;br /&gt;
		exists = true&lt;br /&gt;
	elseif title.namespace==8 and mw.message.new(title.text):exists() then&lt;br /&gt;
		exists = true&lt;br /&gt;
	elseif title.namespace==6 and title.fileExists then&lt;br /&gt;
		exists = true&lt;br /&gt;
	end&lt;br /&gt;
	if not exists then&lt;br /&gt;
		if type(arg) == &#039;string&#039; then&lt;br /&gt;
			return arg&lt;br /&gt;
		else&lt;br /&gt;
			return cfg.naDefault&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get page types for mainspaces pages with an explicit class specified&lt;br /&gt;
local function getMainNamespaceClassPageType(title, args)&lt;br /&gt;
	local class = args[1]&lt;br /&gt;
	if type(class) == &#039;string&#039; then	-- Put in lower case so e.g. &amp;quot;na&amp;quot; and &amp;quot;NA&amp;quot; will both match&lt;br /&gt;
		class = mw.ustring.lower(class)&lt;br /&gt;
	end&lt;br /&gt;
	local arg = lookUpNamespaceArg(args, cfg.na)&lt;br /&gt;
	if arg == false then -- don&#039;t check for this class if it is specifically disallowed&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if cfg.naAliases[class] then&lt;br /&gt;
		if type(arg) == &#039;string&#039; then&lt;br /&gt;
			return arg&lt;br /&gt;
		else&lt;br /&gt;
			return cfg.naDefault&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get page type specified by an explicit namespace argument.&lt;br /&gt;
local function getNamespaceArgPageType(title, args)&lt;br /&gt;
	local namespaceArg = getNamespaceArg(title, args)&lt;br /&gt;
	if namespaceArg == true then&lt;br /&gt;
		-- Namespace has been explicitly enabled, so return the default for&lt;br /&gt;
		-- this namespace&lt;br /&gt;
		return getExplicitPageType(title)&lt;br /&gt;
	elseif namespaceArg == false then&lt;br /&gt;
		-- Namespace has been explicitly disabled&lt;br /&gt;
		return getDefaultPageType(args)&lt;br /&gt;
	elseif namespaceArg then&lt;br /&gt;
		-- This namespaces uses custom text&lt;br /&gt;
		return namespaceArg&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Get page type not specified or detected by other means&lt;br /&gt;
local function getOtherPageType(title, args)&lt;br /&gt;
-- Whether the title is in the set of default active namespaces which are looked up in cfg.pagetypes.&lt;br /&gt;
	local isInDefaultActiveNamespace = false&lt;br /&gt;
	local defaultNamespacesKey = args[cfg.defaultns]&lt;br /&gt;
	if defaultNamespacesKey == cfg.defaultnsAll then&lt;br /&gt;
		isInDefaultActiveNamespace = true&lt;br /&gt;
	else&lt;br /&gt;
		local defaultNamespaces&lt;br /&gt;
		if defaultNamespacesKey == cfg.defaultnsExtended then&lt;br /&gt;
			defaultNamespaces = cfg.extendedNamespaces&lt;br /&gt;
		elseif defaultNamespacesKey == cfg.defaultnsNone then&lt;br /&gt;
			defaultNamespaces = {}&lt;br /&gt;
		else&lt;br /&gt;
			defaultNamespaces = cfg.defaultNamespaces&lt;br /&gt;
		end&lt;br /&gt;
		isInDefaultActiveNamespace = defaultNamespaces[title.namespace]&lt;br /&gt;
	end&lt;br /&gt;
	if isInDefaultActiveNamespace then&lt;br /&gt;
		return getExplicitPageType(title)&lt;br /&gt;
	else&lt;br /&gt;
		return getDefaultPageType(args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local title&lt;br /&gt;
	if args.page then&lt;br /&gt;
		title = mw.title.new(args.page)&lt;br /&gt;
	else&lt;br /&gt;
		title = mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
	if title and not yesno(args.talk, true) and args[cfg.defaultns] ~= cfg.defaultnsAll then&lt;br /&gt;
		title = title.subjectPageTitle&lt;br /&gt;
	end&lt;br /&gt;
	local pageType = detectRedirects(title, args)&lt;br /&gt;
		or nonExistent(title, args)&lt;br /&gt;
		or parseContent(title, args, {&lt;br /&gt;
			{&#039;softredirect&#039;, cfg.softRedirect, cfg.softRedirectDefault},&lt;br /&gt;
			{&#039;setindex&#039;, cfg.sia, cfg.siaDefault, true},&lt;br /&gt;
			{&#039;disambiguation&#039;, cfg.dab, cfg.dabDefault, true},&lt;br /&gt;
			{&#039;rfd&#039;, cfg.rfd, cfg.rfdDefault},&lt;br /&gt;
		})&lt;br /&gt;
		or (title.namespace == 0 and getMainNamespaceClassPageType(title, args))&lt;br /&gt;
		or getNamespaceArgPageType(title, args)&lt;br /&gt;
		or getOtherPageType(title, args)&lt;br /&gt;
	if yesno(args.plural, false) then&lt;br /&gt;
		pageType = pluralize(pageType)&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.caps, false) then&lt;br /&gt;
		pageType = capitalize(pageType)&lt;br /&gt;
	end&lt;br /&gt;
	return pageType&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Anchor/testcases&amp;diff=3997</id>
		<title>Template:Anchor/testcases</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Anchor/testcases&amp;diff=3997"/>
		<updated>2025-01-06T19:56:17Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template test cases notice}}&lt;br /&gt;
__TOC__&lt;br /&gt;
==Live template==&lt;br /&gt;
Katterpennung&lt;br /&gt;
This section uses the live {{tl|Anchor}} version. The template is called in the middle of the bold words, showing that no extra whitespace is generated.&lt;br /&gt;
&lt;br /&gt;
Here are anchors Live{{Anchor|LiveTop}}Top and Li{{Anchor|Live, top}}ve, top.&lt;br /&gt;
Go to [[#LiveBottom]] or [[#Live, bottom]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;katterpenning&lt;br /&gt;
Here are anchors Live{{Anchor|LiveTop}}Top and Li{{Anchor|Live, top}}ve, top.or &lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-&amp;lt;BR&amp;gt;-&amp;lt;BR&amp;gt;-&amp;lt;BR&amp;gt;katterpenning&lt;br /&gt;
&lt;br /&gt;
Here are anchors Live{{Anchor|LiveBottom}}Bottom and Li{{Anchor|Live, bottom}}ve, bottom.&lt;br /&gt;
Go to [[#LiveTop]] or [[#Live, top]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
Here are anchors Live{{Anchor|LiveBottom}}Bottom and Li{{Anchor|Live, bottom}}ve, bottom.&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;I was off by one letter. I was having brain fog.&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sandbox template==&lt;br /&gt;
&lt;br /&gt;
This section uses the sandbox {{tl|Anchor/sandbox}} version. The template is called in the middle of the bold words, showing that no extra whitespace is generated.&lt;br /&gt;
&lt;br /&gt;
Visible error when more than 10 anchors: before{{Anchor/sandbox|1|2|3|4|5|6|7|8|9|10|11}}after&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
Visible error when more than 10 anchors: before{{Anchor/sandbox|1|2|3|4|5|6|7|8|9|10|11}}after&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here are anchors Sand{{Anchor/sandbox|SandTop}}Top and Sa{{Anchor/sandbox|Sand, top}}nd, top.&lt;br /&gt;
Go to [[#SandMid1]], [[#Sand mid 2]], [[#Sand, mid, 3]], [[#SandBottom]], [[#Sand, bottom]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
Here are anchors Sand{{Anchor/sandbox|SandTop}}Top and Sa{{Anchor/sandbox|Sand, top}}nd, top.&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-&amp;lt;BR&amp;gt;-&amp;lt;BR&amp;gt;-&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here are anchors Sand{{Anchor/sandbox|SandMid1|Sand mid 2|Sand, mid, 3}}Mid1-2-3.&lt;br /&gt;
Go to [[#SandTop]], [[#Sand, top]], [[#SandBottom]], [[#Sand, bottom]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
Here are anchors Sand{{Anchor/sandbox|SandMid1|Sand mid 2|Sand, mid, 3}}Mid1-2-3.&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-&amp;lt;BR&amp;gt;-&amp;lt;BR&amp;gt;-&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here are anchors Sand{{Anchor/sandbox|SandBottom}}Bottom and Sa{{Anchor/sandbox|Sand, bottom}}nd, bottom.&lt;br /&gt;
Go to [[#SandMid1]], [[#Sand mid 2]], [[#Sand, mid, 3]], [[#SandTop]], [[#Sand, top]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
Here are anchors Sand{{Anchor/sandbox|SandBottom}}Bottom and Sa{{Anchor/sandbox|Sand, bottom}}nd, bottom.&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(Nothing but empty space below.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DIV STYLE=&amp;quot;height:75em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/DIV&amp;gt;&amp;lt;!--ONE EMPTY SCREENFUL TO LET LINKS TO THE LAST ANCHOR WORK AS GOOD AS THE OTHERS--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Anchor/sandbox&amp;diff=3995</id>
		<title>Template:Anchor/sandbox</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Anchor/sandbox&amp;diff=3995"/>
		<updated>2025-01-06T19:56:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki /&amp;gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:anchor/sandbox|main}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Anchor/doc&amp;diff=3993</id>
		<title>Template:Anchor/doc</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Anchor/doc&amp;diff=3993"/>
		<updated>2025-01-06T19:56:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{lua|Module:Anchor}}&lt;br /&gt;
{{used in system}}&lt;br /&gt;
{{Bot use warning|bots=[[User:Cewbot]] ([[Wikipedia:Bots/Requests for approval/Cewbot 6|BRFA]])}}&lt;br /&gt;
{{Documentation subpage}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD CATEGORIES AT THE END OF THIS PAGE, ND INTERWIKIS LINKS TO WIKIDATA --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The template {{tl|{{lc:{{BASEPAGENAME}}}}}} inserts one or more invisible anchor names ([[Fragment identifier|HTML fragment identifiers]]) in a page.&lt;br /&gt;
&lt;br /&gt;
The basic format is {{tlc|anchor|Anchor name}} for parts on a page, and {{tlxs|anchor|Anchor name|nolink=y}} for use in headings. To link to an anchor from within the same page, use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[#Anchor name|display text]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. {{#ifeq:{{BASEPAGENAME}}|Visible anchor|&amp;amp;nbsp;Unlike {{tl|Anchor}}, the first parameter will be visible text on the page.|}} To link to an anchor from another page, use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Article name#Anchor name|display text]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. See [[WP:ANCHOR|Help:Link § Section linking (anchors)]] for more details.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;#Anchor name&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, used by the [[MediaWiki]] software to (usually) direct users to sections within a page, is not a wikitext directive like [[Help:Redirect|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;#redirect&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Anchors are most useful with sections, since links to a section will not work if a section is renamed. However, anchors can be used as needed anywhere in an article. The anchor name can be arbitrary, but the first letter should generally be capitalized in keeping with header style (see [[MOS:HEAD|Manual of Style § Section headings]] for more information).&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{{anchor|Above-Foo|Foo bar}}&lt;br /&gt;
&lt;br /&gt;
== Basic format&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;Foo&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;In-Foo&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;Anchor name 1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;Anchor name 2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ==&lt;br /&gt;
{{anchor|Under-Foo}}&lt;br /&gt;
&lt;br /&gt;
You can define one or more anchor names, separated by |. This can be useful for alternative spellings, such as &amp;quot;humor&amp;quot; and &amp;quot;humour.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In general, if the intended target of an anchor is a section title, then [[#Rationale for substitution in the header|it should be placed at the end of the section header]] by [[WP:SUBST|substitution]]:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;code style=&amp;quot;color:darkgreen;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;== Section header{{subst:&amp;lt;/nowiki&amp;gt;anchor|Anchor name}} ==&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which will be saved in the article as:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;== Section header{{code|1={{Anchor|Anchor name}}}} ==&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anchor names are case sensitive, so &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[#Anchor name]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[#Anchor Name]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; are not equivalent. When making an anchor, in general capitalize the first letter of the anchor name, and follow the same capitalization guidelines as headers (see [[MOS:HEAD|Manual of Style: Headers]] for more information).&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
{| class=&amp;quot;wikitable floatright&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Character&lt;br /&gt;
! [[Character entity reference|Code]]&lt;br /&gt;
! Template&lt;br /&gt;
! [[Help:Magic words|Magic word]]&lt;br /&gt;
! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;amp;quot;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;#34;&amp;lt;/code&amp;gt;&lt;br /&gt;
| {{N/a}}&lt;br /&gt;
| {{N/a}}&lt;br /&gt;
| (double)&amp;amp;nbsp;[[quotation mark]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;#35;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;amp;#35;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;num;&amp;lt;/code&amp;gt;&lt;br /&gt;
| {{tlx|hash}}&lt;br /&gt;
| {{N/a}}&lt;br /&gt;
| [[Number sign|hash]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;#124;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;amp;#124;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;vertbar;&amp;lt;/code&amp;gt;&lt;br /&gt;
| {{tlx|pipe}}&lt;br /&gt;
| {{tlx|!}}&lt;br /&gt;
| [[Vertical bar|pipe]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;#61;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;amp;#61;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;&amp;amp;amp;equals;&amp;lt;/code&amp;gt;&lt;br /&gt;
| {{N/a}}&lt;br /&gt;
| {{tlx|{{=}}}}&lt;br /&gt;
| [[Equals sign|equals]]&lt;br /&gt;
|}&lt;br /&gt;
* Anchor names that contain any character shown in the table on the right will not work as expected. However, any of these characters can be replaced with the &amp;quot;&amp;amp;amp;#&amp;quot; codes shown for them here. Or, the pipe symbol and equals sign can be worked around with {{tlx|!}} and {{tlx|{{=}}}}, respectively. Markup code such as {{tag|sup|o}} and {{tag|sub|o}} (superscript and subscript) cannot be used. Most other characters, including white space and punctuation, are not a problem.&lt;br /&gt;
* Anchor names must be unique on a page, and must not duplicate any heading titles. Duplicate anchors will not work as expected since the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;#location&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; links go to the first anchor with that name. Duplicate anchors result in invalid HTML; you can check for duplicate anchors by running the page through the [[W3C Markup Validation Service]].&lt;br /&gt;
* Anchor links are case-sensitive in &#039;&#039;&#039;some&#039;&#039;&#039; browsers, so treat all anchor links as case-sensitive when creating links to them. For example, if you create the anchor with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;=== Baz{{subst:anchor|Bar}} ===&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, link to it with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[pagename#Bar]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, not &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[pagename#bAR]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. However, because some browsers are &#039;&#039;&#039;not&#039;&#039;&#039; case-sensitive, do not create section titles or anchors that differ only in case from others on the page. That is, do not create both &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;=== Abcd{{subst:anchor|Baz}} ===&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;=== Efgh{{subst:anchor|bAZ}} ===&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* If a template is left unsubstituted inside a section title ([[#Rationale for substitution in the header|which should never be done]]), then the template code will appear in the edit summary window each time a section edit of that section begins, as in {{nowrap|1=&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/* Limitations{{anchor|Issues}} */ New issue&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}}. The editor must manually remove the anchor template from the edit summary window, or else when they save the section, the browser may not return to the section and the section link of that edit in the history page won&#039;t work.&lt;br /&gt;
&lt;br /&gt;
== Use in tables ==&lt;br /&gt;
{{Warning|To see how to set anchors in tables, see {{section link|Help:Tables and locations|Section link or map link to a row anchor}}. Only use this template in tables if you need multiple anchors for the same row.}}&lt;br /&gt;
Anchors may be used within tables, subject to certain restrictions. The {{tlx|anchor}} template may be used in the caption and cells of a table, but not those portions of a table that are outside the caption and cells. Unlike in section headings, the template does not have to be substituted. It is used on the table&#039;s caption thus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|+ {{anchor|FooX}} A table caption&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and the following forms of cell are valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! {{anchor|Foo1}} A header cell&lt;br /&gt;
! style=&amp;quot;background:white;&amp;quot; |{{anchor|Foo2}} A header cell with styling&lt;br /&gt;
|{{anchor|Foo3}} A data cell&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; |{{anchor|Foo4}} A data cell spanning two rows&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You need to ensure that the {{tlx|anchor}} is not in that portion of the markup intended for the classes, styles etc. Thus, {{tlx|anchor}} cannot be placed anywhere on lines that begin with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (start of table) or &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|-&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (new row), and the following forms of cell are not valid:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! {{anchor|Foo1}} | A header cell&lt;br /&gt;
! style=&amp;quot;background: white;&amp;quot; {{anchor|Foo2}} | A header cell with styling&lt;br /&gt;
| {{anchor|Foo3}} | A data cell&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; {{anchor|Foo4}} | A data cell spanning two rows&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If it is necessary for an anchor to be in any of these positions, a different technique is used—the &amp;lt;code&amp;gt;id=&amp;lt;/code&amp;gt; attribute. This is placed in that portion of the markup where the classes, styles etc. may be used, as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| id=&amp;quot;FooX&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- id=&amp;quot;FooY&amp;quot;&lt;br /&gt;
! id=&amp;quot;Foo1&amp;quot; | A header cell&lt;br /&gt;
! style=&amp;quot;background: white;&amp;quot; id=&amp;quot;Foo2&amp;quot; | A header cell with styling&lt;br /&gt;
| id=&amp;quot;Foo3&amp;quot; | A data cell&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; id=&amp;quot;Foo4&amp;quot; | A data cell spanning two rows&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;id=&amp;lt;/code&amp;gt; attribute may appear before, between or after any other attributes that may be present, but only one &amp;lt;code&amp;gt;id=&amp;lt;/code&amp;gt; attribute may be used in each of these areas.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{anchor}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; is placed at the start of a vertically centered cell (which is the default for tables) then links to the anchor will jump to the start of the displayed content and not the top of the cell. This may require the reader to scroll up to fully see other cells in the row. It can be avoided by instead placing &amp;lt;code&amp;gt;id=&amp;lt;/code&amp;gt; where the row code starts.&lt;br /&gt;
&lt;br /&gt;
== Rationale for substitution in the header&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;Rationale for placement above header&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;substitution_reason_anchor&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;Rationale&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ==&lt;br /&gt;
&amp;lt;!-- The anchor &amp;quot;Rationale for placement above header&amp;quot; is the old name of this section. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anchors should never be left unsubstituted within a section header, as this violates [[MOS:HEADINGS]] and causes technical complications. More specifically: if {{tlx|anchor}} is used without substitution, the anchor will be included in page editing history as part of the section name (see [[MOS:SECTIONANCHOR]] for details). &lt;br /&gt;
&lt;br /&gt;
To show why placement in the header is preferred, the following anchor is placed in the Basic format section header:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;code style=&amp;quot;color:darkgreen;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;== Basic format&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;Foo&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;In-Foo&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; ==&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the anchor is actually used on this documentation page, the links [[#Basic format]], [[#Foo]] and [[#In-Foo]] all work and can be tested to see the effect.&lt;br /&gt;
&lt;br /&gt;
For contrast, an anchor named [[#Under-Foo]] has also been placed underneath the Basic format section header and can be clicked to illustrate how this placement hides the section title when jumping to the linked target on some web browsers:&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;== Basic format ==&amp;lt;br/&amp;gt;&amp;lt;nowiki&amp;gt;{{anchor|Under-Foo}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another anchor named [[#Above-Foo]] has been placed above the section header. This anchor does work correctly for standard desktop skins, but because the anchor is technically not in the section but before it, mobile views will not expand the desired section.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{anchor|Above-Foo}}&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;== Basic format ==&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explanations and examples ==&lt;br /&gt;
&lt;br /&gt;
Reasons for the above being best practice are detailed in the following additional, numbered examples, as well as in [[#Limitations|§&amp;amp;nbsp;Limitations]] section:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code style=&amp;quot;color:darkgreen;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{lc:{{BASEPAGENAME}}}}|Foo&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;br /&amp;gt; could be linked to with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[#Foo|...]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; from &#039;&#039;within the same article&#039;&#039; (let&#039;s call this article &amp;quot;Qux&amp;quot;), &amp;lt;br /&amp;gt; or it could be linked to with {{nowrap|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[&amp;lt;/nowiki&amp;gt;Qux#Foo&amp;lt;nowiki&amp;gt;|...]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}} from &#039;&#039;other&#039;&#039; articles and from redirects (where the ellipsis after the word &amp;quot;Foo&amp;quot; here means the words chosen to represent that link in the Wikipedia article, which, of course, could be anything).&lt;br /&gt;
# Anchors can be more suitable for inter-article linking than section titles are, because anchors are more stable. For example a section title {{nowrap|1=&amp;lt;code&amp;gt;== Foo ==&amp;lt;/code&amp;gt;}} within a Wikipedia article titled &amp;lt;code&amp;gt;Qux&amp;lt;/code&amp;gt;: &amp;lt;br /&amp;gt; {{nowrap|1=&amp;lt;code style=&amp;quot;color:dimgray;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;{{sp}}&amp;lt;code style=&amp;quot;color:darkgreen;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{lc:{{BASEPAGENAME}}}}&amp;lt;nowiki&amp;gt;|Foo bar}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;{{sp}}Foo &amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}} &amp;lt;br /&amp;gt; Here, links via {{nowrap|1=&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[&amp;lt;/nowiki&amp;gt;Qux#Foo bar&amp;lt;nowiki&amp;gt;]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}} would remain valid even if the section were renamed {{nowrap|1=&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;== {{anchor|Foo bar}} On foo and its many friends ==&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}}&amp;lt;br /&amp;gt; A drawback of this approach (as detailed in [[#Limitations|§&amp;amp;nbsp;Limitations]] section) is that having a template in the section header causes problems with the edit summary window each time that a section edit is done for this section. The obvious solution is to place the anchor &#039;&#039;before&#039;&#039; the section. This also prevents browsers from hiding the section title from view when jumping to the target.&amp;lt;br /&amp;gt; {{anchor|Example-note}}{{em|Note:}} The anchor name (&amp;lt;code&amp;gt;Foo bar&amp;lt;/code&amp;gt;) should be different than the section (&amp;lt;code&amp;gt;Foo&amp;lt;/code&amp;gt;) to avoid invalid HTML.&lt;br /&gt;
# Within section titles, it may be preferable to simply use direct HTML, which may be achieved by [[WP:substitution|substitution]] like this:&amp;lt;br /&amp;gt; {{nowrap|1=&amp;lt;code style=&amp;quot;color:dimgray;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;{{sp}}Foo&amp;lt;code style=&amp;quot;color:darkgreen;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:anchor|Foo bar}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;{{sp}}&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}}&amp;lt;br /&amp;gt;which is saved into the article as:&amp;lt;br /&amp;gt; {{nowrap|1=&amp;lt;code style=&amp;quot;color:dimgray;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;{{sp}}Foo&amp;lt;code style=&amp;quot;color:darkgreen;&amp;quot;&amp;gt;{{code|1={{anchor|Foo bar}}}}&amp;lt;/code&amp;gt;{{sp}}&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}}&amp;lt;br /&amp;gt;This provides the stable, linkable anchor, but without the edit problem.&amp;lt;br /&amp;gt; The [[#Example-note|Note]] above still applies. See [[#Limitations|§&amp;amp;nbsp;Limitations]] for details.&lt;br /&gt;
# The template can be used to create multiple anchors with a single call. For example, &amp;lt;br /&amp;gt; {{nowrap|1=&amp;lt;code style=&amp;quot;color:darkgreen;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{lc:{{BASEPAGENAME}}}}&amp;lt;nowiki&amp;gt;|Foo|Bar|baz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}} &amp;lt;br /&amp;gt; will create three anchors that can then be linked to with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[#Foo]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[#Bar]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[#baz]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Here is a more literal example:&amp;lt;br /&amp;gt; Say you wrote an article about a recently discovered Indo-European language called &amp;quot;Yish Yash&amp;quot;. The title of your article would probably be &amp;quot;Yish Yash language&amp;quot; (if there were already an article titled &amp;quot;Yish Yash&amp;quot; that covered the culture generally). Now let&#039;s say that within your article you wished to have a section titled &amp;quot;The placement of the tongue when producing Yish Yash vowel sounds&amp;quot;. You would create a section heading that looked like this:&amp;lt;br /&amp;gt;{{nowrap|1=&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;== The placement of the tongue when producing Yish Yash vowel sounds == &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}}&amp;lt;br /&amp;gt;Let&#039;s say that you then finished up writing and saved the new article. Now, say you came across another article on Wikipedia titled &amp;quot;Proto-Indo-European vowels&amp;quot; which happened to have a section on the unique tongue placement used in Yish Yash. You decided it might be useful here for readers to be able to quickly access the section of your article on Yish Yash tongue placement when forming vowels; however, you don&#039;t want to send them to the beginning of the whole article on the Yish Yash language (you wanted to target them more specifically). So you create a link in the Proto-Indo European vowel article to the &#039;&#039;section&#039;&#039; within &#039;&#039;your&#039;&#039; article on the placement of the tongue in Yish Yash: you might do so by editing the text of the Proto-Indo-European vowel article and adding something like this to a relevant place within it:&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Yish Yash language#The placement of the tongue when producing Yish Yash vowel sounds|Yish Yash tongue placement]] is particularly interesting.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;That is some &#039;&#039;really&#039;&#039; long code, but it would create a direct link to the relevant section of the new Yish Yash language article and would look like this in the article on Proto-Indo-European vowels:&amp;lt;br /&amp;gt; &amp;quot;...&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;Yish Yash tongue placement&amp;lt;/span&amp;gt; is particularly interesting...&amp;quot; &amp;lt;br /&amp;gt; Now let&#039;s say another editor came along and wished to change the heading of this section of your article for some legitimate reason—perhaps to &amp;quot;Yish Yash vowels and the tongue&amp;quot;. They could do so by editing your article and making the section heading look like this:&amp;lt;br /&amp;gt;{{nowrap|1=&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;== Yish Yash vowels and the tongue ==&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}}&amp;lt;br /&amp;gt;Unbeknownst to that editor, this would mean the link in the article on Proto-Indo-European vowels that you created earlier would now go by default to the top of the Yish Yash article instead of your carefully-chosen subsection! However, if an &#039;&#039;anchor&#039;&#039; were placed within the section heading of the Yish Yash article either when you created it or when the other editor came along and changed it—perhaps something like this:&amp;lt;br /&amp;gt;{{nowrap|1= &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;== The placement of the tongue when producing Yish Yash vowel sounds{{subst:anchor|Tongue}} ==&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}}&amp;lt;br /&amp;gt;or like this:&amp;lt;br /&amp;gt;{{nowrap|1=&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;== Yish Yash vowel–tongue interaction{{subst:anchor|Tongue}} ==&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}}&amp;lt;br /&amp;gt;and the text of the article on Proto-Indo-European vowels had been changed by you to something like this:&amp;lt;br /&amp;gt;{{nowrap|1=&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Yish Yash language#Tongue|Yish Yash tongue placement]] is particularly interesting.&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;}}&amp;lt;br /&amp;gt;then the link from the Proto-Indo-European article would continue to point to the relevant &#039;&#039;section&#039;&#039; of the Yish Yash article, even if the wording of the section heading there had changed completely and without the reader having to sort it out for themselves. The use of anchors can make for a cleaner, more efficient Wikipedia reading experience where section headings are changed—which they not infrequently are.&lt;br /&gt;
&lt;br /&gt;
== TemplateData ==&lt;br /&gt;
{{TemplateDataHeader}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Add HTML anchors to a page. Make a link to your anchor with [[#Anchor on same page]] or [[Page you&#039;re linking to#Anchor on that page]]. Every anchor on a page must be different. Do not use the characters \&amp;quot; or # or | or =.&amp;quot;,&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First anchor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of anchor&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Anchor name 1&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Second anchor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of anchor&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Third anchor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of anchor&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Fourth anchor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;To add more than four anchors, go to source editing.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* {{#ifeq:{{BASEPAGENAME}}|Visible anchor|{{tl|Anchor}}|{{tl|Visible anchor}}}}&lt;br /&gt;
* {{tl|Anchored list}}&lt;br /&gt;
* {{tl|Anchor comment}}&lt;br /&gt;
* {{tl|Shortcut}}&lt;br /&gt;
* [[WP:ANCHOR]]&lt;br /&gt;
* [[WP:TARGET]]&lt;br /&gt;
* {{tl|Section link}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- CATEGORIES HERE, AND INTERWIKIS TO WIKIDATA, THANKS --&amp;gt;&lt;br /&gt;
[[Category:Wikipedia XHTML tag-replacing templates]]&lt;br /&gt;
[[Category:Wikipedia section templates]]&lt;br /&gt;
[[Category:Templates with no visible output]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Anchor%2B&amp;diff=3991</id>
		<title>Template:Anchor+</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Anchor%2B&amp;diff=3991"/>
		<updated>2025-01-06T19:56:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Visible anchor]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Testcases_notice&amp;diff=3989</id>
		<title>Template:Testcases notice</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Testcases_notice&amp;diff=3989"/>
		<updated>2025-01-06T19:56:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#ifeq:{{NAMESPACE}}|User||{{#ifexist:{{FULLBASEPAGENAME}}||{{db-g8}}}}}}{{ombox&lt;br /&gt;
| image = [[File:Gnome-applications-science.svg|42px]]&lt;br /&gt;
| text = &lt;br /&gt;
This is the [[Wikipedia:Template sandbox and test cases|template test cases]] page for the &amp;lt;noinclude&amp;gt;[[Template:Template test cases notice/sandbox|sandbox]]&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;[[{{{sandbox link|{{#if:{{{1|}}}|{{{1|}}}|{{NAMESPACE}}:{{BASEPAGENAME}}}}/{{{subpage-name|sandbox}}}}}}|{{{sandbox name|{{{subpage-name|sandbox}}}}}}]]&amp;lt;/includeonly&amp;gt; of [[:{{#if:{{{1|}}}|{{{1|}}}|{{NAMESPACE}}:{{BASEPAGENAME}}}}]]. {{Purge|Purge this page}} to update the examples. &amp;lt;br /&amp;gt; &amp;lt;small&amp;gt;If there are many examples of a complicated template, later ones may break due to [[Wikipedia:Template limits|limits in MediaWiki]]; see the HTML comment &amp;quot;[[Help:Template limits#How can you find out?|NewPP limit report]]&amp;quot; in the rendered page. &amp;lt;br /&amp;gt; You can also use [[Special:ExpandTemplates]] to examine the results of template uses. &amp;lt;br /&amp;gt; You can test how this page looks in the different skins and parsers with these links:&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;font-size:90%;&amp;quot;&amp;gt;{{select skin}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{hlist|class=inline plainlinks nowraplinks&lt;br /&gt;
|[{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useparsoid=1}} {{int:parsermigration-use-parsoid-toolbox-label}}]&lt;br /&gt;
|[{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useparsoid=0}} {{int:parsermigration-use-legacy-parser-toolbox-label}}]&lt;br /&gt;
}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;includeonly&amp;gt;__EXPECTUNUSEDTEMPLATE__&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{{category|[[Category:Template test cases]]}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifexist: {{NAMESPACE}}:{{BASEPAGENAME}} || [[Category:Template test cases subpages without corresponding pages]] }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Select_skin&amp;diff=3987</id>
		<title>Template:Select skin</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Select_skin&amp;diff=3987"/>
		<updated>2025-01-06T19:56:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:{{{view|}}}|View {{#if:{{{1|}}}|[[{{{1}}}]]|this page}} in the [[WP:Skin|skin]]:&amp;lt;br/&amp;gt;}}{{hlist|class=inline noprint plainlinks nowraplinks|style={{{style|}}}&lt;br /&gt;
|[https://en.m.wikipedia.org{{localurl:{{{1|{{FULLPAGENAME}}}}}|useskin=minerva}} {{int:skinname-minerva}}] (mobile)&lt;br /&gt;
|[{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=monobook}} {{int:skinname-monobook}}]&lt;br /&gt;
|[{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=timeless}} {{int:skinname-timeless}}]&lt;br /&gt;
|[{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=vector}} {{int:skinname-vector}}]&lt;br /&gt;
|[{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=vector-2022}} {{int:skinname-vector-2022}}]&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD THIS TEMPLATE&#039;S CATEGORIES TO THE /doc SUBPAGE, THANKS --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Hilite&amp;diff=3985</id>
		<title>Template:Hilite</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Hilite&amp;diff=3985"/>
		<updated>2025-01-06T19:55:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Highlight]]&lt;br /&gt;
&lt;br /&gt;
{{R protected}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Hlist&amp;diff=3983</id>
		<title>Template:Hlist</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Hlist&amp;diff=3983"/>
		<updated>2025-01-06T19:55:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:list|horizontal}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Ns_has_subpages&amp;diff=3981</id>
		<title>Module:Ns has subpages</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Ns_has_subpages&amp;diff=3981"/>
		<updated>2025-01-06T19:55:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements [[Template:Ns has subpages]].&lt;br /&gt;
-- While the template is fairly simple, this information is made available to&lt;br /&gt;
-- Lua directly, so using a module means that we don&#039;t have to update the&lt;br /&gt;
-- template as new namespaces are added.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._main(ns, frame)&lt;br /&gt;
	-- Get the current namespace if we were not passed one.&lt;br /&gt;
	if not ns then&lt;br /&gt;
		ns = mw.title.getCurrentTitle().namespace&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Look up the namespace table from mw.site.namespaces. This should work&lt;br /&gt;
	-- for a majority of cases.&lt;br /&gt;
	local nsTable = mw.site.namespaces[ns]&lt;br /&gt;
&lt;br /&gt;
	-- Try using string matching to get the namespace from page names.&lt;br /&gt;
	-- Do a quick and dirty bad title check to try and make sure we do the same&lt;br /&gt;
	-- thing as {{NAMESPACE}} in most cases.&lt;br /&gt;
	if not nsTable and type(ns) == &#039;string&#039; and not ns:find(&#039;[&amp;lt;&amp;gt;|%[%]{}]&#039;) then&lt;br /&gt;
		local nsStripped = ns:gsub(&#039;^[_%s]*:&#039;, &#039;&#039;)&lt;br /&gt;
		nsStripped = nsStripped:gsub(&#039;:.*$&#039;, &#039;&#039;)&lt;br /&gt;
		nsTable = mw.site.namespaces[nsStripped]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- If we still have no match then try the {{NAMESPACE}} parser function,&lt;br /&gt;
	-- which should catch the remainder of cases. Don&#039;t use a mw.title object,&lt;br /&gt;
	-- as this would increment the expensive function count for each new page&lt;br /&gt;
	-- tested.&lt;br /&gt;
	if not nsTable then&lt;br /&gt;
		frame = frame or mw.getCurrentFrame()&lt;br /&gt;
		local nsProcessed = frame:callParserFunction(&#039;NAMESPACE&#039;, ns)&lt;br /&gt;
		nsTable = nsProcessed and mw.site.namespaces[nsProcessed]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return nsTable and nsTable.hasSubpages&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local ns = frame:getParent().args[1]&lt;br /&gt;
	if ns then&lt;br /&gt;
		ns = ns:match(&#039;^%s*(.-)%s*$&#039;) -- trim whitespace&lt;br /&gt;
		ns = tonumber(ns) or ns&lt;br /&gt;
	end&lt;br /&gt;
	local hasSubpages = p._main(ns, frame)&lt;br /&gt;
	return hasSubpages and &#039;yes&#039; or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Params&amp;diff=3979</id>
		<title>Module:Params</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Params&amp;diff=3979"/>
		<updated>2025-01-06T19:55:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;	---                                        ---&lt;br /&gt;
	---     LOCAL ENVIRONMENT                  ---&lt;br /&gt;
	---    ________________________________    ---&lt;br /&gt;
	---                                        ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--[[ Abstract utilities ]]--&lt;br /&gt;
	----------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Helper function for `string.gsub()` (for managing zero-padded numbers)&lt;br /&gt;
local function zero_padded (str)&lt;br /&gt;
	return (&#039;%03d%s&#039;):format(#str, str)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Helper function for `table.sort()` (for natural sorting)&lt;br /&gt;
local function natural_sort (var1, var2)&lt;br /&gt;
	return tostring(var1):gsub(&#039;%d+&#039;, zero_padded) &amp;lt;&lt;br /&gt;
		tostring(var2):gsub(&#039;%d+&#039;, zero_padded)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Return a copy or a reference to a table&lt;br /&gt;
local function copy_or_ref_table (src, refonly)&lt;br /&gt;
	if refonly then return src end&lt;br /&gt;
	newtab = {}&lt;br /&gt;
	for key, val in pairs(src) do newtab[key] = val end&lt;br /&gt;
	return newtab&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Remove numerical elements from a table, shifting everything to the left&lt;br /&gt;
local function remove_numerical_keys (tbl, idx, len)&lt;br /&gt;
	local cache = {}&lt;br /&gt;
	local tmp = idx + len - 1&lt;br /&gt;
	for key, val in pairs(tbl) do&lt;br /&gt;
		if type(key) == &#039;number&#039; and key &amp;gt;= idx then&lt;br /&gt;
			if key &amp;gt; tmp then cache[key - len] = val end&lt;br /&gt;
			tbl[key] = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for key, val in pairs(cache) do tbl[key] = val end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Make a reduced copy of a table (shifting in both directions if necessary)&lt;br /&gt;
local function copy_table_reduced (tbl, idx, len)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local tmp = idx + len - 1&lt;br /&gt;
	if idx &amp;gt; 0 then&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if type(key) ~= &#039;number&#039; or key &amp;lt; idx then&lt;br /&gt;
				ret[key] = val&lt;br /&gt;
			elseif key &amp;gt; tmp then ret[key - len] = val end&lt;br /&gt;
		end&lt;br /&gt;
	elseif tmp &amp;gt; 0 then&lt;br /&gt;
		local nshift = 1 - idx&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if type(key) ~= &#039;number&#039; then ret[key] = val&lt;br /&gt;
			elseif key &amp;gt; tmp then ret[key - tmp] = val&lt;br /&gt;
			elseif key &amp;lt; idx then ret[key + nshift] = val end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if type(key) ~= &#039;number&#039; or key &amp;gt; tmp then&lt;br /&gt;
				ret[key] = val&lt;br /&gt;
			elseif key &amp;lt; idx then ret[key + len] = val end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Make an expanded copy of a table (shifting in both directions if necessary)&lt;br /&gt;
--[[&lt;br /&gt;
local function copy_table_expanded (tbl, idx, len)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local tmp = idx + len - 1&lt;br /&gt;
	if idx &amp;gt; 0 then&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if type(key) ~= &#039;number&#039; or key &amp;lt; idx then&lt;br /&gt;
				ret[key] = val&lt;br /&gt;
			else ret[key + len] = val end&lt;br /&gt;
		end&lt;br /&gt;
	elseif tmp &amp;gt; 0 then&lt;br /&gt;
		local nshift = idx - 1&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if type(key) ~= &#039;number&#039; then ret[key] = val&lt;br /&gt;
			elseif key &amp;gt; 0 then ret[key + tmp] = val&lt;br /&gt;
			elseif key &amp;lt; 1 then ret[key + nshift] = val end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if type(key) ~= &#039;number&#039; or key &amp;gt; tmp then&lt;br /&gt;
				ret[key] = val&lt;br /&gt;
			else ret[key - len] = val end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
]]--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Move a key from a table to another, but only if under a different name and&lt;br /&gt;
-- always parsing numerical strings as numbers&lt;br /&gt;
local function steal_if_renamed (val, src, skey, dest, dkey)&lt;br /&gt;
	local realkey = tonumber(dkey) or dkey:match&#039;^%s*(.-)%s*$&#039;&lt;br /&gt;
	if skey ~= realkey then&lt;br /&gt;
		dest[realkey] = val&lt;br /&gt;
		src[skey] = nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--[[ Public strings ]]--&lt;br /&gt;
	------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Special match keywords (functions and modifiers MUST avoid these names)&lt;br /&gt;
local mkeywords = {&lt;br /&gt;
	[&#039;or&#039;] = 0,&lt;br /&gt;
	pattern = 1,&lt;br /&gt;
	plain = 2,&lt;br /&gt;
	strict = 3&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Sort functions (functions and modifiers MUST avoid these names)&lt;br /&gt;
local sortfunctions = {&lt;br /&gt;
	--alphabetically = false, -- Simply uncommenting enables the option&lt;br /&gt;
	naturally = natural_sort&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Callback styles for the `mapping_*` and `renaming_*` class of modifiers&lt;br /&gt;
-- (functions and modifiers MUST avoid these names)&lt;br /&gt;
--[[&lt;br /&gt;
&lt;br /&gt;
Meanings of the columns:&lt;br /&gt;
&lt;br /&gt;
  col[1] = Loop type (0-3)&lt;br /&gt;
  col[2] = Number of module arguments that the style requires (1-3)&lt;br /&gt;
  col[3] = Minimum number of sequential parameters passed to the callback&lt;br /&gt;
  col[4] = Name of the callback parameter where to place each parameter name&lt;br /&gt;
  col[5] = Name of the callback parameter where to place each parameter value&lt;br /&gt;
  col[6] = Argument in the modifier&#039;s invocation that will override `col[4]`&lt;br /&gt;
  col[7] = Argument in the modifier&#039;s invocation that will override `col[5]`&lt;br /&gt;
&lt;br /&gt;
A value of `-1` indicates that no meaningful value is stored (i.e. `nil`)&lt;br /&gt;
&lt;br /&gt;
]]--&lt;br /&gt;
local mapping_styles = {&lt;br /&gt;
	names_and_values = { 3, 2, 2, 1, 2, -1, -1 },&lt;br /&gt;
	values_and_names = { 3, 2, 2, 2, 1, -1, -1 },&lt;br /&gt;
	values_only = { 1, 2, 1, -1, 1, -1, -1 },&lt;br /&gt;
	names_only = { 2, 2, 1, 1, -1, -1, -1 },&lt;br /&gt;
	names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 },&lt;br /&gt;
	names_only_as = { 2, 3, 0, -1, -1, 2, -1 },&lt;br /&gt;
	values_only_as = { 1, 3, 0, -1, -1, -1, 2 },&lt;br /&gt;
	blindly = { 0, 2, 0, -1, -1, -1, -1 }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Memory slots (functions and modifiers MUST avoid these names)&lt;br /&gt;
local memoryslots = {&lt;br /&gt;
	i = &#039;itersep&#039;,&lt;br /&gt;
	l = &#039;lastsep&#039;,&lt;br /&gt;
	p = &#039;pairsep&#039;,&lt;br /&gt;
	h = &#039;header&#039;,&lt;br /&gt;
	f = &#039;footer&#039;,&lt;br /&gt;
	n = &#039;ifngiven&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Functions and modifiers MUST avoid these names too: `let`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--[[ Module&#039;s private environment ]]--&lt;br /&gt;
	--------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Functions listed here declare that they don&#039;t need the `frame.args`&lt;br /&gt;
-- metatable to be copied into a regular table; if they are modifiers they also&lt;br /&gt;
-- guarantee that they will make available their own (modified) copy&lt;br /&gt;
local refpipe = {&lt;br /&gt;
	count = true,&lt;br /&gt;
	value_of = true,&lt;br /&gt;
	list = true,&lt;br /&gt;
	list_values = true,&lt;br /&gt;
	for_each = true,&lt;br /&gt;
	call_for_each_group = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Functions listed here declare that they don&#039;t need the&lt;br /&gt;
-- `frame:getParent().args` metatable to be copied into a regular table; if &lt;br /&gt;
-- they are modifiers they also guarantee that they will make available their&lt;br /&gt;
-- own (modified) copy&lt;br /&gt;
local refparams = {&lt;br /&gt;
	--inserting = true,&lt;br /&gt;
	grouping_by_calling = true,&lt;br /&gt;
	count = true,&lt;br /&gt;
	concat_and_call = true,&lt;br /&gt;
	concat_and_invoke = true,&lt;br /&gt;
	concat_and_magic = true,&lt;br /&gt;
	value_of = true,&lt;br /&gt;
	call_for_each_group = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Maximum number of numerical parameters that can be filled, if missing (we&lt;br /&gt;
-- chose an arbitrary number for this constant; you can discuss about its&lt;br /&gt;
-- optimal value at Module talk:Params)&lt;br /&gt;
local maxfill = 1024&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- The private table of functions&lt;br /&gt;
local library = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Functions that can only be invoked in first position&lt;br /&gt;
local static_iface = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Create a new context&lt;br /&gt;
local function context_new ()&lt;br /&gt;
	local ctx = {}&lt;br /&gt;
	ctx.luaname = &#039;Module:Params&#039;	--[[ or `frame:getTitle()` ]]--&lt;br /&gt;
	ctx.iterfunc = pairs&lt;br /&gt;
	ctx.sorttype = 0&lt;br /&gt;
	ctx.firstposonly = static_iface&lt;br /&gt;
	ctx.n_available = maxfill&lt;br /&gt;
	return ctx&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Move to the next action within the user-given list&lt;br /&gt;
local function context_iterate (ctx, n_forward)&lt;br /&gt;
	local nextfn&lt;br /&gt;
	if ctx.pipe[n_forward] ~= nil then&lt;br /&gt;
		nextfn = ctx.pipe[n_forward]:match&#039;^%s*(.*%S)&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if nextfn == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;: You must specify a function to call&#039;, 0) end&lt;br /&gt;
	if library[nextfn] == nil then&lt;br /&gt;
		if ctx.firstposonly[nextfn] == nil then error(ctx.luaname ..&lt;br /&gt;
			&#039;: The function ‘&#039; .. nextfn .. &#039;’ does not exist&#039;, 0)&lt;br /&gt;
		else error(ctx.luaname .. &#039;: The ‘&#039; .. nextfn ..&lt;br /&gt;
			&#039;’ directive can only appear in first position&#039;, 0)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	remove_numerical_keys(ctx.pipe, 1, n_forward)&lt;br /&gt;
	return library[nextfn]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Main loop&lt;br /&gt;
local function main_loop (ctx, start_with)&lt;br /&gt;
	local fn = start_with&lt;br /&gt;
	repeat fn = fn(ctx) until not fn&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Parse user arguments of type `...|[let]|[...][number of additional&lt;br /&gt;
-- parameters]|[parameter 1]|[parameter 2]|[...]`&lt;br /&gt;
local function parse_child_args (src, start_from, append_after)&lt;br /&gt;
	local names&lt;br /&gt;
	local tmp&lt;br /&gt;
	local dest = {}&lt;br /&gt;
	local pin = start_from&lt;br /&gt;
	if src[pin] ~= nil and src[pin]:match&#039;^%s*let%s*$&#039; then&lt;br /&gt;
		names = {}&lt;br /&gt;
		repeat&lt;br /&gt;
			tmp = src[pin + 1] or &#039;&#039;&lt;br /&gt;
			names[tonumber(tmp) or tmp:match&#039;^%s*(.-)%s*$&#039; or &#039;&#039;] =&lt;br /&gt;
				src[pin + 2]&lt;br /&gt;
			pin = pin + 3&lt;br /&gt;
		until src[pin] == nil or not src[pin]:match&#039;^%s*let%s*$&#039;&lt;br /&gt;
	end&lt;br /&gt;
	tmp = tonumber(src[pin])&lt;br /&gt;
	if tmp ~= nil then&lt;br /&gt;
		if tmp &amp;lt; 0 then tmp = -1 end&lt;br /&gt;
		local shf = append_after - pin&lt;br /&gt;
		for idx = pin + 1, pin + tmp do dest[idx + shf] = src[idx] end&lt;br /&gt;
		pin = pin + tmp + 1&lt;br /&gt;
	end&lt;br /&gt;
	if names ~= nil then&lt;br /&gt;
		for key, val in pairs(names) do dest[key] = val end&lt;br /&gt;
	end&lt;br /&gt;
	return dest, pin&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Parse the arguments of some of the `mapping_*` and `renaming_*` class of&lt;br /&gt;
-- modifiers&lt;br /&gt;
local function parse_callback_args (src, n_skip, default_style)&lt;br /&gt;
	local style&lt;br /&gt;
	local shf&lt;br /&gt;
	local tmp = src[n_skip + 1]&lt;br /&gt;
	if tmp ~= nil then style = mapping_styles[tmp:match&#039;^%s*(.-)%s*$&#039;] end&lt;br /&gt;
	if style == nil then&lt;br /&gt;
		style = default_style&lt;br /&gt;
		shf = n_skip - 1&lt;br /&gt;
	else shf = n_skip end&lt;br /&gt;
	local n_exist = style[3]&lt;br /&gt;
	local karg = style[4]&lt;br /&gt;
	local varg = style[5]&lt;br /&gt;
	tmp = style[6]&lt;br /&gt;
	if tmp &amp;gt; -1 then&lt;br /&gt;
		tmp = src[tmp + shf]&lt;br /&gt;
		karg = tonumber(tmp)&lt;br /&gt;
		if karg == nil then karg = tmp:match&#039;^%s*(.-)%s*$&#039;&lt;br /&gt;
		else n_exist = math.max(n_exist, karg) end&lt;br /&gt;
	end&lt;br /&gt;
	tmp = style[7]&lt;br /&gt;
	if tmp &amp;gt; -1 then&lt;br /&gt;
		tmp = src[tmp + shf]&lt;br /&gt;
		varg = tonumber(tmp)&lt;br /&gt;
		if varg == nil then varg = tmp:match&#039;^%s*(.-)%s*$&#039;&lt;br /&gt;
		else n_exist = math.max(n_exist, varg) end&lt;br /&gt;
	end&lt;br /&gt;
	local dest, nargs = parse_child_args(src, style[2] + shf, n_exist)&lt;br /&gt;
	tmp = style[1]&lt;br /&gt;
	if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then&lt;br /&gt;
		tmp = tmp - 2 end&lt;br /&gt;
	if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then&lt;br /&gt;
		tmp = tmp - 1 end&lt;br /&gt;
	return dest, nargs, tmp, karg, varg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Parse the arguments of some of the `mapping_*` and `renaming_*` class of&lt;br /&gt;
-- modifiers&lt;br /&gt;
local function parse_replace_args (opts, fname)&lt;br /&gt;
	if opts[1] == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘&#039; .. fname .. &#039;’: No pattern string was given&#039;, 0) end&lt;br /&gt;
	if opts[2] == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘&#039; .. fname .. &#039;’: No replacement string was given&#039;, 0) end&lt;br /&gt;
	local ptn = opts[1]&lt;br /&gt;
	local repl = opts[2]&lt;br /&gt;
	local argc = 3&lt;br /&gt;
	local nmax = tonumber(opts[3])&lt;br /&gt;
	if nmax ~= nil or (opts[3] or &#039;&#039;):match&#039;^%s*$&#039; ~= nil then argc = 4 end&lt;br /&gt;
	local flg = opts[argc]&lt;br /&gt;
	if flg ~= nil then flg = mkeywords[flg:match&#039;^%s*(.-)%s*$&#039;] end&lt;br /&gt;
	if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end&lt;br /&gt;
	return ptn, repl, nmax, flg == 3, argc, (nmax ~= nil and nmax &amp;lt; 1) or&lt;br /&gt;
		(flg == 3 and ptn == repl)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Parse the arguments of the `with_*_matching` class of modifiers&lt;br /&gt;
local function parse_pattern_args (ctx, fname)&lt;br /&gt;
	local state = 0&lt;br /&gt;
	local cnt = 1&lt;br /&gt;
	local keyw&lt;br /&gt;
	local nptns = 0&lt;br /&gt;
	local ptns = {}&lt;br /&gt;
	for _, val in ipairs(ctx.pipe) do&lt;br /&gt;
		if state == 0 then&lt;br /&gt;
			nptns = nptns + 1&lt;br /&gt;
			ptns[nptns] = { val, false, false }&lt;br /&gt;
			state = -1&lt;br /&gt;
		else&lt;br /&gt;
			keyw = val:match&#039;^%s*(.*%S)&#039;&lt;br /&gt;
			if keyw == nil or mkeywords[keyw] == nil or (&lt;br /&gt;
				state &amp;gt; 0 and mkeywords[keyw] &amp;gt; 0&lt;br /&gt;
			) then break&lt;br /&gt;
			else&lt;br /&gt;
				state = mkeywords[keyw]&lt;br /&gt;
				if state &amp;gt; 1 then ptns[nptns][2] = true end&lt;br /&gt;
				if state == 3 then ptns[nptns][3] = true end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		cnt = cnt + 1&lt;br /&gt;
	end&lt;br /&gt;
	if state == 0 then error(ctx.luaname .. &#039;, ‘&#039; .. fname ..&lt;br /&gt;
		&#039;’: No pattern was given&#039;, 0) end&lt;br /&gt;
	return ptns, cnt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Map parameters&#039; values using a custom callback and a referenced table&lt;br /&gt;
local value_maps = {&lt;br /&gt;
	[0] = function (tbl, margs, karg, varg, fn)&lt;br /&gt;
		for key in pairs(tbl) do tbl[key] = fn() end&lt;br /&gt;
	end,&lt;br /&gt;
	[1] = function (tbl, margs, karg, varg, fn)&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			margs[varg] = val&lt;br /&gt;
			tbl[key] = fn()&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
	[2] = function (tbl, margs, karg, varg, fn)&lt;br /&gt;
		for key in pairs(tbl) do&lt;br /&gt;
			margs[karg] = key&lt;br /&gt;
			tbl[key] = fn()&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
	[3] = function (tbl, margs, karg, varg, fn)&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			margs[karg] = key&lt;br /&gt;
			margs[varg] = val&lt;br /&gt;
			tbl[key] = fn()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Private table for `map_names()`&lt;br /&gt;
local name_thieves_maps = {&lt;br /&gt;
	[0] = function (cache, tbl, rargs, karg, varg, fn)&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			steal_if_renamed(val, tbl, key, cache, fn())&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
	[1] = function (cache, tbl, rargs, karg, varg, fn)&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			rargs[varg] = val&lt;br /&gt;
			steal_if_renamed(val, tbl, key, cache, fn())&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
	[2] = function (cache, tbl, rargs, karg, varg, fn)&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			rargs[karg] = key&lt;br /&gt;
			steal_if_renamed(val, tbl, key, cache, fn())&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
	[3] = function (cache, tbl, rargs, karg, varg, fn)&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			rargs[karg] = key&lt;br /&gt;
			rargs[varg] = val&lt;br /&gt;
			steal_if_renamed(val, tbl, key, cache, fn())&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Map parameters&#039; names using a custom callback and a referenced table&lt;br /&gt;
local function map_names (tbl, rargs, karg, varg, looptype, fn)&lt;br /&gt;
	local cache = {}&lt;br /&gt;
	name_thieves_maps[looptype](cache, tbl, rargs, karg, varg, fn)&lt;br /&gt;
	for key, val in pairs(cache) do tbl[key] = val end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Return a new table that contains `src` regrouped according to the numerical&lt;br /&gt;
-- suffixes in its keys&lt;br /&gt;
local function make_groups (src)&lt;br /&gt;
	-- NOTE: `src` might be the original metatable!&lt;br /&gt;
	local tmp&lt;br /&gt;
	local prefix&lt;br /&gt;
	local gid&lt;br /&gt;
	local groups = {}&lt;br /&gt;
	for key, val in pairs(src) do&lt;br /&gt;
		-- `key` must only be a string or a number...&lt;br /&gt;
		gid = tonumber(key)&lt;br /&gt;
		if gid == nil then&lt;br /&gt;
			prefix, gid = key:match&#039;^%s*(.-)%s*(%-?%d*)%s*$&#039;&lt;br /&gt;
			gid = tonumber(gid) or &#039;&#039;&lt;br /&gt;
		else prefix = &#039;&#039; end&lt;br /&gt;
		if groups[gid] == nil then groups[gid] = {} end&lt;br /&gt;
		tmp = tonumber(prefix)&lt;br /&gt;
		if tmp ~= nil then&lt;br /&gt;
			if tmp &amp;lt; 1 then prefix = tmp - 1 else prefix = tmp end&lt;br /&gt;
		end&lt;br /&gt;
		groups[gid][prefix] = val&lt;br /&gt;
	end&lt;br /&gt;
	return groups&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Concatenate the numerical keys from the table of parameters to the numerical&lt;br /&gt;
-- keys from the table of options; non-numerical keys from the table of options&lt;br /&gt;
-- will prevail over colliding non-numerical keys from the table of parameters&lt;br /&gt;
local function concat_params (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local size = table.maxn(ctx.pipe)&lt;br /&gt;
	local retval = {}&lt;br /&gt;
	if ctx.subset == 1 then&lt;br /&gt;
		-- We need only the sequence&lt;br /&gt;
		for key, val in ipairs(tbl) do retval[key + size] = val end&lt;br /&gt;
	else&lt;br /&gt;
		if ctx.subset == -1 then&lt;br /&gt;
			for key, val in ipairs(tbl) do tbl[key] = nil end&lt;br /&gt;
		end&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if type(key) == &#039;number&#039; then retval[key + size] = val&lt;br /&gt;
			else retval[key] = val end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for key, val in pairs(ctx.pipe) do retval[key] = val end&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Flush the parameters by calling a custom function for each value (after this&lt;br /&gt;
-- function has been invoked `ctx.params` will be no longer usable)&lt;br /&gt;
local function flush_params (ctx, fn)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	if ctx.subset == 1 then&lt;br /&gt;
		for key, val in ipairs(tbl) do fn(key, val) end&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	if ctx.subset == -1 then&lt;br /&gt;
		for key, val in ipairs(tbl) do tbl[key] = nil end&lt;br /&gt;
	end&lt;br /&gt;
	if ctx.sorttype &amp;gt; 0 then&lt;br /&gt;
		local nums = {}&lt;br /&gt;
		local words = {}&lt;br /&gt;
		local nn = 0&lt;br /&gt;
		local nw = 0&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if type(key) == &#039;number&#039; then&lt;br /&gt;
				nn = nn + 1&lt;br /&gt;
				nums[nn] = key&lt;br /&gt;
			else&lt;br /&gt;
				nw = nw + 1&lt;br /&gt;
				words[nw] = key&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		table.sort(words, natural_sort)&lt;br /&gt;
		if ctx.sorttype == 2 then&lt;br /&gt;
			for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end&lt;br /&gt;
			for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end&lt;br /&gt;
		for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	if ctx.subset ~= -1 then&lt;br /&gt;
		for key, val in ipairs(tbl) do&lt;br /&gt;
			fn(key, val)&lt;br /&gt;
			tbl[key] = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for key, val in pairs(tbl) do fn(key, val) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--[[ Modifiers ]]--&lt;br /&gt;
	-----------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|sequential|pipe to&lt;br /&gt;
library.sequential = function (ctx)&lt;br /&gt;
	if ctx.subset == -1 then error(ctx.luaname ..&lt;br /&gt;
		&#039;: The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other&#039;, 0) end&lt;br /&gt;
	if ctx.sorttype &amp;gt; 0 then error(ctx.luaname ..&lt;br /&gt;
		&#039;: The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’&#039;, 0) end&lt;br /&gt;
	ctx.iterfunc = ipairs&lt;br /&gt;
	ctx.subset = 1&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|non-sequential|pipe to&lt;br /&gt;
library[&#039;non-sequential&#039;] = function (ctx)&lt;br /&gt;
	if ctx.subset == 1 then error(ctx.luaname ..&lt;br /&gt;
		&#039;: The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other&#039;, 0) end&lt;br /&gt;
	ctx.iterfunc = pairs&lt;br /&gt;
	ctx.subset = -1&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|all_sorted|pipe to&lt;br /&gt;
library.all_sorted = function (ctx)&lt;br /&gt;
	if ctx.subset == 1 then error(ctx.luaname ..&lt;br /&gt;
		&#039;: The ‘all_sorted’ directive is redundant after ‘sequential’&#039;, 0) end&lt;br /&gt;
	if ctx.sorttype == 2 then error(ctx.luaname ..&lt;br /&gt;
		&#039;: The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other&#039;, 0) end&lt;br /&gt;
	ctx.sorttype = 1&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|reassorted|pipe to&lt;br /&gt;
library.reassorted = function (ctx)&lt;br /&gt;
	if ctx.subset == 1 then error(ctx.luaname ..&lt;br /&gt;
		&#039;: The ‘reassorted’ directive is redundant after ‘sequential’&#039;, 0) end&lt;br /&gt;
	if ctx.sorttype == 1 then error(ctx.luaname ..&lt;br /&gt;
		&#039;: The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other&#039;, 0) end&lt;br /&gt;
	ctx.sorttype = 2&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|setting|directives|...|pipe to&lt;br /&gt;
library.setting = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local cmd = opts[1]&lt;br /&gt;
	if cmd ~= nil then&lt;br /&gt;
		cmd = cmd:gsub(&#039;%s+&#039;, &#039;&#039;):gsub(&#039;/+&#039;, &#039;/&#039;):match&#039;^/*(.*[^/])&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if cmd == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘setting’: No directive was given&#039;, 0) end&lt;br /&gt;
	local sep = string.byte(&#039;/&#039;)&lt;br /&gt;
	local argc = 2&lt;br /&gt;
	local dest = {}&lt;br /&gt;
	local vname&lt;br /&gt;
	local chr&lt;br /&gt;
	for idx = 1, #cmd do&lt;br /&gt;
		chr = cmd:byte(idx)&lt;br /&gt;
		if chr == sep then&lt;br /&gt;
			for key, val in ipairs(dest) do&lt;br /&gt;
				ctx[val] = opts[argc]&lt;br /&gt;
				dest[key] = nil&lt;br /&gt;
			end&lt;br /&gt;
			argc = argc + 1&lt;br /&gt;
		else&lt;br /&gt;
			vname = memoryslots[string.char(chr)]&lt;br /&gt;
			if vname == nil then error(ctx.luaname ..&lt;br /&gt;
				&#039;, ‘setting’: Unknown slot ‘&#039; ..&lt;br /&gt;
				string.char(chr) .. &#039;’&#039;, 0) end&lt;br /&gt;
			table.insert(dest, vname)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for key, val in ipairs(dest) do ctx[val] = opts[argc] end&lt;br /&gt;
	return context_iterate(ctx, argc + 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|squeezing|pipe to&lt;br /&gt;
library.squeezing = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local store = {}&lt;br /&gt;
	local indices = {}&lt;br /&gt;
	local newlen = 0&lt;br /&gt;
	for key, val in pairs(tbl) do&lt;br /&gt;
		if type(key) == &#039;number&#039; then&lt;br /&gt;
			newlen = newlen + 1&lt;br /&gt;
			indices[newlen] = key&lt;br /&gt;
			store[key] = val&lt;br /&gt;
			tbl[key] = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(indices)&lt;br /&gt;
	for idx = 1, newlen do tbl[idx] = store[indices[idx]] end&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|filling_the_gaps|pipe to&lt;br /&gt;
library.filling_the_gaps = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local nmin = 1&lt;br /&gt;
	local nmax = nil&lt;br /&gt;
	local nnums = -1&lt;br /&gt;
	local tmp = {}&lt;br /&gt;
	for key, val in pairs(tbl) do&lt;br /&gt;
		if type(key) == &#039;number&#039; then&lt;br /&gt;
			if nmax == nil then&lt;br /&gt;
				if key &amp;lt; nmin then nmin = key end&lt;br /&gt;
				nmax = key&lt;br /&gt;
			elseif key &amp;gt; nmax then nmax = key&lt;br /&gt;
			elseif key &amp;lt; nmin then nmin = key end&lt;br /&gt;
			nnums = nnums + 1&lt;br /&gt;
			tmp[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if nmax ~= nil and nmax - nmin &amp;gt; nnums then&lt;br /&gt;
		ctx.n_available = ctx.n_available + nmin + nnums - nmax&lt;br /&gt;
		if ctx.n_available &amp;lt; 0 then error(ctx.luaname ..&lt;br /&gt;
			&#039;, ‘filling_the_gaps’: It is possible to fill at most &#039; ..&lt;br /&gt;
			tostring(maxfill) .. &#039; parameters&#039;, 0) end&lt;br /&gt;
		for idx = nmin, nmax, 1 do tbl[idx] = &#039;&#039; end&lt;br /&gt;
		for key, val in pairs(tmp) do tbl[key] = val end&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|clearing|pipe to&lt;br /&gt;
library.clearing = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local numericals = {}&lt;br /&gt;
	for key, val in pairs(tbl) do&lt;br /&gt;
		if type(key) == &#039;number&#039; then&lt;br /&gt;
			numericals[key] = val&lt;br /&gt;
			tbl[key] = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for key, val in ipairs(numericals) do tbl[key] = val end&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|cutting|left cut|right cut|pipe to&lt;br /&gt;
library.cutting = function (ctx)&lt;br /&gt;
	local lcut = tonumber(ctx.pipe[1])&lt;br /&gt;
	if lcut == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘cutting’: Left cut must be a number&#039;, 0) end&lt;br /&gt;
	local rcut = tonumber(ctx.pipe[2])&lt;br /&gt;
	if rcut == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘cutting’: Right cut must be a number&#039;, 0) end&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local len = #tbl&lt;br /&gt;
	if lcut &amp;lt; 0 then lcut = len + lcut end&lt;br /&gt;
	if rcut &amp;lt; 0 then rcut = len + rcut end&lt;br /&gt;
	local tot = lcut + rcut&lt;br /&gt;
	if tot &amp;gt; 0 then&lt;br /&gt;
		local cache = {}&lt;br /&gt;
		if tot &amp;gt;= len then&lt;br /&gt;
			for key in ipairs(tbl) do tbl[key] = nil end&lt;br /&gt;
			tot = len&lt;br /&gt;
		else&lt;br /&gt;
			for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end&lt;br /&gt;
			for idx = 1, lcut, 1 do tbl[idx] = nil end&lt;br /&gt;
		end&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if type(key) == &#039;number&#039; and key &amp;gt; 0 then&lt;br /&gt;
				if key &amp;gt; len then cache[key - tot] = val&lt;br /&gt;
				else cache[key - lcut] = val end&lt;br /&gt;
				tbl[key] = nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for key, val in pairs(cache) do tbl[key] = val end&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, 3)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|cropping|left crop|right crop|pipe to&lt;br /&gt;
library.cropping = function (ctx)&lt;br /&gt;
	local lcut = tonumber(ctx.pipe[1])&lt;br /&gt;
	if lcut == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘cropping’: Left crop must be a number&#039;, 0) end&lt;br /&gt;
	local rcut = tonumber(ctx.pipe[2])&lt;br /&gt;
	if rcut == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘cropping’: Right crop must be a number&#039;, 0) end&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local nmin&lt;br /&gt;
	local nmax&lt;br /&gt;
	for key in pairs(tbl) do&lt;br /&gt;
		if type(key) == &#039;number&#039; then&lt;br /&gt;
			if nmin == nil then&lt;br /&gt;
				nmin = key&lt;br /&gt;
				nmax = key&lt;br /&gt;
			elseif key &amp;gt; nmax then nmax = key&lt;br /&gt;
			elseif key &amp;lt; nmin then nmin = key end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if nmin ~= nil then&lt;br /&gt;
		local len = nmax - nmin + 1&lt;br /&gt;
		if lcut &amp;lt; 0 then lcut = len + lcut end&lt;br /&gt;
		if rcut &amp;lt; 0 then rcut = len + rcut end&lt;br /&gt;
		if lcut + rcut - len &amp;gt; -1 then&lt;br /&gt;
			for key in pairs(tbl) do&lt;br /&gt;
				if type(key) == &#039;number&#039; then tbl[key] = nil end&lt;br /&gt;
			end&lt;br /&gt;
		elseif lcut + rcut &amp;gt; 0 then&lt;br /&gt;
			for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end&lt;br /&gt;
			for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end&lt;br /&gt;
			local lshift = nmin + lcut - 1&lt;br /&gt;
			if lshift &amp;gt; 0 then&lt;br /&gt;
				for idx = lshift + 1, nmax, 1 do&lt;br /&gt;
					tbl[idx - lshift] = tbl[idx]&lt;br /&gt;
					tbl[idx] = nil&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, 3)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|purging|start offset|length|pipe to&lt;br /&gt;
library.purging = function (ctx)&lt;br /&gt;
	local idx = tonumber(ctx.pipe[1])&lt;br /&gt;
	if idx == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘purging’: Start offset must be a number&#039;, 0) end&lt;br /&gt;
	local len = tonumber(ctx.pipe[2])&lt;br /&gt;
	if len == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘purging’: Length must be a number&#039;, 0) end&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	if len &amp;lt; 1 then&lt;br /&gt;
		len = len + table.maxn(tbl)&lt;br /&gt;
		if idx &amp;gt; len then return context_iterate(ctx, 3) end&lt;br /&gt;
		len = len - idx + 1&lt;br /&gt;
	end&lt;br /&gt;
	ctx.params = copy_table_reduced(tbl, idx, len)&lt;br /&gt;
	return context_iterate(ctx, 3)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|backpurging|start offset|length|pipe to&lt;br /&gt;
library.backpurging = function (ctx)&lt;br /&gt;
	local last = tonumber(ctx.pipe[1])&lt;br /&gt;
	if last == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘backpurging’: Start offset must be a number&#039;, 0) end&lt;br /&gt;
	local len = tonumber(ctx.pipe[2])&lt;br /&gt;
	if len == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘backpurging’: Length must be a number&#039;, 0) end&lt;br /&gt;
	local idx&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	if len &amp;gt; 0 then&lt;br /&gt;
		idx = last - len + 1&lt;br /&gt;
	else&lt;br /&gt;
		for key in pairs(tbl) do&lt;br /&gt;
			if type(key) == &#039;number&#039; and (idx == nil or&lt;br /&gt;
				key &amp;lt; idx) then idx = key end&lt;br /&gt;
		end&lt;br /&gt;
		if idx == nil then return context_iterate(ctx, 3) end&lt;br /&gt;
		idx = idx - len&lt;br /&gt;
		if last &amp;lt; idx then return context_iterate(ctx, 3) end&lt;br /&gt;
		len = last - idx + 1&lt;br /&gt;
	end&lt;br /&gt;
	ctx.params = copy_table_reduced(ctx.params, idx, len)&lt;br /&gt;
	return context_iterate(ctx, 3)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|rotating|pipe to&lt;br /&gt;
library.rotating = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local numericals = {}&lt;br /&gt;
	local nmax = 0&lt;br /&gt;
	for key, val in pairs(tbl) do&lt;br /&gt;
		if type(key) == &#039;number&#039; then&lt;br /&gt;
			numericals[key] = val&lt;br /&gt;
			tbl[key] = nil&lt;br /&gt;
			if key &amp;gt; nmax then nmax = key end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for key, val in pairs(numericals) do tbl[nmax - key + 1] = val end&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|pivoting|pipe to&lt;br /&gt;
--[[&lt;br /&gt;
library.pivoting = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local shift = #tbl + 1&lt;br /&gt;
	if shift &amp;lt; 2 then return library.rotating(ctx) end&lt;br /&gt;
	local numericals = {}&lt;br /&gt;
	for key, val in pairs(tbl) do&lt;br /&gt;
		if type(key) == &#039;number&#039; then&lt;br /&gt;
			numericals[key] = val&lt;br /&gt;
			tbl[key] = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for key, val in pairs(numericals) do tbl[shift - key] = val end&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
]]--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|mirroring|pipe to&lt;br /&gt;
--[[&lt;br /&gt;
library.mirroring = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local numericals = {}&lt;br /&gt;
	local nmax&lt;br /&gt;
	local nmin&lt;br /&gt;
	for key, val in pairs(tbl) do&lt;br /&gt;
		if type(key) == &#039;number&#039; then&lt;br /&gt;
			numericals[key] = val&lt;br /&gt;
			tbl[key] = nil&lt;br /&gt;
			if nmax == nil then&lt;br /&gt;
				nmax = key&lt;br /&gt;
				nmin = key&lt;br /&gt;
			elseif key &amp;gt; nmax then nmax = key&lt;br /&gt;
			elseif key &amp;lt; nmin then nmin = key end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for key, val in pairs(numericals) do tbl[nmax + nmin - key] = val end&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
]]--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|swapping|pipe to&lt;br /&gt;
--[[&lt;br /&gt;
library.swapping = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local cache = {}&lt;br /&gt;
	local nsize = 0&lt;br /&gt;
	local tmp&lt;br /&gt;
	for key in pairs(tbl) do&lt;br /&gt;
		if type(key) == &#039;number&#039; then&lt;br /&gt;
			nsize = nsize + 1&lt;br /&gt;
			cache[nsize] = key&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(cache)&lt;br /&gt;
	for idx = math.floor(nsize / 2), 1, -1 do&lt;br /&gt;
		tmp = tbl[cache[idx] ]&lt;br /&gt;
		tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ]&lt;br /&gt;
		tbl[cache[nsize - idx + 1] ] = tmp&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
]]--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|sorting_sequential_values|[criterion]|pipe to&lt;br /&gt;
library.sorting_sequential_values = function (ctx)&lt;br /&gt;
	local sortfn&lt;br /&gt;
	if ctx.pipe[1] ~= nil then sortfn = sortfunctions[ctx.pipe[1]] end&lt;br /&gt;
	if sortfn then table.sort(ctx.params, sortfn)&lt;br /&gt;
	else table.sort(ctx.params) end -- i.e. either `false` or `nil`&lt;br /&gt;
	if sortfn == nil then return context_iterate(ctx, 1) end&lt;br /&gt;
	return context_iterate(ctx, 2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|inserting|position|how many|...|pipe to&lt;br /&gt;
--[[&lt;br /&gt;
library.inserting = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.params` might be the original metatable! As a modifier,&lt;br /&gt;
	-- this function MUST create a copy of it before returning&lt;br /&gt;
	local idx = tonumber(ctx.pipe[1])&lt;br /&gt;
	if idx == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘inserting’: Position must be a number&#039;, 0) end&lt;br /&gt;
	local len = tonumber(ctx.pipe[2])&lt;br /&gt;
	if len == nil or len &amp;lt; 1 then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘inserting’: The amount must be a number greater than zero&#039;, 0) end&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local tbl = copy_table_expanded(ctx.params, idx, len)&lt;br /&gt;
	for key = idx, idx + len - 1 do tbl[key] = opts[key - idx + 3] end&lt;br /&gt;
	ctx.params = tbl&lt;br /&gt;
	return context_iterate(ctx, len + 3)&lt;br /&gt;
end&lt;br /&gt;
]]--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|imposing|name|value|pipe to&lt;br /&gt;
library.imposing = function (ctx)&lt;br /&gt;
	if ctx.pipe[1] == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘imposing’: Missing parameter name to impose&#039;, 0) end&lt;br /&gt;
	local key = ctx.pipe[1]:match&#039;^%s*(.-)%s*$&#039;&lt;br /&gt;
	ctx.params[tonumber(key) or key] = ctx.pipe[2]&lt;br /&gt;
	return context_iterate(ctx, 3)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|providing|name|value|pipe to&lt;br /&gt;
library.providing = function (ctx)&lt;br /&gt;
	if ctx.pipe[1] == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘providing’: Missing parameter name to provide&#039;, 0) end&lt;br /&gt;
	local key = ctx.pipe[1]:match&#039;^%s*(.-)%s*$&#039;&lt;br /&gt;
	key = tonumber(key) or key&lt;br /&gt;
	if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end&lt;br /&gt;
	return context_iterate(ctx, 3)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|discarding|name|[how many]|pipe to&lt;br /&gt;
library.discarding = function (ctx)&lt;br /&gt;
	if ctx.pipe[1] == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘discarding’: Missing parameter name to discard&#039;, 0) end&lt;br /&gt;
	local key = ctx.pipe[1]&lt;br /&gt;
	local len = tonumber(ctx.pipe[2])&lt;br /&gt;
	if len == nil then&lt;br /&gt;
		ctx.params[tonumber(key) or key:match&#039;^%s*(.-)%s*$&#039;] = nil&lt;br /&gt;
		return context_iterate(ctx, 2)&lt;br /&gt;
	end&lt;br /&gt;
	key = tonumber(key)&lt;br /&gt;
	if key == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘discarding’: A range was provided, but the initial parameter name is not numerical&#039;, 0) end&lt;br /&gt;
	if len &amp;lt; 1 then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘discarding’: A range can only be a number greater than zero&#039;, 0) end&lt;br /&gt;
	for idx = key, key + len - 1 do ctx.params[idx] = nil end&lt;br /&gt;
	return context_iterate(ctx, 3)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|with_name_matching|target 1|[plain flag 1]|[or]&lt;br /&gt;
--            |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag&lt;br /&gt;
--            N]|pipe to&lt;br /&gt;
library.with_name_matching = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local targets, argc = parse_pattern_args(ctx, targets,&lt;br /&gt;
		&#039;with_name_matching&#039;)&lt;br /&gt;
	local nomatch&lt;br /&gt;
	for key in pairs(tbl) do&lt;br /&gt;
		nomatch = true&lt;br /&gt;
		for _, ptn in ipairs(targets) do&lt;br /&gt;
			if not ptn[3] then&lt;br /&gt;
				if string.find(key, ptn[1], 1, ptn[2]) then&lt;br /&gt;
					nomatch = false&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			elseif key == ptn[1] then&lt;br /&gt;
				nomatch = false&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if nomatch then tbl[key] = nil end&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|with_name_not_matching|target 1|[plain flag 1]&lt;br /&gt;
--            |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain&lt;br /&gt;
--            flag N]|pipe to&lt;br /&gt;
library.with_name_not_matching = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local targets, argc = parse_pattern_args(ctx, targets,&lt;br /&gt;
		&#039;with_name_not_matching&#039;)&lt;br /&gt;
	local yesmatch&lt;br /&gt;
	for key in pairs(tbl) do&lt;br /&gt;
		yesmatch = true&lt;br /&gt;
		for _, ptn in ipairs(targets) do&lt;br /&gt;
			if ptn[3] then&lt;br /&gt;
				if key ~= ptn[1] then&lt;br /&gt;
					yesmatch = false&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			elseif not string.find(key, ptn[1], 1, ptn[2]) then&lt;br /&gt;
				yesmatch = false&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if yesmatch then tbl[key] = nil end&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|with_value_matching|target 1|[plain flag 1]|[or]&lt;br /&gt;
--            |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag&lt;br /&gt;
--            N]|pipe to&lt;br /&gt;
library.with_value_matching = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local targets, argc = parse_pattern_args(ctx, targets,&lt;br /&gt;
		&#039;with_value_matching&#039;)&lt;br /&gt;
	local nomatch&lt;br /&gt;
	for key, val in pairs(tbl) do&lt;br /&gt;
		nomatch = true&lt;br /&gt;
		for _, ptn in ipairs(targets) do&lt;br /&gt;
			if ptn[3] then&lt;br /&gt;
				if val == ptn[1] then&lt;br /&gt;
					nomatch = false&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			elseif string.find(val, ptn[1], 1, ptn[2]) then&lt;br /&gt;
				nomatch = false&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if nomatch then tbl[key] = nil end&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|with_value_not_matching|target 1|[plain flag 1]&lt;br /&gt;
--            |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain&lt;br /&gt;
--            flag N]|pipe to&lt;br /&gt;
library.with_value_not_matching = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	local targets, argc = parse_pattern_args(ctx, targets,&lt;br /&gt;
		&#039;with_value_not_matching&#039;)&lt;br /&gt;
	local yesmatch&lt;br /&gt;
	for key, val in pairs(tbl) do&lt;br /&gt;
		yesmatch = true&lt;br /&gt;
		for _, ptn in ipairs(targets) do&lt;br /&gt;
			if ptn[3] then&lt;br /&gt;
				if val ~= ptn[1] then&lt;br /&gt;
					yesmatch = false&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			elseif not string.find(val, ptn[1], 1, ptn[2]) then&lt;br /&gt;
				yesmatch = false&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if yesmatch then tbl[key] = nil end&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|trimming_values|pipe to&lt;br /&gt;
library.trimming_values = function (ctx)&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	for key, val in pairs(tbl) do tbl[key] = val:match&#039;^%s*(.-)%s*$&#039; end&lt;br /&gt;
	return context_iterate(ctx, 1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|mapping_by_calling|template name|[call&lt;br /&gt;
--            style]|[let]|[...][number of additional parameters]|[parameter&lt;br /&gt;
--            1]|[parameter 2]|[...]|[parameter N]|pipe to&lt;br /&gt;
library.mapping_by_calling = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local tname&lt;br /&gt;
	if opts[1] ~= nil then tname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if tname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘mapping_by_calling’: No template name was provided&#039;, 0) end&lt;br /&gt;
	local margs, argc, looptype, karg, varg = parse_callback_args(opts, 1,&lt;br /&gt;
		mapping_styles.values_only)&lt;br /&gt;
	local model = { title = tname, args = margs }&lt;br /&gt;
	value_maps[looptype](ctx.params, margs, karg, varg, function ()&lt;br /&gt;
		return ctx.frame:expandTemplate(model)&lt;br /&gt;
	end)&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|mapping_by_invoking|module name|function&lt;br /&gt;
--            name|[call style]|[let]|[...]|[number of additional&lt;br /&gt;
--            arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to&lt;br /&gt;
library.mapping_by_invoking = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local mname&lt;br /&gt;
	local fname&lt;br /&gt;
	if opts[1] ~= nil then mname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if mname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘mapping_by_invoking’: No module name was provided&#039;, 0) end&lt;br /&gt;
	if opts[2] ~= nil then fname = opts[2]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if fname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘mapping_by_invoking’: No function name was provided&#039;, 0) end&lt;br /&gt;
	local margs, argc, looptype, karg, varg = parse_callback_args(opts, 2,&lt;br /&gt;
		mapping_styles.values_only)&lt;br /&gt;
	local model = { title = &#039;Module:&#039; .. mname, args = margs }&lt;br /&gt;
	local mfunc = require(model.title)[fname]&lt;br /&gt;
	if mfunc == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘mapping_by_invoking’: The function ‘&#039; .. fname ..&lt;br /&gt;
		&#039;’ does not exist&#039;, 0) end&lt;br /&gt;
	value_maps[looptype](ctx.params, margs, karg, varg, function ()&lt;br /&gt;
		return mfunc(ctx.frame:newChild(model))&lt;br /&gt;
	end)&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|mapping_by_magic|parser function|[call&lt;br /&gt;
--            style]|[let]|[...][number of additional arguments]|[argument&lt;br /&gt;
--            1]|[argument 2]|[...]|[argument N]|pipe to&lt;br /&gt;
library.mapping_by_magic = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local magic&lt;br /&gt;
	if opts[1] ~= nil then magic = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if magic == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘mapping_by_magic’: No parser function was provided&#039;, 0) end&lt;br /&gt;
	local margs, argc, looptype, karg, varg = parse_callback_args(opts, 1,&lt;br /&gt;
		mapping_styles.values_only)&lt;br /&gt;
	value_maps[looptype](ctx.params, margs, karg, varg, function ()&lt;br /&gt;
		return ctx.frame:callParserFunction(magic, margs)&lt;br /&gt;
	end)&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|mapping_by_replacing|target|replace|[count]|[plain&lt;br /&gt;
--            flag]|pipe to&lt;br /&gt;
library.mapping_by_replacing = function (ctx)&lt;br /&gt;
	local ptn, repl, nmax, is_strict, argc, die =&lt;br /&gt;
		parse_replace_args(ctx.pipe, &#039;mapping_by_replacing&#039;)&lt;br /&gt;
	if die then return context_iterate(ctx, argc) end&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	if is_strict then&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			if val == ptn then tbl[key] = repl end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if flg == 2 then&lt;br /&gt;
			-- Copied from Module:String&#039;s `str._escapePattern()`&lt;br /&gt;
			ptn = ptn:gsub(&#039;[%(%)%.%%%+%-%*%?%[%^%$%]]&#039;, &#039;%%%0&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			tbl[key] = val:gsub(ptn, repl, nmax)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|renaming_by_calling|template name|[call&lt;br /&gt;
--            style]|[let]|[...][number of additional parameters]|[parameter&lt;br /&gt;
--            1]|[parameter 2]|[...]|[parameter N]|pipe to&lt;br /&gt;
library.renaming_by_calling = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local tname&lt;br /&gt;
	if opts[1] ~= nil then tname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if tname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘renaming_by_calling’: No template name was provided&#039;, 0) end&lt;br /&gt;
	local rargs, argc, looptype, karg, varg = parse_callback_args(opts, 1,&lt;br /&gt;
		mapping_styles.names_only)&lt;br /&gt;
	local model = { title = tname, args = rargs }&lt;br /&gt;
	map_names(ctx.params, rargs, karg, varg, looptype, function ()&lt;br /&gt;
		return ctx.frame:expandTemplate(model)&lt;br /&gt;
	end)&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|renaming_by_invoking|module name|function&lt;br /&gt;
--            name|[call style]|[let]|[...]|[number of additional&lt;br /&gt;
--            arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to&lt;br /&gt;
library.renaming_by_invoking = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local mname&lt;br /&gt;
	local fname&lt;br /&gt;
	if opts[1] ~= nil then mname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if mname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘renaming_by_invoking’: No module name was provided&#039;, 0) end&lt;br /&gt;
	if opts[2] ~= nil then fname = opts[2]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if fname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘renaming_by_invoking’: No function name was provided&#039;, 0) end&lt;br /&gt;
	local rargs, argc, looptype, karg, varg = parse_callback_args(opts, 2,&lt;br /&gt;
		mapping_styles.names_only)&lt;br /&gt;
	local model = { title = &#039;Module:&#039; .. mname, args = rargs }&lt;br /&gt;
	local mfunc = require(model.title)[fname]&lt;br /&gt;
	if mfunc == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘renaming_by_invoking’: The function ‘&#039; .. fname ..&lt;br /&gt;
		&#039;’ does not exist&#039;, 0) end&lt;br /&gt;
	map_names(ctx.params, rargs, karg, varg, looptype, function ()&lt;br /&gt;
		return mfunc(ctx.frame:newChild(model))&lt;br /&gt;
	end)&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|renaming_by_magic|parser function|[call&lt;br /&gt;
--            style]|[let]|[...][number of additional arguments]|[argument&lt;br /&gt;
--            1]|[argument 2]|[...]|[argument N]|pipe to&lt;br /&gt;
library.renaming_by_magic = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local magic&lt;br /&gt;
	if opts[1] ~= nil then magic = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if magic == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘renaming_by_magic’: No parser function was provided&#039;, 0) end&lt;br /&gt;
	local rargs, argc, looptype, karg, varg = parse_callback_args(opts, 1,&lt;br /&gt;
		mapping_styles.names_only)&lt;br /&gt;
	map_names(ctx.params, rargs, karg, varg, looptype, function ()&lt;br /&gt;
		return ctx.frame:callParserFunction(magic, rargs)&lt;br /&gt;
	end)&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|renaming_by_replacing|target|replace|[count]|[plain&lt;br /&gt;
--            flag]|pipe to&lt;br /&gt;
library.renaming_by_replacing = function (ctx)&lt;br /&gt;
	local ptn, repl, nmax, is_strict, argc, die =&lt;br /&gt;
		parse_replace_args(ctx.pipe, &#039;renaming_by_replacing&#039;)&lt;br /&gt;
	if die then return context_iterate(ctx, argc) end&lt;br /&gt;
	local tbl = ctx.params&lt;br /&gt;
	if is_strict then&lt;br /&gt;
		local key = tonumber(ptn) or ptn:match&#039;^%s*(.-)%s*$&#039;&lt;br /&gt;
		local val = tbl[key]&lt;br /&gt;
		tbl[key] = nil&lt;br /&gt;
		tbl[tonumber(repl) or repl:match&#039;^%s*(.-)%s*$&#039;] = val&lt;br /&gt;
	else&lt;br /&gt;
		if flg == 2 then&lt;br /&gt;
			-- Copied from Module:String&#039;s `str._escapePattern()`&lt;br /&gt;
			ptn = ptn:gsub(&#039;[%(%)%.%%%+%-%*%?%[%^%$%]]&#039;, &#039;%%%0&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local cache = {}&lt;br /&gt;
		for key, val in pairs(tbl) do&lt;br /&gt;
			steal_if_renamed(val, tbl, key, cache,&lt;br /&gt;
				tostring(key):gsub(ptn, repl, nmax))&lt;br /&gt;
		end&lt;br /&gt;
		for key, val in pairs(cache) do tbl[key] = val end&lt;br /&gt;
	end&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|grouping_by_calling|template&lt;br /&gt;
--            name|[let]|[...]|[number of additional arguments]|[argument&lt;br /&gt;
--            1]|[argument 2]|[...]|[argument N]|pipe to&lt;br /&gt;
library.grouping_by_calling = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.params` might be the original metatable! As a modifier,&lt;br /&gt;
	-- this function MUST create a copy of it before returning&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local tmp&lt;br /&gt;
	if opts[1] ~= nil then tmp = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if tmp == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘grouping_by_calling’: No template name was provided&#039;, 0) end&lt;br /&gt;
	local model = { title = tmp }&lt;br /&gt;
	local tmp, argc = parse_child_args(opts, 2, 0)&lt;br /&gt;
	local gargs = {}&lt;br /&gt;
	for key, val in pairs(tmp) do&lt;br /&gt;
		if type(key) == &#039;number&#039; and key &amp;lt; 1 then gargs[key - 1] = val&lt;br /&gt;
		else gargs[key] = val end&lt;br /&gt;
	end&lt;br /&gt;
	local groups = make_groups(ctx.params)&lt;br /&gt;
	for gid, group in pairs(groups) do&lt;br /&gt;
		for key, val in pairs(gargs) do group[key] = val end&lt;br /&gt;
		group[0] = gid&lt;br /&gt;
		model.args = group&lt;br /&gt;
		groups[gid] = ctx.frame:expandTemplate(model)&lt;br /&gt;
	end&lt;br /&gt;
	ctx.params = groups&lt;br /&gt;
	return context_iterate(ctx, argc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--[[ Functions ]]--&lt;br /&gt;
	-----------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|count&lt;br /&gt;
library.count = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!&lt;br /&gt;
	local retval = 0&lt;br /&gt;
	for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end&lt;br /&gt;
	if ctx.subset == -1 then retval = retval - #ctx.params end&lt;br /&gt;
	ctx.text = retval&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2]&lt;br /&gt;
--            |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value&lt;br /&gt;
--            n]|[...]&lt;br /&gt;
library.concat_and_call = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.params` might be the original metatable!&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local tname&lt;br /&gt;
	if opts[1] ~= nil then tname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if tname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘concat_and_call’: No template name was provided&#039;, 0) end&lt;br /&gt;
	remove_numerical_keys(opts, 1, 1)&lt;br /&gt;
	ctx.text = ctx.frame:expandTemplate{&lt;br /&gt;
		title = tname,&lt;br /&gt;
		args = concat_params(ctx)&lt;br /&gt;
	}&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:args|concat_and_invoke|module name|function name|[prepend&lt;br /&gt;
--            1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named&lt;br /&gt;
--            item n=value n]|[...]&lt;br /&gt;
library.concat_and_invoke = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.params` might be the original metatable!&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local mname&lt;br /&gt;
	local fname&lt;br /&gt;
	if opts[1] ~= nil then mname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if mname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘concat_and_invoke’: No module name was provided&#039;, 0) end&lt;br /&gt;
	if opts[2] ~= nil then fname = opts[2]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if fname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘concat_and_invoke’: No function name was provided&#039;, 0) end&lt;br /&gt;
	remove_numerical_keys(opts, 1, 2)&lt;br /&gt;
	local mfunc = require(&#039;Module:&#039; .. mname)[fname]&lt;br /&gt;
	if mfunc == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘concat_and_invoke’: The function ‘&#039; .. fname ..&lt;br /&gt;
		&#039;’ does not exist&#039;, 0) end&lt;br /&gt;
	ctx.text = mfunc(ctx.frame:newChild{&lt;br /&gt;
		title = &#039;Module:&#039; .. fname,&lt;br /&gt;
		args = concat_params(ctx)&lt;br /&gt;
	})&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend&lt;br /&gt;
--            2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n=&lt;br /&gt;
--            value n]|[...]&lt;br /&gt;
library.concat_and_magic = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.params` might be the original metatable!&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local magic&lt;br /&gt;
	if opts[1] ~= nil then magic = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if magic == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘concat_and_magic’: No parser function was provided&#039;, 0) end&lt;br /&gt;
	remove_numerical_keys(opts, 1, 1)&lt;br /&gt;
	ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx))&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|value_of|parameter name&lt;br /&gt;
library.value_of = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local kstr&lt;br /&gt;
	if opts[1] ~= nil then kstr = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if kstr == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘value_of’: No parameter name was provided&#039;, 0) end&lt;br /&gt;
	local knum = tonumber(kstr)&lt;br /&gt;
	local len = #ctx.params&lt;br /&gt;
	local val = ctx.params[knum or kstr]&lt;br /&gt;
	if val ~= nil and (&lt;br /&gt;
		ctx.subset ~= -1 or knum == nil or knum &amp;gt; len or knum &amp;lt; 1&lt;br /&gt;
	) and (&lt;br /&gt;
		ctx.subset ~= 1 or (knum ~= nil and knum &amp;lt;= len and knum &amp;gt; 0)&lt;br /&gt;
	) then&lt;br /&gt;
		ctx.text = (ctx.header or &#039;&#039;) .. val .. (ctx.footer or &#039;&#039;)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|list&lt;br /&gt;
library.list = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.pipe` might be the original metatable!&lt;br /&gt;
	local kvs = ctx.pairsep or &#039;&#039;&lt;br /&gt;
	local pps = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (key, val)&lt;br /&gt;
			ret[nss + 1] = pps&lt;br /&gt;
			ret[nss + 2] = key&lt;br /&gt;
			ret[nss + 3] = kvs&lt;br /&gt;
			ret[nss + 4] = val&lt;br /&gt;
			nss = nss + 4&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 4 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 3] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|list_values&lt;br /&gt;
library.list_values = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.pipe` might be the original metatable!&lt;br /&gt;
	local pps = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (key, val)&lt;br /&gt;
			ret[nss + 1] = pps&lt;br /&gt;
			ret[nss + 2] = val&lt;br /&gt;
			nss = nss + 2&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 2 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 1] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|for_each|wikitext&lt;br /&gt;
library.for_each = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.pipe` might be the original metatable!&lt;br /&gt;
	local txt = ctx.pipe[1] or &#039;&#039;&lt;br /&gt;
	local pps = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (key, val)&lt;br /&gt;
			ret[nss + 1] = pps&lt;br /&gt;
			ret[nss + 2] = txt:gsub(&#039;%$#&#039;, key):gsub(&#039;%$@&#039;, val)&lt;br /&gt;
			nss = nss + 2&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 2 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 1] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|call_for_each|template name|[append 1]|[append 2]&lt;br /&gt;
--            |[...]|[append n]|[named param 1=value 1]|[...]|[named param&lt;br /&gt;
--            n=value n]|[...]&lt;br /&gt;
library.call_for_each = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local tname&lt;br /&gt;
	if opts[1] ~= nil then tname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if tname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘call_for_each’: No template name was provided&#039;, 0) end&lt;br /&gt;
	local model = { title = tname, args = opts }&lt;br /&gt;
	local ccs = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	table.insert(opts, 1, true)&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (key, val)&lt;br /&gt;
			opts[1] = key&lt;br /&gt;
			opts[2] = val&lt;br /&gt;
			ret[nss + 1] = ccs&lt;br /&gt;
			ret[nss + 2] = ctx.frame:expandTemplate(model)&lt;br /&gt;
			nss = nss + 2&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 2 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 1] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|invoke_for_each|module name|module function|[append&lt;br /&gt;
--            1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]&lt;br /&gt;
--            |[named param n=value n]|[...]&lt;br /&gt;
library.invoke_for_each = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local mname&lt;br /&gt;
	local fname&lt;br /&gt;
	if opts[1] ~= nil then mname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if mname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘invoke_for_each’: No module name was provided&#039;, 0) end&lt;br /&gt;
	if opts[2] ~= nil then fname = opts[2]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if fname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘invoke_for_each’: No function name was provided&#039;, 0) end&lt;br /&gt;
	local model = { title = &#039;Module:&#039; .. mname, args = opts }&lt;br /&gt;
	local mfunc = require(model.title)[fname]&lt;br /&gt;
	local ccs = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (key, val)&lt;br /&gt;
			opts[1] = key&lt;br /&gt;
			opts[2] = val&lt;br /&gt;
			ret[nss + 1] = ccs&lt;br /&gt;
			ret[nss + 2] = mfunc(ctx.frame:newChild(model))&lt;br /&gt;
			nss = nss + 2&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 2 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 1] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|magic_for_each|parser function|[append 1]|[append 2]&lt;br /&gt;
--            |[...]|[append n]|[named param 1=value 1]|[...]|[named param&lt;br /&gt;
--            n=value n]|[...]&lt;br /&gt;
library.magic_for_each = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local magic&lt;br /&gt;
	if opts[1] ~= nil then magic = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if magic == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘magic_for_each’: No parser function was provided&#039;, 0) end&lt;br /&gt;
	local ccs = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	table.insert(opts, 1, true)&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (key, val)&lt;br /&gt;
			opts[1] = key&lt;br /&gt;
			opts[2] = val&lt;br /&gt;
			ret[nss + 1] = ccs&lt;br /&gt;
			ret[nss + 2] = ctx.frame:callParserFunction(magic,&lt;br /&gt;
				opts)&lt;br /&gt;
			nss = nss + 2&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 2 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 1] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|call_for_each_value|template name|[append 1]|[append&lt;br /&gt;
--            2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param&lt;br /&gt;
--            n=value n]|[...]&lt;br /&gt;
library.call_for_each_value = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local tname&lt;br /&gt;
	if opts[1] ~= nil then tname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if tname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘call_for_each_value’: No template name was provided&#039;, 0) end&lt;br /&gt;
	local model = { title = tname, args = opts }&lt;br /&gt;
	local ccs = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (key, val)&lt;br /&gt;
			opts[1] = val&lt;br /&gt;
			ret[nss + 1] = ccs&lt;br /&gt;
			ret[nss + 2] = ctx.frame:expandTemplate(model)&lt;br /&gt;
			nss = nss + 2&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 2 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 1] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|invoke_for_each_value|module name|[append 1]|[append&lt;br /&gt;
--            2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param&lt;br /&gt;
--            n=value n]|[...]&lt;br /&gt;
library.invoke_for_each_value = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local mname&lt;br /&gt;
	local fname&lt;br /&gt;
	if opts[1] ~= nil then mname = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if mname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘invoke_for_each_value’: No module name was provided&#039;, 0) end&lt;br /&gt;
	if opts[2] ~= nil then fname = opts[2]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if fname == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘invoke_for_each_value’: No function name was provided&#039;, 0) end&lt;br /&gt;
	local model = { title = &#039;Module:&#039; .. mname, args = opts }&lt;br /&gt;
	local mfunc = require(model.title)[fname]&lt;br /&gt;
	local ccs = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	remove_numerical_keys(opts, 1, 1)&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (key, val)&lt;br /&gt;
			opts[1] = val&lt;br /&gt;
			ret[nss + 1] = ccs&lt;br /&gt;
			ret[nss + 2] = mfunc(ctx.frame:newChild(model))&lt;br /&gt;
			nss = nss + 2&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 2 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 1] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|magic_for_each_value|parser function|[append 1]&lt;br /&gt;
--            |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named&lt;br /&gt;
--            param n=value n]|[...]&lt;br /&gt;
library.magic_for_each_value = function (ctx)&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local magic&lt;br /&gt;
	if opts[1] ~= nil then magic = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if magic == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘magic_for_each_value’: No parser function was provided&#039;, 0) end&lt;br /&gt;
	local ccs = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (key, val)&lt;br /&gt;
			opts[1] = val&lt;br /&gt;
			ret[nss + 1] = ccs&lt;br /&gt;
			ret[nss + 2] = ctx.frame:callParserFunction(magic,&lt;br /&gt;
				opts)&lt;br /&gt;
			nss = nss + 2&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 2 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 1] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|call_for_each_group|template name|[append 1]|[append&lt;br /&gt;
--            2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param&lt;br /&gt;
--            n=value n]|[...]&lt;br /&gt;
library.call_for_each_group = function (ctx)&lt;br /&gt;
	-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!&lt;br /&gt;
	local opts = ctx.pipe&lt;br /&gt;
	local tmp&lt;br /&gt;
	if opts[1] ~= nil then tmp = opts[1]:match&#039;^%s*(.*%S)&#039; end&lt;br /&gt;
	if tmp == nil then error(ctx.luaname ..&lt;br /&gt;
		&#039;, ‘call_for_each_group’: No template name was provided&#039;, 0) end&lt;br /&gt;
	local model = { title = tmp }&lt;br /&gt;
	local ccs = ctx.itersep or &#039;&#039;&lt;br /&gt;
	local nss = 0&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	opts = {}&lt;br /&gt;
	for key, val in pairs(ctx.pipe) do&lt;br /&gt;
		if type(key) == &#039;number&#039; then opts[key - 1] = val&lt;br /&gt;
		else opts[key] = val end&lt;br /&gt;
	end&lt;br /&gt;
	ctx.pipe = opts&lt;br /&gt;
	ctx.params = make_groups(ctx.params)&lt;br /&gt;
	flush_params(&lt;br /&gt;
		ctx,&lt;br /&gt;
		function (gid, group)&lt;br /&gt;
			for key, val in pairs(opts) do group[key] = val end&lt;br /&gt;
			group[0] = gid&lt;br /&gt;
			model.args = group&lt;br /&gt;
			ret[nss + 1] = ccs&lt;br /&gt;
			ret[nss + 2] = ctx.frame:expandTemplate(model)&lt;br /&gt;
			nss = nss + 2&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	if nss &amp;gt; 0 then&lt;br /&gt;
		if nss &amp;gt; 2 and ctx.lastsep ~= nil then&lt;br /&gt;
			ret[nss - 1] = ctx.lastsep&lt;br /&gt;
		end&lt;br /&gt;
		ret[1] = ctx.header or &#039;&#039;&lt;br /&gt;
		if ctx.footer ~= nil then ret[nss + 1] = ctx.footer end&lt;br /&gt;
		ctx.text = table.concat(ret)&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	ctx.text = ctx.ifngiven or &#039;&#039;&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	---                                        ---&lt;br /&gt;
	---     PUBLIC ENVIRONMENT                 ---&lt;br /&gt;
	---    ________________________________    ---&lt;br /&gt;
	---                                        ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--[[ First-position-only modifiers ]]--&lt;br /&gt;
	---------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|new|pipe to&lt;br /&gt;
--[[&lt;br /&gt;
static_iface.new = function (frame)&lt;br /&gt;
	local ctx = context_new()&lt;br /&gt;
	ctx.frame = frame:getParent()&lt;br /&gt;
	ctx.pipe = copy_or_ref_table(frame.args, false)&lt;br /&gt;
	ctx.params = {}&lt;br /&gt;
	main_loop(ctx, context_iterate(ctx, 1))&lt;br /&gt;
	return ctx.text&lt;br /&gt;
end&lt;br /&gt;
]]--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--[[ First-position-only functions ]]--&lt;br /&gt;
	---------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Syntax:  #invoke:params|self&lt;br /&gt;
static_iface.self = function (frame)&lt;br /&gt;
	return frame:getParent():getTitle()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--[[ Public metatable of functions ]]--&lt;br /&gt;
	---------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return setmetatable(static_iface, {&lt;br /&gt;
	__index = function (iface, _fname_)&lt;br /&gt;
		local ctx = context_new()&lt;br /&gt;
		local fname = _fname_:match&#039;^%s*(.*%S)&#039;&lt;br /&gt;
		if fname == nil then error(ctx.luaname ..&lt;br /&gt;
			&#039;: You must specify a function to call&#039;, 0) end&lt;br /&gt;
		if library[fname] == nil then error(ctx.luaname ..&lt;br /&gt;
			&#039;: The function ‘&#039; .. fname .. &#039;’ does not exist&#039;, 0) end&lt;br /&gt;
		local func = library[fname]&lt;br /&gt;
		return function (frame)&lt;br /&gt;
			ctx.frame = frame:getParent()&lt;br /&gt;
			ctx.pipe = copy_or_ref_table(frame.args,&lt;br /&gt;
				refpipe[fname])&lt;br /&gt;
			ctx.params = copy_or_ref_table(ctx.frame.args,&lt;br /&gt;
				refparams[fname])&lt;br /&gt;
			main_loop(ctx, func)&lt;br /&gt;
			return ctx.text&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
})&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Template_journal_inline/styles.css&amp;diff=3977</id>
		<title>Template:Template journal inline/styles.css</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Template_journal_inline/styles.css&amp;diff=3977"/>
		<updated>2025-01-06T19:55:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template}} */&lt;br /&gt;
span.tj-tape {&lt;br /&gt;
	padding: 1px 4px;&lt;br /&gt;
	font-family: &amp;quot;Menlo&amp;quot;, &amp;quot;Consolas&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace;&lt;br /&gt;
	white-space: pre-wrap;&lt;br /&gt;
	word-wrap: break-word;&lt;br /&gt;
	background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
	color: var(--color-emphasized, #000);&lt;br /&gt;
	border: 1px solid var(--border-color-muted, #eaecf0);&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
	tab-size: 4;&lt;br /&gt;
	vertical-align: baseline;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
span.tj-tape span.tj-tn,&lt;br /&gt;
span.tj-tape span.tj-tn a,&lt;br /&gt;
span.tj-tape span.tj-tn a:link,&lt;br /&gt;
span.tj-tape span.tj-tn a:visited,&lt;br /&gt;
span.tj-tape span.tj-tn a:hover {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	color: #4169e1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
span.tj-tape span.tj-an {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	color: #2e8b57;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
span.tj-tape span.tj-ac {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: #933;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
span.tj-tape span.tj-nc {&lt;br /&gt;
	margin: 0 .075em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
span.tj-tape span.tj-nc + span.tj-nc,&lt;br /&gt;
span.tj-tape span.tj-nc:first-child {&lt;br /&gt;
	margin: 0 .075em 0 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
span.tj-tape span.tj-nc:last-child {&lt;br /&gt;
	margin: 0 0 0 .075em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Dark mode support */&lt;br /&gt;
@media screen {&lt;br /&gt;
    html.skin-theme-clientpref-night div.tj-tape span.tj-tn,&lt;br /&gt;
	html.skin-theme-clientpref-night div.tj-tape span.tj-tn a,&lt;br /&gt;
	html.skin-theme-clientpref-night div.tj-tape span.tj-tn a:link,&lt;br /&gt;
	html.skin-theme-clientpref-night div.tj-tape span.tj-tn a:visited,&lt;br /&gt;
	html.skin-theme-clientpref-night div.tj-tape span.tj-tn a:hover {&lt;br /&gt;
		color: #6383E7;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	html.skin-theme-clientpref-night div.tj-tape span.tj-an {&lt;br /&gt;
		color: #339a60;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	html.skin-theme-clientpref-night div.tj-tape span.tj-ac {&lt;br /&gt;
		color: #D07373;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os div.tj-tape span.tj-tn,&lt;br /&gt;
	html.skin-theme-clientpref-os div.tj-tape span.tj-tn a,&lt;br /&gt;
	html.skin-theme-clientpref-os div.tj-tape span.tj-tn a:link,&lt;br /&gt;
	html.skin-theme-clientpref-os div.tj-tape span.tj-tn a:visited,&lt;br /&gt;
	html.skin-theme-clientpref-os div.tj-tape span.tj-tn a:hover {&lt;br /&gt;
		color: #6383E7;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	html.skin-theme-clientpref-os div.tj-tape span.tj-an {&lt;br /&gt;
		color: #339a60;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	html.skin-theme-clientpref-os div.tj-tape span.tj-ac {&lt;br /&gt;
		color: #D07373;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Template_journal_inline&amp;diff=3975</id>
		<title>Template:Template journal inline</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Template_journal_inline&amp;diff=3975"/>
		<updated>2025-01-06T19:55:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#if:{{{1|}}}&lt;br /&gt;
	|&amp;lt;templatestyles src=&amp;quot;Template:Template journal inline/styles.css&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;tj-tape&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;tj-nc&amp;quot;&amp;gt;&amp;amp;#123;&amp;amp;#123;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;tj-tn&amp;quot;&amp;gt;[[Template:{{#if:x|{{{1}}}}}|{{#if:x|{{{1}}}}}]]&amp;lt;/span&amp;gt;{{#invoke:params|sequential|cutting|1|0|squeezing|trimming_values|setting|hi|&amp;lt;wbr /&amp;gt;&amp;lt;span class{{=}}&amp;quot;tj-nc&amp;quot;&amp;gt;&amp;amp;#124;&amp;lt;/span&amp;gt;|mapping_by_replacing|^[^:]+$|&amp;lt;span class{{=}}&amp;quot;tj-ac&amp;quot;&amp;gt;%0&amp;lt;/span&amp;gt;|1|mapping_by_replacing|^([^:].-)%s*:%s*(.*)$|&amp;lt;span class{{=}}&amp;quot;tj-an&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&amp;lt;span class{{=}}&amp;quot;tj-nc&amp;quot;&amp;gt;&amp;amp;#61;&amp;lt;/span&amp;gt;&amp;lt;span class{{=}}&amp;quot;tj-ac&amp;quot;&amp;gt;%2&amp;lt;/span&amp;gt;|1|mapping_by_replacing|^:%s*(.*)$|&amp;lt;span class{{=}}&amp;quot;tj-nc&amp;quot;&amp;gt;&amp;amp;#61;&amp;lt;/span&amp;gt;&amp;lt;span class{{=}}&amp;quot;tj-ac&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;|1|list_values}}&amp;lt;span class{{=}}&amp;quot;tj-nc&amp;quot;&amp;gt;&amp;amp;#125;&amp;amp;#125;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
	|{{Error|Error: Missing template name}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Tji&amp;diff=3973</id>
		<title>Template:Tji</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Tji&amp;diff=3973"/>
		<updated>2025-01-06T19:55:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Template journal inline]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Module:Transclusion_count/data/H&amp;diff=3971</id>
		<title>Module:Transclusion count/data/H</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Module:Transclusion_count/data/H&amp;diff=3971"/>
		<updated>2025-01-06T19:55:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;H-phrases&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;HABS&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;HAER&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;HDS&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;HD_Radio&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;HD_color&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;HKG&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;HMAS&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;HMCS&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;HMS&amp;quot;] = 36000,&lt;br /&gt;
[&amp;quot;HNLMS&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;HOUR&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;HRV&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;HUN&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;HWYACR&amp;quot;] = 56000,&lt;br /&gt;
[&amp;quot;Hab&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Hair_space&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;Handbook_of_Texas&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Hanging_indent&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Hansard-contribs&amp;quot;] = 9400,&lt;br /&gt;
[&amp;quot;Harv&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Harvard_citation&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Harvard_citation_no_brackets&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Harvard_citation_text&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Harvard_citation_year_brackets&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Harvid&amp;quot;] = 69000,&lt;br /&gt;
[&amp;quot;Harvnb&amp;quot;] = 48000,&lt;br /&gt;
[&amp;quot;Harvp&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Harvtxt&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;HasTemplate&amp;quot;] = 101000,&lt;br /&gt;
[&amp;quot;Has_short_description&amp;quot;] = 753000,&lt;br /&gt;
[&amp;quot;Hat&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Hatnote&amp;quot;] = 687000,&lt;br /&gt;
[&amp;quot;Hatnote_inline&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Height&amp;quot;] = 94000,&lt;br /&gt;
[&amp;quot;Help_me-helped&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Helpbox&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Helpbox/styles.css&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Helpme-helped&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Hexadecimal&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Hidden&amp;quot;] = 299000,&lt;br /&gt;
[&amp;quot;Hidden/FC&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Hidden_archive_bottom&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Hidden_archive_top&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Hidden_archive_top/styles.css&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Hidden_begin&amp;quot;] = 347000,&lt;br /&gt;
[&amp;quot;Hidden_begin/styles.css&amp;quot;] = 347000,&lt;br /&gt;
[&amp;quot;Hidden_category&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Hidden_end&amp;quot;] = 347000,&lt;br /&gt;
[&amp;quot;Hidden_ping&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Hidden_sort_key&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;High-Class&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;High-importance&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;High-use&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Highlight&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Highlight/core&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;Highlight_round&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Hilite&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Historic_Environment_Scotland&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Historical&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Historical_Dictionary_of_Switzerland&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Historical_populations&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;History&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;History_icon&amp;quot;] = 9200,&lt;br /&gt;
[&amp;quot;History_icon2&amp;quot;] = 9200,&lt;br /&gt;
[&amp;quot;Hlist&amp;quot;] = 257000,&lt;br /&gt;
[&amp;quot;Hlist/styles.css&amp;quot;] = 8450000,&lt;br /&gt;
[&amp;quot;Hmbox&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Hmbox/styles.css&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Hndis&amp;quot;] = 72000,&lt;br /&gt;
[&amp;quot;Hong_Kong_English&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Horizontal_TOC&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Horizontal_TOC/styles.css&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;HoursElapsed&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;Hours_elapsed&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;How_to_request_photo_in&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Howtoreqphotoin&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Hr&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;Hs&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Hsp&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Huge&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Hugman&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Human_name_disambiguation&amp;quot;] = 77000,&lt;br /&gt;
[&amp;quot;Human_readable_duration&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Humor&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Hurricane_season_bar&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Hurricane_season_bar/button&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Hurricane_season_bar/styles.css&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Hurricane_status_small&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Höhe&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Module:HTMLDecode&amp;quot;] = 814000,&lt;br /&gt;
[&amp;quot;Module:Hatnote&amp;quot;] = 1980000,&lt;br /&gt;
[&amp;quot;Module:Hatnote/styles.css&amp;quot;] = 1980000,&lt;br /&gt;
[&amp;quot;Module:Hatnote_inline&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Module:Hatnote_list&amp;quot;] = 1180000,&lt;br /&gt;
[&amp;quot;Module:Hidden_ping&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Module:High-use&amp;quot;] = 57000,&lt;br /&gt;
[&amp;quot;Module:Highest_archive_number&amp;quot;] = 313000,&lt;br /&gt;
[&amp;quot;Module:Historical_populations&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;Module:Historical_populations/styles.css&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;Module:Hms&amp;quot;] = 243000,&lt;br /&gt;
[&amp;quot;Module:Human_readable_duration&amp;quot;] = 29000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Highlight_round&amp;diff=3969</id>
		<title>Template:Highlight round</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Highlight_round&amp;diff=3969"/>
		<updated>2025-01-06T19:55:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span style=&amp;quot;margin-right:0.1em; padding:3px 4px 2px; background-color:{{{bc|yellow}}}; border:1px; border-radius:3px; box-shadow:2px 2px 4px #A0A080;&amp;quot;&amp;gt;{{{1|Highlighted text}}}&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Highlight/testcases&amp;diff=3967</id>
		<title>Template:Highlight/testcases</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Highlight/testcases&amp;diff=3967"/>
		<updated>2025-01-06T19:55:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{testcases notice}}&lt;br /&gt;
:{{hilite | purple text | purple }} &amp;lt;nowiki&amp;gt;{{hilite | text | purple }}&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
:{{hilite | lavender text | lavender }}  &amp;lt;nowiki&amp;gt;{{hilite | text | lavender }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:{{hilite | bluetext | blue}}  &amp;lt;nowiki&amp;gt;{{hilite | text | blue}}&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
:{{hilite | lightblue text | lightblue }}  &amp;lt;nowiki&amp;gt;{{hilite | text | lightblue }}&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
:{{hilite | green text | green }}  &amp;lt;nowiki&amp;gt;{{hilite | text | green }}&amp;lt;/nowiki&amp;gt;    &lt;br /&gt;
:{{hilite | darkgreen text | darkgreen }}  &amp;lt;nowiki&amp;gt;{{hilite | text | darkgreen }}&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
:{{hilite | lightgreen text | lightgreen }}  &amp;lt;nowiki&amp;gt;{{hilite | text | lightgreen }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:{{hilite | yellow text  | yellow }}  &amp;lt;nowiki&amp;gt;{{hilite | text | yellow }}&amp;lt;/nowiki&amp;gt;    &lt;br /&gt;
:{{hilite | orange text | orange }} &amp;lt;nowiki&amp;gt;{{hilite | text | orange }}&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
:{{hilite | pink text | pink }} &amp;lt;nowiki&amp;gt;{{hilite | text | pink }}&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
:{{hilite | red text | red }} &amp;lt;nowiki&amp;gt;{{hilite | text | red }}&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Highlight/doc&amp;diff=3965</id>
		<title>Template:Highlight/doc</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Highlight/doc&amp;diff=3965"/>
		<updated>2025-01-06T19:55:55Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
{{High-use}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE --&amp;gt;&lt;br /&gt;
{{Template shortcut|hl|hilite}}&lt;br /&gt;
For adding yellow highlight to specified inline text. The highlight color can be changed, and the highlight can also be set to expire at a certain date. Please keep template usage to talk pages only.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{highlight | text | color (optional) | expiration (optional) }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; (parameter 1): Enter the text to be highlighted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Optional parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These parameters are optional, but unused parameters must be separated by a pipe (see examples below):&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;color&#039;&#039;&#039; (parameter 2): Colors may be specified by word (e.g., &amp;quot;red&amp;quot;, &amp;quot;blue&amp;quot;, &amp;quot;lightgreen&amp;quot;) or in [[Web colors|hexadecimal]] format (e.g., &amp;quot;#FF0066&amp;quot;, &amp;quot;#C0C0C0&amp;quot;). If no value is given for the color, the template defaults to yellow.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;expiration&#039;&#039;&#039; (parameter 3): Highlights may be set to expire on a certain date, which leaves the text as-is, but removes the highlight color. The expiration value can be specified in any format.&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! code !! output !! notes&lt;br /&gt;
|-&lt;br /&gt;
| {{tji|highlight| text }} || {{highlight | text }} || The default highlight color is yellow&lt;br /&gt;
|-&lt;br /&gt;
| {{tji|highlight| text | lightblue }} || {{highlight | text | lightblue }} || The second parameter is the highlight color&lt;br /&gt;
|-&lt;br /&gt;
| {{tji|highlight| text | lightblue | 2011-01-01 }} || {{highlight | text | lightblue | 2011-01-01 }} || This is not highlighted since 1 January 2011 is in the past&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space:nowrap;&amp;quot; | {{tji|highlight| text | lightblue | {{CURRENTYEAR}}-{{CURRENTMONTH}}-{{CURRENTDAY2}} }} || {{highlight | text || {{CURRENTYEAR}}-{{CURRENTMONTH}}-{{CURRENTDAY2}}}} || There is no highlighting on the expiration date ({{Purge|purge this page&#039;s server cache}} if today&#039;s date is not shown)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;white-space:nowrap;&amp;quot; | {{tji|highlight| text | #00FF00 | 1 January 2099 }} || {{highlight | text | #00FF00 | 1 January 2099 }} || This is highlighted since 1 January 2099 is in the future&lt;br /&gt;
|-&lt;br /&gt;
| {{tji|highlight| text || January 1, 2099 }} || {{highlight | text || January 1, 2099 }} || Note the color parameter, left blank, is still represented&amp;lt;br&amp;gt; with a pipe (followed by the expiration parameter pipe)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
* {{tl|Highlight round}} – highlights the included text using a rounded box {{Highlight round|with shadows}}&lt;br /&gt;
* {{tl|tq}} – for quoting text on talk pages&lt;br /&gt;
* {{tl|font color}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;text&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Text to be highlighted&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Some text goes here&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;color&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Highlight color&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;CSS color to be used for highlight, like lightblue or #FF0066&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;lightblue&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;unknown&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;yellow&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;3&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;expiration&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Expiration date of highlight&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;After this date, the text will remain but the highlight color will not display.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;2029-09-01&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Highlights the given text.&amp;quot;,&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;2&amp;quot;,&lt;br /&gt;
		&amp;quot;3&amp;quot;&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- CATEGORIES AND INTERWIKIS HERE, THANKS --&amp;gt;&lt;br /&gt;
[[Category:Typing-aid templates]]&lt;br /&gt;
[[Category:Text color templates]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Highlight/core&amp;diff=3963</id>
		<title>Template:Highlight/core</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Highlight/core&amp;diff=3963"/>
		<updated>2025-01-06T19:55:55Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;color:black;background:{{{2|yellow}}}&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Highlight&amp;diff=3961</id>
		<title>Template:Highlight</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Highlight&amp;diff=3961"/>
		<updated>2025-01-06T19:55:55Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:{{{3|}}}|{{#ifexpr:({{#time:U|{{{3}}}}} - {{#time:U|now}}) &amp;gt; 0|{{highlight/core|{{{1|}}}|{{#ifeq:{{{2|}}}||yellow|{{{2}}}}}}}|{{{1|}}}}}|{{highlight/core|{{{1|}}}|{{{2|yellow}}}}}}}&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:DOC&amp;diff=3959</id>
		<title>Template:DOC</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:DOC&amp;diff=3959"/>
		<updated>2025-01-06T19:54:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Documentation]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Substed&amp;diff=3957</id>
		<title>Template:Substed</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Substed&amp;diff=3957"/>
		<updated>2025-01-06T19:54:17Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Always substitute]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from template shortcut}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Template_link_with_subst&amp;diff=3955</id>
		<title>Template:Template link with subst</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Template_link_with_subst&amp;diff=3955"/>
		<updated>2025-01-06T19:54:17Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#Invoke:Template link general|main|subst=yes}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|1=Template:Tlg/doc&lt;br /&gt;
|content = {{tlg/doc|tls|tlsp}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Tlsp&amp;diff=3953</id>
		<title>Template:Tlsp</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Tlsp&amp;diff=3953"/>
		<updated>2025-01-06T19:54:17Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Template link with subst]]&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from template shortcut}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Pp-semi-indef&amp;diff=3951</id>
		<title>Template:Pp-semi-indef</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Pp-semi-indef&amp;diff=3951"/>
		<updated>2025-01-06T19:54:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Protection banner|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:R_protected/semi&amp;diff=3949</id>
		<title>Template:R protected/semi</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:R_protected/semi&amp;diff=3949"/>
		<updated>2025-01-06T19:54:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Redirect template&lt;br /&gt;
  |id=R semi-protected&lt;br /&gt;
  |name=[[:Category:Wikipedia semi-protected redirects|Semi-protected]]&lt;br /&gt;
  |from=a title that is semi-protected from editing for any of several possible reasons&lt;br /&gt;
  |info=** &#039;&#039;&#039;Please do not replace these redirected links&#039;&#039;&#039; with links directly to the target page unless expressly advised to do so below or elsewhere on this page, or if the change is supported by a policy or guideline.&lt;br /&gt;
  |all category=&amp;lt;!--for automatic namespace detection--&amp;gt;&lt;br /&gt;
}}{{#ifeq:{{{nocat|}}}|true||{{#ifeq:{{FULLPAGENAME}}|Template:R semi-protected||{{#ifeq: {{SUBPAGENAME}}|sandbox||{{#switch: {{PROTECTIONLEVEL:move}}&lt;br /&gt;
   |extendedconfirmed=[[Category:Wikipedia extended-protected redirects]]&lt;br /&gt;
   |templateeditor=[[Category:Wikipedia template-protected redirects]]&lt;br /&gt;
   |sysop=[[Category:Wikipedia fully protected redirects]]&lt;br /&gt;
 }}{{#switch: {{PROTECTIONLEVEL:edit}}&lt;br /&gt;
   |autoconfirmed=[[Category:Wikipedia semi-protected redirects]]&lt;br /&gt;
   |extendedconfirmed|templateeditor|sysop|#default=[[Category:Wikipedia pages with incorrect protection templates]]&lt;br /&gt;
}}}}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Protection_padlock&amp;diff=3947</id>
		<title>Template:Protection padlock</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Protection_padlock&amp;diff=3947"/>
		<updated>2025-01-06T19:54:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Protection banner|main}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:R_protected&amp;diff=3945</id>
		<title>Template:R protected</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:R_protected&amp;diff=3945"/>
		<updated>2025-01-06T19:54:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#switch:{{{protlevel|{{#invoke:effective protection level|edit|1={{{title|{{FULLPAGENAME}}}}}}}}}}&lt;br /&gt;
|sysop={{R protected/full|nocat={{{nocat|}}}}}{{pp-protected|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}&lt;br /&gt;
|templateeditor={{R protected/template|nocat={{{nocat|}}}}}{{pp-template|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}&lt;br /&gt;
|extendedconfirmed={{R protected/excon|nocat={{{nocat|}}}}}{{pp-extended|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}&lt;br /&gt;
|autoconfirmed={{R protected/semi|nocat={{{nocat|}}}}}{{pp-semi|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}&lt;br /&gt;
|#default=&amp;lt;!-- Show nothing --&amp;gt;{{#ifeq:{{{nocat|}}}|true||[[Category:Wikipedia pages with incorrect protection templates]]}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Pp-semi&amp;diff=3943</id>
		<title>Template:Pp-semi</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Pp-semi&amp;diff=3943"/>
		<updated>2025-01-06T19:54:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Protection padlock]]&lt;br /&gt;
[[Category:Top icon protection templates|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:R_from_merge&amp;diff=3941</id>
		<title>Template:R from merge</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:R_from_merge&amp;diff=3941"/>
		<updated>2025-01-06T19:54:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{This is a redirect/rcat}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;{{Redirect template&lt;br /&gt;
  |id=R from merge&lt;br /&gt;
  |name=From a merge&lt;br /&gt;
  |from=a page that was merged into another page&lt;br /&gt;
  |info=This redirect was kept in order to preserve [[Special:PageHistory/{{FULLPAGENAMEE}}|&#039;&#039;&#039;the edit history of this page&#039;&#039;&#039;]] after its content was merged into {{#if:{{{1|}}}|&#039;&#039;&#039;[[{{{1}}}]]&#039;&#039;&#039;|the content of the target page}}.  Please &#039;&#039;do not&#039;&#039; remove the tag that generates this text (unless the need to recreate content on this page has been demonstrated) or delete this page.&lt;br /&gt;
** For redirects with substantive [[Help:page histories|page histories]] that &#039;&#039;did not result from page merges&#039;&#039; use {{tl|R with history}} instead. &lt;br /&gt;
  |all category=Redirects from merges&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Place categories on /doc subpage; interwikis go to Wikidata. --&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ancestry.jonesipedia.com/index.php?title=Template:Pp-protected&amp;diff=3939</id>
		<title>Template:Pp-protected</title>
		<link rel="alternate" type="text/html" href="https://ancestry.jonesipedia.com/index.php?title=Template:Pp-protected&amp;diff=3939"/>
		<updated>2025-01-06T19:54:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Protection padlock]]&lt;br /&gt;
&lt;br /&gt;
{{Rcat shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
{{R from long name}}&lt;br /&gt;
{{R with history}}&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Top icon protection templates]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>