<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://breadsandwich.net/colwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Steve</id>
	<title>Chronicles of Legends Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://breadsandwich.net/colwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Steve"/>
	<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Special:Contributions/Steve"/>
	<updated>2026-06-03T08:02:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=User:Steve&amp;diff=2783</id>
		<title>User:Steve</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=User:Steve&amp;diff=2783"/>
		<updated>2025-05-15T04:09:17Z</updated>

		<summary type="html">&lt;p&gt;Steve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;i&#039;m steve&lt;br /&gt;
&lt;br /&gt;
So far I have played...&lt;br /&gt;
* [[Lazrok]]&lt;br /&gt;
* [[Thynemos]]&lt;br /&gt;
* [[Borborn Griseo]]&lt;br /&gt;
* [[Gib Gnawbone]]&lt;br /&gt;
* [[Shunn Shurreth]]&lt;br /&gt;
* [[Augie Blackrose]]&lt;br /&gt;
* [[Dystopio Smashedtobits]]&lt;br /&gt;
* [[Pix]]&lt;br /&gt;
* [[Mizzi Westlake]]&lt;br /&gt;
* [[Copper Stormforge]]&lt;br /&gt;
* [[Xukali]]&lt;br /&gt;
&lt;br /&gt;
==Me on other wikis==&lt;br /&gt;
* [[gm:User:Steve|Steve on Goldmask Wiki]]&lt;br /&gt;
* [[hfh:User:Steve|Steve on Heroes for Hire Wiki]]&lt;br /&gt;
* [[witr:User:Steve|Steve on War in the Realm Wiki]]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Schildtrager&amp;diff=2779</id>
		<title>Schildtrager</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Schildtrager&amp;diff=2779"/>
		<updated>2025-01-26T09:05:22Z</updated>

		<summary type="html">&lt;p&gt;Steve: Redirected page to Schildträger&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Schildträger]]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Copper_Stormforge&amp;diff=2778</id>
		<title>Copper Stormforge</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Copper_Stormforge&amp;diff=2778"/>
		<updated>2025-01-26T09:04:47Z</updated>

		<summary type="html">&lt;p&gt;Steve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox person&lt;br /&gt;
| honorific_prefix   = &lt;br /&gt;
| name               = Copper Stormforge&lt;br /&gt;
| honorific_suffix   = &lt;br /&gt;
| image              = &amp;lt;!-- filename only, no &amp;quot;File:&amp;quot; or &amp;quot;Image:&amp;quot; prefix, and no enclosing [[brackets]] --&amp;gt;&lt;br /&gt;
| image_upright      = &lt;br /&gt;
| landscape          = &amp;lt;!-- yes, if wide image, otherwise leave blank --&amp;gt;&lt;br /&gt;
| alt                = &amp;lt;!-- descriptive text for use by speech synthesis (text-to-speech) software --&amp;gt;&lt;br /&gt;
| caption            = &lt;br /&gt;
| native_name        = &lt;br /&gt;
| native_name_lang   = &lt;br /&gt;
| pronunciation      = &lt;br /&gt;
| birth_name         = &amp;lt;!-- only use if different from name --&amp;gt;&lt;br /&gt;
| birth_date         = 5458&lt;br /&gt;
| birth_place        = &lt;br /&gt;
| baptised           = &amp;lt;!-- will not display if birth_date is entered --&amp;gt;&lt;br /&gt;
| disappeared_date   = &amp;lt;!-- {{Disappeared date and age|YYYY|MM|DD|YYYY|MM|DD}} (disappeared date then birth date) --&amp;gt;&lt;br /&gt;
| disappeared_place  = &lt;br /&gt;
| disappeared_status = &lt;br /&gt;
| death_date         = &amp;lt;!-- {{Death date and age|YYYY|MM|DD|YYYY|MM|DD}} (enter DEATH date then BIRTH date (e.g., ...|1967|8|31|1908|2|28}} use both this parameter and |birth_date to display the person&#039;s date of birth, date of death, and age at death) --&amp;gt;&lt;br /&gt;
| death_place        = &lt;br /&gt;
| death_cause        = &amp;lt;!-- should only be included when the cause of death has significance for the subject&#039;s notability --&amp;gt;&lt;br /&gt;
| body_discovered    = &lt;br /&gt;
| resting_place      = &lt;br /&gt;
| resting_place_coordinates = &amp;lt;!-- {{coord|LAT|LONG|type:landmark|display=inline}} --&amp;gt;&lt;br /&gt;
| burial_place       = &amp;lt;!-- may be used instead of resting_place and resting_place_coordinates (displays &amp;quot;Burial place&amp;quot; as label) --&amp;gt;&lt;br /&gt;
| burial_coordinates = &amp;lt;!-- {{coord|LAT|LONG|type:landmark|display=inline}} --&amp;gt;&lt;br /&gt;
| monuments          = &lt;br /&gt;
| nationality        = &amp;lt;!-- do not use per [[WP:INFONAT]] --&amp;gt;&lt;br /&gt;
| other_names        = &lt;br /&gt;
| siglum             = &lt;br /&gt;
| citizenship        = &amp;lt;!-- use only when necessary per [[WP:INFONAT]] --&amp;gt;&lt;br /&gt;
| education          = &lt;br /&gt;
| alma_mater         = &lt;br /&gt;
| occupation         = &lt;br /&gt;
| years_active       = &lt;br /&gt;
| era                = &lt;br /&gt;
| employer           = [[Astaroth Pierce]]&lt;br /&gt;
| organization       = [[Whims of Fate Casino]]&lt;br /&gt;
| agent              = &amp;lt;!-- discouraged in most cases, specifically when promotional, and requiring a reliable source --&amp;gt;&lt;br /&gt;
| known_for          = &lt;br /&gt;
| notable_works      = &amp;lt;!-- produces label &amp;quot;Notable work&amp;quot;; may be overridden by |credits=, which produces label &amp;quot;Notable credit(s)&amp;quot;; or by |works=, which produces label &amp;quot;Works&amp;quot;; or by |label_name=, which produces label &amp;quot;Label(s)&amp;quot; --&amp;gt;&lt;br /&gt;
| style              = &lt;br /&gt;
| height             = 4 ft 10 in&lt;br /&gt;
| television         = &lt;br /&gt;
| title              = &amp;lt;!-- formal/awarded/job title. The parameter |office=may be used as an alternative when the label is better rendered as &amp;quot;Office&amp;quot; (e.g. public office or appointments) --&amp;gt;&lt;br /&gt;
| term               = &lt;br /&gt;
| predecessor        = &lt;br /&gt;
| successor          = &lt;br /&gt;
| party              = &lt;br /&gt;
| otherparty         =&lt;br /&gt;
| movement           = &lt;br /&gt;
| opponents          = &lt;br /&gt;
| boards             = &lt;br /&gt;
| criminal_charges   = &amp;lt;!-- criminality parameters should be supported with citations from reliable sources --&amp;gt;&lt;br /&gt;
| criminal_penalty   = &lt;br /&gt;
| criminal_status    = &lt;br /&gt;
| spouse             = &amp;lt;!-- use article title or common name --&amp;gt;&lt;br /&gt;
| partner            = &amp;lt;!-- (unmarried long-term partner) --&amp;gt;&lt;br /&gt;
| children           = &lt;br /&gt;
| parents            = &amp;lt;!-- overrides mother and father parameters --&amp;gt;&lt;br /&gt;
| mother             = Isbeil Stormforge&lt;br /&gt;
| father             = Marcus Stormforge&lt;br /&gt;
| relatives          = Justina Silvervein (sister)&lt;br /&gt;
| family             = &lt;br /&gt;
| callsign           = &amp;lt;!-- amateur radio, use if relevant --&amp;gt;&lt;br /&gt;
| awards             = &lt;br /&gt;
| website            = &amp;lt;!-- {{URL|example.com}} --&amp;gt;&lt;br /&gt;
| module             = &lt;br /&gt;
| module2            = &lt;br /&gt;
| module3            = &lt;br /&gt;
| module4            = &lt;br /&gt;
| module5            = &lt;br /&gt;
| module6            = &lt;br /&gt;
| signature          = &lt;br /&gt;
| signature_type     =&lt;br /&gt;
| signature_size     = &lt;br /&gt;
| signature_alt      = &lt;br /&gt;
| footnotes          = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Copper Stormforge&#039;&#039;&#039; is a dwarf monk who is part of the crew of the [[Schildträger]].&lt;br /&gt;
&lt;br /&gt;
[[Category:PCs]][[Category:Monks]]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Schildtr%C3%A4ger&amp;diff=2777</id>
		<title>Schildträger</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Schildtr%C3%A4ger&amp;diff=2777"/>
		<updated>2025-01-26T03:10:46Z</updated>

		<summary type="html">&lt;p&gt;Steve: Created page with &amp;quot;The &amp;#039;&amp;#039;&amp;#039;Schildträger&amp;#039;&amp;#039;&amp;#039; is an escort ship that specializes in protecting clients.  Its crew includes: * Sigrith * Aeternus * Arisha Mu * Copper Stormforge * Luciel Pierce * Lyarette * Mazul&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Schildträger&#039;&#039;&#039; is an escort ship that specializes in protecting clients.&lt;br /&gt;
&lt;br /&gt;
Its crew includes:&lt;br /&gt;
* [[Sigrith]]&lt;br /&gt;
* [[Aeternus]]&lt;br /&gt;
* [[Arisha Mu]]&lt;br /&gt;
* [[Copper Stormforge]]&lt;br /&gt;
* [[Luciel Pierce]]&lt;br /&gt;
* [[Lyarette]]&lt;br /&gt;
* [[Mazul]]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Copper_Stormforge&amp;diff=2776</id>
		<title>Copper Stormforge</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Copper_Stormforge&amp;diff=2776"/>
		<updated>2025-01-26T03:08:47Z</updated>

		<summary type="html">&lt;p&gt;Steve: Created page with &amp;quot;{{Infobox person | honorific_prefix   =  | name               = Copper Stormforge | honorific_suffix   =  | image              = &amp;lt;!-- filename only, no &amp;quot;File:&amp;quot; or &amp;quot;Image:&amp;quot; prefix, and no enclosing brackets --&amp;gt; | image_upright      =  | landscape          = &amp;lt;!-- yes, if wide image, otherwise leave blank --&amp;gt; | alt                = &amp;lt;!-- descriptive text for use by speech synthesis (text-to-speech) software --&amp;gt; | caption            =  | native_name        =  | native_nam...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox person&lt;br /&gt;
| honorific_prefix   = &lt;br /&gt;
| name               = Copper Stormforge&lt;br /&gt;
| honorific_suffix   = &lt;br /&gt;
| image              = &amp;lt;!-- filename only, no &amp;quot;File:&amp;quot; or &amp;quot;Image:&amp;quot; prefix, and no enclosing [[brackets]] --&amp;gt;&lt;br /&gt;
| image_upright      = &lt;br /&gt;
| landscape          = &amp;lt;!-- yes, if wide image, otherwise leave blank --&amp;gt;&lt;br /&gt;
| alt                = &amp;lt;!-- descriptive text for use by speech synthesis (text-to-speech) software --&amp;gt;&lt;br /&gt;
| caption            = &lt;br /&gt;
| native_name        = &lt;br /&gt;
| native_name_lang   = &lt;br /&gt;
| pronunciation      = &lt;br /&gt;
| birth_name         = &amp;lt;!-- only use if different from name --&amp;gt;&lt;br /&gt;
| birth_date         = 5458&lt;br /&gt;
| birth_place        = &lt;br /&gt;
| baptised           = &amp;lt;!-- will not display if birth_date is entered --&amp;gt;&lt;br /&gt;
| disappeared_date   = &amp;lt;!-- {{Disappeared date and age|YYYY|MM|DD|YYYY|MM|DD}} (disappeared date then birth date) --&amp;gt;&lt;br /&gt;
| disappeared_place  = &lt;br /&gt;
| disappeared_status = &lt;br /&gt;
| death_date         = &amp;lt;!-- {{Death date and age|YYYY|MM|DD|YYYY|MM|DD}} (enter DEATH date then BIRTH date (e.g., ...|1967|8|31|1908|2|28}} use both this parameter and |birth_date to display the person&#039;s date of birth, date of death, and age at death) --&amp;gt;&lt;br /&gt;
| death_place        = &lt;br /&gt;
| death_cause        = &amp;lt;!-- should only be included when the cause of death has significance for the subject&#039;s notability --&amp;gt;&lt;br /&gt;
| body_discovered    = &lt;br /&gt;
| resting_place      = &lt;br /&gt;
| resting_place_coordinates = &amp;lt;!-- {{coord|LAT|LONG|type:landmark|display=inline}} --&amp;gt;&lt;br /&gt;
| burial_place       = &amp;lt;!-- may be used instead of resting_place and resting_place_coordinates (displays &amp;quot;Burial place&amp;quot; as label) --&amp;gt;&lt;br /&gt;
| burial_coordinates = &amp;lt;!-- {{coord|LAT|LONG|type:landmark|display=inline}} --&amp;gt;&lt;br /&gt;
| monuments          = &lt;br /&gt;
| nationality        = &amp;lt;!-- do not use per [[WP:INFONAT]] --&amp;gt;&lt;br /&gt;
| other_names        = &lt;br /&gt;
| siglum             = &lt;br /&gt;
| citizenship        = &amp;lt;!-- use only when necessary per [[WP:INFONAT]] --&amp;gt;&lt;br /&gt;
| education          = &lt;br /&gt;
| alma_mater         = &lt;br /&gt;
| occupation         = &lt;br /&gt;
| years_active       = &lt;br /&gt;
| era                = &lt;br /&gt;
| employer           = [[Astaroth Pierce]]&lt;br /&gt;
| organization       = [[Whims of Fate Casino]]&lt;br /&gt;
| agent              = &amp;lt;!-- discouraged in most cases, specifically when promotional, and requiring a reliable source --&amp;gt;&lt;br /&gt;
| known_for          = &lt;br /&gt;
| notable_works      = &amp;lt;!-- produces label &amp;quot;Notable work&amp;quot;; may be overridden by |credits=, which produces label &amp;quot;Notable credit(s)&amp;quot;; or by |works=, which produces label &amp;quot;Works&amp;quot;; or by |label_name=, which produces label &amp;quot;Label(s)&amp;quot; --&amp;gt;&lt;br /&gt;
| style              = &lt;br /&gt;
| height             = 4 ft 10 in&lt;br /&gt;
| television         = &lt;br /&gt;
| title              = &amp;lt;!-- formal/awarded/job title. The parameter |office=may be used as an alternative when the label is better rendered as &amp;quot;Office&amp;quot; (e.g. public office or appointments) --&amp;gt;&lt;br /&gt;
| term               = &lt;br /&gt;
| predecessor        = &lt;br /&gt;
| successor          = &lt;br /&gt;
| party              = &lt;br /&gt;
| otherparty         =&lt;br /&gt;
| movement           = &lt;br /&gt;
| opponents          = &lt;br /&gt;
| boards             = &lt;br /&gt;
| criminal_charges   = &amp;lt;!-- criminality parameters should be supported with citations from reliable sources --&amp;gt;&lt;br /&gt;
| criminal_penalty   = &lt;br /&gt;
| criminal_status    = &lt;br /&gt;
| spouse             = &amp;lt;!-- use article title or common name --&amp;gt;&lt;br /&gt;
| partner            = &amp;lt;!-- (unmarried long-term partner) --&amp;gt;&lt;br /&gt;
| children           = &lt;br /&gt;
| parents            = &amp;lt;!-- overrides mother and father parameters --&amp;gt;&lt;br /&gt;
| mother             = &amp;lt;!-- may be used (optionally with father parameter) in place of parents parameter (displays &amp;quot;Parent(s)&amp;quot; as label) --&amp;gt;&lt;br /&gt;
| father             = &amp;lt;!-- may be used (optionally with mother parameter) in place of parents parameter (displays &amp;quot;Parent(s)&amp;quot; as label) --&amp;gt;&lt;br /&gt;
| relatives          = &lt;br /&gt;
| family             = &lt;br /&gt;
| callsign           = &amp;lt;!-- amateur radio, use if relevant --&amp;gt;&lt;br /&gt;
| awards             = &lt;br /&gt;
| website            = &amp;lt;!-- {{URL|example.com}} --&amp;gt;&lt;br /&gt;
| module             = &lt;br /&gt;
| module2            = &lt;br /&gt;
| module3            = &lt;br /&gt;
| module4            = &lt;br /&gt;
| module5            = &lt;br /&gt;
| module6            = &lt;br /&gt;
| signature          = &lt;br /&gt;
| signature_type     =&lt;br /&gt;
| signature_size     = &lt;br /&gt;
| signature_alt      = &lt;br /&gt;
| footnotes          = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Copper Stormforge&#039;&#039;&#039; is a dwarf monk who is part of the crew of the [[Schildträger]].&lt;br /&gt;
&lt;br /&gt;
[[Category:PCs]][[Category:Monks]]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=User:Steve&amp;diff=2775</id>
		<title>User:Steve</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=User:Steve&amp;diff=2775"/>
		<updated>2025-01-25T22:55:20Z</updated>

		<summary type="html">&lt;p&gt;Steve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;i&#039;m steve&lt;br /&gt;
&lt;br /&gt;
So far I have played...&lt;br /&gt;
* [[Lazrok]]&lt;br /&gt;
* [[Thynemos]]&lt;br /&gt;
* [[Borborn Griseo]]&lt;br /&gt;
* [[Gib Gnawbone]]&lt;br /&gt;
* [[Shunn Shurreth]]&lt;br /&gt;
* [[Augie Blackrose]]&lt;br /&gt;
* [[Dystopio Smashedtobits]]&lt;br /&gt;
* [[Pix]]&lt;br /&gt;
* [[Mizzi Westlake]]&lt;br /&gt;
* [[Copper Stormforge]]&lt;br /&gt;
&lt;br /&gt;
==Me on other wikis==&lt;br /&gt;
* [[gm:User:Steve|Steve on Goldmask Wiki]]&lt;br /&gt;
* [[hfh:User:Steve|Steve on Heroes for Hire Wiki]]&lt;br /&gt;
* [[witr:User:Steve|Steve on War in the Realm Wiki]]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=User:Steve&amp;diff=2773</id>
		<title>User:Steve</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=User:Steve&amp;diff=2773"/>
		<updated>2024-12-03T23:26:49Z</updated>

		<summary type="html">&lt;p&gt;Steve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;i&#039;m steve&lt;br /&gt;
&lt;br /&gt;
So far I have played...&lt;br /&gt;
* [[Lazrok]]&lt;br /&gt;
* [[Thynemos]]&lt;br /&gt;
* [[Borborn Griseo]]&lt;br /&gt;
* [[Gib Gnawbone]]&lt;br /&gt;
* [[Shunn Shurreth]]&lt;br /&gt;
* [[Augie Blackrose]]&lt;br /&gt;
* [[Dystopio Smashedtobits]]&lt;br /&gt;
* [[Pix]]&lt;br /&gt;
* [[Mizzi Westlake]]&lt;br /&gt;
&lt;br /&gt;
==Me on other wikis==&lt;br /&gt;
* [[gm:User:Steve|Steve on Goldmask Wiki]]&lt;br /&gt;
* [[hfh:User:Steve|Steve on Heroes for Hire Wiki]]&lt;br /&gt;
* [[witr:User:Steve|Steve on War in the Realm Wiki]]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=MediaWiki:Sidebar&amp;diff=2766</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=MediaWiki:Sidebar&amp;diff=2766"/>
		<updated>2024-11-24T00:26:07Z</updated>

		<summary type="html">&lt;p&gt;Steve: Created page with &amp;quot; * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** Timeline|Timeline ** helppage|help-mediawiki * SEARCH * TOOLBOX * LANGUAGES&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** Timeline|Timeline&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Main_Page&amp;diff=2765</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Main_Page&amp;diff=2765"/>
		<updated>2024-11-24T00:24:59Z</updated>

		<summary type="html">&lt;p&gt;Steve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Chronicles of Legends Wiki. We are currently experiencing technical difficulties. Please leave a message after the beep.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wiki Management: &#039;&#039;[[User:Steve|Steve]]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Game DM: &#039;&#039;Neil [REDACTED]&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Moral Support Dog: &#039;&#039;Annie&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A character template page is included but not necessary to follow: [[Template|Character Template Box]]&lt;br /&gt;
&lt;br /&gt;
A comprehensive timeline: [[Timeline|Timeline (WIP)]]&lt;br /&gt;
&lt;br /&gt;
=PCs=&lt;br /&gt;
&lt;br /&gt;
==Damaged Goods==&lt;br /&gt;
&lt;br /&gt;
Erina&lt;br /&gt;
&lt;br /&gt;
Red&lt;br /&gt;
&lt;br /&gt;
[[Silvia Hammerwright]]&lt;br /&gt;
&lt;br /&gt;
[[Thynemos]]&lt;br /&gt;
&lt;br /&gt;
===Former Members===&lt;br /&gt;
&lt;br /&gt;
Eris&lt;br /&gt;
&lt;br /&gt;
Mage-Eater&lt;br /&gt;
&lt;br /&gt;
Vestar&lt;br /&gt;
&lt;br /&gt;
==Other PCs==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=NPCs=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Marchogion Circle==&lt;br /&gt;
&lt;br /&gt;
Leader - Artoros&lt;br /&gt;
&lt;br /&gt;
Co-Leader - Wenivar&lt;br /&gt;
&lt;br /&gt;
Lak Lanslod&lt;br /&gt;
&lt;br /&gt;
Major&lt;br /&gt;
&lt;br /&gt;
Professor Marzhin&lt;br /&gt;
&lt;br /&gt;
Jordun Brunhilde&lt;br /&gt;
&lt;br /&gt;
Kinsley&lt;br /&gt;
&lt;br /&gt;
[[Fang of Sands]]&lt;br /&gt;
&lt;br /&gt;
Little Red&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bandits&lt;br /&gt;
&lt;br /&gt;
Barnaby Bitkins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Non Combatants=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Erveilles Capital City==&lt;br /&gt;
&lt;br /&gt;
Mayor Cameron Elford&lt;br /&gt;
&lt;br /&gt;
Doctor Morag&lt;br /&gt;
&lt;br /&gt;
Mystic Lake Shop Shopkeeper&lt;br /&gt;
&lt;br /&gt;
Farmer Fred&lt;br /&gt;
&lt;br /&gt;
Old Man &amp;quot;Mortimer Jenkins&amp;quot; - Same age as Igris. A hardworking miner sent to Erveilles during the early boom. At the age of 20 he followed for the sake of glory and did a decent job but struggled to keep up. Eventually he would settle down in Erveilles being part of the trade business&lt;br /&gt;
&lt;br /&gt;
== Unaffiliated== &lt;br /&gt;
&lt;br /&gt;
Alvare Silverfang &lt;br /&gt;
&lt;br /&gt;
[[Felicia]]&lt;br /&gt;
&lt;br /&gt;
Hiro&lt;br /&gt;
&lt;br /&gt;
[[Igris Diamondskull]]&lt;br /&gt;
&lt;br /&gt;
=Creatures=&lt;br /&gt;
&lt;br /&gt;
[[Ziz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://breadsandwich.net/heroesforhirewiki/index.php?title=How_to_Wiki How to Wiki]&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=User:Steve&amp;diff=2764</id>
		<title>User:Steve</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=User:Steve&amp;diff=2764"/>
		<updated>2024-11-24T00:24:03Z</updated>

		<summary type="html">&lt;p&gt;Steve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;i&#039;m steve&lt;br /&gt;
&lt;br /&gt;
So far I have played...&lt;br /&gt;
* [[Lazrok]]&lt;br /&gt;
* [[Thynemos]]&lt;br /&gt;
* [[Borborn Griseo]]&lt;br /&gt;
* [[Gib Gnawbone]]&lt;br /&gt;
* [[Shunn Shurreth]]&lt;br /&gt;
* [[Augie Blackrose]]&lt;br /&gt;
* [[Dystopio Smashedtobits]]&lt;br /&gt;
* [[Pix]]&lt;br /&gt;
* [[Mizzi Westlake]]&lt;br /&gt;
&lt;br /&gt;
==Me on other wikis==&lt;br /&gt;
* [http://breadsandwich.net/goldmaskwiki/index.php?title=User:Steve Steve on Goldmask Wiki]&lt;br /&gt;
* [http://breadsandwich.net/heroesforhirewiki/index.php?title=User:Steve Steve on Heroes for Hire Wiki]&lt;br /&gt;
* [http://breadsandwich.net/witrwiki/index.php?title=User:Steve Steve on War in the Realm Wiki]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Mizzi_Westlake&amp;diff=2751</id>
		<title>Mizzi Westlake</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Mizzi_Westlake&amp;diff=2751"/>
		<updated>2024-11-22T08:49:59Z</updated>

		<summary type="html">&lt;p&gt;Steve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox person&lt;br /&gt;
| name               = Mizzi Westlake&lt;br /&gt;
| birth_date         = 4480&lt;br /&gt;
| birth_place        = [[Osagate Kingdom]]&lt;br /&gt;
| occupation         = Apprentice wizard&lt;br /&gt;
| years_active       = 4507&lt;br /&gt;
| employer           = [[Hoyle]]&lt;br /&gt;
| height             = 3 ft 0 in&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mizzi Westlake&#039;&#039;&#039; is a gnome wizard.&lt;br /&gt;
&lt;br /&gt;
==Biography==&lt;br /&gt;
Despite being very intelligent, Mizzi was not able to make it into any of the magic academies in the [[Osagate Kingdom]], for reasons beyond her explanation. Still looking to learn, she tracked down a lone isolated tower to find the reclusive powerful wizard she had read about, [[Hoyle]]. Despite Hoyle being different from what she expected, Mizzi asked for Hoyle to teach her and she became his apprentice.&lt;br /&gt;
&lt;br /&gt;
After the appearance of [[Ziz]] brought the world into chaos, Mizzi and Hoyle came up with an idea to connect the world, from the big cities to the tiny villages, in a network of communication that would allow the world&#039;s powerful wizards to work together to help combat these problems, and to keep everyone as informed as possible. Unfortunately, Hoyle refused to leave his tower, choosing instead to send his apprentice out to do the work. It would be Mizzi&#039;s job to visit these towns and villages, find their most powerful wizard, explain the project and get them to sign on to be the local guardian, and give them a modified Sending Stone that is paired to one central stone in Hoyle&#039;s tower. &lt;br /&gt;
&lt;br /&gt;
On one occasion, she was sent to recruit the villages of [[Sheepridge]] and [[Kurtulcort]] into this network. To accomplish this, she joined a group of adventurers who were hired to protect [[Igris Diamondskull]] as he negotiated an deal between the two villages. Mizzi, [[Eoj]], [[Jericho]], [[Rurick]], [[Jelka]], and [[the entity formerly known as Felicia]] traveled with Igris to Kurtulcort. There they met [[Tiamat]], who agreed to join the network as the guardian of Kurtulcort, but shortly after the ground shook as panicked kobolds claimed that outsiders were attempting to steal their source of magic. In the mines they found an otherworlder with the power to turn things around her into gold. They fought and the adventurers emerged victorious. &lt;br /&gt;
&lt;br /&gt;
==Trivia==&lt;br /&gt;
* Mizzi is named after the characters [https://mtg.fandom.com/wiki/Mizzix Mizzix] from &#039;&#039;Magic: the Gathering&#039;&#039; and Marie Westlake from &#039;&#039;The Rise of the Golden Idol&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [https://www.dndbeyond.com/profile/0011110000110011/characters/136756090 Mizzi&#039;s character sheet on D&amp;amp;D Beyond]&lt;br /&gt;
&lt;br /&gt;
[[Category:PCs]][[Category:Wizards]]&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Editnotice&amp;diff=2750</id>
		<title>Template:Editnotice</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Editnotice&amp;diff=2750"/>
		<updated>2024-11-22T08:48:43Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#ifeq:{{FULLROOTPAGENAME}}|Template:Editnotices&lt;br /&gt;
 |{{Editnotice/notice&lt;br /&gt;
  |expiry={{{expiry|¬}}}&lt;br /&gt;
  |redirect={{{redirect|}}}&lt;br /&gt;
 }}&lt;br /&gt;
}}{{#ifexpr:{{#ifeq:{{FULLROOTPAGENAME}}|Template:Editnotices&lt;br /&gt;
  |1&lt;br /&gt;
  |0&lt;br /&gt;
 }}+{{#switch:{{{expiry|¬}}}&lt;br /&gt;
  |indefinite = 1&lt;br /&gt;
  |&lt;br /&gt;
  |¬          = 1 &amp;lt;!-- Expiry not specified --&amp;gt;&lt;br /&gt;
  |#default   = {{#iferror:{{#time:U|{{{expiry}}}}}&lt;br /&gt;
   |0 &amp;lt;!-- Invalid expiry time --&amp;gt;&lt;br /&gt;
   |{{#ifexpr:{{#time:U|{{{expiry}}}}}-{{#time:U|{{CURRENTTIMESTAMP}}}}&amp;gt;0&lt;br /&gt;
    |1 &amp;lt;!-- Notice current --&amp;gt;&lt;br /&gt;
    |0 &amp;lt;!-- Notice expired --&amp;gt;&lt;br /&gt;
   }}&lt;br /&gt;
  }}&lt;br /&gt;
 }}&lt;br /&gt;
 |{{fmbox&lt;br /&gt;
  |plainlinks= no&amp;lt;!-- override with `class` if needed --&amp;gt;&lt;br /&gt;
  |type      = {{{type|editnotice}}}&lt;br /&gt;
  |id        = {{{id|}}}&lt;br /&gt;
  |templatestyles = {{{templatestyles|}}}&lt;br /&gt;
  |textstyle = {{{textstyle|}}}&lt;br /&gt;
  |style     = {{{style|}}}&lt;br /&gt;
  |class     = {{{class|}}}&lt;br /&gt;
  |image     = {{#if:{{{image|}}}&lt;br /&gt;
   |{{#invoke:InfoboxImage|InfoboxImage|image={{{image}}}|size={{{imagesize|}}}|sizedefault=40x40px}}&lt;br /&gt;
   |none&lt;br /&gt;
  }}&lt;br /&gt;
  |imageright= {{#if:{{{imageright|}}}&lt;br /&gt;
   |{{#invoke:InfoboxImage|InfoboxImage|image={{{imageright}}}|size={{{imagerightsize|}}}|sizedefault=40x40px}}&lt;br /&gt;
  }}&lt;br /&gt;
  |text      = {{#if:{{{header|}}}&lt;br /&gt;
   |&amp;lt;div class=&amp;quot;editnotice-header&amp;quot; style=&amp;quot;font-weight: bold; {{{headerstyle|}}}&amp;quot;&amp;gt;{{{header}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
  }}&lt;br /&gt;
{{{text|{{{1}}}}}}&lt;br /&gt;
 }}&lt;br /&gt;
}}{{#ifeq:{{FULLROOTPAGENAME}}|Template:Editnotices|{{#switch:{{{expiry|¬}}}&lt;br /&gt;
  |indefinite&lt;br /&gt;
  |&lt;br /&gt;
  |¬          = &amp;lt;!-- Expiry not specified --&amp;gt;&lt;br /&gt;
  |#default   = {{#iferror:{{#time:U|{{{expiry}}}}}&lt;br /&gt;
   | &amp;lt;!-- Invalid expiry time --&amp;gt;&lt;br /&gt;
   |{{#ifexpr:{{#time:U|{{{expiry}}}}}-{{#time:U|{{CURRENTTIMESTAMP}}}}&amp;gt;0&lt;br /&gt;
    | &amp;lt;!-- Notice current --&amp;gt;&lt;br /&gt;
    |[[Category:Expired editnotices]] &amp;lt;!-- Notice expired --&amp;gt;&lt;br /&gt;
   }}&lt;br /&gt;
  }}&lt;br /&gt;
 }}&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>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Fmbox&amp;diff=2748</id>
		<title>Template:Fmbox</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Fmbox&amp;diff=2748"/>
		<updated>2024-11-22T08:48:43Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Message box|fmbox|plainlinks={{{plainlinks|yes}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:FULLROOTPAGENAME&amp;diff=2746</id>
		<title>Template:FULLROOTPAGENAME</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:FULLROOTPAGENAME&amp;diff=2746"/>
		<updated>2024-11-22T08:48:43Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ safesubst:&amp;lt;noinclude/&amp;gt;#if: {{ safesubst:&amp;lt;noinclude/&amp;gt;Ns has subpages | {{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{1|}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;NAMESPACE:{{{1}}}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;NAMESPACE}}}} }} &lt;br /&gt;
  | {{ safesubst:&amp;lt;noinclude/&amp;gt;#titleparts:{{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{1|}}}|{{{1}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;FULLPAGENAME}}}}|1}}&lt;br /&gt;
  | {{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{1|}}}|{{{1}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;FULLPAGENAME}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=MediaWiki:Common.css&amp;diff=2744</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=MediaWiki:Common.css&amp;diff=2744"/>
		<updated>2024-11-22T08:48:42Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
 * This is the CSS common to all desktop skins on en.Wikipedia.&lt;br /&gt;
 * Styling inside .mw-parser-output should generally use TemplateStyles.&lt;br /&gt;
 */&lt;br /&gt;
/* Reset italic styling set by user agent */&lt;br /&gt;
cite,&lt;br /&gt;
dfn {&lt;br /&gt;
	font-style: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Straight quote marks for &amp;lt;q&amp;gt; */&lt;br /&gt;
q {&lt;br /&gt;
	quotes: &#039;&amp;quot;&#039; &#039;&amp;quot;&#039; &amp;quot;&#039;&amp;quot; &amp;quot;&#039;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Avoid collision of blockquote with floating elements by swapping margin and padding */&lt;br /&gt;
blockquote {&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	margin: 1em 0;&lt;br /&gt;
	padding: 0 40px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Consistent size for &amp;lt;small&amp;gt;, &amp;lt;sub&amp;gt; and &amp;lt;sup&amp;gt; */&lt;br /&gt;
small {&lt;br /&gt;
	font-size: 85%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-body-content sub,&lt;br /&gt;
.mw-body-content sup {&lt;br /&gt;
	font-size: 80%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Same spacing for indented and unindented paragraphs on talk pages */&lt;br /&gt;
.ns-talk .mw-body-content dd {&lt;br /&gt;
	margin-top: 0.4em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reduce page jumps by hiding collapsed/dismissed content */&lt;br /&gt;
.client-js .collapsible:not( .mw-made-collapsible).collapsed &amp;gt; tbody &amp;gt; tr:not(:first-child),&lt;br /&gt;
&lt;br /&gt;
/* Avoid FOUC/reflows on collapsed elements. */&lt;br /&gt;
/* This copies MediaWiki&#039;s solution for T42812 to apply to innercollapse/outercollapse (T325115). */&lt;br /&gt;
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */&lt;br /&gt;
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */&lt;br /&gt;
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) &amp;gt; p,&lt;br /&gt;
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) &amp;gt; table,&lt;br /&gt;
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) &amp;gt; thead + tbody,&lt;br /&gt;
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),&lt;br /&gt;
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,&lt;br /&gt;
&lt;br /&gt;
/* Hide charinsert base for those not using the gadget */&lt;br /&gt;
#editpage-specialchars {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Different margin on references */&lt;br /&gt;
.references {&lt;br /&gt;
	margin-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Cite customizations for Parsoid&lt;br /&gt;
 * Once everything uses the one true parser these are just customizations&lt;br /&gt;
 */&lt;br /&gt;
span[ rel=&amp;quot;mw:referencedBy&amp;quot; ] {&lt;br /&gt;
	counter-reset: mw-ref-linkback 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
span[ rel=&#039;mw:referencedBy&#039; ] &amp;gt; a::before {&lt;br /&gt;
	content: counter( mw-ref-linkback, lower-alpha );&lt;br /&gt;
	font-size: 80%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
a[ rel=&amp;quot;mw:referencedBy&amp;quot; ]::before {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	content: &amp;quot;^&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
span[ rel=&amp;quot;mw:referencedBy&amp;quot; ]::before {&lt;br /&gt;
	content: &amp;quot;^ &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* These blocks need review after [[phab:T371839]] or related are complete */&lt;br /&gt;
.mw-ref &amp;gt; a[style~=&amp;quot;mw-Ref&amp;quot;][data-mw-group=lower-alpha]::after {&lt;br /&gt;
	content: &#039;[&#039; counter( mw-Ref, lower-alpha ) &#039;]&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ref &amp;gt; a[style~=&amp;quot;mw-Ref&amp;quot;][data-mw-group=upper-alpha]::after {&lt;br /&gt;
	content: &#039;[&#039; counter( mw-Ref, upper-alpha ) &#039;]&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ref &amp;gt; a[style~=&amp;quot;mw-Ref&amp;quot;][data-mw-group=decimal]::after {&lt;br /&gt;
	content: &#039;[&#039; counter( mw-Ref, decimal ) &#039;]&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ref &amp;gt; a[style~=&amp;quot;mw-Ref&amp;quot;][data-mw-group=lower-roman]::after {&lt;br /&gt;
	content: &#039;[&#039; counter( mw-Ref, lower-roman ) &#039;]&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ref &amp;gt; a[style~=&amp;quot;mw-Ref&amp;quot;][data-mw-group=upper-roman]::after {&lt;br /&gt;
	content: &#039;[&#039; counter( mw-Ref, upper-roman ) &#039;]&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-ref &amp;gt; a[style~=&amp;quot;mw-Ref&amp;quot;][data-mw-group=lower-greek]::after {&lt;br /&gt;
	content: &#039;[&#039; counter( mw-Ref, lower-greek ) &#039;]&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Styling for jQuery makeCollapsible, matching that of collapseButton */&lt;br /&gt;
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	padding-right: 0.2em;&lt;br /&gt;
	padding-left: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Lists in wikitable data cells are always left-aligned */&lt;br /&gt;
.wikitable td ul,&lt;br /&gt;
.wikitable td ol,&lt;br /&gt;
.wikitable td dl {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Change the external link icon to a PDF icon for all PDF files */&lt;br /&gt;
.mw-parser-output a[href$=&amp;quot;.pdf&amp;quot;].external,&lt;br /&gt;
.mw-parser-output a[href*=&amp;quot;.pdf?&amp;quot;].external,&lt;br /&gt;
.mw-parser-output a[href*=&amp;quot;.pdf#&amp;quot;].external,&lt;br /&gt;
.mw-parser-output a[href$=&amp;quot;.PDF&amp;quot;].external,&lt;br /&gt;
.mw-parser-output a[href*=&amp;quot;.PDF?&amp;quot;].external,&lt;br /&gt;
.mw-parser-output a[href*=&amp;quot;.PDF#&amp;quot;].external {&lt;br /&gt;
	background: url(&amp;quot;//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png&amp;quot;) no-repeat right;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	padding: 8px 18px 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* System messages styled similarly to fmbox */&lt;br /&gt;
/* for .mw-warning-with-logexcerpt, behavior of this line differs between&lt;br /&gt;
 * the edit-protected notice and the special:Contribs for blocked users&lt;br /&gt;
 * The latter has specificity of 3 classes so we have to triple up here.&lt;br /&gt;
 */&lt;br /&gt;
.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt,&lt;br /&gt;
div.mw-lag-warn-high,&lt;br /&gt;
div.mw-cascadeprotectedwarning,&lt;br /&gt;
div#mw-protect-cascadeon {&lt;br /&gt;
	clear: both;&lt;br /&gt;
	margin: 0.2em 0;&lt;br /&gt;
	border: 1px solid #bb7070;&lt;br /&gt;
	background-color: var(--background-color-error-subtle, #ffdbdb);&lt;br /&gt;
	padding: 0.25em 0.9em;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* default colors for partial block message */&lt;br /&gt;
/* gotta get over the hump introduced by the triple class above */&lt;br /&gt;
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt.mw-warning-with-logexcerpt {&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	background-color: var(--background-color-warning-subtle, #fef6e7);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Minimum thumb width */&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	figure[typeof~=&#039;mw:File/Thumb&#039;],&lt;br /&gt;
	figure[typeof~=&#039;mw:File/Frame&#039;],&lt;br /&gt;
	.thumbinner {&lt;br /&gt;
		min-width: 100px;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Prevent floating boxes from overlapping any category listings,&lt;br /&gt;
   file histories, edit previews, and edit [Show changes] views. */&lt;br /&gt;
#mw-subcategories,&lt;br /&gt;
#mw-pages,&lt;br /&gt;
#mw-category-media,&lt;br /&gt;
#filehistory,&lt;br /&gt;
#wikiPreview,&lt;br /&gt;
#wikiDiff {&lt;br /&gt;
	clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide stuff meant for accounts with special permissions. Made visible again in&lt;br /&gt;
   [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],&lt;br /&gt;
   [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],&lt;br /&gt;
   [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],&lt;br /&gt;
   [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */&lt;br /&gt;
.checkuser-show,&lt;br /&gt;
.sysop-show,&lt;br /&gt;
.abusefilter-show,&lt;br /&gt;
.abusefilter-helper-show,&lt;br /&gt;
.patroller-show,&lt;br /&gt;
.templateeditor-show,&lt;br /&gt;
.extendedmover-show,&lt;br /&gt;
.extendedconfirmed-show,&lt;br /&gt;
.autoconfirmed-show,&lt;br /&gt;
.user-show {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide the redlink generated by {{Editnotice}},&lt;br /&gt;
   this overrides the &amp;quot;.sysop-show { display: none; }&amp;quot; above that applies&lt;br /&gt;
   to the same link as well. See [[phab:T45013]]&lt;br /&gt;
&lt;br /&gt;
   Hide the images in editnotices to keep them readable in VE view.&lt;br /&gt;
   Long term, editnotices should become a core feature so that they can be designed responsive. */&lt;br /&gt;
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,&lt;br /&gt;
.ve-ui-mwNoticesPopupTool-item .mbox-image,&lt;br /&gt;
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {&lt;br /&gt;
	display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove bullets when there are multiple edit page warnings */&lt;br /&gt;
ul.permissions-errors {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ul.permissions-errors &amp;gt; li {&lt;br /&gt;
	list-style: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* larger inline math */&lt;br /&gt;
span.mwe-math-mathml-inline {&lt;br /&gt;
	font-size: 118%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Make &amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt; be left aligned with one space indent for &lt;br /&gt;
 * compatibility with style conventions&lt;br /&gt;
 */&lt;br /&gt;
.mwe-math-fallback-image-display,&lt;br /&gt;
.mwe-math-mathml-display {&lt;br /&gt;
	margin-left: 1.6em !important;&lt;br /&gt;
	margin-top: 0.6em;&lt;br /&gt;
	margin-bottom: 0.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mwe-math-mathml-display math {&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	/* Put a chequered background behind images, only visible if they have transparency,&lt;br /&gt;
	 * except on main, user, and portal namespaces&lt;br /&gt;
	 */&lt;br /&gt;
	body:not(.ns-0):not(.ns-2):not(.ns-100) .gallerybox .thumb img {&lt;br /&gt;
		background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* Display &amp;quot;From Wikipedia, the free encyclopedia&amp;quot; in skins that support it,&lt;br /&gt;
	   do not apply to print mode */&lt;br /&gt;
	#siteSub {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/* Make the list of references smaller&lt;br /&gt;
	 * Keep in sync with Template:Refbegin/styles.css&lt;br /&gt;
	 * And Template:Reflist/styles.css&lt;br /&gt;
	 */&lt;br /&gt;
	.references {&lt;br /&gt;
		font-size: 90%;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide FlaggedRevs notice UI when there are no pending changes */&lt;br /&gt;
.flaggedrevs_draft_synced,&lt;br /&gt;
.flaggedrevs_stable_synced,&lt;br /&gt;
/* &amp;quot;Temporary&amp;quot; to remove links in sidebar T255381 */&lt;br /&gt;
#t-upload,&lt;br /&gt;
/* Hide broken download box on Special:Book pending T285400 */&lt;br /&gt;
.mw-special-Book #coll-downloadbox {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;&lt;br /&gt;
 * SEE [[MediaWiki talk:Common.css/to do]]&lt;br /&gt;
 * CSS is separated by component (which is why media queries are not joined)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* Infoboxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	color: black;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-spacing: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: #f8f9fa;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin: 0.5em 0 0.5em 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Normal font styling for wikitable row headers with scope=&amp;quot;row&amp;quot; tag */&lt;br /&gt;
.wikitable.plainrowheaders th[scope=row],&lt;br /&gt;
.wikitable.plainrowheaders th[scope=rowgroup] {&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove underlines from certain links */&lt;br /&gt;
.nounderlines a,&lt;br /&gt;
.IPA a:link,&lt;br /&gt;
.IPA a:visited {&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Prevent line breaks in silly places where desired (nowrap)&lt;br /&gt;
   and links when we don&#039;t want them to (nowraplinks a) */&lt;br /&gt;
.nowrap,&lt;br /&gt;
.nowraplinks a {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* But allow wrapping where desired: */&lt;br /&gt;
.wrap,&lt;br /&gt;
.wraplinks a {&lt;br /&gt;
	white-space: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* texhtml class for inline math (based on generic times-serif class) */&lt;br /&gt;
/* remove spans when this is TemplateStyled */&lt;br /&gt;
span.texhtml {&lt;br /&gt;
	font-family: &amp;quot;Nimbus Roman No9 L&amp;quot;, &amp;quot;Times New Roman&amp;quot;, Times, serif;&lt;br /&gt;
	font-size: 118%;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	/* Force tabular and lining display for texhtml */&lt;br /&gt;
	font-variant-numeric: lining-nums tabular-nums;&lt;br /&gt;
	font-kerning: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
span.texhtml span.texhtml {&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	span.texhtml {&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Prevent flags in tables from collapsing: Fix for T116318&lt;br /&gt;
 * TODO: Remove when [[phab:T368469]] merges [[phab:T367463]] for the other skins&lt;br /&gt;
 */&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.flagicon a &amp;gt; img,&lt;br /&gt;
	.flagicon noscript &amp;gt; img {&lt;br /&gt;
		max-width: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.nochecker .gallerybox .thumb img {&lt;br /&gt;
		background-image: none;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Put anything you mean to be a sitewide addition above the TemplateStyles&lt;br /&gt;
 * comment above.&lt;br /&gt;
 */&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Br_separated_entries/doc&amp;diff=2742</id>
		<title>Template:Br separated entries/doc</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Br_separated_entries/doc&amp;diff=2742"/>
		<updated>2024-11-22T08:46:57Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
{{High-risk|630,000+}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD CATEGORIES WHERE INDICATED AT THE BOTTOM OF THIS PAGE --&amp;gt;&lt;br /&gt;
{{Template shortcut|br entries|br list}}&lt;br /&gt;
{{stack|{{Lua|Module:Separated entries}}}}&lt;br /&gt;
&lt;br /&gt;
This template is used primarily in infoboxes to create a &amp;lt;code&amp;gt;&amp;amp;lt;br /&amp;amp;gt;&amp;lt;/code&amp;gt; delimited collection of items, only adding the &amp;lt;code&amp;gt;&amp;amp;lt;br /&amp;amp;gt;&amp;lt;/code&amp;gt; tags where needed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; For lists of items, without bullets, do not use this template, but use {{tl|unbulleted list}} or {{tl|plainlist}} instead, for better [[WP:ACCESS|accessibility]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries|entry1|entry2|entry3|entry4|entry5|...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code !! Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries|entry1|entry2|entry3}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || {{br separated entries|entry1|entry2|entry3}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries| |entry2|entry3}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || {{br separated entries| |entry2|entry3}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries|entry1| |entry3}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || {{br separated entries|entry1| |entry3}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries|entry1|entry2| }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || {{br separated entries|entry1|entry2| }}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries|entry1| | }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || {{br separated entries|entry1| | }}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries| |entry2| }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || {{br separated entries| |entry2| }}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries| | |entry3}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || {{br separated entries| | |entry3}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries| | | }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || {{br separated entries| | | }}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{br separated entries|entry1|entry2|entry3|entry4|entry5|entry6}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; || {{br separated entries|entry1|entry2|entry3|entry4|entry5|entry6}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Template data===&lt;br /&gt;
{{TemplateDataHeader}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;{&lt;br /&gt;
&amp;quot;description&amp;quot;: &amp;quot;Creates a &amp;lt;br /&amp;gt; delimited collection of items. Primarily for use in infoboxes, it only adds the &amp;lt;br /&amp;gt; tags where needed. &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 item&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;First item, may be null&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;
  &amp;quot;2&amp;quot;: {&lt;br /&gt;
    &amp;quot;label&amp;quot;: &amp;quot;Second item&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Second item, many more items can be added&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;
}}&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* {{tl|comma separated entries}}&lt;br /&gt;
* {{tl|space separated entries}}&lt;br /&gt;
* {{tl|plainlist}}&lt;br /&gt;
* {{tl|flatlist}}&lt;br /&gt;
* {{tl|pagelist}}&lt;br /&gt;
* {{tl|unbulleted list}}&lt;br /&gt;
* [[Module:separated entries]], the [[Wikipedia:Lua|Lua]] module on which this template is based.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other|&lt;br /&gt;
| &amp;lt;!-- CATEGORIES BELOW THIS LINE, PLEASE: --&amp;gt;&lt;br /&gt;
[[Category:List formatting and function templates]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Module:Transclusion_count/data/B&amp;diff=2740</id>
		<title>Module:Transclusion count/data/B</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Module:Transclusion_count/data/B&amp;diff=2740"/>
		<updated>2024-11-22T08:46:57Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;B-Class&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;BBC_Online&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;BBC_programme&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;BCGNIS&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;BDFA&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;BDFutbol&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;BEL&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;BGR&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;BIH&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;BLP&amp;quot;] = 1160000,&lt;br /&gt;
[&amp;quot;BLP_one_source&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;BLP_others&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;BLP_primary_sources&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;BLP_sources&amp;quot;] = 100000,&lt;br /&gt;
[&amp;quot;BLP_sources_section&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;BLP_unreferenced&amp;quot;] = 7400,&lt;br /&gt;
[&amp;quot;BLP_unreferenced_section&amp;quot;] = 7000,&lt;br /&gt;
[&amp;quot;BLP_unsourced&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;BLP_unsourced_section&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;BLR&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;BRA&amp;quot;] = 9800,&lt;br /&gt;
[&amp;quot;BS_template&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;BSsplit&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;BSto&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;BUL&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;BWF.TournamentSoftware.com_profile&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Babel&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Background_color&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Bad_JPEG&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Bar_box&amp;quot;] = 8300,&lt;br /&gt;
[&amp;quot;Bar_percent&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Bare_URL_PDF&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Bare_URL_inline&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Base_Mérimée&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Baseball_navbox&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Baseball_primary_link&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;Baseball_primary_style&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Baseball_secondary_link&amp;quot;] = 7100,&lt;br /&gt;
[&amp;quot;Baseball_secondary_style&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Baseball_year&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Baseballstats&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Based_on&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Basketball_color&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Basketball_color_cell&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Basketball_color_cell2&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Basketball_current_roster&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Basketball_kit&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Basketball_primary_style&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Basketball_roster_footer&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Basketballbox&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Basketballstats&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Bda&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Better_source&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Better_source_needed&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Better_source_requested&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Bibleverse&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Big&amp;quot;] = 119000,&lt;br /&gt;
[&amp;quot;Bigger&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;BillboardURLbyName&amp;quot;] = 9400,&lt;br /&gt;
[&amp;quot;Billie_Jean_King_Cup_player&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;BioRef&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Bio_icon&amp;quot;] = 87000,&lt;br /&gt;
[&amp;quot;Bio_icon2&amp;quot;] = 87000,&lt;br /&gt;
[&amp;quot;Biographical_Directory_of_Congress&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Bioguide&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Biology_high_taxon_classification_navs&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Birds_tasks&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;Birth-date&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;Birth-date_and_age&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Birth_based_on_age_as_of_date&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Birth_date&amp;quot;] = 401000,&lt;br /&gt;
[&amp;quot;Birth_date_and_age&amp;quot;] = 748000,&lt;br /&gt;
[&amp;quot;Birth_date_and_age2&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Birth_date_text&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;Birth_year&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Birth_year_and_age&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Bk&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Bkicon&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Black&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Blanked_IP_talk&amp;quot;] = 8180000,&lt;br /&gt;
[&amp;quot;Blist&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Block_indent&amp;quot;] = 913000,&lt;br /&gt;
[&amp;quot;Block_indent/styles.css&amp;quot;] = 913000,&lt;br /&gt;
[&amp;quot;Blocked_proxy&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Blockedandtagged&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Blockquote&amp;quot;] = 191000,&lt;br /&gt;
[&amp;quot;Blockquote/styles.css&amp;quot;] = 191000,&lt;br /&gt;
[&amp;quot;Blue&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Bnt&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Border&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;BotApproved&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;BotTrial&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Bot_trial&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Botanist&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Botanist/styles.css&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Both&amp;quot;] = 1550000,&lt;br /&gt;
[&amp;quot;Botop&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Bots&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Box&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Box-footer&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Box-header&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Box-shadow_border&amp;quot;] = 113000,&lt;br /&gt;
[&amp;quot;BoxRec&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Boxbottom&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Boxboxbottom&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Boxboxtop&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;BoxingRecordSummary&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Boxing_record_summary&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Boxrec&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Bq&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Br&amp;quot;] = 9600,&lt;br /&gt;
[&amp;quot;Br_separated_entries&amp;quot;] = 1670000,&lt;br /&gt;
[&amp;quot;Break&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;British_English&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Brldb_prim&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Broken_anchor&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Broken_anchors&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Broken_ref&amp;quot;] = 56000,&lt;br /&gt;
[&amp;quot;Broken_ref/cat&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Broken_ref/lang&amp;quot;] = 56000,&lt;br /&gt;
[&amp;quot;Broken_ref/styles.css&amp;quot;] = 53000,&lt;br /&gt;
[&amp;quot;Bronze03&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Bronze3&amp;quot;] = 50000,&lt;br /&gt;
[&amp;quot;Bronze_medal&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;Bs_position&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Buddhism_topics&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Bulleted_list&amp;quot;] = 74000,&lt;br /&gt;
[&amp;quot;Bus_icon&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Busy&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Butt-Stations&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Button&amp;quot;] = 45000,&lt;br /&gt;
[&amp;quot;By&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;By_whom&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;Module:Babel&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Module:Banner_shell&amp;quot;] = 11000000,&lt;br /&gt;
[&amp;quot;Module:Banner_shell/config&amp;quot;] = 8780000,&lt;br /&gt;
[&amp;quot;Module:Banner_shell/styles.css&amp;quot;] = 11000000,&lt;br /&gt;
[&amp;quot;Module:BaseConvert&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;Module:Based_on&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Module:Bibleverse&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Module:Box-header&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Module:Box-header/colours&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Module:British_regnal_year&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:British_regnal_year/data&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Buffer&amp;quot;] = 2380000,&lt;br /&gt;
[&amp;quot;Module:Build_bracket&amp;quot;] = 7700,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:TemplateDataHeader&amp;diff=2738</id>
		<title>Template:TemplateDataHeader</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:TemplateDataHeader&amp;diff=2738"/>
		<updated>2024-11-22T08:46:57Z</updated>

		<summary type="html">&lt;p&gt;Steve: 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>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Pluralize_from_text/doc&amp;diff=2736</id>
		<title>Template:Pluralize from text/doc</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Pluralize_from_text/doc&amp;diff=2736"/>
		<updated>2024-11-22T08:46:57Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
{{High use}}&lt;br /&gt;
{{Lua|Module:Detect singular}}&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Pluralize from text|generic parameter|singular=singular output|likely=likely plural output|plural=plural output|link=wikilink}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Pluralize from text|generic parameter|plural argument|singular output|plural output|wikilink}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For use in infoboxes. Takes a generic parameter (e.g, {{para|nickname}}) and a plural argument (e.g., {{para|nicknames}}) and returns a singular output (e.g., &amp;quot;Nickname&amp;quot;) if the plural argument is not given and [[Template:Detect singular]] determines that the value of {{para|nickname}} is singular by examining the text. Otherwise produces plural output (e.g., &amp;quot;Nicknames&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If the wikilink is provided, the returned value will use that as a link, and the output will be the link&#039;s display text.&lt;br /&gt;
&lt;br /&gt;
The template makes a decision whether a string is a &amp;quot;likely plural&amp;quot; or a full &amp;quot;plural&amp;quot;. The {{para|likely}} argument will be the output if the template determines that the string is only &amp;quot;likely plural&amp;quot;. If {{para|likely}} is not given, &amp;quot;likely plural&amp;quot; and &amp;quot;plural&amp;quot; are treated identically.&lt;br /&gt;
&lt;br /&gt;
The output of the template can be forced by including {{tl|force singular}} or {{tl|force plural}} in the generic parameter.&lt;br /&gt;
&lt;br /&gt;
===Options===&lt;br /&gt;
There are four named arguments that control the pluralization:&lt;br /&gt;
* {{para|no_comma}} By default, commas (or semi-colons) will cause the text string to be considered plural. Setting {{para|no_comma|1}} turns this behavior off.&lt;br /&gt;
* {{para|any_comma}} By default, commas (or semi-colons) that are adjacent to digits are singular. Setting {{para|any_comma|1}} turns this behavior off.&lt;br /&gt;
* {{para|no_and}} By default, &amp;quot;and&amp;quot; causes a string to be plural. Setting {{para|no_and|1}} turns this behavior off.&lt;br /&gt;
* {{para|parse_links}} By default, wikilinks are considered to be unparseable (singular) objects. Setting {{para|parse_links|1}} will allow the parser to read the contents of the wikilinks and determine whether that makes the string plural.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Pluralize from text|Chicagoan|singular=singular|plural=plural}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{Pluralize from text|Chicagoan|singular=singular|plural=plural}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Pluralize from text|761 and 345|singular=singular|plural=plural}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{Pluralize from text|761 and 345|singular=singular|plural=plural}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Pluralize from text||761/345|singular=singular|plural=plural}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{Pluralize from text||761/345|singular=singular|plural=plural}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Pluralize from text|Chicagoan|singular=Demonym|plural=Demonyms|link=Demonym}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{Pluralize from text|Chicagoan|singular=Demonym|plural=Demonyms|link=Demonym}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Pluralize from text|761 and 345|singular=Area Code|plural=Area Codes|link=Area code}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{Pluralize from text|761 and 345|singular=Area Code|plural=Area Codes|link=Area code}}&lt;br /&gt;
&lt;br /&gt;
==TemplateData==&lt;br /&gt;
{{Format TemplateData|1=&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;label&amp;quot;: &amp;quot;Generic parameter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Value of the wikitext parameter with unknown plurality&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;
			&amp;quot;example&amp;quot;: &amp;quot;{{{language|}}}&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Plural argument&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;value of the wikitext parameter known to be plural&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;{{{languages|}}}&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Singular output&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Label for the parameter if the value is singular&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;aliases&amp;quot;: [&amp;quot;singular&amp;quot;],&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Language&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Plural output&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Label for the parameter if the value is plural&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;aliases&amp;quot;: [&amp;quot;plural&amp;quot;],&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Languages&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Wikilink&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Page to link to in the label&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
            &amp;quot;aliases&amp;quot;: [&amp;quot;link&amp;quot;],&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Language&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
        &amp;quot;no_comma&amp;quot;: {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;Turn off comma processing&amp;quot;,&lt;br /&gt;
            &amp;quot;description&amp;quot;: &amp;quot;By default, commas and semicolons indicate plurals. Setting to yes turns this off.&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;default&amp;quot;: &amp;quot;No&amp;quot;&lt;br /&gt;
        }  &lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Helper template to adjust infobox field labels based on whether value is plural or not&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;
		&amp;quot;4&amp;quot;,&lt;br /&gt;
		&amp;quot;5&amp;quot;,&lt;br /&gt;
        &amp;quot;no_comma&amp;quot;&lt;br /&gt;
	]&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 below this line --&amp;gt;&lt;br /&gt;
[[Category:Text-specific formatting and function templates]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Module:Multilingual&amp;diff=2734</id>
		<title>Module:Multilingual</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Module:Multilingual&amp;diff=2734"/>
		<updated>2024-11-22T08:46:56Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Multilingual = { suite   = &amp;quot;Multilingual&amp;quot;,&lt;br /&gt;
                       serial  = &amp;quot;2020-12-10&amp;quot;,&lt;br /&gt;
                       item    = 47541920,&lt;br /&gt;
                       globals = { ISO15924 = 71584769,&lt;br /&gt;
                                   WLink    = 19363224 }&lt;br /&gt;
                     }&lt;br /&gt;
--[=[&lt;br /&gt;
Utilities for multilingual texts and ISO 639 (BCP47) issues etc.&lt;br /&gt;
* fair()&lt;br /&gt;
* fallback()&lt;br /&gt;
* findCode()&lt;br /&gt;
* fix()&lt;br /&gt;
* format()&lt;br /&gt;
* getBase()&lt;br /&gt;
* getLang()&lt;br /&gt;
* getName()&lt;br /&gt;
* i18n()&lt;br /&gt;
* int()&lt;br /&gt;
* isLang()&lt;br /&gt;
* isLangWiki()&lt;br /&gt;
* isMinusculable()&lt;br /&gt;
* isRTL()&lt;br /&gt;
* message()&lt;br /&gt;
* sitelink()&lt;br /&gt;
* tabData()&lt;br /&gt;
* userLang()&lt;br /&gt;
* userLangCode()&lt;br /&gt;
* wikibase()&lt;br /&gt;
* failsafe()&lt;br /&gt;
loadData: Multilingual/config Multilingual/names&lt;br /&gt;
]=]&lt;br /&gt;
local Failsafe   = Multilingual&lt;br /&gt;
local GlobalMod  = Multilingual&lt;br /&gt;
local GlobalData = Multilingual&lt;br /&gt;
local User       = { sniffer = &amp;quot;showpreview&amp;quot; }&lt;br /&gt;
Multilingual.globals.Multilingual = Multilingual.item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.exotic = { simple = true,&lt;br /&gt;
                        no     = true }&lt;br /&gt;
Multilingual.prefer = { cs = true,&lt;br /&gt;
                        de = true,&lt;br /&gt;
                        en = true,&lt;br /&gt;
                        es = true,&lt;br /&gt;
                        fr = true,&lt;br /&gt;
                        it = true,&lt;br /&gt;
                        nl = true,&lt;br /&gt;
                        pt = true,&lt;br /&gt;
                        ru = true,&lt;br /&gt;
                        sv = true }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local foreignModule = function ( access, advanced, append, alt, alert )&lt;br /&gt;
    -- Fetch global module&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     access    -- string, with name of base module&lt;br /&gt;
    --     advanced  -- true, for require(); else mw.loadData()&lt;br /&gt;
    --     append    -- string, with subpage part, if any; or false&lt;br /&gt;
    --     alt       -- number, of wikidata item of root; or false&lt;br /&gt;
    --     alert     -- true, for throwing error on data problem&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns whatever, probably table&lt;br /&gt;
    -- 2020-01-01&lt;br /&gt;
    local storage = access&lt;br /&gt;
    local finer = function ()&lt;br /&gt;
                      if append then&lt;br /&gt;
                          storage = string.format( &amp;quot;%s/%s&amp;quot;,&lt;br /&gt;
                                                   storage,&lt;br /&gt;
                                                   append )&lt;br /&gt;
                      end&lt;br /&gt;
                  end&lt;br /&gt;
    local fun, lucky, r, suited&lt;br /&gt;
    if advanced then&lt;br /&gt;
        fun = require&lt;br /&gt;
    else&lt;br /&gt;
        fun = mw.loadData&lt;br /&gt;
    end&lt;br /&gt;
    GlobalMod.globalModules = GlobalMod.globalModules or { }&lt;br /&gt;
    suited = GlobalMod.globalModules[ access ]&lt;br /&gt;
    if not suited then&lt;br /&gt;
        finer()&lt;br /&gt;
        lucky, r = pcall( fun,  &amp;quot;Module:&amp;quot; .. storage )&lt;br /&gt;
    end&lt;br /&gt;
    if not lucky then&lt;br /&gt;
        if not suited  and&lt;br /&gt;
           type( alt ) == &amp;quot;number&amp;quot;  and&lt;br /&gt;
           alt &amp;gt; 0 then&lt;br /&gt;
            suited = string.format( &amp;quot;Q%d&amp;quot;, alt )&lt;br /&gt;
            suited = mw.wikibase.getSitelink( suited )&lt;br /&gt;
            GlobalMod.globalModules[ access ] = suited or true&lt;br /&gt;
        end&lt;br /&gt;
        if type( suited ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            storage = suited&lt;br /&gt;
            finer()&lt;br /&gt;
            lucky, r = pcall( fun, storage )&lt;br /&gt;
        end&lt;br /&gt;
        if not lucky and alert then&lt;br /&gt;
            error( &amp;quot;Missing or invalid page: &amp;quot; .. storage )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- foreignModule()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local fetchData = function ( access )&lt;br /&gt;
    -- Retrieve translated keyword from commons:Data:****.tab&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     access  -- string, with page identification on Commons&lt;br /&gt;
    --     Returns table, with data, or string, with error message&lt;br /&gt;
    -- 2019-12-05&lt;br /&gt;
    local storage = access&lt;br /&gt;
    local r&lt;br /&gt;
    if type( storage ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        local s&lt;br /&gt;
        storage = mw.text.trim( storage )&lt;br /&gt;
        s = storage:lower()&lt;br /&gt;
        if s:sub( 1, 2 ) == &amp;quot;c:&amp;quot; then&lt;br /&gt;
            storage = mw.text.trim( storage:sub( 3 ) )&lt;br /&gt;
            s       = storage:lower()&lt;br /&gt;
        elseif s:sub( 1, 8 ) == &amp;quot;commons:&amp;quot; then&lt;br /&gt;
            storage = mw.text.trim( storage:sub( 9 ) )&lt;br /&gt;
            s       = storage:lower()&lt;br /&gt;
        end&lt;br /&gt;
        if s:sub( 1, 5 ) == &amp;quot;data:&amp;quot; then&lt;br /&gt;
            storage = mw.text.trim( storage:sub( 6 ) )&lt;br /&gt;
            s       = storage:lower()&lt;br /&gt;
        end&lt;br /&gt;
        if s == &amp;quot;&amp;quot;  or  s == &amp;quot;.tab&amp;quot; then&lt;br /&gt;
            storage = false&lt;br /&gt;
        elseif s:sub( -4 ) == &amp;quot;.tab&amp;quot; then&lt;br /&gt;
            storage = storage:sub( 1, -5 ) .. &amp;quot;.tab&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            storage = storage .. &amp;quot;.tab&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( storage ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        local data&lt;br /&gt;
        if type( GlobalData.TabDATA ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
            GlobalData.TabDATA = { }&lt;br /&gt;
        end&lt;br /&gt;
        data = GlobalData.TabDATA[ storage ]&lt;br /&gt;
        if data then&lt;br /&gt;
            r = data&lt;br /&gt;
        else&lt;br /&gt;
            local lucky&lt;br /&gt;
            lucky, data = pcall( mw.ext.data.get, storage, &amp;quot;_&amp;quot; )&lt;br /&gt;
            if type( data ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                data = data.data&lt;br /&gt;
                if type( data ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    GlobalData.TabDATA[ storage ] = data&lt;br /&gt;
                else&lt;br /&gt;
                    r = string.format( &amp;quot;%s [[%s%s]]&amp;quot;,&lt;br /&gt;
                                       &amp;quot;INVALID Data:*.tab&amp;quot;,&lt;br /&gt;
                                       &amp;quot;commons:Data:&amp;quot;,&lt;br /&gt;
                                       storage )&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                r = &amp;quot;BAD PAGE Data:*.tab &amp;amp;#8211; commons:&amp;quot; .. storage&lt;br /&gt;
            end&lt;br /&gt;
            if r then&lt;br /&gt;
                GlobalData.TabDATA[ storage ] = r&lt;br /&gt;
                data = false&lt;br /&gt;
            else&lt;br /&gt;
                r = data&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = &amp;quot;BAD PAGE commons:Data:*.tab&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fetchData()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local favorites = function ()&lt;br /&gt;
    -- Provide fallback codes&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns table with sequence of preferred languages&lt;br /&gt;
    --     * ahead elements&lt;br /&gt;
    --     * user (not yet accessible)&lt;br /&gt;
    --     * page content language (not yet accessible)&lt;br /&gt;
    --     * page name subpage&lt;br /&gt;
    --     * project&lt;br /&gt;
    --     * en&lt;br /&gt;
    local r = Multilingual.polyglott&lt;br /&gt;
    if not r then&lt;br /&gt;
        local self = mw.language.getContentLanguage():getCode():lower()&lt;br /&gt;
        local sub  = mw.title.getCurrentTitle().subpageText&lt;br /&gt;
        local f    = function ( add )&lt;br /&gt;
                         local s = add&lt;br /&gt;
                         for i = 1, #r do&lt;br /&gt;
                             if r[ i ] == s then&lt;br /&gt;
                                 s = false&lt;br /&gt;
                                 break -- for i&lt;br /&gt;
                             end&lt;br /&gt;
                         end -- for i&lt;br /&gt;
                         if s then&lt;br /&gt;
                             table.insert( r, s )&lt;br /&gt;
                         end&lt;br /&gt;
                     end&lt;br /&gt;
        r = { }&lt;br /&gt;
        if sub:find( &amp;quot;/&amp;quot;, 2, true ) then&lt;br /&gt;
            sub = sub:match( &amp;quot;/(%l%l%l?)$&amp;quot; )&lt;br /&gt;
            if sub then&lt;br /&gt;
                table.insert( r, sub )&lt;br /&gt;
            end&lt;br /&gt;
        elseif sub:find( &amp;quot;^%l%l%l?%-?%a?%a?%a?%a?$&amp;quot; )  and&lt;br /&gt;
               mw.language.isSupportedLanguage( sub ) then&lt;br /&gt;
            table.insert( r, sub )&lt;br /&gt;
        end&lt;br /&gt;
        f( self )&lt;br /&gt;
        f( &amp;quot;en&amp;quot; )&lt;br /&gt;
        Multilingual.polyglott = r&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- favorites()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local feasible = function ( ask, accept )&lt;br /&gt;
    -- Is ask to be supported by application?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask     -- lowercase code&lt;br /&gt;
    --     accept  -- sequence table, with offered lowercase codes&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     nil, or true&lt;br /&gt;
    local r&lt;br /&gt;
    for i = 1, #accept do&lt;br /&gt;
        if accept[ i ] == ask then&lt;br /&gt;
            r = true&lt;br /&gt;
            break -- for i&lt;br /&gt;
        end&lt;br /&gt;
    end -- for i&lt;br /&gt;
    return r&lt;br /&gt;
end -- feasible()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local fetch = function ( access, append )&lt;br /&gt;
    -- Attach config or library module&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     access  -- module title&lt;br /&gt;
    --     append  -- string, with subpage part of this; or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns:  table, with library, or false&lt;br /&gt;
    local got, sign&lt;br /&gt;
    if append then&lt;br /&gt;
        sign = string.format( &amp;quot;%s/%s&amp;quot;, access, append )&lt;br /&gt;
    else&lt;br /&gt;
        sign = access&lt;br /&gt;
    end&lt;br /&gt;
    if type( Multilingual.ext ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        Multilingual.ext = { }&lt;br /&gt;
    end&lt;br /&gt;
    got = Multilingual.ext[ sign ]&lt;br /&gt;
    if not got  and  got ~= false then&lt;br /&gt;
        local global = Multilingual.globals[ access ]&lt;br /&gt;
        local lib    = ( not append  or  append == &amp;quot;config&amp;quot; )&lt;br /&gt;
        got = foreignModule( access, lib, append, global )&lt;br /&gt;
        if type( got ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            if lib then&lt;br /&gt;
                local startup = got[ access ]&lt;br /&gt;
                if type( startup ) == &amp;quot;function&amp;quot; then&lt;br /&gt;
                    got = startup()&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            got = false&lt;br /&gt;
        end&lt;br /&gt;
        Multilingual.ext[ sign ] = got&lt;br /&gt;
    end&lt;br /&gt;
    return got&lt;br /&gt;
end -- fetch()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local fetchISO639 = function ( access )&lt;br /&gt;
    -- Retrieve table from commons:Data:ISO639/***.tab&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     access  -- string, with subpage identification&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns table, with data, even empty&lt;br /&gt;
    local r&lt;br /&gt;
    if type( Multilingual.iso639 ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        Multilingual.iso639 = { }&lt;br /&gt;
    end&lt;br /&gt;
    r = Multilingual.iso639[ access ]&lt;br /&gt;
    if type( r ) == &amp;quot;nil&amp;quot; then&lt;br /&gt;
        local raw = fetchData( &amp;quot;ISO639/&amp;quot; .. access )&lt;br /&gt;
        if type( raw ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            local t&lt;br /&gt;
            r = { }&lt;br /&gt;
            for i = 1, #raw do&lt;br /&gt;
                t = raw[ i ]&lt;br /&gt;
                if type( t ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                   type( t[ 1 ] ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
                   type( t[ 2 ] ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                    r[ t[ 1 ] ] =  t[ 2 ]&lt;br /&gt;
                else&lt;br /&gt;
                    break -- for i&lt;br /&gt;
                end&lt;br /&gt;
            end -- for i&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
        Multilingual.iso639[ access ] = r&lt;br /&gt;
    end&lt;br /&gt;
    return r or { }&lt;br /&gt;
end -- fetchISO639()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local fill = function ( access, alien, frame )&lt;br /&gt;
    -- Expand language name template&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     access  -- string, with language code&lt;br /&gt;
    --     alien   -- language code for which to be generated&lt;br /&gt;
    --     frame   -- frame, if available&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string&lt;br /&gt;
    local template = Multilingual.tmplLang&lt;br /&gt;
    local r&lt;br /&gt;
    if type( template ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
        local cnf = fetch( &amp;quot;Multilingual&amp;quot;, &amp;quot;config&amp;quot; )&lt;br /&gt;
        if cnf then&lt;br /&gt;
            template = cnf.tmplLang&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( template ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local source = template.title&lt;br /&gt;
        local f, lucky, s&lt;br /&gt;
        Multilingual.tmplLang = template&lt;br /&gt;
        if type( source ) ~= &amp;quot;string&amp;quot;  and&lt;br /&gt;
           type( template.namePat ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
           template.namePat:find( &amp;quot;%s&amp;quot;, 1, true ) then&lt;br /&gt;
            source = string.format( template.namePat, access )&lt;br /&gt;
        end&lt;br /&gt;
        if type( source ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            if not Multilingual.frame then&lt;br /&gt;
                if frame then&lt;br /&gt;
                    Multilingual.frame = frame&lt;br /&gt;
                else&lt;br /&gt;
                    Multilingual.frame = mw.getCurrentFrame()&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            f = function ( a )&lt;br /&gt;
                    return Multilingual.frame:expandTemplate{ title = a }&lt;br /&gt;
                end&lt;br /&gt;
            lucky, s = pcall( f, source )&lt;br /&gt;
            if lucky then&lt;br /&gt;
                r = s&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fill()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local find = function ( ask, alien )&lt;br /&gt;
    -- Derive language code from name&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask    -- language name, downcased&lt;br /&gt;
    --     alien  -- language code of ask&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     nil, or string&lt;br /&gt;
    local codes = mw.language.fetchLanguageNames( alien, &amp;quot;all&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    for k, v in pairs( codes ) do&lt;br /&gt;
        if mw.ustring.lower( v ) == ask then&lt;br /&gt;
            r = k&lt;br /&gt;
            break -- for k, v&lt;br /&gt;
        end&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    if not r then&lt;br /&gt;
        r = Multilingual.fair( ask )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- find()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local fold = function ( frame )&lt;br /&gt;
    -- Merge template and #invoke arglist&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     frame   -- template frame&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     table, with combined arglist&lt;br /&gt;
    local r = { }&lt;br /&gt;
    local f = function ( apply )&lt;br /&gt;
                  if type( apply ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                     type( apply.args ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                      for k, v in pairs( apply.args ) do&lt;br /&gt;
                          v = mw.text.trim( v )&lt;br /&gt;
                          if v ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                              r[ tostring( k ) ] = v&lt;br /&gt;
                          end&lt;br /&gt;
                      end -- for k, v&lt;br /&gt;
                  end&lt;br /&gt;
              end -- f()&lt;br /&gt;
    f( frame:getParent() )&lt;br /&gt;
    f( frame )&lt;br /&gt;
    return r&lt;br /&gt;
end -- fold()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
User.favorize = function ( accept, frame )&lt;br /&gt;
    -- Guess user language&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     accept  -- sequence table, with offered ISO 639 etc. codes&lt;br /&gt;
    --     frame   -- frame, if available&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string with best code, or nil&lt;br /&gt;
    if not ( User.self or User.langs ) then&lt;br /&gt;
        if not User.trials then&lt;br /&gt;
            User.tell = mw.message.new( User.sniffer )&lt;br /&gt;
            if User.tell:exists() then&lt;br /&gt;
                User.trials = { }&lt;br /&gt;
                if not Multilingual.frame then&lt;br /&gt;
                    if frame then&lt;br /&gt;
                        Multilingual.frame = frame&lt;br /&gt;
                    else&lt;br /&gt;
                        Multilingual.frame = mw.getCurrentFrame()&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                User.sin = Multilingual.frame:callParserFunction( &amp;quot;int&amp;quot;,&lt;br /&gt;
                                                           User.sniffer )&lt;br /&gt;
            else&lt;br /&gt;
                User.langs = true&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if User.sin then&lt;br /&gt;
            local order  = { }&lt;br /&gt;
            local post   = { }&lt;br /&gt;
            local three  = { }&lt;br /&gt;
            local unfold = { }&lt;br /&gt;
            local s, sin&lt;br /&gt;
            for i = 1, #accept do&lt;br /&gt;
                s = accept[ i ]&lt;br /&gt;
                if not User.trials[ s ] then&lt;br /&gt;
                    if #s &amp;gt; 2 then&lt;br /&gt;
                        if s:find( &amp;quot;-&amp;quot;, 3, true ) then&lt;br /&gt;
                            table.insert( unfold, s )&lt;br /&gt;
                        else&lt;br /&gt;
                            table.insert( three, s )&lt;br /&gt;
                        end&lt;br /&gt;
                    else&lt;br /&gt;
                        if Multilingual.prefer[ s ] then&lt;br /&gt;
                            table.insert( order, s )&lt;br /&gt;
                        else&lt;br /&gt;
                            table.insert( post, s )&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end -- for i&lt;br /&gt;
            for i = 1, #post do&lt;br /&gt;
                table.insert( order, post[ i ] )&lt;br /&gt;
            end -- for i&lt;br /&gt;
            for i = 1, #three do&lt;br /&gt;
                table.insert( order, three[ i ] )&lt;br /&gt;
            end -- for i&lt;br /&gt;
            for i = 1, #unfold do&lt;br /&gt;
                table.insert( order, unfold[ i ] )&lt;br /&gt;
            end -- for i&lt;br /&gt;
            for i = 1, #order do&lt;br /&gt;
                s = order[ i ]&lt;br /&gt;
                sin = User.tell:inLanguage( s ):plain()&lt;br /&gt;
                if sin == User.sin then&lt;br /&gt;
                    User.self = s&lt;br /&gt;
                    break -- for i&lt;br /&gt;
                else&lt;br /&gt;
                    User.trials[ s ] = true&lt;br /&gt;
                end&lt;br /&gt;
            end -- for i&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return User.self&lt;br /&gt;
end -- User.favorize()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.fair = function ( ask )&lt;br /&gt;
    -- Format language specification according to RFC 5646 etc.&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- string or table, as created by .getLang()&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false&lt;br /&gt;
    local s = type( ask )&lt;br /&gt;
    local q, r&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        q = ask&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        q = Multilingual.getLang( ask )&lt;br /&gt;
    end&lt;br /&gt;
    if q  and&lt;br /&gt;
       q.legal  and&lt;br /&gt;
       mw.language.isKnownLanguageTag( q.base ) then&lt;br /&gt;
        r = q.base&lt;br /&gt;
        if q.n &amp;gt; 1 then&lt;br /&gt;
            local order = { &amp;quot;extlang&amp;quot;,&lt;br /&gt;
                            &amp;quot;script&amp;quot;,&lt;br /&gt;
                            &amp;quot;region&amp;quot;,&lt;br /&gt;
                            &amp;quot;other&amp;quot;,&lt;br /&gt;
                            &amp;quot;extension&amp;quot; }&lt;br /&gt;
            for i = 1, #order do&lt;br /&gt;
                s = q[ order[ i ] ]&lt;br /&gt;
                if s then&lt;br /&gt;
                    r =  string.format( &amp;quot;%s-%s&amp;quot;, r, s )&lt;br /&gt;
                end&lt;br /&gt;
            end -- for i&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r or false&lt;br /&gt;
end -- Multilingual.fair()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.fallback = function ( able, another )&lt;br /&gt;
    -- Is another language suitable as replacement?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     able     -- language version specifier to be supported&lt;br /&gt;
    --     another  -- language specifier of a possible replacement,&lt;br /&gt;
    --                 or not to retrieve a fallback table&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns boolean, or table with fallback codes&lt;br /&gt;
    local r&lt;br /&gt;
    if type( able ) == &amp;quot;string&amp;quot;  and  #able &amp;gt; 0 then&lt;br /&gt;
        if type( another ) == &amp;quot;string&amp;quot;  and  #another &amp;gt; 0 then&lt;br /&gt;
            if able == another then&lt;br /&gt;
                r = true&lt;br /&gt;
            else&lt;br /&gt;
                local s = Multilingual.getBase( able )&lt;br /&gt;
                if s == another then&lt;br /&gt;
                    r = true&lt;br /&gt;
                else&lt;br /&gt;
                    local others = mw.language.getFallbacksFor( s )&lt;br /&gt;
                    r = feasible( another, others )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            local s = Multilingual.getBase( able )&lt;br /&gt;
            if s then&lt;br /&gt;
                r = mw.language.getFallbacksFor( s )&lt;br /&gt;
                if r[ 1 ] == &amp;quot;en&amp;quot; then&lt;br /&gt;
                    local d = fetchISO639( &amp;quot;fallback&amp;quot; )&lt;br /&gt;
                    if type( d ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                       type( d[ s ] ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                        r = mw.text.split( d[ s ], &amp;quot;|&amp;quot; )&lt;br /&gt;
                        table.insert( r, &amp;quot;en&amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r or false&lt;br /&gt;
end -- Multilingual.fallback()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.findCode = function ( ask )&lt;br /&gt;
    -- Retrieve code of local (current project or English) language name&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- string, with presumable language name&lt;br /&gt;
    --             A code itself will be identified, too.&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false&lt;br /&gt;
    local seek = mw.text.trim( ask )&lt;br /&gt;
    local r = false&lt;br /&gt;
    if #seek &amp;gt; 1 then&lt;br /&gt;
        if seek:find( &amp;quot;[&amp;quot;, 1, true ) then&lt;br /&gt;
            local wlink = fetch( &amp;quot;WLink&amp;quot; )&lt;br /&gt;
            if wlink  and&lt;br /&gt;
               type( wlink.getPlain ) == &amp;quot;function&amp;quot; then&lt;br /&gt;
                seek = wlink.getPlain( seek )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        seek = mw.ustring.lower( seek )&lt;br /&gt;
        if Multilingual.isLang( seek ) then&lt;br /&gt;
            r = Multilingual.fair( seek )&lt;br /&gt;
        else&lt;br /&gt;
            local collection = favorites()&lt;br /&gt;
            for i = 1, #collection do&lt;br /&gt;
                r = find( seek, collection[ i ] )&lt;br /&gt;
                if r then&lt;br /&gt;
                    break -- for i&lt;br /&gt;
                end&lt;br /&gt;
            end -- for i&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.findCode()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.fix = function ( attempt )&lt;br /&gt;
    -- Fix frequently mistaken language code&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     attempt  -- string, with presumable language code&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string with correction, or false if no problem known&lt;br /&gt;
    local r = fetchISO639( &amp;quot;correction&amp;quot; )[ attempt:lower() ]&lt;br /&gt;
    return r or false&lt;br /&gt;
end -- Multilingual.fix()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.format = function ( apply, alien, alter, active, alert,&lt;br /&gt;
                                 frame, assembly, adjacent, ahead )&lt;br /&gt;
    -- Format one or more languages&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     apply     -- string with language list or item&lt;br /&gt;
    --     alien     -- language of the answer&lt;br /&gt;
    --                  -- nil, false, &amp;quot;*&amp;quot;: native&lt;br /&gt;
    --                  -- &amp;quot;!&amp;quot;: current project&lt;br /&gt;
    --                  -- &amp;quot;#&amp;quot;: code, downcased, space separated&lt;br /&gt;
    --                  -- &amp;quot;-&amp;quot;: code, mixcase, space separated&lt;br /&gt;
    --                  -- any valid code&lt;br /&gt;
    --     alter     -- capitalize, if &amp;quot;c&amp;quot;; downcase all, if &amp;quot;d&amp;quot;&lt;br /&gt;
    --                  capitalize first item only, if &amp;quot;f&amp;quot;&lt;br /&gt;
    --                  downcase every first word only, if &amp;quot;m&amp;quot;&lt;br /&gt;
    --     active    -- link items, if true&lt;br /&gt;
    --     alert     -- string with category title in case of error&lt;br /&gt;
    --     frame     -- if available&lt;br /&gt;
    --     assembly  -- string with split pattern, if list expected&lt;br /&gt;
    --     adjacent  -- string with list separator, else assembly&lt;br /&gt;
    --     ahead     -- string to prepend first element, if any&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false if apply empty&lt;br /&gt;
    local r = false&lt;br /&gt;
    if apply then&lt;br /&gt;
        local slang&lt;br /&gt;
        if assembly then&lt;br /&gt;
            local bucket = mw.text.split( apply, assembly )&lt;br /&gt;
            local shift = alter&lt;br /&gt;
            local separator&lt;br /&gt;
            if adjacent then&lt;br /&gt;
                separator = adjacent&lt;br /&gt;
            elseif alien == &amp;quot;#&amp;quot;  or  alien == &amp;quot;-&amp;quot; then&lt;br /&gt;
                separator = &amp;quot; &amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                separator = assembly&lt;br /&gt;
            end&lt;br /&gt;
            for k, v in pairs( bucket ) do&lt;br /&gt;
                slang = Multilingual.format( v, alien, shift, active,&lt;br /&gt;
                                             alert )&lt;br /&gt;
                if slang then&lt;br /&gt;
                    if r then&lt;br /&gt;
                        r = string.format( &amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
                                           r, separator, slang )&lt;br /&gt;
                    else&lt;br /&gt;
                        r = slang&lt;br /&gt;
                        if shift == &amp;quot;f&amp;quot; then&lt;br /&gt;
                            shift = &amp;quot;d&amp;quot;&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
            if r and ahead then&lt;br /&gt;
                r = ahead .. r&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            local single = mw.text.trim( apply )&lt;br /&gt;
            if single == &amp;quot;&amp;quot; then&lt;br /&gt;
                r = false&lt;br /&gt;
            else&lt;br /&gt;
                local lapsus, slot&lt;br /&gt;
                slang = Multilingual.findCode( single )&lt;br /&gt;
                if slang then&lt;br /&gt;
                    if alien == &amp;quot;-&amp;quot; then&lt;br /&gt;
                        r = slang&lt;br /&gt;
                    elseif alien == &amp;quot;#&amp;quot; then&lt;br /&gt;
                        r = slang:lower()&lt;br /&gt;
                    else&lt;br /&gt;
                        r = Multilingual.getName( slang, alien )&lt;br /&gt;
                        if active then&lt;br /&gt;
                            slot = fill( slang, false, frame )&lt;br /&gt;
                            if slot then&lt;br /&gt;
                                local wlink = fetch( &amp;quot;WLink&amp;quot; )&lt;br /&gt;
                                if wlink  and&lt;br /&gt;
                                   type( wlink.getTarget )&lt;br /&gt;
                                                       == &amp;quot;function&amp;quot; then&lt;br /&gt;
                                    slot = wlink.getTarget( slot )&lt;br /&gt;
                                end&lt;br /&gt;
                            else&lt;br /&gt;
                                lapsus = alert&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    r = single&lt;br /&gt;
                    if active then&lt;br /&gt;
                        local title = mw.title.makeTitle( 0, single )&lt;br /&gt;
                        if title.exists then&lt;br /&gt;
                            slot = single&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                    lapsus = alert&lt;br /&gt;
                end&lt;br /&gt;
                if not r then&lt;br /&gt;
                    r = single&lt;br /&gt;
                elseif alter == &amp;quot;c&amp;quot; or alter == &amp;quot;f&amp;quot; then&lt;br /&gt;
                    r = mw.ustring.upper( mw.ustring.sub( r, 1, 1 ) )&lt;br /&gt;
                        .. mw.ustring.sub( r, 2 )&lt;br /&gt;
                elseif alter == &amp;quot;d&amp;quot; then&lt;br /&gt;
                    if Multilingual.isMinusculable( slang, r ) then&lt;br /&gt;
                        r = mw.ustring.lower( r )&lt;br /&gt;
                    end&lt;br /&gt;
                elseif alter == &amp;quot;m&amp;quot; then&lt;br /&gt;
                    if Multilingual.isMinusculable( slang, r ) then&lt;br /&gt;
                        r = mw.ustring.lower( mw.ustring.sub( r, 1, 1 ) )&lt;br /&gt;
                            .. mw.ustring.sub( r, 2 )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                if slot then&lt;br /&gt;
                    if r == slot then&lt;br /&gt;
                        r = string.format( &amp;quot;[[%s]]&amp;quot;, r )&lt;br /&gt;
                    else&lt;br /&gt;
                        r = string.format( &amp;quot;[[%s|%s]]&amp;quot;, slot, r )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                if lapsus and alert then&lt;br /&gt;
                    r = string.format( &amp;quot;%s[[Category:%s]]&amp;quot;, r, alert )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.format()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.getBase = function ( ask )&lt;br /&gt;
    -- Retrieve base language from possibly combined ISO language code&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- language code&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false&lt;br /&gt;
    local r&lt;br /&gt;
    if ask then&lt;br /&gt;
        local slang = ask:match( &amp;quot;^%s*(%a%a%a?)-?%a*%s*$&amp;quot; )&lt;br /&gt;
        if slang then&lt;br /&gt;
            r = slang:lower()&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.getBase()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.getLang = function ( ask )&lt;br /&gt;
    -- Retrieve components of a RFC 5646 language code&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- language code with subtags&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns table with formatted subtags&lt;br /&gt;
    --             .base&lt;br /&gt;
    --             .region&lt;br /&gt;
    --             .script&lt;br /&gt;
    --             .suggest&lt;br /&gt;
    --             .year&lt;br /&gt;
    --             .extension&lt;br /&gt;
    --             .other&lt;br /&gt;
    --             .n&lt;br /&gt;
    local tags = mw.text.split( ask, &amp;quot;-&amp;quot; )&lt;br /&gt;
    local s    = tags[ 1 ]&lt;br /&gt;
    local r&lt;br /&gt;
    if s:match( &amp;quot;^%a%a%a?$&amp;quot; ) then&lt;br /&gt;
        r = { base  = s:lower(),&lt;br /&gt;
              legal = true,&lt;br /&gt;
              n     = #tags }&lt;br /&gt;
        for i = 2, r.n do&lt;br /&gt;
            s = tags[ i ]&lt;br /&gt;
            if #s == 2 then&lt;br /&gt;
                if r.region  or  not s:match( &amp;quot;%a%a&amp;quot; ) then&lt;br /&gt;
                    r.legal = false&lt;br /&gt;
                else&lt;br /&gt;
                    r.region = s:upper()&lt;br /&gt;
                end&lt;br /&gt;
            elseif #s == 4 then&lt;br /&gt;
                if s:match( &amp;quot;%a%a%a%a&amp;quot; ) then&lt;br /&gt;
                    r.legal = ( not r.script )&lt;br /&gt;
                    r.script = s:sub( 1, 1 ):upper() ..&lt;br /&gt;
                               s:sub( 2 ):lower()&lt;br /&gt;
                elseif s:match( &amp;quot;20%d%d&amp;quot; )  or&lt;br /&gt;
                       s:match( &amp;quot;1%d%d%d&amp;quot; ) then&lt;br /&gt;
                    r.legal = ( not r.year )&lt;br /&gt;
                    r.year = s&lt;br /&gt;
                else&lt;br /&gt;
                    r.legal = false&lt;br /&gt;
                end&lt;br /&gt;
            elseif #s == 3 then&lt;br /&gt;
                if r.extlang  or  not s:match( &amp;quot;%a%a%a&amp;quot; ) then&lt;br /&gt;
                    r.legal = false&lt;br /&gt;
                else&lt;br /&gt;
                    r.extlang = s:lower()&lt;br /&gt;
                end&lt;br /&gt;
            elseif #s == 1 then&lt;br /&gt;
                s = s:lower()&lt;br /&gt;
                if s:match( &amp;quot;[tux]&amp;quot; ) then&lt;br /&gt;
                    r.extension = s&lt;br /&gt;
                    for k = i + 1, r.n do&lt;br /&gt;
                        s = tags[ k ]&lt;br /&gt;
                        if s:match( &amp;quot;^%w+$&amp;quot; ) then&lt;br /&gt;
                            r.extension = string.format( &amp;quot;%s-%s&amp;quot;,&lt;br /&gt;
                                                         r.extension, s )&lt;br /&gt;
                        else&lt;br /&gt;
                            r.legal = false&lt;br /&gt;
                        end&lt;br /&gt;
                    end -- for k&lt;br /&gt;
                else&lt;br /&gt;
                    r.legal = false&lt;br /&gt;
                end&lt;br /&gt;
                break -- for i&lt;br /&gt;
            else&lt;br /&gt;
                r.legal = ( not r.other )  and&lt;br /&gt;
                          s:match( &amp;quot;%a%a%a&amp;quot; )&lt;br /&gt;
                r.other = s:lower()&lt;br /&gt;
            end&lt;br /&gt;
            if not r.legal then&lt;br /&gt;
                break -- for i&lt;br /&gt;
            end&lt;br /&gt;
        end -- for i&lt;br /&gt;
        if r.legal then&lt;br /&gt;
            r.suggest = Multilingual.fix( r.base )&lt;br /&gt;
            if r.suggest then&lt;br /&gt;
                r.legal = false&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = { legal = false }&lt;br /&gt;
    end&lt;br /&gt;
    if not r.legal then&lt;br /&gt;
        local cnf = fetch( &amp;quot;Multilingual&amp;quot;, &amp;quot;config&amp;quot; )&lt;br /&gt;
        if cnf  and  type( cnf.scream ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            r.scream = cnf.scream&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.getLang()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.getName = function ( ask, alien )&lt;br /&gt;
    -- Which name is assigned to this language code?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask    -- language code&lt;br /&gt;
    --     alien  -- language of the answer&lt;br /&gt;
    --               -- nil, false, &amp;quot;*&amp;quot;: native&lt;br /&gt;
    --               -- &amp;quot;!&amp;quot;: current project&lt;br /&gt;
    --               -- any valid code&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false&lt;br /&gt;
    local r&lt;br /&gt;
    if ask then&lt;br /&gt;
        local slang   = alien&lt;br /&gt;
        local tLang&lt;br /&gt;
        if slang then&lt;br /&gt;
            if slang == &amp;quot;*&amp;quot; then&lt;br /&gt;
                slang = Multilingual.fair( ask )&lt;br /&gt;
            elseif slang == &amp;quot;!&amp;quot; then&lt;br /&gt;
                slang = favorites()[ 1 ]&lt;br /&gt;
            else&lt;br /&gt;
                slang = Multilingual.fair( slang )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            slang = Multilingual.fair( ask )&lt;br /&gt;
        end&lt;br /&gt;
        if not slang then&lt;br /&gt;
            slang = ask or &amp;quot;?????&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        slang = slang:lower()&lt;br /&gt;
        tLang = fetch( &amp;quot;Multilingual&amp;quot;, &amp;quot;names&amp;quot; )&lt;br /&gt;
        if tLang then&lt;br /&gt;
            tLang = tLang[ slang ]&lt;br /&gt;
            if tLang then&lt;br /&gt;
                r = tLang[ ask ]&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if not r then&lt;br /&gt;
            if not Multilingual.ext.tMW then&lt;br /&gt;
                Multilingual.ext.tMW = { }&lt;br /&gt;
            end&lt;br /&gt;
            tLang = Multilingual.ext.tMW[ slang ]&lt;br /&gt;
            if tLang == nil then&lt;br /&gt;
                tLang = mw.language.fetchLanguageNames( slang )&lt;br /&gt;
                if tLang then&lt;br /&gt;
                    Multilingual.ext.tMW[ slang ] = tLang&lt;br /&gt;
                else&lt;br /&gt;
                    Multilingual.ext.tMW[ slang ] = false&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if tLang then&lt;br /&gt;
                r = tLang[ ask ]&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if not r then&lt;br /&gt;
            r = mw.language.fetchLanguageName( ask:lower(), slang )&lt;br /&gt;
            if r == &amp;quot;&amp;quot; then&lt;br /&gt;
                r = false&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.getName()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.i18n = function ( available, alt, frame )&lt;br /&gt;
    -- Select translatable message&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     available  -- table, with mapping language code ./. text&lt;br /&gt;
    --     alt        -- string|nil|false, with fallback text&lt;br /&gt;
    --     frame      -- frame, if available&lt;br /&gt;
    --     Returns&lt;br /&gt;
    --         1. string|nil|false, with selected message&lt;br /&gt;
    --         2. string|nil|false, with language code&lt;br /&gt;
    local r1, r2&lt;br /&gt;
    if type( available ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local codes = { }&lt;br /&gt;
        local trsl  = { }&lt;br /&gt;
        local slang&lt;br /&gt;
        for k, v in pairs( available ) do&lt;br /&gt;
            if type( k ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
               type( v ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                slang = mw.text.trim( k:lower() )&lt;br /&gt;
                table.insert( codes, slang )&lt;br /&gt;
                trsl[ slang ] = v&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        slang = Multilingual.userLang( codes, frame )&lt;br /&gt;
        if slang  and  trsl[ slang ] then&lt;br /&gt;
            r1 = mw.text.trim( trsl[ slang ] )&lt;br /&gt;
            if r1 == &amp;quot;&amp;quot; then&lt;br /&gt;
                r1 = false&lt;br /&gt;
            else&lt;br /&gt;
                r2 = slang&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not r1  and  type( alt ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        r1 = mw.text.trim( alt )&lt;br /&gt;
        if r1 == &amp;quot;&amp;quot; then&lt;br /&gt;
            r1 = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r1, r2&lt;br /&gt;
end -- Multilingual.i18n()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.int = function ( access, alien, apply )&lt;br /&gt;
    -- Translated system message&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     access  -- message ID&lt;br /&gt;
    --     alien   -- language code&lt;br /&gt;
    --     apply   -- nil, or sequence table with parameters $1, $2, ...&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false&lt;br /&gt;
    local o = mw.message.new( access )&lt;br /&gt;
    local r&lt;br /&gt;
    if o:exists() then&lt;br /&gt;
        if type( alien ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            o:inLanguage( alien:lower() )&lt;br /&gt;
        end&lt;br /&gt;
        if type( apply ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            o:params( apply )&lt;br /&gt;
        end&lt;br /&gt;
        r = o:plain()&lt;br /&gt;
    end&lt;br /&gt;
    return r or false&lt;br /&gt;
end -- Multilingual.int()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.isLang = function ( ask, additional )&lt;br /&gt;
    -- Could this be an ISO language code?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask         -- language code&lt;br /&gt;
    --     additional  -- true, if Wiki codes like &amp;quot;simple&amp;quot; permitted&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns boolean&lt;br /&gt;
    local r, s&lt;br /&gt;
    if additional then&lt;br /&gt;
        s = ask&lt;br /&gt;
    else&lt;br /&gt;
        s = Multilingual.getBase( ask )&lt;br /&gt;
    end&lt;br /&gt;
    if s then&lt;br /&gt;
        r = mw.language.isKnownLanguageTag( s )&lt;br /&gt;
        if r then&lt;br /&gt;
            r = not Multilingual.fix( s )&lt;br /&gt;
        elseif additional then&lt;br /&gt;
            r = Multilingual.exotic[ s ] or false&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.isLang()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.isLangWiki = function ( ask )&lt;br /&gt;
    -- Could this be a Wiki language version?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- language version specifier&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns boolean&lt;br /&gt;
    local r&lt;br /&gt;
    local s = Multilingual.getBase( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        r = mw.language.isSupportedLanguage( s )  or&lt;br /&gt;
            Multilingual.exotic[ ask ]&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.isLangWiki()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.isMinusculable = function ( ask, assigned )&lt;br /&gt;
    -- Could this language name become downcased?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask       -- language code, or nil&lt;br /&gt;
    --     assigned  -- language name, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns boolean&lt;br /&gt;
    local r = true&lt;br /&gt;
    if ask then&lt;br /&gt;
        local cnf = fetch( &amp;quot;Multilingual&amp;quot;, &amp;quot;config&amp;quot; )&lt;br /&gt;
        if cnf then&lt;br /&gt;
            local s = string.format( &amp;quot; %s &amp;quot;, ask:lower() )&lt;br /&gt;
            if type( cnf.stopMinusculization ) == &amp;quot;string&amp;quot;&lt;br /&gt;
               and  cnf.stopMinusculization:find( s, 1, true ) then&lt;br /&gt;
                r = false&lt;br /&gt;
            end&lt;br /&gt;
            if r  and  assigned&lt;br /&gt;
               and  type( cnf.seekMinusculization ) == &amp;quot;string&amp;quot;&lt;br /&gt;
               and  cnf.seekMinusculization:find( s, 1, true )&lt;br /&gt;
               and  type( cnf.scanMinusculization ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                local scan = assigned:gsub( &amp;quot;[%(%)]&amp;quot;, &amp;quot; &amp;quot; ) .. &amp;quot; &amp;quot;&lt;br /&gt;
                if not scan:find( cnf.scanMinusculization ) then&lt;br /&gt;
                    r = false&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.isMinusculable()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.isRTL = function ( ask )&lt;br /&gt;
    -- Check whether language is written right-to-left&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- string, with language (or script) code&lt;br /&gt;
    -- Returns true, if right-to-left&lt;br /&gt;
    local r&lt;br /&gt;
    Multilingual.rtl = Multilingual.rtl or { }&lt;br /&gt;
    r = Multilingual.rtl[ ask ]&lt;br /&gt;
    if type( r ) ~= &amp;quot;boolean&amp;quot; then&lt;br /&gt;
        local bib = fetch( &amp;quot;ISO15924&amp;quot; )&lt;br /&gt;
        if type( bib ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
           type( bib.isRTL ) == &amp;quot;function&amp;quot; then&lt;br /&gt;
            r = bib.isRTL( ask )&lt;br /&gt;
        else&lt;br /&gt;
            r = mw.language.new( ask ):isRTL()&lt;br /&gt;
        end&lt;br /&gt;
        Multilingual.rtl[ ask ] = r&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Multilingual.isRTL()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.message = function ( arglist, frame )&lt;br /&gt;
    -- Show text in best match of user language like system message&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     arglist  -- template arguments&lt;br /&gt;
    --     frame    -- frame, if available&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string with appropriate text&lt;br /&gt;
    local r&lt;br /&gt;
    if type( arglist ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local t = { }&lt;br /&gt;
        local m, p, save&lt;br /&gt;
        for k, v in pairs( arglist ) do&lt;br /&gt;
            if type( k ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
               type( v ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                v = mw.text.trim( v )&lt;br /&gt;
                if v ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    if k:match( &amp;quot;^%l%l&amp;quot; ) then&lt;br /&gt;
                        t[ k ] = v&lt;br /&gt;
                    elseif k:match( &amp;quot;^%$%d$&amp;quot; )  and  k ~= &amp;quot;$0&amp;quot; then&lt;br /&gt;
                        p = p or { }&lt;br /&gt;
                        k = tonumber( k:match( &amp;quot;^%$(%d)$&amp;quot; ) )&lt;br /&gt;
                        p[ k ] = v&lt;br /&gt;
                        if not m  or  k &amp;gt; m then&lt;br /&gt;
                            m = k&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        if type( arglist[ &amp;quot;-&amp;quot; ] ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            save = arglist[ arglist[ &amp;quot;-&amp;quot; ] ]&lt;br /&gt;
        end&lt;br /&gt;
        r = Multilingual.i18n( t, save, frame )&lt;br /&gt;
        if p  and  r  and  r:find( &amp;quot;$&amp;quot;, 1, true ) then&lt;br /&gt;
            t = { }&lt;br /&gt;
            for i = 1, m do&lt;br /&gt;
                t[ i ] = p[ i ]  or  &amp;quot;&amp;quot;&lt;br /&gt;
            end -- for i&lt;br /&gt;
            r = mw.message.newRawMessage( r, t ):plain()&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- Multilingual.message()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.sitelink = function ( all, frame )&lt;br /&gt;
    -- Make link at local or other site with optimal linktext translation&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     all    -- string or table or number, item ID or entity&lt;br /&gt;
    --     frame  -- frame, if available&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string with any helpful internal link, or plain text&lt;br /&gt;
    local s = type( all )&lt;br /&gt;
    local object, r&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        object = all&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        object = mw.wikibase.getEntity( all )&lt;br /&gt;
    elseif s == &amp;quot;number&amp;quot; then&lt;br /&gt;
        object = mw.wikibase.getEntity( string.format( &amp;quot;Q%d&amp;quot;, all ) )&lt;br /&gt;
    end&lt;br /&gt;
    if type( object ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local collection = object.sitelinks&lt;br /&gt;
        local entry&lt;br /&gt;
        s = false&lt;br /&gt;
        if type( collection ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            Multilingual.site = Multilingual.site  or&lt;br /&gt;
                                mw.wikibase.getGlobalSiteId()&lt;br /&gt;
            entry = collection[ Multilingual.site ]&lt;br /&gt;
            if entry then&lt;br /&gt;
                s = &amp;quot;:&amp;quot; .. entry.title&lt;br /&gt;
            elseif collection.enwiki then&lt;br /&gt;
                s = &amp;quot;w:en:&amp;quot; .. collection.enwiki.title&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        r = Multilingual.wikibase( object, &amp;quot;labels&amp;quot;, frame )&lt;br /&gt;
        if s then&lt;br /&gt;
            if s == &amp;quot;:&amp;quot; .. r then&lt;br /&gt;
                r = string.format( &amp;quot;[[%s]]&amp;quot;, s )&lt;br /&gt;
            else&lt;br /&gt;
                r = string.format( &amp;quot;[[%s|%s]]&amp;quot;, s, r )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- Multilingual.sitelink()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.tabData = function ( access, at, alt, frame )&lt;br /&gt;
    -- Retrieve translated keyword from commons:Data:****.tab&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     access  -- string, with page identification on Commons&lt;br /&gt;
    --     at      -- string, with keyword&lt;br /&gt;
    --     alt     -- string|nil|false, with fallback text&lt;br /&gt;
    --     frame   -- frame, if available&lt;br /&gt;
    --     Returns&lt;br /&gt;
    --         1. string|nil|false, with selected message&lt;br /&gt;
    --         2. language code, or &amp;quot;error&amp;quot;&lt;br /&gt;
    local data = fetchData( access )&lt;br /&gt;
    local r1, r2&lt;br /&gt;
    if  type( data ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        if type( at ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            local seek = mw.text.trim( at )&lt;br /&gt;
            if seek == &amp;quot;&amp;quot; then&lt;br /&gt;
                r1 = &amp;quot;EMPTY Multilingual.tabData key&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                local e, poly&lt;br /&gt;
                for i = 1, #data do&lt;br /&gt;
                    e = data[ i ]&lt;br /&gt;
                    if type( e ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                        if e[ 1 ] == seek then&lt;br /&gt;
                            if type( e[ 2 ] ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                                poly = e[ 2 ]&lt;br /&gt;
                            else&lt;br /&gt;
                                r1 = &amp;quot;INVALID Multilingual.tabData bad #&amp;quot;&lt;br /&gt;
                                                         .. tostring( i )&lt;br /&gt;
                            end&lt;br /&gt;
                            break   -- for i&lt;br /&gt;
                        end&lt;br /&gt;
                    else&lt;br /&gt;
                        break   -- for i&lt;br /&gt;
                    end&lt;br /&gt;
                end   -- for i&lt;br /&gt;
                if poly then&lt;br /&gt;
                    data = poly&lt;br /&gt;
                else&lt;br /&gt;
                    r1 = &amp;quot;UNKNOWN Multilingual.tabData key: &amp;quot; .. seek&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r1 = &amp;quot;INVALID Multilingual.tabData key&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r1 = data&lt;br /&gt;
    end&lt;br /&gt;
    if r1 then&lt;br /&gt;
        r2 = &amp;quot;error&amp;quot;&lt;br /&gt;
    elseif data then&lt;br /&gt;
        r1, r2 = Multilingual.i18n( data, alt, frame )&lt;br /&gt;
        r2 = r2 or &amp;quot;error&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return r1, r2&lt;br /&gt;
end -- Multilingual.tabData()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.userLang = function ( accept, frame )&lt;br /&gt;
    -- Try to support user language by application&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     accept  -- string or table&lt;br /&gt;
    --                space separated list of available ISO 639 codes&lt;br /&gt;
    --                Default: project language, or English&lt;br /&gt;
    --     frame   -- frame, if available&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string with appropriate code&lt;br /&gt;
    local s = type( accept )&lt;br /&gt;
    local codes, r, slang&lt;br /&gt;
    if s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        codes = mw.text.split( accept:lower(), &amp;quot;%s+&amp;quot; )&lt;br /&gt;
    elseif s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        codes = { }&lt;br /&gt;
        for i = 1, #accept do&lt;br /&gt;
            s = accept[ i ]&lt;br /&gt;
            if type( s ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
               s ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                table.insert( codes, s:lower() )&lt;br /&gt;
            end&lt;br /&gt;
        end -- for i&lt;br /&gt;
    end&lt;br /&gt;
    slang = User.favorize( codes, frame )&lt;br /&gt;
    if slang then&lt;br /&gt;
        if feasible( slang, codes ) then&lt;br /&gt;
            r = slang&lt;br /&gt;
        elseif slang:find( &amp;quot;-&amp;quot;, 1, true ) then&lt;br /&gt;
            slang = Multilingual.getBase( slang )&lt;br /&gt;
            if feasible( slang, codes ) then&lt;br /&gt;
                r = slang&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if not r then&lt;br /&gt;
            local others = mw.language.getFallbacksFor( slang )&lt;br /&gt;
            for i = 1, #others do&lt;br /&gt;
                slang = others[ i ]&lt;br /&gt;
                if feasible( slang, codes ) then&lt;br /&gt;
                    r = slang&lt;br /&gt;
                    break -- for i&lt;br /&gt;
                end&lt;br /&gt;
            end -- for i&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not r then&lt;br /&gt;
        local back = favorites()&lt;br /&gt;
        for i = 1, #back do&lt;br /&gt;
            slang = back[ i ]&lt;br /&gt;
            if feasible( slang, codes ) then&lt;br /&gt;
                r = slang&lt;br /&gt;
                break -- for i&lt;br /&gt;
            end&lt;br /&gt;
        end -- for i&lt;br /&gt;
        if not r  and  codes[ 1 ] then&lt;br /&gt;
            r = codes[ 1 ]&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r  or  favorites()[ 1 ]&lt;br /&gt;
end -- Multilingual.userLang()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.userLangCode = function ()&lt;br /&gt;
    -- Guess a user language code&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns code of current best guess&lt;br /&gt;
    return User.self  or  favorites()[ 1 ]&lt;br /&gt;
end -- Multilingual.userLangCode()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multilingual.wikibase = function ( all, about, attempt, frame )&lt;br /&gt;
    -- Optimal translation of wikibase component&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     all      -- string or table, object ID or entity&lt;br /&gt;
    --     about    -- boolean, true &amp;quot;descriptions&amp;quot; or false &amp;quot;labels&amp;quot;&lt;br /&gt;
    --     attempt  -- string or not, code of preferred language&lt;br /&gt;
    --     frame    -- frame, if available&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns&lt;br /&gt;
    --         1. string, with selected message&lt;br /&gt;
    --         2. string, with language code, or not&lt;br /&gt;
    local s = type( all )&lt;br /&gt;
    local object, r, r2&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        object = all&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        object = mw.wikibase.getEntity( all )&lt;br /&gt;
    end&lt;br /&gt;
    if type( object ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        if about  and  about ~= &amp;quot;labels&amp;quot; then&lt;br /&gt;
            s = &amp;quot;descriptions&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            s = &amp;quot;labels&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        object = object[ s ]&lt;br /&gt;
        if type( object ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            if object[ attempt ] then&lt;br /&gt;
                r  = object[ attempt ].value&lt;br /&gt;
                r2 = attempt&lt;br /&gt;
            else&lt;br /&gt;
                local poly&lt;br /&gt;
                for k, v in pairs( object ) do&lt;br /&gt;
                    poly = poly or { }&lt;br /&gt;
                    poly[ k ] = v.value&lt;br /&gt;
                end -- for k, v&lt;br /&gt;
                if poly then&lt;br /&gt;
                    r, r2 = Multilingual.i18n( poly, nil, frame )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r  or  &amp;quot;&amp;quot;,   r2&lt;br /&gt;
end -- Multilingual.wikibase()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failsafe.failsafe = function ( atleast )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     atleast  -- string, with required version&lt;br /&gt;
    --                         or wikidata|item|~|@ or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string  -- with queried version/item, also if problem&lt;br /&gt;
    --              false   -- if appropriate&lt;br /&gt;
    -- 2020-08-17&lt;br /&gt;
    local since = atleast&lt;br /&gt;
    local last    = ( since == &amp;quot;~&amp;quot; )&lt;br /&gt;
    local linked  = ( since == &amp;quot;@&amp;quot; )&lt;br /&gt;
    local link    = ( since == &amp;quot;item&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    if last  or  link  or  linked  or  since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = Failsafe.item&lt;br /&gt;
        since = false&lt;br /&gt;
        if type( item ) == &amp;quot;number&amp;quot;  and  item &amp;gt; 0 then&lt;br /&gt;
            local suited = string.format( &amp;quot;Q%d&amp;quot;, item )&lt;br /&gt;
            if link then&lt;br /&gt;
                r = suited&lt;br /&gt;
            else&lt;br /&gt;
                local entity = mw.wikibase.getEntity( suited )&lt;br /&gt;
                if type( entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    local seek = Failsafe.serialProperty or &amp;quot;P348&amp;quot;&lt;br /&gt;
                    local vsn  = entity:formatPropertyValues( seek )&lt;br /&gt;
                    if type( vsn ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                       type( vsn.value ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
                       vsn.value ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                        if last  and  vsn.value == Failsafe.serial then&lt;br /&gt;
                            r = false&lt;br /&gt;
                        elseif linked then&lt;br /&gt;
                            if mw.title.getCurrentTitle().prefixedText&lt;br /&gt;
                               ==  mw.wikibase.getSitelink( suited ) then&lt;br /&gt;
                                r = false&lt;br /&gt;
                            else&lt;br /&gt;
                                r = suited&lt;br /&gt;
                            end&lt;br /&gt;
                        else&lt;br /&gt;
                            r = vsn.value&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;
    if type( r ) == &amp;quot;nil&amp;quot; then&lt;br /&gt;
        if not since  or  since &amp;lt;= Failsafe.serial then&lt;br /&gt;
            r = Failsafe.serial&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Failsafe.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.fair = function ( frame )&lt;br /&gt;
    -- Format language code&lt;br /&gt;
    --     1  -- language code&lt;br /&gt;
    local s = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    return Multilingual.fair( s )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.fair&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.fallback = function ( frame )&lt;br /&gt;
    -- Is another language suitable as replacement?&lt;br /&gt;
    --     1  -- language version specifier to be supported&lt;br /&gt;
    --     2  -- language specifier of a possible replacement&lt;br /&gt;
    local s1 = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    local s2 = mw.text.trim( frame.args[ 2 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    local r  = Multilingual.fallback( s1, s2 )&lt;br /&gt;
    if type( r ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        r = r[ 1 ]&lt;br /&gt;
    else&lt;br /&gt;
        r = r  and  &amp;quot;1&amp;quot;   or   &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.fallback&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.findCode = function ( frame )&lt;br /&gt;
    -- Retrieve language code from language name&lt;br /&gt;
    --     1  -- name in current project language&lt;br /&gt;
    local s = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    return Multilingual.findCode( s )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.findCode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.fix = function ( frame )&lt;br /&gt;
    local r = frame.args[ 1 ]&lt;br /&gt;
    if r then&lt;br /&gt;
        r = Multilingual.fix( mw.text.trim( r ) )&lt;br /&gt;
    end&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.fix&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.format = function ( frame )&lt;br /&gt;
    -- Format one or more languages&lt;br /&gt;
    --     1          -- language list or item&lt;br /&gt;
    --     slang      -- language of the answer, if not native&lt;br /&gt;
    --                   * -- native&lt;br /&gt;
    --                   ! -- current project&lt;br /&gt;
    --                   any valid code&lt;br /&gt;
    --     shift      -- capitalize, if &amp;quot;c&amp;quot;; downcase, if &amp;quot;d&amp;quot;&lt;br /&gt;
    --                   capitalize first item only, if &amp;quot;f&amp;quot;&lt;br /&gt;
    --     link       -- 1 -- link items&lt;br /&gt;
    --     scream     -- category title in case of error&lt;br /&gt;
    --     split      -- split pattern, if list expected&lt;br /&gt;
    --     separator  -- list separator, else split&lt;br /&gt;
    --     start      -- prepend first element, if any&lt;br /&gt;
    local r&lt;br /&gt;
    local link&lt;br /&gt;
    if frame.args.link == &amp;quot;1&amp;quot; then&lt;br /&gt;
        link = true&lt;br /&gt;
    end&lt;br /&gt;
    r = Multilingual.format( frame.args[ 1 ],&lt;br /&gt;
                             frame.args.slang,&lt;br /&gt;
                             frame.args.shift,&lt;br /&gt;
                             link,&lt;br /&gt;
                             frame.args.scream,&lt;br /&gt;
                             frame,&lt;br /&gt;
                             frame.args.split,&lt;br /&gt;
                             frame.args.separator,&lt;br /&gt;
                             frame.args.start )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.format&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getBase = function ( frame )&lt;br /&gt;
    -- Retrieve base language from possibly combined ISO language code&lt;br /&gt;
    --     1  -- code&lt;br /&gt;
    local s = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    return Multilingual.getBase( s )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getBase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getName = function ( frame )&lt;br /&gt;
    -- Retrieve language name from ISO language code&lt;br /&gt;
    --     1  -- code&lt;br /&gt;
    --     2  -- language to be used for the answer, if not native&lt;br /&gt;
    --           ! -- current project&lt;br /&gt;
    --           * -- native&lt;br /&gt;
    --           any valid code&lt;br /&gt;
    local s     = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    local slang = frame.args[ 2 ]&lt;br /&gt;
    local r&lt;br /&gt;
    Multilingual.frame = frame&lt;br /&gt;
    if slang then&lt;br /&gt;
        slang = mw.text.trim( slang )&lt;br /&gt;
    end&lt;br /&gt;
    r = Multilingual.getName( s, slang )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getName&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.int = function ( frame )&lt;br /&gt;
    -- Translated system message&lt;br /&gt;
    --     1             -- message ID&lt;br /&gt;
    --     lang          -- language code&lt;br /&gt;
    --     $1, $2, ...   -- parameters&lt;br /&gt;
    local sysMsg = frame.args[ 1 ]&lt;br /&gt;
    local r&lt;br /&gt;
    if sysMsg then&lt;br /&gt;
        sysMsg = mw.text.trim( sysMsg )&lt;br /&gt;
        if sysMsg ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local n     = 0&lt;br /&gt;
            local slang = frame.args.lang&lt;br /&gt;
            local i, params, s&lt;br /&gt;
            if slang == &amp;quot;&amp;quot; then&lt;br /&gt;
                slang = false&lt;br /&gt;
            end&lt;br /&gt;
            for k, v in pairs( frame.args ) do&lt;br /&gt;
                if type( k ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                    s = k:match( &amp;quot;^%$(%d+)$&amp;quot; )&lt;br /&gt;
                    if s then&lt;br /&gt;
                        i = tonumber( s )&lt;br /&gt;
                        if i &amp;gt; n then&lt;br /&gt;
                            n = i&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
            if n &amp;gt; 0 then&lt;br /&gt;
                local s&lt;br /&gt;
                params = { }&lt;br /&gt;
                for i = 1, n do&lt;br /&gt;
                    s = frame.args[ &amp;quot;$&amp;quot; .. tostring( i ) ]  or  &amp;quot;&amp;quot;&lt;br /&gt;
                    table.insert( params, s )&lt;br /&gt;
                end -- for i&lt;br /&gt;
            end&lt;br /&gt;
            r = Multilingual.int( sysMsg, slang, params )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.int&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.isLang = function ( frame )&lt;br /&gt;
    -- Could this be an ISO language code?&lt;br /&gt;
    --     1  -- code&lt;br /&gt;
    local s = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    local lucky, r = pcall( Multilingual.isLang, s )&lt;br /&gt;
    return r and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.isLang&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.isLangWiki = function ( frame )&lt;br /&gt;
    -- Could this be a Wiki language version?&lt;br /&gt;
    --     1  -- code&lt;br /&gt;
    -- Returns non-empty, if possibly language version&lt;br /&gt;
    local s = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    local lucky, r = pcall( Multilingual.isLangWiki, s )&lt;br /&gt;
    return r and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.isLangWiki&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.isRTL = function ( frame )&lt;br /&gt;
    -- Check whether language is written right-to-left&lt;br /&gt;
    --     1  -- string, with language code&lt;br /&gt;
    -- Returns non-empty, if right-to-left&lt;br /&gt;
    local s = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    return Multilingual.isRTL( s ) and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.isRTL()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.message = function ( frame )&lt;br /&gt;
    -- Translation of text element&lt;br /&gt;
    return Multilingual.message( fold( frame ), frame )&lt;br /&gt;
end -- p.message&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.sitelink = function ( frame )&lt;br /&gt;
    -- Make link at local or other site with optimal linktext translation&lt;br /&gt;
    --     1  -- item ID&lt;br /&gt;
    local s = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    if s:match( &amp;quot;^%d+$&amp;quot;) then&lt;br /&gt;
        r = tonumber( s )&lt;br /&gt;
    elseif s:match( &amp;quot;^Q%d+$&amp;quot;) then&lt;br /&gt;
        r = s&lt;br /&gt;
    end&lt;br /&gt;
    if r then&lt;br /&gt;
        r = Multilingual.sitelink( r, frame )&lt;br /&gt;
    end&lt;br /&gt;
    return r or s&lt;br /&gt;
end -- p.sitelink&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.tabData = function ( frame )&lt;br /&gt;
    -- Retrieve best message text from Commons Data&lt;br /&gt;
    --     1    -- page identification on Commons&lt;br /&gt;
    --     2    -- keyword&lt;br /&gt;
    --     alt  -- fallback text&lt;br /&gt;
    local suite = frame.args[ 1 ]&lt;br /&gt;
    local seek  = frame.args[ 2 ]&lt;br /&gt;
    local salt  = frame.args.alt&lt;br /&gt;
    local r     = Multilingual.tabData( suite, seek, salt, frame )&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.tabData&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.userLang = function ( frame )&lt;br /&gt;
    -- Which language does the current user prefer?&lt;br /&gt;
    --     1  -- space separated list of available ISO 639 codes&lt;br /&gt;
    local s = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    return Multilingual.userLang( s, frame )&lt;br /&gt;
end -- p.userLang&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.wikibase = function ( frame )&lt;br /&gt;
    -- Optimal translation of wikibase component&lt;br /&gt;
    --     1  -- object ID&lt;br /&gt;
    --     2  -- 1 for &amp;quot;descriptions&amp;quot;, 0 for &amp;quot;labels&amp;quot;.&lt;br /&gt;
    --           or either &amp;quot;descriptions&amp;quot; or &amp;quot;labels&amp;quot;&lt;br /&gt;
    local r&lt;br /&gt;
    local s = mw.text.trim( frame.args[ 1 ]  or  &amp;quot;&amp;quot; )&lt;br /&gt;
    if s ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        local s2    = mw.text.trim( frame.args[ 2 ]  or  &amp;quot;0&amp;quot; )&lt;br /&gt;
        local slang = mw.text.trim( frame.args.lang  or  &amp;quot;&amp;quot; )&lt;br /&gt;
        local large = ( s2 ~= &amp;quot;&amp;quot;  and  s2 ~= &amp;quot;0&amp;quot; )&lt;br /&gt;
        if slang == &amp;quot;&amp;quot; then&lt;br /&gt;
            slang = false&lt;br /&gt;
        end&lt;br /&gt;
        r = Multilingual.wikibase( s, large, slang, frame )&lt;br /&gt;
    end&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.wikibase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.failsafe = function ( frame )&lt;br /&gt;
    -- Versioning interface&lt;br /&gt;
    local s = type( frame )&lt;br /&gt;
    local since&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        since = frame.args[ 1 ]&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        since = frame&lt;br /&gt;
    end&lt;br /&gt;
    if since then&lt;br /&gt;
        since = mw.text.trim( since )&lt;br /&gt;
        if since == &amp;quot;&amp;quot; then&lt;br /&gt;
            since = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Failsafe.failsafe( since )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.Multilingual = function ()&lt;br /&gt;
    return Multilingual&lt;br /&gt;
end -- p.Multilingual&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Module:Format_TemplateData/config&amp;diff=2732</id>
		<title>Module:Format TemplateData/config</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Module:Format_TemplateData/config&amp;diff=2732"/>
		<updated>2024-11-22T08:46:56Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Serial = &amp;quot;2022-03-20&amp;quot;&lt;br /&gt;
--[=[&lt;br /&gt;
enwiki configuration {{TemplateData}}&lt;br /&gt;
mw.loadData()&lt;br /&gt;
]=]&lt;br /&gt;
return {&lt;br /&gt;
	catProblem = false,&lt;br /&gt;
	classMultiColumns = &amp;quot;column-multiple&amp;quot;,&lt;br /&gt;
	classNoNumTOC = &amp;quot;nonumtoc&amp;quot;,&lt;br /&gt;
	classTable = { &amp;quot;wikitable&amp;quot;, &amp;quot;templatedata-params&amp;quot; },&lt;br /&gt;
	cssParams = { [&amp;quot;border&amp;quot;]	   = &amp;quot;#B3B7FF 1px solid&amp;quot; },&lt;br /&gt;
	docpageCreate = &amp;quot;%s/doc&amp;quot;,&lt;br /&gt;
	docpageDetect = &amp;quot;/doc&amp;quot;,&lt;br /&gt;
	helpBoolean = false,&lt;br /&gt;
	helpContent = false,&lt;br /&gt;
	helpDate = false,&lt;br /&gt;
	helpFile = false,&lt;br /&gt;
	helpFormat = false,&lt;br /&gt;
	helpLine = false,&lt;br /&gt;
	helpNumber = false,&lt;br /&gt;
	helpPage = false,&lt;br /&gt;
	helpString = false,&lt;br /&gt;
	helpTemplate = false,&lt;br /&gt;
	helpURL = false,&lt;br /&gt;
	helpUser = false,&lt;br /&gt;
	msgDescMiss = &amp;quot;missing &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
	permit = {&lt;br /&gt;
		boole = {&lt;br /&gt;
			[true]  = {&lt;br /&gt;
				css  = {&lt;br /&gt;
					[&amp;quot;color&amp;quot;] = &amp;quot;#050&amp;quot;,&lt;br /&gt;
					[&amp;quot;font-weight&amp;quot;] = &amp;quot;bold&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
				lead = false,&lt;br /&gt;
				show = &amp;quot;True&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			[false] = {&lt;br /&gt;
				css  = {&lt;br /&gt;
					[&amp;quot;color&amp;quot;] = &amp;quot;#610&amp;quot;,&lt;br /&gt;
					[&amp;quot;font-weight&amp;quot;] = &amp;quot;bold&amp;quot;&lt;br /&gt;
				},&lt;br /&gt;
		 		lead = false,&lt;br /&gt;
		 		show = &amp;quot;False&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		css	= {&lt;br /&gt;
			tableheadbg = { [&amp;quot;background-color&amp;quot;] = &amp;quot;#B3B7FF&amp;quot; },&lt;br /&gt;
			required = { [&amp;quot;border-left&amp;quot;] = &amp;quot;3px solid black&amp;quot; },&lt;br /&gt;
			suggested = { [&amp;quot;border-left&amp;quot;] = &amp;quot;3px solid #888&amp;quot; },&lt;br /&gt;
			optional = { [&amp;quot;border-left&amp;quot;] = &amp;quot;3px solid #CCC&amp;quot; },&lt;br /&gt;
			deprecated  = {&lt;br /&gt;
				[&amp;quot;background-color&amp;quot;] = &amp;quot;#FDD&amp;quot;,&lt;br /&gt;
				[&amp;quot;border-left&amp;quot;] = &amp;quot;3px dotted red&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	tStylesTOCnum = &amp;quot;TOC nonum&amp;quot;, &lt;br /&gt;
	tStylesMultiColumns = &amp;quot;column-multiple&amp;quot;, &lt;br /&gt;
	serial = Serial&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Module:Transclusion_count/data/P&amp;diff=2730</id>
		<title>Module:Transclusion count/data/P</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Module:Transclusion_count/data/P&amp;diff=2730"/>
		<updated>2024-11-22T08:46:56Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;P&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;P-phrases&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;P.&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;P1&amp;quot;] = 157000,&lt;br /&gt;
[&amp;quot;P2&amp;quot;] = 332000,&lt;br /&gt;
[&amp;quot;PAGENAMEBASE&amp;quot;] = 1650000,&lt;br /&gt;
[&amp;quot;PAGENAMEU&amp;quot;] = 55000,&lt;br /&gt;
[&amp;quot;PAK&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;PD-US&amp;quot;] = 9300,&lt;br /&gt;
[&amp;quot;PD-US-1923-abroad&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;PD-US-expired&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;PD-US-expired-abroad&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;PD-US-no_notice&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;PD-art&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;PD-ineligible-USonly&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;PD-notice&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;PD-old-100&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;PD-self&amp;quot;] = 33000,&lt;br /&gt;
[&amp;quot;PD-textlogo&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;PDB_Gallery&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;PDanube&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;PER&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;PHI&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;PHL&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;PLANTS&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;PM20&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;PMID&amp;quot;] = 7400,&lt;br /&gt;
[&amp;quot;POL&amp;quot;] = 66000,&lt;br /&gt;
[&amp;quot;POR&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;POTD/Day&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;POTD_default&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;POTD_image&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;POTD_navigation&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;POTDlink&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;POV&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;PR/header&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;PR/heading&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;PRI&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;PRT&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;PR_link&amp;quot;] = 111000,&lt;br /&gt;
[&amp;quot;PS&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Pad&amp;quot;] = 60000,&lt;br /&gt;
[&amp;quot;Page&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Page_name_sub&amp;quot;] = 48000,&lt;br /&gt;
[&amp;quot;Page_needed&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Page_tabs&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Page_tabs/styles.css&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Page_views&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Pagelinks&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Pagelist&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Pagetype&amp;quot;] = 10800000,&lt;br /&gt;
[&amp;quot;Paid&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Pakistani_English&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Para&amp;quot;] = 2510000,&lt;br /&gt;
[&amp;quot;Parabr&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Paragraph_break&amp;quot;] = 1230000,&lt;br /&gt;
[&amp;quot;Param_value&amp;quot;] = 142000,&lt;br /&gt;
[&amp;quot;Parameter_names_example&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;ParmPart&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Partial&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Partial_minor_planet_designation&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Partly_done&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Party_color&amp;quot;] = 67000,&lt;br /&gt;
[&amp;quot;Party_color_cell&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Party_name_with_color&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Party_name_with_colour&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Party_shading/Democratic&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Party_shading/Independent&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Party_shading/Republican&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Party_stripe&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Pass&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Pb&amp;quot;] = 1210000,&lt;br /&gt;
[&amp;quot;Pbox&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Pbox/1&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Peacock&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Pedigree&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Peer_review/heading&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Peer_review_tools&amp;quot;] = 8800,&lt;br /&gt;
[&amp;quot;Penalty_shoot-out&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Pending&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;Pending_DYK_American_hooks&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Pending_DYK_biographies&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Pengoal&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Penmiss&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Percentage&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Performance_key&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Period_color&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Period_end&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Period_id&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Period_start&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;PeruTasks&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Phab&amp;quot;] = 7100,&lt;br /&gt;
[&amp;quot;Phabricator&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Phanerozoic_220px&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;PharmNavFootnote&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Philippine_name&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Photo&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Photo_montage&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Photo_requested&amp;quot;] = 106000,&lt;br /&gt;
[&amp;quot;Photograph_requested&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Photomontage&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Photoreq&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Picture_of_the_day&amp;quot;] = 7700,&lt;br /&gt;
[&amp;quot;Pie_chart&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Pie_chart/slice&amp;quot;] = 6800,&lt;br /&gt;
[&amp;quot;Ping&amp;quot;] = 251000,&lt;br /&gt;
[&amp;quot;Pipe&amp;quot;] = 101000,&lt;br /&gt;
[&amp;quot;Place_name_disambiguation&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;Plain_link&amp;quot;] = 110000,&lt;br /&gt;
[&amp;quot;Plain_list&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Plain_text&amp;quot;] = 97000,&lt;br /&gt;
[&amp;quot;Plainlink&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;Plainlist&amp;quot;] = 409000,&lt;br /&gt;
[&amp;quot;Plainlist/styles.css&amp;quot;] = 2770000,&lt;br /&gt;
[&amp;quot;Player&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Player2&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Please_check_ISSN&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Plural&amp;quot;] = 111000,&lt;br /&gt;
[&amp;quot;Pluralize_from_text&amp;quot;] = 1570000,&lt;br /&gt;
[&amp;quot;Pn&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Poem_quote&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Poemquote&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Politician_icon&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Politician_icon2&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Politics_sidebar_below&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Politics_sidebar_title&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Polparty&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Pop_density&amp;quot;] = 9800,&lt;br /&gt;
[&amp;quot;Population_Germany&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Portal&amp;quot;] = 9920000,&lt;br /&gt;
[&amp;quot;Portal-Class&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;Portal-inline&amp;quot;] = 233000,&lt;br /&gt;
[&amp;quot;Portal_bar&amp;quot;] = 144000,&lt;br /&gt;
[&amp;quot;Portal_box&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Portalbar&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Portuguese_name&amp;quot;] = 9500,&lt;br /&gt;
[&amp;quot;PosMapFS&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Possible&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Possibly_empty_category&amp;quot;] = 69000,&lt;br /&gt;
[&amp;quot;Post-nominals&amp;quot;] = 58000,&lt;br /&gt;
[&amp;quot;Post-nominals/AUS&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Post-nominals/CAN&amp;quot;] = 9700,&lt;br /&gt;
[&amp;quot;Post-nominals/GBR&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Post-nominals/NZL&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Postnominals&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Pp&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;Pp-book-cover&amp;quot;] = 52000,&lt;br /&gt;
[&amp;quot;Pp-extended&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Pp-move&amp;quot;] = 9700,&lt;br /&gt;
[&amp;quot;Pp-move-indef&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Pp-pc&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Pp-protected&amp;quot;] = 9700,&lt;br /&gt;
[&amp;quot;Pp-semi-indef&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Pp-template&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Pp-vandalism&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Precision&amp;quot;] = 281000,&lt;br /&gt;
[&amp;quot;PresFoot&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;PresHead&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;PresRow&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Press&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Preview_warning&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Primary_source_inline&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Primary_sources&amp;quot;] = 31000,&lt;br /&gt;
[&amp;quot;Principal_rank&amp;quot;] = 545000,&lt;br /&gt;
[&amp;quot;Prl&amp;quot;] = 111000,&lt;br /&gt;
[&amp;quot;ProCyclingStats&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;ProQuest&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Professional_wrestling_profiles&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Professional_wrestling_results_table&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Profit&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Progress_box&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Project-Class&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Project_other&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Promotional&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Proper_name&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Prose&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Protected_page_maintenance_message&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;Protection_padlock&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Proxy_block&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Pso&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Purge&amp;quot;] = 441000,&lt;br /&gt;
[&amp;quot;Purge_button&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Purge_button/styles.css&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Module:Page&amp;quot;] = 114000,&lt;br /&gt;
[&amp;quot;Module:PageLinks&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Module:Page_tabs&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Module:Pagelist&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Module:Pagetype&amp;quot;] = 17300000,&lt;br /&gt;
[&amp;quot;Module:Pagetype/config&amp;quot;] = 17300000,&lt;br /&gt;
[&amp;quot;Module:Pagetype/disambiguation&amp;quot;] = 12300000,&lt;br /&gt;
[&amp;quot;Module:Pagetype/rfd&amp;quot;] = 15700000,&lt;br /&gt;
[&amp;quot;Module:Pagetype/setindex&amp;quot;] = 12600000,&lt;br /&gt;
[&amp;quot;Module:Pagetype/softredirect&amp;quot;] = 16300000,&lt;br /&gt;
[&amp;quot;Module:ParameterCount&amp;quot;] = 953000,&lt;br /&gt;
[&amp;quot;Module:Parameter_names_example&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Module:Parameter_validation&amp;quot;] = 145000,&lt;br /&gt;
[&amp;quot;Module:Parameter_validation/default_config&amp;quot;] = 145000,&lt;br /&gt;
[&amp;quot;Module:Party_name_with_color&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Module:Percentage&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Module:Person_height&amp;quot;] = 269000,&lt;br /&gt;
[&amp;quot;Module:Person_length&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Module:Person_weight&amp;quot;] = 81000,&lt;br /&gt;
[&amp;quot;Module:Photo_montage&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Module:Plain_text&amp;quot;] = 1720000,&lt;br /&gt;
[&amp;quot;Module:Political_party&amp;quot;] = 128000,&lt;br /&gt;
[&amp;quot;Module:Political_party/A&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Module:Political_party/B&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Module:Political_party/C&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Module:Political_party/D&amp;quot;] = 53000,&lt;br /&gt;
[&amp;quot;Module:Political_party/E&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Module:Political_party/F&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Module:Political_party/G&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Module:Political_party/H&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Module:Political_party/I&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;Module:Political_party/J&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;Module:Political_party/K&amp;quot;] = 4500,&lt;br /&gt;
[&amp;quot;Module:Political_party/L&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Module:Political_party/M&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Module:Political_party/N&amp;quot;] = 33000,&lt;br /&gt;
[&amp;quot;Module:Political_party/O&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Module:Political_party/P&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Module:Political_party/R&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Module:Political_party/S&amp;quot;] = 32000,&lt;br /&gt;
[&amp;quot;Module:Political_party/T&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:Political_party/U&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Module:Political_party/V&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Module:Political_party/W&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Module:Political_party/Y&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Module:Pop_density&amp;quot;] = 9800,&lt;br /&gt;
[&amp;quot;Module:PopulationFromWikidata&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;Module:Portal&amp;quot;] = 10300000,&lt;br /&gt;
[&amp;quot;Module:Portal-inline&amp;quot;] = 235000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/a&amp;quot;] = 1790000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/aliases&amp;quot;] = 293000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/b&amp;quot;] = 3070000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/c&amp;quot;] = 1900000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/d&amp;quot;] = 114000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/e&amp;quot;] = 469000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/f&amp;quot;] = 884000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/g&amp;quot;] = 642000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/h&amp;quot;] = 477000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/i&amp;quot;] = 1140000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/j&amp;quot;] = 291000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/k&amp;quot;] = 79000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/l&amp;quot;] = 452000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/m&amp;quot;] = 659000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/n&amp;quot;] = 750000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/o&amp;quot;] = 417000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/other&amp;quot;] = 175000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/p&amp;quot;] = 935000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/q&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Module:Portal/images/r&amp;quot;] = 396000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/s&amp;quot;] = 1750000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/t&amp;quot;] = 737000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/u&amp;quot;] = 1080000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/v&amp;quot;] = 308000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/w&amp;quot;] = 183000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/y&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Module:Portal/images/z&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Module:Portal/styles.css&amp;quot;] = 9920000,&lt;br /&gt;
[&amp;quot;Module:Portal_bar&amp;quot;] = 162000,&lt;br /&gt;
[&amp;quot;Module:Portal_bar/styles.css&amp;quot;] = 162000,&lt;br /&gt;
[&amp;quot;Module:Professional_wrestling_profiles&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Module:Professional_wrestling_results_table&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Module:Progress_box&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Module:Progress_box/config&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Module:Progress_box/styles.css&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Module:Protect&amp;quot;] = 117000,&lt;br /&gt;
[&amp;quot;Module:Protected_edit_request&amp;quot;] = 51000,&lt;br /&gt;
[&amp;quot;Module:Protection_banner&amp;quot;] = 60000,&lt;br /&gt;
[&amp;quot;Module:Protection_banner/config&amp;quot;] = 60000,&lt;br /&gt;
[&amp;quot;Module:Purge&amp;quot;] = 462000,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Module:Format_TemplateData&amp;diff=2728</id>
		<title>Module:Format TemplateData</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Module:Format_TemplateData&amp;diff=2728"/>
		<updated>2024-11-22T08:46:56Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local TemplateData = { suite  = &amp;quot;TemplateData&amp;quot;,&lt;br /&gt;
                       serial = &amp;quot;2022-03-10&amp;quot;,&lt;br /&gt;
                       item   = 46997995 }&lt;br /&gt;
--[==[&lt;br /&gt;
improve template:TemplateData&lt;br /&gt;
]==]&lt;br /&gt;
local Failsafe = TemplateData&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local Config = {&lt;br /&gt;
    -- multiple option names mapped into unique internal fields&lt;br /&gt;
    basicCnf = { catProblem          = &amp;quot;strange&amp;quot;,&lt;br /&gt;
                 classMultiColumns   = &amp;quot;selMultClm&amp;quot;,&lt;br /&gt;
                 classNoNumTOC       = &amp;quot;suppressTOCnum&amp;quot;,&lt;br /&gt;
                 classTable          = &amp;quot;classTable&amp;quot;,&lt;br /&gt;
                 cssParWrap          = &amp;quot;cssTabWrap&amp;quot;,&lt;br /&gt;
                 cssParams           = &amp;quot;cssTable&amp;quot;,&lt;br /&gt;
                 docpageCreate       = &amp;quot;suffix&amp;quot;,&lt;br /&gt;
                 docpageDetect       = &amp;quot;subpage&amp;quot;,&lt;br /&gt;
                 helpBoolean         = &amp;quot;support4boolean&amp;quot;,&lt;br /&gt;
                 helpContent         = &amp;quot;support4content&amp;quot;,&lt;br /&gt;
                 helpDate            = &amp;quot;support4date&amp;quot;,&lt;br /&gt;
                 helpFile            = &amp;quot;support4wiki-file-name&amp;quot;,&lt;br /&gt;
                 helpFormat          = &amp;quot;supportFormat&amp;quot;,&lt;br /&gt;
                 helpLine            = &amp;quot;support4line&amp;quot;,&lt;br /&gt;
                 helpNumber          = &amp;quot;support4number&amp;quot;,&lt;br /&gt;
                 helpPage            = &amp;quot;support4wiki-page-name&amp;quot;,&lt;br /&gt;
                 helpString          = &amp;quot;support4string&amp;quot;,&lt;br /&gt;
                 helpTemplate        = &amp;quot;support4wiki-template-name&amp;quot;,&lt;br /&gt;
                 helpURL             = &amp;quot;support4url&amp;quot;,&lt;br /&gt;
                 helpUser            = &amp;quot;support4wiki-user-name&amp;quot;,&lt;br /&gt;
                 msgDescMiss         = &amp;quot;solo&amp;quot;,&lt;br /&gt;
                 tStylesTOCnum       = &amp;quot;stylesTOCnum&amp;quot;,&lt;br /&gt;
                 tStylesMultiColumns = &amp;quot;stylesMultClm&amp;quot; },&lt;br /&gt;
    classTable     = { &amp;quot;wikitable&amp;quot; },    -- classes for params table&lt;br /&gt;
    debugmultilang = &amp;quot;C0C0C0&amp;quot;,&lt;br /&gt;
    loudly         = false,    -- show exported element, etc.&lt;br /&gt;
    solo           = false,    -- complaint on missing description&lt;br /&gt;
    strange        = false,    -- title of maintenance category&lt;br /&gt;
    cssTable       = false,    -- styles for params table&lt;br /&gt;
    cssTabWrap     = false,    -- styles for params table wrapper&lt;br /&gt;
    debug          = false,&lt;br /&gt;
    subpage        = false,    -- pattern to identify subpage&lt;br /&gt;
    suffix         = false,    -- subpage creation scheme&lt;br /&gt;
    suppressTOCnum = false,    -- class for TOC number suppression&lt;br /&gt;
    jsonDebug      = &amp;quot;json-code-lint&amp;quot;    -- class for jsonDebug tool&lt;br /&gt;
}&lt;br /&gt;
local Data = {&lt;br /&gt;
    div     = false,    -- &amp;lt;div class=&amp;quot;mw-templatedata-doc-wrap&amp;quot;&amp;gt;&lt;br /&gt;
    got     = false,    -- table, initial templatedata object&lt;br /&gt;
    heirs   = false,    -- table, params that are inherited&lt;br /&gt;
    jump    = false,    -- source position at end of &amp;quot;params&amp;quot;&lt;br /&gt;
    less    = false,    -- main description missing&lt;br /&gt;
    lasting = false,    -- old syntax encountered&lt;br /&gt;
    lazy    = false,    -- doc mode; do not generate effective &amp;lt;templatedata&amp;gt;&lt;br /&gt;
    leading = false,    -- show TOC&lt;br /&gt;
--  low     = false,    -- 1= mode&lt;br /&gt;
    order   = false,    -- parameter sequence&lt;br /&gt;
    params  = false,    -- table, exported parameters&lt;br /&gt;
    scream  = false,    -- error messages&lt;br /&gt;
    sibling = false,    -- TOC juxtaposed&lt;br /&gt;
    slang   = nil,      -- project/user language code&lt;br /&gt;
    slim    = false,    -- JSON reduced to plain&lt;br /&gt;
    source  = false,    -- JSON input&lt;br /&gt;
    strip   = false,    -- &amp;lt;templatedata&amp;gt; evaluation&lt;br /&gt;
    tag     = false,    -- table, exported root element&lt;br /&gt;
    title   = false,    -- page&lt;br /&gt;
    tree    = false     -- table, rewritten templatedata object&lt;br /&gt;
}&lt;br /&gt;
local Permit = {&lt;br /&gt;
    builder = { after           = &amp;quot;block&amp;quot;,&lt;br /&gt;
                align           = &amp;quot;block&amp;quot;,&lt;br /&gt;
                block           = &amp;quot;block&amp;quot;,&lt;br /&gt;
                compressed      = &amp;quot;block&amp;quot;,&lt;br /&gt;
                dense           = &amp;quot;block&amp;quot;,&lt;br /&gt;
                grouped         = &amp;quot;inline&amp;quot;,&lt;br /&gt;
                half            = &amp;quot;inline&amp;quot;,&lt;br /&gt;
                indent          = &amp;quot;block&amp;quot;,&lt;br /&gt;
                inline          = &amp;quot;inline&amp;quot;,&lt;br /&gt;
                last            = &amp;quot;block&amp;quot;,&lt;br /&gt;
                lead            = &amp;quot;block&amp;quot;,&lt;br /&gt;
                newlines        = &amp;quot;*&amp;quot;,&lt;br /&gt;
                spaced          = &amp;quot;inline&amp;quot; },&lt;br /&gt;
    colors  = { tableheadbg = &amp;quot;B3B7FF&amp;quot;,&lt;br /&gt;
                required    = &amp;quot;EAF3FF&amp;quot;,&lt;br /&gt;
                suggested   = &amp;quot;FFFFFF&amp;quot;,&lt;br /&gt;
                optional    = &amp;quot;EAECF0&amp;quot;,&lt;br /&gt;
                deprecated  = &amp;quot;FFCBCB&amp;quot; },&lt;br /&gt;
    params  = { aliases         = &amp;quot;table&amp;quot;,&lt;br /&gt;
                autovalue       = &amp;quot;string&amp;quot;,&lt;br /&gt;
                default         = &amp;quot;string table I18N nowiki&amp;quot;,&lt;br /&gt;
                deprecated      = &amp;quot;boolean string I18N&amp;quot;,&lt;br /&gt;
                description     = &amp;quot;string table I18N&amp;quot;,&lt;br /&gt;
                example         = &amp;quot;string table I18N nowiki&amp;quot;,&lt;br /&gt;
                label           = &amp;quot;string table I18N&amp;quot;,&lt;br /&gt;
                inherits        = &amp;quot;string&amp;quot;,&lt;br /&gt;
                required        = &amp;quot;boolean&amp;quot;,&lt;br /&gt;
                style           = &amp;quot;string table&amp;quot;,&lt;br /&gt;
                suggested       = &amp;quot;boolean&amp;quot;,&lt;br /&gt;
                suggestedvalues = &amp;quot;string table number boolean&amp;quot;,&lt;br /&gt;
                type            = &amp;quot;string&amp;quot; },&lt;br /&gt;
    root    = { description = &amp;quot;string table I18N&amp;quot;,&lt;br /&gt;
                format      = &amp;quot;string&amp;quot;,&lt;br /&gt;
                maps        = &amp;quot;table&amp;quot;,&lt;br /&gt;
                params      = &amp;quot;table&amp;quot;,&lt;br /&gt;
                paramOrder  = &amp;quot;table&amp;quot;,&lt;br /&gt;
                sets        = &amp;quot;table&amp;quot; },&lt;br /&gt;
    search  = &amp;quot;[{,]%%s*([&#039;\&amp;quot;])%s%%1%%s*:%%s*%%{&amp;quot;,&lt;br /&gt;
    types   = { boolean                   = true,&lt;br /&gt;
                content                   = true,&lt;br /&gt;
                date                      = true,&lt;br /&gt;
                line                      = true,&lt;br /&gt;
                number                    = true,&lt;br /&gt;
                string                    = true,&lt;br /&gt;
                unknown                   = true,&lt;br /&gt;
                url                       = true,&lt;br /&gt;
                [&amp;quot;wiki-file-name&amp;quot;]        = true,&lt;br /&gt;
                [&amp;quot;wiki-page-name&amp;quot;]        = true,&lt;br /&gt;
                [&amp;quot;wiki-template-name&amp;quot;]    = true,&lt;br /&gt;
                [&amp;quot;wiki-user-name&amp;quot;]        = true,&lt;br /&gt;
                [&amp;quot;unbalanced-wikitext&amp;quot;]   = true,&lt;br /&gt;
                [&amp;quot;string/line&amp;quot;]           = &amp;quot;line&amp;quot;,&lt;br /&gt;
                [&amp;quot;string/wiki-page-name&amp;quot;] = &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
                [&amp;quot;string/wiki-user-name&amp;quot;] = &amp;quot;wiki-user-name&amp;quot; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function Fault( alert )&lt;br /&gt;
    -- Memorize error message&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     alert  -- string, error message&lt;br /&gt;
    if Data.scream then&lt;br /&gt;
        Data.scream = string.format( &amp;quot;%s *** %s&amp;quot;, Data.scream, alert )&lt;br /&gt;
    else&lt;br /&gt;
        Data.scream = alert&lt;br /&gt;
    end&lt;br /&gt;
end -- Fault()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function Fetch( ask, allow )&lt;br /&gt;
    -- Fetch module&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     ask    -- string, with name&lt;br /&gt;
    --                       &amp;quot;/global&amp;quot;&lt;br /&gt;
    --                       &amp;quot;Multilingual&amp;quot;&lt;br /&gt;
    --                       &amp;quot;Text&amp;quot;&lt;br /&gt;
    --                       &amp;quot;WLink&amp;quot;&lt;br /&gt;
    --     allow  -- true: no error if unavailable&lt;br /&gt;
    -- Returns table of module&lt;br /&gt;
    -- error: Module not available&lt;br /&gt;
    local sign = ask&lt;br /&gt;
    local r, stem&lt;br /&gt;
    if sign:sub( 1, 1 ) == &amp;quot;/&amp;quot; then&lt;br /&gt;
        sign = TemplateData.frame:getTitle() .. sign&lt;br /&gt;
    else&lt;br /&gt;
        stem = sign&lt;br /&gt;
        sign = &amp;quot;Module:&amp;quot; .. stem&lt;br /&gt;
    end&lt;br /&gt;
    if TemplateData.extern then&lt;br /&gt;
        r = TemplateData.extern[ sign ]&lt;br /&gt;
    else&lt;br /&gt;
        TemplateData.extern = { }&lt;br /&gt;
    end&lt;br /&gt;
    if not r then&lt;br /&gt;
        local lucky, g = pcall( require, sign )&lt;br /&gt;
        if type( g ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            if stem  and  type( g[ stem ] ) == &amp;quot;function&amp;quot; then&lt;br /&gt;
                r = g[ stem ]()&lt;br /&gt;
            else&lt;br /&gt;
                r = g&lt;br /&gt;
            end&lt;br /&gt;
            TemplateData.extern[ sign ] = r&lt;br /&gt;
        elseif not allow then&lt;br /&gt;
            error( string.format( &amp;quot;Fetch(%s) %s&amp;quot;, sign, g ), 0 )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Fetch()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function Foreign()&lt;br /&gt;
    -- Guess human language&lt;br /&gt;
    -- Returns slang, or not&lt;br /&gt;
    if type( Data.slang ) == &amp;quot;nil&amp;quot; then&lt;br /&gt;
        local Multilingual = Fetch( &amp;quot;Multilingual&amp;quot;, true )&lt;br /&gt;
        if Multilingual  and&lt;br /&gt;
           type( Multilingual.userLangCode ) == &amp;quot;function&amp;quot; then&lt;br /&gt;
            Data.slang = Multilingual.userLangCode()&lt;br /&gt;
        else&lt;br /&gt;
            Data.slang = mw.language.getContentLanguage():getCode()&lt;br /&gt;
                                                         :lower()&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if Data.slang  and&lt;br /&gt;
       mw.ustring.codepoint( Data.slang, 1, 1 ) &amp;gt; 122 then&lt;br /&gt;
        Data.slang = false&lt;br /&gt;
    end&lt;br /&gt;
    return Data.slang&lt;br /&gt;
end -- Foreign()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function facet( ask, at )&lt;br /&gt;
    -- Find physical position of parameter definition in JSON&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     ask  -- string, parameter name&lt;br /&gt;
    --     at   -- number, physical position within definition&lt;br /&gt;
    -- Returns number, or nil&lt;br /&gt;
    local seek = string.format( Permit.search,&lt;br /&gt;
                                ask:gsub( &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot; )&lt;br /&gt;
                                   :gsub( &amp;quot;([%-.()+*?^$%[%]])&amp;quot;,&lt;br /&gt;
                                          &amp;quot;%%%1&amp;quot; ) )&lt;br /&gt;
    local i, k, r, slice, source&lt;br /&gt;
    if not Data.jump then&lt;br /&gt;
        Data.jump = Data.source:find( &amp;quot;params&amp;quot;, 2 )&lt;br /&gt;
        if Data.jump then&lt;br /&gt;
            Data.jump = Data.jump + 7&lt;br /&gt;
        else&lt;br /&gt;
            Data.jump = 1&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    i, k = Data.source:find( seek,  at + Data.jump )&lt;br /&gt;
    while i  and  not r do&lt;br /&gt;
        source = Data.source:sub( k + 1 )&lt;br /&gt;
        slice  = source:match( &amp;quot;^%s*\&amp;quot;([^\&amp;quot;]+)\&amp;quot;s*:&amp;quot; )&lt;br /&gt;
        if not slice then&lt;br /&gt;
            slice = source:match( &amp;quot;^%s*&#039;([^&#039;]+)&#039;%s*:&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
        if ( slice and Permit.params[ slice ] )   or&lt;br /&gt;
           source:match( &amp;quot;^%s*%}&amp;quot; ) then&lt;br /&gt;
            r = k&lt;br /&gt;
        else&lt;br /&gt;
            i, k = Data.source:find( seek,  k )&lt;br /&gt;
        end&lt;br /&gt;
    end    -- while i&lt;br /&gt;
    return r&lt;br /&gt;
end -- facet()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function facilities( apply )&lt;br /&gt;
    -- Retrieve details of suggestedvalues&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     apply  -- table, with plain or enhanced values&lt;br /&gt;
    --               .suggestedvalues  -- table|string|number, or more&lt;br /&gt;
    -- Returns&lt;br /&gt;
    --     1  -- table, with suggestedvalues&lt;br /&gt;
    --     2  -- table, with CSS map, or not&lt;br /&gt;
    --     3  -- string, with class, or not&lt;br /&gt;
    --     4  -- string, with templatestyles, or not&lt;br /&gt;
    local elements = apply.suggestedvalues&lt;br /&gt;
    local s        = type( elements )&lt;br /&gt;
    local r1, r2, r3, r4&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local values = elements.values&lt;br /&gt;
        if type( values ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            r1 = values&lt;br /&gt;
            if type( elements.scroll ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                r2 = r2  or  { }&lt;br /&gt;
                r2.height   = apply.scroll&lt;br /&gt;
                r2.overflow = &amp;quot;auto&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            if type( elements.minwidth ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                local s = type( elements.maxcolumns )&lt;br /&gt;
                r2 = r2  or  { }&lt;br /&gt;
                r2[&amp;quot;column-width&amp;quot;] = elements.minwidth&lt;br /&gt;
                if s == &amp;quot;string&amp;quot;  or&lt;br /&gt;
                   s == &amp;quot;number&amp;quot; then&lt;br /&gt;
                    s = tostring( elements.maxcolumns )&lt;br /&gt;
                    r2[&amp;quot;column-count&amp;quot;] = s&lt;br /&gt;
                end&lt;br /&gt;
                if type( Config.selMultClm ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                    r3 = Config.selMultClm&lt;br /&gt;
                end&lt;br /&gt;
                if type( Config.stylesMultClm ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                    local src = Config.stylesMultClm .. &amp;quot;/styles.css&amp;quot;&lt;br /&gt;
                    r4 = TemplateData.frame&lt;br /&gt;
                                     :extensionTag( &amp;quot;templatestyles&amp;quot;,&lt;br /&gt;
                                                    nil,&lt;br /&gt;
                                                    { src = src } )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif elements  and  elements ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r1 = elements&lt;br /&gt;
        end&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        s = mw.text.trim( about )&lt;br /&gt;
        if s ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r1 = { }&lt;br /&gt;
            table.insert( r1,&lt;br /&gt;
                          { code = s } )&lt;br /&gt;
        end&lt;br /&gt;
    elseif s == &amp;quot;number&amp;quot; then&lt;br /&gt;
        r1 = { }&lt;br /&gt;
        table.insert( r1,&lt;br /&gt;
                      { code = tostring( elements ) } )&lt;br /&gt;
    end&lt;br /&gt;
    return r1, r2, r3, r4&lt;br /&gt;
end -- facilities()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function factory( adapt )&lt;br /&gt;
    -- Retrieve localized text from system message&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     adapt  -- string, message ID after &amp;quot;templatedata-&amp;quot;&lt;br /&gt;
    -- Returns string, with localized text&lt;br /&gt;
    local o = mw.message.new( &amp;quot;templatedata-&amp;quot; .. adapt )&lt;br /&gt;
    if Foreign() then&lt;br /&gt;
        o:inLanguage( Data.slang )&lt;br /&gt;
    end&lt;br /&gt;
    return o:plain()&lt;br /&gt;
end -- factory()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function faculty( adjust )&lt;br /&gt;
    -- Test template arg for boolean&lt;br /&gt;
    --     adjust  -- string or nil&lt;br /&gt;
    -- Returns boolean&lt;br /&gt;
    local s = type( adjust )&lt;br /&gt;
    local r&lt;br /&gt;
    if s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        r = mw.text.trim( adjust )&lt;br /&gt;
        r = ( r ~= &amp;quot;&amp;quot;  and  r ~= &amp;quot;0&amp;quot; )&lt;br /&gt;
    elseif s == &amp;quot;boolean&amp;quot; then&lt;br /&gt;
        r = adjust&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- faculty()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function failures()&lt;br /&gt;
    -- Retrieve error collection and category&lt;br /&gt;
    -- Returns string&lt;br /&gt;
    local r&lt;br /&gt;
    if Data.scream then&lt;br /&gt;
        local e = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                         :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                         :wikitext( Data.scream )&lt;br /&gt;
        r = tostring( e )&lt;br /&gt;
        mw.addWarning( &amp;quot;&#039;&#039;&#039;TemplateData&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;quot; .. Data.scream )&lt;br /&gt;
        if Config.strange then&lt;br /&gt;
            r = string.format( &amp;quot;%s[[category:%s]]&amp;quot;,&lt;br /&gt;
                               r,&lt;br /&gt;
                               Config.strange )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- failures()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fair( adjust )&lt;br /&gt;
    -- Reduce text to one line of plain text, or noexport wikitext blocks&lt;br /&gt;
    --     adjust  -- string&lt;br /&gt;
    -- Returns string, with adjusted text&lt;br /&gt;
    local f    = function ( a )&lt;br /&gt;
                     return a:gsub( &amp;quot;%s*\n%s*&amp;quot;, &amp;quot; &amp;quot; )&lt;br /&gt;
                             :gsub( &amp;quot;%s%s+&amp;quot;, &amp;quot; &amp;quot; )&lt;br /&gt;
                 end&lt;br /&gt;
    local tags = { { start = &amp;quot;&amp;lt;noexport&amp;gt;&amp;quot;,&lt;br /&gt;
                     stop  = &amp;quot;&amp;lt;/noexport&amp;gt;&amp;quot; },&lt;br /&gt;
                   { start = &amp;quot;&amp;lt;exportonly&amp;gt;&amp;quot;,&lt;br /&gt;
                     stop  = &amp;quot;&amp;lt;/exportonly&amp;gt;&amp;quot;,&lt;br /&gt;
                     l     = false }&lt;br /&gt;
                 }&lt;br /&gt;
    local r = adjust&lt;br /&gt;
    local i, j, k, s, tag&lt;br /&gt;
    for m = 1, 2 do&lt;br /&gt;
        tag = tags[ m ]&lt;br /&gt;
        if r:find( tag.start, 1, true ) then&lt;br /&gt;
            s     = r&lt;br /&gt;
            r     = &amp;quot;&amp;quot;&lt;br /&gt;
            i     = 1&lt;br /&gt;
            tag.l = true&lt;br /&gt;
            j, k  = s:find( tag.start, i, true )&lt;br /&gt;
            while j do&lt;br /&gt;
                if j &amp;gt; 1 then&lt;br /&gt;
                    r = r .. f( s:sub( i,  j - 1 ) )&lt;br /&gt;
                end&lt;br /&gt;
                i    = k + 1&lt;br /&gt;
                j, k = s:find( tag.stop, i, true )&lt;br /&gt;
                if j then&lt;br /&gt;
                    if m == 1 then&lt;br /&gt;
                        r = r .. s:sub( i,  j - 1 )&lt;br /&gt;
                    end&lt;br /&gt;
                    i    = k + 1&lt;br /&gt;
                    j, k = s:find( tag.start, i, true )&lt;br /&gt;
                else&lt;br /&gt;
                    Fault( &amp;quot;missing &amp;quot; .. tag.stop )&lt;br /&gt;
                end&lt;br /&gt;
            end    -- while j&lt;br /&gt;
            r = r .. s:sub( i )&lt;br /&gt;
        elseif m == 1 then&lt;br /&gt;
            r = f( r )&lt;br /&gt;
        end&lt;br /&gt;
    end -- for m&lt;br /&gt;
    if tags[ 2 ].l then&lt;br /&gt;
        r = r:gsub( &amp;quot;&amp;lt;exportonly&amp;gt;.*&amp;lt;/exportonly&amp;gt;&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fair()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fancy( advance, alert )&lt;br /&gt;
    -- Present JSON source&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     advance  -- true, for nice&lt;br /&gt;
    --     alert    -- true, for visible&lt;br /&gt;
    -- Returns string&lt;br /&gt;
    local r&lt;br /&gt;
    if Data.source then&lt;br /&gt;
        local support = Config.jsonDebug&lt;br /&gt;
        local css&lt;br /&gt;
        if advance then&lt;br /&gt;
            css = { height = &amp;quot;6em&amp;quot;,&lt;br /&gt;
                    resize = &amp;quot;vertical&amp;quot; }&lt;br /&gt;
            r   = { [ 1 ] = &amp;quot;syntaxhighlight&amp;quot;,&lt;br /&gt;
                    [ 2 ] = Data.source,&lt;br /&gt;
                    lang  = &amp;quot;json&amp;quot;,&lt;br /&gt;
                    style = table.concat( css, &amp;quot;;&amp;quot; ) }&lt;br /&gt;
            if alert then&lt;br /&gt;
                r.class( support )&lt;br /&gt;
            end&lt;br /&gt;
            r = TemplateData.frame:callParserFunction( &amp;quot;#tag&amp;quot;, r )&lt;br /&gt;
        else&lt;br /&gt;
            css = { [ &amp;quot;font-size&amp;quot; ]   = &amp;quot;77%&amp;quot;,&lt;br /&gt;
                    [ &amp;quot;line-height&amp;quot; ] = &amp;quot;1.35&amp;quot; }&lt;br /&gt;
            if alert then&lt;br /&gt;
                css.resize = &amp;quot;vertical&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                css.display = &amp;quot;none&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            r = mw.html.create( &amp;quot;pre&amp;quot; )&lt;br /&gt;
                       :addClass( support )&lt;br /&gt;
                       :css( css )&lt;br /&gt;
                       :wikitext( mw.text.encode( Data.source ) )&lt;br /&gt;
            r = tostring( r )&lt;br /&gt;
        end&lt;br /&gt;
        r = &amp;quot;\n&amp;quot;.. r&lt;br /&gt;
    else&lt;br /&gt;
        r = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fancy()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function faraway( alternatives )&lt;br /&gt;
    -- Retrieve best language version from multilingual text&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     alternatives  -- table, to be evaluated&lt;br /&gt;
    -- Returns&lt;br /&gt;
    --     1  -- string, with best match&lt;br /&gt;
    --     2  -- table of other versions, if any&lt;br /&gt;
    local n = 0&lt;br /&gt;
    local variants = { }&lt;br /&gt;
    local r1, r2&lt;br /&gt;
    for k, v in pairs( alternatives ) do&lt;br /&gt;
        if type( v ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            v = mw.text.trim( v )&lt;br /&gt;
            if v ~= &amp;quot;&amp;quot;  and  type( k ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                k = k:lower()&lt;br /&gt;
                variants[ k ] = v&lt;br /&gt;
                n             = n + 1&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    if n &amp;gt; 0 then&lt;br /&gt;
        local Multilingual = Fetch( &amp;quot;Multilingual&amp;quot;, true )&lt;br /&gt;
        if Multilingual  and&lt;br /&gt;
           type( Multilingual.i18n ) == &amp;quot;function&amp;quot; then&lt;br /&gt;
            local show, slang = Multilingual.i18n( variants )&lt;br /&gt;
            if show then&lt;br /&gt;
                r1 = show&lt;br /&gt;
                variants[ slang ] = nil&lt;br /&gt;
                r2 = variants&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if not r1 then&lt;br /&gt;
            Foreign()&lt;br /&gt;
            for k, v in pairs( variants ) do&lt;br /&gt;
                if n == 1 then&lt;br /&gt;
                    r1 = v&lt;br /&gt;
                elseif Data.slang == k then&lt;br /&gt;
                    variants[ k ] = nil&lt;br /&gt;
                    r1 = v&lt;br /&gt;
                    r2 = variants&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        end&lt;br /&gt;
        if r2 and Multilingual then&lt;br /&gt;
            for k, v in pairs( r2 ) do&lt;br /&gt;
                if v  and  not Multilingual.isLang( k, true ) then&lt;br /&gt;
                    Fault( string.format( &amp;quot;%s &amp;lt;code&amp;gt;lang=%s&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
                                          &amp;quot;Invalid&amp;quot;,&lt;br /&gt;
                                          k ) )&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r1, r2&lt;br /&gt;
end -- faraway()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fashioned( about, asked, assign )&lt;br /&gt;
    -- Create description head&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     about   -- table, supposed to contain description&lt;br /&gt;
    --     asked   -- true, if mandatory description&lt;br /&gt;
    --     assign  -- &amp;lt;block&amp;gt;, if to be equipped&lt;br /&gt;
    -- Returns &amp;lt;block&amp;gt;, with head, or nil&lt;br /&gt;
    local para = assign or mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
    local plus, r&lt;br /&gt;
    if about and about.description then&lt;br /&gt;
        if type( about.description ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            para:wikitext( about.description )&lt;br /&gt;
        else&lt;br /&gt;
            para:wikitext( about.description[ 1 ] )&lt;br /&gt;
            plus = mw.html.create( &amp;quot;ul&amp;quot; )&lt;br /&gt;
            plus:css( &amp;quot;text-align&amp;quot;, &amp;quot;left&amp;quot; )&lt;br /&gt;
            for k, v in pairs( about.description[ 2 ] ) do&lt;br /&gt;
                plus:node( mw.html.create( &amp;quot;li&amp;quot; )&lt;br /&gt;
                                  :node( mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
                                                :wikitext( k ) )&lt;br /&gt;
                                  :node( mw.html.create( &amp;quot;br&amp;quot; ) )&lt;br /&gt;
                                  :wikitext( fair( v ) ) )&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
            if Config.loudly then&lt;br /&gt;
                plus = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                              :css( &amp;quot;background-color&amp;quot;,&lt;br /&gt;
                                    &amp;quot;#&amp;quot; .. Config.debugmultilang )&lt;br /&gt;
                              :node( plus )&lt;br /&gt;
            else&lt;br /&gt;
                plus:addClass( &amp;quot;templatedata-maintain&amp;quot; )&lt;br /&gt;
                    :css( &amp;quot;display&amp;quot;, &amp;quot;none&amp;quot; )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    elseif Config.solo and asked then&lt;br /&gt;
        para:addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
            :wikitext( Config.solo )&lt;br /&gt;
        Data.less = true&lt;br /&gt;
    else&lt;br /&gt;
        para = false&lt;br /&gt;
    end&lt;br /&gt;
    if para then&lt;br /&gt;
        if plus then&lt;br /&gt;
            r = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                       :node( para )&lt;br /&gt;
                       :node( plus )&lt;br /&gt;
        else&lt;br /&gt;
            r = para&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fashioned()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fatten( access )&lt;br /&gt;
    -- Create table row for sub-headline&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     access  -- string, with name&lt;br /&gt;
    -- Returns &amp;lt;tr&amp;gt;&lt;br /&gt;
    local param     = Data.tree.params[ access ]&lt;br /&gt;
    local sub, sort = access:match( &amp;quot;(=+)%s*(%S.*)$&amp;quot; )&lt;br /&gt;
    local headline  = mw.html.create( string.format( &amp;quot;h%d&amp;quot;, #sub ) )&lt;br /&gt;
    local r         = mw.html.create( &amp;quot;tr&amp;quot; )&lt;br /&gt;
    local td        = mw.html.create( &amp;quot;td&amp;quot; )&lt;br /&gt;
                             :attr( &amp;quot;colspan&amp;quot;, &amp;quot;5&amp;quot; )&lt;br /&gt;
                             :attr( &amp;quot;data-sort-value&amp;quot;,  &amp;quot;!&amp;quot; .. sort )&lt;br /&gt;
    local s&lt;br /&gt;
    if param.style then&lt;br /&gt;
        s = type( param.style )&lt;br /&gt;
        if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
            td:css( param.style )&lt;br /&gt;
        elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
            td:cssText( param.style )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    s = fashioned( param, false, headline )&lt;br /&gt;
    if s then&lt;br /&gt;
        headline = s&lt;br /&gt;
    else&lt;br /&gt;
        headline:wikitext( sort )&lt;br /&gt;
    end&lt;br /&gt;
    td:node( headline )&lt;br /&gt;
    r:node( td )&lt;br /&gt;
    return r&lt;br /&gt;
end -- fatten()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fathers()&lt;br /&gt;
    -- Merge params with inherited values&lt;br /&gt;
    local n = 0&lt;br /&gt;
    local p = Data.params&lt;br /&gt;
    local t = Data.tree.params&lt;br /&gt;
    local p2, t2&lt;br /&gt;
    for k, v in pairs( Data.heirs ) do&lt;br /&gt;
        n = n + 1&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    for i = 1, n do&lt;br /&gt;
        if Data.heirs then&lt;br /&gt;
            for k, v in pairs( Data.heirs ) do&lt;br /&gt;
                if v  and  not Data.heirs[ v ] then&lt;br /&gt;
                    n               = n - 1&lt;br /&gt;
                    t[ k ].inherits = nil&lt;br /&gt;
                    Data.heirs[ k ] = nil&lt;br /&gt;
                    p2              = { }&lt;br /&gt;
                    t2              = { }&lt;br /&gt;
                    if p[ v ] then&lt;br /&gt;
                        for k2, v2 in pairs( p[ v ] ) do&lt;br /&gt;
                            p2[ k2 ] = v2&lt;br /&gt;
                        end -- for k2, v2&lt;br /&gt;
                        if p[ k ] then&lt;br /&gt;
                            for k2, v2 in pairs( p[ k ] ) do&lt;br /&gt;
                                if type( v2 ) ~= &amp;quot;nil&amp;quot; then&lt;br /&gt;
                                    p2[ k2 ] = v2&lt;br /&gt;
                                end&lt;br /&gt;
                            end -- for k2, v2&lt;br /&gt;
                        end&lt;br /&gt;
                        p[ k ] = p2&lt;br /&gt;
                        for k2, v2 in pairs( t[ v ] ) do&lt;br /&gt;
                            t2[ k2 ] = v2&lt;br /&gt;
                        end -- for k2, v2&lt;br /&gt;
                        for k2, v2 in pairs( t[ k ] ) do&lt;br /&gt;
                            if type( v2 ) ~= &amp;quot;nil&amp;quot; then&lt;br /&gt;
                                t2[ k2 ] = v2&lt;br /&gt;
                            end&lt;br /&gt;
                        end -- for k2, v2&lt;br /&gt;
                        t[ k ] = t2&lt;br /&gt;
                    else&lt;br /&gt;
                        Fault( &amp;quot;No params[] inherits &amp;quot; .. v )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        end&lt;br /&gt;
    end -- i = 1, n&lt;br /&gt;
    if n &amp;gt; 0 then&lt;br /&gt;
        local s&lt;br /&gt;
        for k, v in pairs( Data.heirs ) do&lt;br /&gt;
            if v then&lt;br /&gt;
                if s then&lt;br /&gt;
                    s = string.format( &amp;quot;%s &amp;amp;#124; %s&amp;quot;, s, k )&lt;br /&gt;
                else&lt;br /&gt;
                    s = &amp;quot;Circular inherits: &amp;quot; .. k&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        Fault( s )&lt;br /&gt;
    end&lt;br /&gt;
end -- fathers()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function favorize()&lt;br /&gt;
    -- Local customization issues&lt;br /&gt;
    local boole  = { [&amp;quot;font-size&amp;quot;] = &amp;quot;125%&amp;quot; }&lt;br /&gt;
    local l, cx = pcall( mw.loadData,&lt;br /&gt;
                         TemplateData.frame:getTitle() .. &amp;quot;/config&amp;quot; )&lt;br /&gt;
    local scripting, style&lt;br /&gt;
    TemplateData.ltr = not mw.language.getContentLanguage():isRTL()&lt;br /&gt;
    if TemplateData.ltr then&lt;br /&gt;
        scripting = &amp;quot;left&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        scripting = &amp;quot;right&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    boole[ &amp;quot;margin-&amp;quot; .. scripting ] = &amp;quot;3em&amp;quot;&lt;br /&gt;
    Permit.boole = { [false] = { css  = boole,&lt;br /&gt;
                                 lead = true,&lt;br /&gt;
                                 show = &amp;quot;&amp;amp;#x2610;&amp;quot; },&lt;br /&gt;
                     [true]  = { css  = boole,&lt;br /&gt;
                                 lead = true,&lt;br /&gt;
                                 show = &amp;quot;&amp;amp;#x2611;&amp;quot; } }&lt;br /&gt;
    Permit.css   = { }&lt;br /&gt;
    for k, v in pairs( Permit.colors ) do&lt;br /&gt;
        if k == &amp;quot;tableheadbg&amp;quot; then&lt;br /&gt;
            k = &amp;quot;tablehead&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if k == &amp;quot;fg&amp;quot; then&lt;br /&gt;
            style = &amp;quot;color&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            style = &amp;quot;background-color&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        Permit.css[ k ] = { }&lt;br /&gt;
        Permit.css[ k ][ style ] = &amp;quot;#&amp;quot; .. v&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    if type( cx ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local c, s&lt;br /&gt;
        if type( cx.permit ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            if type( cx.permit.boole ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                if type( cx.permit.boole[ true ] ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    Permit.boole[ false ]  = cx.permit.boole[ false ]&lt;br /&gt;
                end&lt;br /&gt;
                if type( cx.permit.boole[ true ] ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    Permit.boole[ true ]  = cx.permit.boole[ true ]&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if type( cx.permit.css ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                for k, v in pairs( cx.permit.css ) do&lt;br /&gt;
                    if type( v ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                        Permit.css[ k ] = v&lt;br /&gt;
                    end&lt;br /&gt;
                end -- for k, v&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        for k, v in pairs( Config.basicCnf ) do&lt;br /&gt;
            s = type( cx[ k ] )&lt;br /&gt;
            if s == &amp;quot;string&amp;quot;  or  s == &amp;quot;table&amp;quot; then&lt;br /&gt;
                Config[ v ] = cx[ k ]&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
    end&lt;br /&gt;
    if type( Config.subpage ) ~= &amp;quot;string&amp;quot;  or&lt;br /&gt;
       type( Config.suffix ) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
        local got = mw.message.new( &amp;quot;templatedata-doc-subpage&amp;quot; )&lt;br /&gt;
        local suffix&lt;br /&gt;
        if got:isDisabled() then&lt;br /&gt;
            suffix = &amp;quot;doc&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            suffix = got:plain()&lt;br /&gt;
        end&lt;br /&gt;
        if type( Config.subpage ) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
            Config.subpage = string.format( &amp;quot;/%s$&amp;quot;, suffix )&lt;br /&gt;
        end&lt;br /&gt;
        if type( Config.suffix ) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
            Config.suffix = string.format( &amp;quot;%%s/%s&amp;quot;, suffix )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end -- favorize()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function feasible( all, at, about )&lt;br /&gt;
    -- Deal with suggestedvalues within parameter&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     all    -- parameter details&lt;br /&gt;
    --               .default&lt;br /&gt;
    --               .type&lt;br /&gt;
    --     at     -- string, with parameter name&lt;br /&gt;
    --     about  -- suggestedvalues  -- table,&lt;br /&gt;
    --                                   value and possibly description&lt;br /&gt;
    --                                   table may have elements:&lt;br /&gt;
    --                                    .code    -- mandatory&lt;br /&gt;
    --                                    .label   -- table|string&lt;br /&gt;
    --                                    .support -- table|string&lt;br /&gt;
    --                                    .icon    -- string&lt;br /&gt;
    --                                    .class   -- table|string&lt;br /&gt;
    --                                    .css     -- table&lt;br /&gt;
    --                                    .style   -- string&lt;br /&gt;
    --                                    .less    -- true: suppress code&lt;br /&gt;
    -- Returns&lt;br /&gt;
    --     1: mw.html object &amp;lt;ul&amp;gt;&lt;br /&gt;
    --     2: sequence table with values, or nil&lt;br /&gt;
    local h = { }&lt;br /&gt;
    local e, r1, r2, s, v&lt;br /&gt;
    if #about &amp;gt; 0 then&lt;br /&gt;
        for i = 1, #about do&lt;br /&gt;
            e = about[ i ]&lt;br /&gt;
            s = type( e )&lt;br /&gt;
            if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
                if type( e.code ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                    s = mw.text.trim( e.code )&lt;br /&gt;
                    if s == &amp;quot;&amp;quot; then&lt;br /&gt;
                        e = nil&lt;br /&gt;
                    else&lt;br /&gt;
                        e.code = s&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    e = nil&lt;br /&gt;
                    s = string.format( &amp;quot;params.%s.%s[%d] %s&amp;quot;,&lt;br /&gt;
                                       at,&lt;br /&gt;
                                       &amp;quot;suggestedvalues&amp;quot;,&lt;br /&gt;
                                       i,&lt;br /&gt;
                                       &amp;quot;MISSING &#039;code:&#039;&amp;quot; )&lt;br /&gt;
                end&lt;br /&gt;
            elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
                s = mw.text.trim( e )&lt;br /&gt;
                if s == &amp;quot;&amp;quot; then&lt;br /&gt;
                    e = nil&lt;br /&gt;
                    s = string.format( &amp;quot;params.%s.%s[%d] EMPTY&amp;quot;,&lt;br /&gt;
                                       at, &amp;quot;suggestedvalues&amp;quot;, i )&lt;br /&gt;
                    Fault( s )&lt;br /&gt;
                else&lt;br /&gt;
                    e = { code = s }&lt;br /&gt;
                end&lt;br /&gt;
            elseif s == &amp;quot;number&amp;quot; then&lt;br /&gt;
                e = { code = tostring( e ) }&lt;br /&gt;
            else&lt;br /&gt;
                s = string.format( &amp;quot;params.%s.%s[%d] INVALID&amp;quot;,&lt;br /&gt;
                                   at, &amp;quot;suggestedvalues&amp;quot;, i )&lt;br /&gt;
                Fault( s )&lt;br /&gt;
                e = false&lt;br /&gt;
            end&lt;br /&gt;
            if e then&lt;br /&gt;
                v = v  or  { }&lt;br /&gt;
                table.insert( v, e )&lt;br /&gt;
                if h[ e.code ] then&lt;br /&gt;
                    s = string.format( &amp;quot;params.%s.%s REPEATED %s&amp;quot;,&lt;br /&gt;
                                       at,&lt;br /&gt;
                                       &amp;quot;suggestedvalues&amp;quot;,&lt;br /&gt;
                                       e.code )&lt;br /&gt;
                    Fault( s )&lt;br /&gt;
                else&lt;br /&gt;
                    h[ e.code ] = true&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end -- for i&lt;br /&gt;
    else&lt;br /&gt;
        Fault( string.format( &amp;quot;params.%s.suggestedvalues %s&amp;quot;,&lt;br /&gt;
                              at, &amp;quot;NOT AN ARRAY&amp;quot; ) )&lt;br /&gt;
    end&lt;br /&gt;
    if v then&lt;br /&gt;
        local code, d, k, less, story, swift, t, u&lt;br /&gt;
        r1 = mw.html.create( &amp;quot;ul&amp;quot; )&lt;br /&gt;
        r2 = { }&lt;br /&gt;
        for i = 1, #v do&lt;br /&gt;
            u = mw.html.create( &amp;quot;li&amp;quot; )&lt;br /&gt;
            e = v[ i ]&lt;br /&gt;
            table.insert( r2, e.code )&lt;br /&gt;
            story = false&lt;br /&gt;
            less  = ( e.less == true )&lt;br /&gt;
            if not less then&lt;br /&gt;
                swift = e.code&lt;br /&gt;
                if e.support then&lt;br /&gt;
                    local scream, support&lt;br /&gt;
                    s = type( e.support )&lt;br /&gt;
                    if s == &amp;quot;string&amp;quot; then&lt;br /&gt;
                        support = e.support&lt;br /&gt;
                    elseif s == &amp;quot;table&amp;quot; then&lt;br /&gt;
                        support = faraway( e.support )&lt;br /&gt;
                    else&lt;br /&gt;
                        scream = &amp;quot;INVALID&amp;quot;&lt;br /&gt;
                    end&lt;br /&gt;
                    if support then&lt;br /&gt;
                        s = mw.text.trim( support )&lt;br /&gt;
                        if s == &amp;quot;&amp;quot; then&lt;br /&gt;
                            scream = &amp;quot;EMPTY&amp;quot;&lt;br /&gt;
                        elseif s:find( &amp;quot;[%[%]|%&amp;lt;%&amp;gt;]&amp;quot; ) then&lt;br /&gt;
                            scream = &amp;quot;BAD PAGE&amp;quot;&lt;br /&gt;
                        else&lt;br /&gt;
                            support = s&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                    if scream then&lt;br /&gt;
                        s = string.format( &amp;quot;params.%s.%s[%d].support %s&amp;quot;,&lt;br /&gt;
                                           at,&lt;br /&gt;
                                           &amp;quot;suggestedvalues&amp;quot;,&lt;br /&gt;
                                           i,&lt;br /&gt;
                                           scream )&lt;br /&gt;
                        Fault( s )&lt;br /&gt;
                    else&lt;br /&gt;
                        swift = string.format( &amp;quot;[[:%s|%s]]&amp;quot;,&lt;br /&gt;
                                               support, swift )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                if all.type:sub( 1, 5 ) == &amp;quot;wiki-&amp;quot;  and&lt;br /&gt;
                   swift == e.code then&lt;br /&gt;
                    local rooms = { file = 6,&lt;br /&gt;
                                    temp = 10,&lt;br /&gt;
                                    user = 2 }&lt;br /&gt;
                    local ns = rooms[ all.type:sub( 6, 9 ) ]  or  0&lt;br /&gt;
                    t = mw.title.makeTitle( ns, swift )&lt;br /&gt;
                    if t and t.exists then&lt;br /&gt;
                        swift = string.format( &amp;quot;[[:%s|%s]]&amp;quot;,&lt;br /&gt;
                                               t.prefixedText, swift )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                if e.code == all.default then&lt;br /&gt;
                    k = 800&lt;br /&gt;
                else&lt;br /&gt;
                    k = 300&lt;br /&gt;
                end&lt;br /&gt;
                code = mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
                              :css( &amp;quot;font-weight&amp;quot;, tostring( k ) )&lt;br /&gt;
                              :css( &amp;quot;white-space&amp;quot;, &amp;quot;nowrap&amp;quot; )&lt;br /&gt;
                              :wikitext( swift )&lt;br /&gt;
                u:node( code )&lt;br /&gt;
            end&lt;br /&gt;
            if e.class then&lt;br /&gt;
                s = type( e.class )&lt;br /&gt;
                if s == &amp;quot;string&amp;quot; then&lt;br /&gt;
                    u:addClass( e.class )&lt;br /&gt;
                elseif s == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    for k, s in pairs( e.class ) do&lt;br /&gt;
                        u:addClass( s )&lt;br /&gt;
                    end -- for k, s&lt;br /&gt;
                else&lt;br /&gt;
                    s = string.format( &amp;quot;params.%s.%s[%d].class INVALID&amp;quot;,&lt;br /&gt;
                                       at, &amp;quot;suggestedvalues&amp;quot;, i )&lt;br /&gt;
                    Fault( s )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if e.css then&lt;br /&gt;
                if type( e.css ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    u:css( e.css )&lt;br /&gt;
                else&lt;br /&gt;
                    s = string.format( &amp;quot;params.%s.%s[%d].css INVALID&amp;quot;,&lt;br /&gt;
                                       at, &amp;quot;suggestedvalues&amp;quot;, i )&lt;br /&gt;
                    Fault( s )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if e.style then&lt;br /&gt;
                if type( e.style ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                    u:cssText( e.style )&lt;br /&gt;
                else&lt;br /&gt;
                    s = string.format( &amp;quot;params.%s.%s[%d].style INVALID&amp;quot;,&lt;br /&gt;
                                       at, &amp;quot;suggestedvalues&amp;quot;, i )&lt;br /&gt;
                    Fault( s )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if all.type == &amp;quot;wiki-file-name&amp;quot;  and  not e.icon then&lt;br /&gt;
                e.icon = e.code&lt;br /&gt;
            end&lt;br /&gt;
            if e.label then&lt;br /&gt;
                s = type( e.label )&lt;br /&gt;
                if s == &amp;quot;string&amp;quot; then&lt;br /&gt;
                    s = mw.text.trim( e.label )&lt;br /&gt;
                    if s == &amp;quot;&amp;quot; then&lt;br /&gt;
                        s = string.format( &amp;quot;params.%s.%s[%d].label %s&amp;quot;,&lt;br /&gt;
                                           at,&lt;br /&gt;
                                           &amp;quot;suggestedvalues&amp;quot;,&lt;br /&gt;
                                           i,&lt;br /&gt;
                                           &amp;quot;EMPTY&amp;quot; )&lt;br /&gt;
                        Fault( s )&lt;br /&gt;
                    else&lt;br /&gt;
                        story = s&lt;br /&gt;
                    end&lt;br /&gt;
                elseif s == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    story = faraway( e.label )&lt;br /&gt;
                else&lt;br /&gt;
                    s = string.format( &amp;quot;params.%s.%s[%d].label INVALID&amp;quot;,&lt;br /&gt;
                                       at, &amp;quot;suggestedvalues&amp;quot;, i )&lt;br /&gt;
                    Fault( s )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            s = false&lt;br /&gt;
            if type( e.icon ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                t = mw.title.makeTitle( 6, e.icon )&lt;br /&gt;
                if t and t.file.exists then&lt;br /&gt;
                    local g = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                    s = string.format( &amp;quot;[[%s|16px]]&amp;quot;, t.prefixedText )&lt;br /&gt;
                    g:attr( &amp;quot;role&amp;quot;, &amp;quot;presentation&amp;quot; )&lt;br /&gt;
                     :wikitext( s )&lt;br /&gt;
                    s = tostring( g )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if not s  and  not less  and  e.label then&lt;br /&gt;
                s = mw.ustring.char( 0x2013 )&lt;br /&gt;
            end&lt;br /&gt;
            if s then&lt;br /&gt;
                d = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                           :wikitext( s )&lt;br /&gt;
                if TemplateData.ltr then&lt;br /&gt;
                    if not less then&lt;br /&gt;
                        d:css( &amp;quot;margin-left&amp;quot;, &amp;quot;0.5em&amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
                    if story then&lt;br /&gt;
                        d:css( &amp;quot;margin-right&amp;quot;, &amp;quot;0.5em&amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    if not less then&lt;br /&gt;
                        d:css( &amp;quot;margin-right&amp;quot;, &amp;quot;0.5em&amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
                    if story then&lt;br /&gt;
                        d:css( &amp;quot;margin-left&amp;quot;, &amp;quot;0.5em&amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                u:node( d )&lt;br /&gt;
            end&lt;br /&gt;
            if story then&lt;br /&gt;
                u:wikitext( story )&lt;br /&gt;
            end&lt;br /&gt;
            r1:newline()&lt;br /&gt;
              :node( u )&lt;br /&gt;
        end -- for i&lt;br /&gt;
    end&lt;br /&gt;
    if not r1  and  v ~= false then&lt;br /&gt;
        Fault( string.format( &amp;quot;params.%s.suggestedvalues INVALID&amp;quot;, at ) )&lt;br /&gt;
        r1 = mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
                    :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                    :wikitext( &amp;quot;INVALID&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r1, r2&lt;br /&gt;
end -- feasible()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function feat()&lt;br /&gt;
    -- Check and store parameter sequence&lt;br /&gt;
    if Data.source then&lt;br /&gt;
        local i = 0&lt;br /&gt;
        local s&lt;br /&gt;
        for k, v in pairs( Data.tree.params ) do&lt;br /&gt;
            if i == 0 then&lt;br /&gt;
                Data.order = { }&lt;br /&gt;
                i = 1&lt;br /&gt;
                s = k&lt;br /&gt;
            else&lt;br /&gt;
                i = 2&lt;br /&gt;
                break -- for k, v&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        if i &amp;gt; 1 then&lt;br /&gt;
            local pointers = { }&lt;br /&gt;
            local points   = { }&lt;br /&gt;
            local given    = { }&lt;br /&gt;
            for k, v in pairs( Data.tree.params ) do&lt;br /&gt;
                i = facet( k, 1 )&lt;br /&gt;
                if type( v ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    if type( v.label ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                        s = mw.text.trim( v.label )&lt;br /&gt;
                        if s == &amp;quot;&amp;quot; then&lt;br /&gt;
                            s = k&lt;br /&gt;
                        end&lt;br /&gt;
                    else&lt;br /&gt;
                        s = k&lt;br /&gt;
                    end&lt;br /&gt;
                    if given[ s ] then&lt;br /&gt;
                        if given[ s ] == 1 then&lt;br /&gt;
                            local scream = &amp;quot;Parameter label &#039;%s&#039; detected multiple times&amp;quot;&lt;br /&gt;
                            Fault( string.format( scream, s ) )&lt;br /&gt;
                            given[ s ] = 2&lt;br /&gt;
                        end&lt;br /&gt;
                    else&lt;br /&gt;
                        given[ s ] = 1&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                if i then&lt;br /&gt;
                    table.insert( points, i )&lt;br /&gt;
                    pointers[ i ] = k&lt;br /&gt;
                    i = facet( k, i )&lt;br /&gt;
                    if i then&lt;br /&gt;
                        s = &amp;quot;Parameter &#039;%s&#039; detected twice&amp;quot;&lt;br /&gt;
                        Fault( string.format( s, k ) )&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    s = &amp;quot;Parameter &#039;%s&#039; not detected&amp;quot;&lt;br /&gt;
                    Fault( string.format( s, k ) )&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
            table.sort( points )&lt;br /&gt;
            for i = 1, #points do&lt;br /&gt;
                table.insert( Data.order,  pointers[ points[ i ] ] )&lt;br /&gt;
            end -- i = 1, #points&lt;br /&gt;
        elseif s then&lt;br /&gt;
            table.insert( Data.order, s )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end -- feat()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function feature( access )&lt;br /&gt;
    -- Create table row for parameter, check and display violations&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     access  -- string, with name&lt;br /&gt;
    -- Returns &amp;lt;tr&amp;gt;&lt;br /&gt;
    local mode, s, status&lt;br /&gt;
    local fine    = function ( a )&lt;br /&gt;
                        s = mw.text.trim( a )&lt;br /&gt;
                        return a == s  and&lt;br /&gt;
                               a ~= &amp;quot;&amp;quot;  and&lt;br /&gt;
                               not a:find( &amp;quot;%|=\n&amp;quot; )  and&lt;br /&gt;
                               not a:find( &amp;quot;%s%s&amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
    local begin   = mw.html.create( &amp;quot;td&amp;quot; )&lt;br /&gt;
    local code    = mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
    local desc    = mw.html.create( &amp;quot;td&amp;quot; )&lt;br /&gt;
    local eager   = mw.html.create( &amp;quot;td&amp;quot; )&lt;br /&gt;
    local legal   = true&lt;br /&gt;
    local param   = Data.tree.params[ access ]&lt;br /&gt;
    local ranking = { &amp;quot;required&amp;quot;, &amp;quot;suggested&amp;quot;, &amp;quot;optional&amp;quot;, &amp;quot;deprecated&amp;quot; }&lt;br /&gt;
    local r       = mw.html.create( &amp;quot;tr&amp;quot; )&lt;br /&gt;
    local styles  = &amp;quot;mw-templatedata-doc-param-&amp;quot;&lt;br /&gt;
    local sort, typed&lt;br /&gt;
&lt;br /&gt;
    for k, v in pairs( param ) do&lt;br /&gt;
        if v == &amp;quot;&amp;quot; then&lt;br /&gt;
            param[ k ] = false&lt;br /&gt;
        end&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
&lt;br /&gt;
    -- label&lt;br /&gt;
    sort = param.label or access&lt;br /&gt;
    if sort:match( &amp;quot;^%d+$&amp;quot; ) then&lt;br /&gt;
        begin:attr( &amp;quot;data-sort-value&amp;quot;,&lt;br /&gt;
                    string.format( &amp;quot;%05d&amp;quot;, tonumber( sort ) ) )&lt;br /&gt;
    end&lt;br /&gt;
    begin:css( &amp;quot;font-weight&amp;quot;, &amp;quot;bold&amp;quot; )&lt;br /&gt;
         :wikitext( sort )&lt;br /&gt;
&lt;br /&gt;
    -- name and aliases&lt;br /&gt;
    code:css( &amp;quot;font-size&amp;quot;, &amp;quot;92%&amp;quot; )&lt;br /&gt;
        :css( &amp;quot;white-space&amp;quot;, &amp;quot;nowrap&amp;quot; )&lt;br /&gt;
        :wikitext( access )&lt;br /&gt;
    if not fine( access ) then&lt;br /&gt;
        code:addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
        Fault( string.format( &amp;quot;Bad ID params.&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;quot;, access ) )&lt;br /&gt;
        legal = false&lt;br /&gt;
        begin:attr( &amp;quot;data-sort-value&amp;quot;,  &amp;quot; &amp;quot; .. sort )&lt;br /&gt;
    end&lt;br /&gt;
    code = mw.html.create( &amp;quot;td&amp;quot; )&lt;br /&gt;
                  :addClass( styles .. &amp;quot;name&amp;quot; )&lt;br /&gt;
                  :node( code )&lt;br /&gt;
    if access:match( &amp;quot;^%d+$&amp;quot; ) then&lt;br /&gt;
        code:attr( &amp;quot;data-sort-value&amp;quot;,&lt;br /&gt;
                   string.format( &amp;quot;%05d&amp;quot;, tonumber( access ) ) )&lt;br /&gt;
    end&lt;br /&gt;
    if type( param.aliases ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local lapsus, syn&lt;br /&gt;
        for k, v in pairs( param.aliases ) do&lt;br /&gt;
            code:tag( &amp;quot;br&amp;quot; )&lt;br /&gt;
            if type( v ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                if not fine( v ) then&lt;br /&gt;
                    lapsus = true&lt;br /&gt;
                    code:node( mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                                      :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                                      :css( &amp;quot;font-style&amp;quot;, &amp;quot;italic&amp;quot; )&lt;br /&gt;
                                      :wikitext( &amp;quot;string&amp;quot; ) )&lt;br /&gt;
                        :wikitext( s )&lt;br /&gt;
                else&lt;br /&gt;
                    syn = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                                 :addClass( styles .. &amp;quot;alias&amp;quot; )&lt;br /&gt;
                                 :css( &amp;quot;white-space&amp;quot;, &amp;quot;nowrap&amp;quot; )&lt;br /&gt;
                                 :wikitext( s )&lt;br /&gt;
                    code:node( syn )&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                lapsus = true&lt;br /&gt;
                code:node( mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
                                  :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                                  :wikitext( type( v ) ) )&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        if lapsus then&lt;br /&gt;
            s = string.format( &amp;quot;params.&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;.aliases&amp;quot;, access )&lt;br /&gt;
            Fault(  factory( &amp;quot;invalid-value&amp;quot; ):gsub( &amp;quot;$1&amp;quot;, s )  )&lt;br /&gt;
            legal = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- description etc.&lt;br /&gt;
    s = fashioned( param )&lt;br /&gt;
    if s then&lt;br /&gt;
        desc:node( s )&lt;br /&gt;
    end&lt;br /&gt;
    if param.style then&lt;br /&gt;
        s = type( param.style )&lt;br /&gt;
        if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
            desc:css( param.style )&lt;br /&gt;
        elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
            desc:cssText( param.style )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if param.suggestedvalues or&lt;br /&gt;
       param.default or&lt;br /&gt;
       param.example or&lt;br /&gt;
       param.autovalue then&lt;br /&gt;
        local details = { &amp;quot;suggestedvalues&amp;quot;,&lt;br /&gt;
                          &amp;quot;default&amp;quot;,&lt;br /&gt;
                          &amp;quot;example&amp;quot;,&lt;br /&gt;
                          &amp;quot;autovalue&amp;quot; }&lt;br /&gt;
        local dl      = mw.html.create( &amp;quot;dl&amp;quot; )&lt;br /&gt;
        local dd, section, show&lt;br /&gt;
        for i = 1, #details do&lt;br /&gt;
            s    = details[ i ]&lt;br /&gt;
            show = param[ s ]&lt;br /&gt;
            if show then&lt;br /&gt;
                dd      = mw.html.create( &amp;quot;dd&amp;quot; )&lt;br /&gt;
                section = factory( &amp;quot;doc-param-&amp;quot; .. s )&lt;br /&gt;
                if param.type == &amp;quot;boolean&amp;quot;   and&lt;br /&gt;
                   ( show == &amp;quot;0&amp;quot; or show == &amp;quot;1&amp;quot; ) then&lt;br /&gt;
                    local boole = Permit.boole[ ( show == &amp;quot;1&amp;quot; ) ]&lt;br /&gt;
                    if boole.lead == true then&lt;br /&gt;
                        dd:node( mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
                                        :wikitext( show ) )&lt;br /&gt;
                          :wikitext( &amp;quot; &amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
                    if type( boole.show ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                        local v = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                                         :attr( &amp;quot;aria-hidden&amp;quot;, &amp;quot;true&amp;quot; )&lt;br /&gt;
                                         :wikitext( boole.show )&lt;br /&gt;
                        if boole.css then&lt;br /&gt;
                            v:css( boole.css )&lt;br /&gt;
                        end&lt;br /&gt;
                        dd:node( v )&lt;br /&gt;
                    end&lt;br /&gt;
                    if type( boole.suffix ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                        dd:wikitext( boole.suffix )&lt;br /&gt;
                    end&lt;br /&gt;
                    if boole.lead == false then&lt;br /&gt;
                        dd:wikitext( &amp;quot; &amp;quot; )&lt;br /&gt;
                          :node( mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
                                        :wikitext( show ) )&lt;br /&gt;
                    end&lt;br /&gt;
                elseif s == &amp;quot;suggestedvalues&amp;quot; then&lt;br /&gt;
                    local v, css, class, ts = facilities( param )&lt;br /&gt;
                    if v then&lt;br /&gt;
                        local ul&lt;br /&gt;
                        ul, v = feasible( param, access, v )&lt;br /&gt;
                        if v then&lt;br /&gt;
                            dd:newline()&lt;br /&gt;
                              :node( ul )&lt;br /&gt;
                            if css then&lt;br /&gt;
                                dd:css( css )&lt;br /&gt;
                                if class then&lt;br /&gt;
                                    dd:addClass( class )&lt;br /&gt;
                                end&lt;br /&gt;
                                if ts then&lt;br /&gt;
                                    dd:newline()&lt;br /&gt;
                                    dd:node( ts )&lt;br /&gt;
                                end&lt;br /&gt;
                            end&lt;br /&gt;
                            Data.params[ access ].suggestedvalues = v&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    dd:wikitext( show )&lt;br /&gt;
                end&lt;br /&gt;
                dl:node( mw.html.create( &amp;quot;dt&amp;quot; )&lt;br /&gt;
                                :wikitext( section ) )&lt;br /&gt;
                  :node( dd )&lt;br /&gt;
            end&lt;br /&gt;
        end -- i = 1, #details&lt;br /&gt;
        desc:node( dl )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- type&lt;br /&gt;
    if type( param.type ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        param.type = mw.text.trim( param.type )&lt;br /&gt;
        if param.type == &amp;quot;&amp;quot; then&lt;br /&gt;
            param.type = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if param.type then&lt;br /&gt;
        s     = Permit.types[ param.type ]&lt;br /&gt;
        typed = mw.html.create( &amp;quot;td&amp;quot; )&lt;br /&gt;
                  :addClass( styles .. &amp;quot;type&amp;quot; )&lt;br /&gt;
        if s then&lt;br /&gt;
            if s == &amp;quot;string&amp;quot; then&lt;br /&gt;
                Data.params[ access ].type = s&lt;br /&gt;
                typed:wikitext( factory( &amp;quot;doc-param-type-&amp;quot; .. s ) )&lt;br /&gt;
                     :tag( &amp;quot;br&amp;quot; )&lt;br /&gt;
                typed:node( mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                                   :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                                   :wikitext( param.type ) )&lt;br /&gt;
                Data.lasting = true&lt;br /&gt;
            else&lt;br /&gt;
                local support = Config[ &amp;quot;support4&amp;quot; .. param.type ]&lt;br /&gt;
                s = factory( &amp;quot;doc-param-type-&amp;quot; .. param.type )&lt;br /&gt;
                if support then&lt;br /&gt;
                    s = string.format( &amp;quot;[[%s|%s]]&amp;quot;, support, s )&lt;br /&gt;
                end&lt;br /&gt;
                typed:wikitext( s )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            Data.params[ access ].type = &amp;quot;unknown&amp;quot;&lt;br /&gt;
            typed:addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                 :wikitext( &amp;quot;INVALID&amp;quot; )&lt;br /&gt;
            s = string.format( &amp;quot;params.&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;.type&amp;quot;, access )&lt;br /&gt;
            Fault(  factory( &amp;quot;invalid-value&amp;quot; ):gsub( &amp;quot;$1&amp;quot;, s )  )&lt;br /&gt;
            legal = false&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        typed = mw.html.create( &amp;quot;td&amp;quot; )&lt;br /&gt;
                   :wikitext( factory( &amp;quot;doc-param-type-unknown&amp;quot; ) )&lt;br /&gt;
        Data.params[ access ].type = &amp;quot;unknown&amp;quot;&lt;br /&gt;
        if param.default then&lt;br /&gt;
            Data.params[ access ].default = nil&lt;br /&gt;
            Fault( &amp;quot;Default value requires &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&amp;quot; )&lt;br /&gt;
            legal = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    typed:addClass( &amp;quot;navigation-not-searchable&amp;quot; )&lt;br /&gt;
    -- status&lt;br /&gt;
    if param.required then&lt;br /&gt;
        mode = 1&lt;br /&gt;
        if param.autovalue then&lt;br /&gt;
            Fault( string.format( &amp;quot;autovalued &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt; required&amp;quot;,&lt;br /&gt;
                                  access ) )&lt;br /&gt;
            legal = false&lt;br /&gt;
        end&lt;br /&gt;
        if param.default then&lt;br /&gt;
            Fault( string.format( &amp;quot;Defaulted &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt; required&amp;quot;,&lt;br /&gt;
                                  access ) )&lt;br /&gt;
            legal = false&lt;br /&gt;
        end&lt;br /&gt;
        if param.deprecated then&lt;br /&gt;
            Fault( string.format( &amp;quot;Required deprecated &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
                                  access ) )&lt;br /&gt;
            legal = false&lt;br /&gt;
        end&lt;br /&gt;
    elseif param.deprecated then&lt;br /&gt;
        mode = 4&lt;br /&gt;
    elseif param.suggested then&lt;br /&gt;
        mode = 2&lt;br /&gt;
    else&lt;br /&gt;
        mode = 3&lt;br /&gt;
    end&lt;br /&gt;
    status = ranking[ mode ]&lt;br /&gt;
    ranking = factory( &amp;quot;doc-param-status-&amp;quot; .. status )&lt;br /&gt;
    if mode == 1  or  mode == 4 then&lt;br /&gt;
        ranking = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                         :css( &amp;quot;font-weight&amp;quot;, &amp;quot;bold&amp;quot; )&lt;br /&gt;
                         :wikitext( ranking )&lt;br /&gt;
        if type( param.deprecated ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            ranking:tag( &amp;quot;br&amp;quot; )&lt;br /&gt;
            ranking:wikitext( param.deprecated )&lt;br /&gt;
        end&lt;br /&gt;
        if param.suggested  and  mode == 4 then&lt;br /&gt;
            s = string.format( &amp;quot;Suggesting deprecated &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
                               access )&lt;br /&gt;
            Fault( s )&lt;br /&gt;
            legal = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    eager:attr( &amp;quot;data-sort-value&amp;quot;, tostring( mode ) )&lt;br /&gt;
                :node( ranking )&lt;br /&gt;
                :addClass( string.format( &amp;quot;%sstatus-%s %s&amp;quot;,&lt;br /&gt;
                                          styles, status,&lt;br /&gt;
                                          &amp;quot;navigation-not-searchable&amp;quot; ) )&lt;br /&gt;
&lt;br /&gt;
    -- &amp;lt;tr&amp;gt;&lt;br /&gt;
    r:attr( &amp;quot;id&amp;quot;,  &amp;quot;templatedata:&amp;quot; .. mw.uri.anchorEncode( access ) )&lt;br /&gt;
     :css( Permit.css[ status ] )&lt;br /&gt;
     :addClass( styles .. status )&lt;br /&gt;
     :node( begin )&lt;br /&gt;
     :node( code )&lt;br /&gt;
     :node( desc )&lt;br /&gt;
     :node( typed )&lt;br /&gt;
     :node( eager )&lt;br /&gt;
     :newline()&lt;br /&gt;
    if not legal then&lt;br /&gt;
        r:css( &amp;quot;border&amp;quot;, &amp;quot;#FF0000 3px solid&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- feature()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function features()&lt;br /&gt;
    -- Create &amp;lt;table&amp;gt; for parameters&lt;br /&gt;
    -- Returns &amp;lt;table&amp;gt;, or nil&lt;br /&gt;
    local r&lt;br /&gt;
    if Data.tree and Data.tree.params then&lt;br /&gt;
        local tbl = mw.html.create( &amp;quot;table&amp;quot; )&lt;br /&gt;
        local tr  = mw.html.create( &amp;quot;tr&amp;quot; )&lt;br /&gt;
        feat()&lt;br /&gt;
        if Data.order  and  #Data.order &amp;gt; 1 then&lt;br /&gt;
            tbl:addClass( &amp;quot;sortable&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
        if type( Config.classTable ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for k, v in pairs( Config.classTable ) do&lt;br /&gt;
                tbl:addClass( v )&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        end&lt;br /&gt;
        if type( Config.cssTable ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            tbl:css( Config.cssTable )&lt;br /&gt;
        end&lt;br /&gt;
        tr:addClass( &amp;quot;navigation-not-searchable&amp;quot; )&lt;br /&gt;
          :node( mw.html.create( &amp;quot;th&amp;quot; )&lt;br /&gt;
                        :attr( &amp;quot;colspan&amp;quot;, &amp;quot;2&amp;quot; )&lt;br /&gt;
                        :css( Permit.css.tablehead )&lt;br /&gt;
                        :wikitext( factory( &amp;quot;doc-param-name&amp;quot; ) ) )&lt;br /&gt;
          :node( mw.html.create( &amp;quot;th&amp;quot; )&lt;br /&gt;
                        :css( Permit.css.tablehead )&lt;br /&gt;
                        :wikitext( factory( &amp;quot;doc-param-desc&amp;quot; ) ) )&lt;br /&gt;
          :node( mw.html.create( &amp;quot;th&amp;quot; )&lt;br /&gt;
                        :css( Permit.css.tablehead )&lt;br /&gt;
                        :wikitext( factory( &amp;quot;doc-param-type&amp;quot; ) ) )&lt;br /&gt;
          :node( mw.html.create( &amp;quot;th&amp;quot; )&lt;br /&gt;
                        :css( Permit.css.tablehead )&lt;br /&gt;
                        :wikitext( factory( &amp;quot;doc-param-status&amp;quot; ) ) )&lt;br /&gt;
        tbl:newline()&lt;br /&gt;
--         :node( mw.html.create( &amp;quot;thead&amp;quot; )&lt;br /&gt;
                         :node( tr )&lt;br /&gt;
--              )&lt;br /&gt;
           :newline()&lt;br /&gt;
        if Data.order then&lt;br /&gt;
            local leave, s&lt;br /&gt;
            for i = 1, #Data.order do&lt;br /&gt;
                s = Data.order[ i ]&lt;br /&gt;
                if s:sub( 1, 1 ) == &amp;quot;=&amp;quot; then&lt;br /&gt;
                    leave = true&lt;br /&gt;
                    tbl:node( fatten( s ) )&lt;br /&gt;
                    Data.order[ i ] = false&lt;br /&gt;
                elseif s:match( &amp;quot;[=|]&amp;quot; ) then&lt;br /&gt;
                    Fault( string.format( &amp;quot;Bad param &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
                                          s ) )&lt;br /&gt;
                else&lt;br /&gt;
                    tbl:node( feature( s ) )&lt;br /&gt;
                end&lt;br /&gt;
            end -- for i = 1, #Data.order&lt;br /&gt;
            if leave then&lt;br /&gt;
                for i = #Data.order, 1, -1 do&lt;br /&gt;
                    if not Data.order[ i ] then&lt;br /&gt;
                        table.remove( Data.order, i )&lt;br /&gt;
                    end&lt;br /&gt;
                end -- for i = #Data.order, 1, -1&lt;br /&gt;
            end&lt;br /&gt;
            Data.tag.paramOrder = Data.order&lt;br /&gt;
        end&lt;br /&gt;
        if Config.cssTabWrap or Data.scroll then&lt;br /&gt;
            r = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
            if type( Config.cssTabWrap ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                r:css( Config.cssTabWrap )&lt;br /&gt;
            elseif type( Config.cssTabWrap ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                -- deprecated&lt;br /&gt;
                r:cssText( Config.cssTabWrap )&lt;br /&gt;
            end&lt;br /&gt;
            if Data.scroll then&lt;br /&gt;
                r:css( &amp;quot;height&amp;quot;,   Data.scroll )&lt;br /&gt;
                 :css( &amp;quot;overflow&amp;quot;, &amp;quot;auto&amp;quot; )&lt;br /&gt;
            end&lt;br /&gt;
            r:node( tbl )&lt;br /&gt;
        else&lt;br /&gt;
            r = tbl&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- features()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fellow( any, assigned, at )&lt;br /&gt;
    -- Check sets[] parameter and issue error message, if necessary&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     any       -- should be number&lt;br /&gt;
    --     assigned  -- parameter name&lt;br /&gt;
    --     at        -- number, of set&lt;br /&gt;
    local s&lt;br /&gt;
    if type( any ) ~= &amp;quot;number&amp;quot; then&lt;br /&gt;
        s = &amp;quot;&amp;lt;code&amp;gt;sets[%d].params[%s]&amp;lt;/code&amp;gt;??&amp;quot;&lt;br /&gt;
        Fault( string.format( s,&lt;br /&gt;
                              at,&lt;br /&gt;
                              mw.text.nowiki( tostring( any ) ) ) )&lt;br /&gt;
    elseif type( assigned ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        if not Data.got.params[ assigned ] then&lt;br /&gt;
            s = &amp;quot;&amp;lt;code&amp;gt;sets[%d].params %s&amp;lt;/code&amp;gt; is undefined&amp;quot;&lt;br /&gt;
            Fault( string.format( s, at, assigned ) )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        s = &amp;quot;&amp;lt;code&amp;gt;sets[%d].params[%d] = %s&amp;lt;/code&amp;gt;??&amp;quot;&lt;br /&gt;
        Fault( string.format( s,  k,  type( assigned ) ) )&lt;br /&gt;
    end&lt;br /&gt;
end -- fellow()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fellows()&lt;br /&gt;
    -- Check sets[] and issue error message, if necessary&lt;br /&gt;
    local s&lt;br /&gt;
    if type( Data.got.sets ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        if type( Data.got.params ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for k, v in pairs( Data.got.sets ) do&lt;br /&gt;
                if type( k ) == &amp;quot;number&amp;quot; then&lt;br /&gt;
                    if type( v ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                        for ek, ev in pairs( v ) do&lt;br /&gt;
                            if ek == &amp;quot;label&amp;quot; then&lt;br /&gt;
                                s = type( ev )&lt;br /&gt;
                                if s ~= &amp;quot;string&amp;quot;  and&lt;br /&gt;
                                   s ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
                                    s = &amp;quot;&amp;lt;code&amp;gt;sets[%d].label&amp;lt;/code&amp;gt;??&amp;quot;&lt;br /&gt;
                                    Fault( string.format( s, k ) )&lt;br /&gt;
                                end&lt;br /&gt;
                            elseif ek == &amp;quot;params&amp;quot;  and&lt;br /&gt;
                                type( ev ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                                for pk, pv in pairs( ev ) do&lt;br /&gt;
                                    fellow( pk, pv, k )&lt;br /&gt;
                                end -- for pk, pv&lt;br /&gt;
                            else&lt;br /&gt;
                                ek = mw.text.nowiki( tostring( ek ) )&lt;br /&gt;
                                s  = &amp;quot;&amp;lt;code&amp;gt;sets[%d][%s]&amp;lt;/code&amp;gt;??&amp;quot;&lt;br /&gt;
                                Fault( string.format( s, k, ek ) )&lt;br /&gt;
                            end&lt;br /&gt;
                        end -- for ek, ev&lt;br /&gt;
                    else&lt;br /&gt;
                        k = mw.text.nowiki( tostring( k ) )&lt;br /&gt;
                        v = mw.text.nowiki( tostring( v ) )&lt;br /&gt;
                        s = string.format( &amp;quot;&amp;lt;code&amp;gt;sets[%s][%s]&amp;lt;/code&amp;gt;??&amp;quot;,&lt;br /&gt;
                                           k, v )&lt;br /&gt;
                        Fault( s )&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    k = mw.text.nowiki( tostring( k ) )&lt;br /&gt;
                    s = string.format( &amp;quot;&amp;lt;code&amp;gt;sets[%s]&amp;lt;/code&amp;gt; ?????&amp;quot;, k )&lt;br /&gt;
                    Fault( s )&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        else&lt;br /&gt;
            s = &amp;quot;&amp;lt;code&amp;gt;params&amp;lt;/code&amp;gt; required for &amp;lt;code&amp;gt;sets&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
            Fault( s )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        s = &amp;quot;&amp;lt;code&amp;gt;sets&amp;lt;/code&amp;gt; needs to be of &amp;lt;code&amp;gt;object&amp;lt;/code&amp;gt; type&amp;quot;&lt;br /&gt;
        Fault( s )&lt;br /&gt;
    end&lt;br /&gt;
end -- fellows()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function finalize( advance )&lt;br /&gt;
    -- Wrap presentation into frame&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     advance  -- true, for nice&lt;br /&gt;
    -- Returns string&lt;br /&gt;
    local r, lapsus&lt;br /&gt;
    if Data.div then&lt;br /&gt;
        r = tostring( Data.div )&lt;br /&gt;
    elseif Data.strip then&lt;br /&gt;
        r = Data.strip&lt;br /&gt;
    else&lt;br /&gt;
        lapsus = true&lt;br /&gt;
        r      = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    r = r .. failures()&lt;br /&gt;
    if Data.source then&lt;br /&gt;
        local live = ( advance or lapsus )&lt;br /&gt;
        if not live then&lt;br /&gt;
            live = TemplateData.frame:preprocess( &amp;quot;{{REVISIONID}}&amp;quot; )&lt;br /&gt;
            live = ( live == &amp;quot;&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
        if live then&lt;br /&gt;
            r = r .. fancy( advance, lapsus )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- finalize()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function find()&lt;br /&gt;
    -- Find JSON data within page source (title)&lt;br /&gt;
    -- Returns string, or nil&lt;br /&gt;
    local s = Data.title:getContent()&lt;br /&gt;
    local i, j = s:find( &amp;quot;&amp;lt;templatedata&amp;gt;&amp;quot;, 1, true )&lt;br /&gt;
    local r&lt;br /&gt;
    if i then&lt;br /&gt;
        local k = s:find( &amp;quot;&amp;lt;/templatedata&amp;gt;&amp;quot;, j, true )&lt;br /&gt;
        if k then&lt;br /&gt;
           r = mw.text.trim( s:sub( j + 1,  k - 1 ) )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- find()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function flat( adjust )&lt;br /&gt;
    -- Remove formatting from text string for VE&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     arglist  -- string, to be stripped, or nil&lt;br /&gt;
    -- Returns string, or nil&lt;br /&gt;
    local r&lt;br /&gt;
    if adjust then&lt;br /&gt;
        r = adjust:gsub( &amp;quot;\n&amp;quot;, &amp;quot; &amp;quot; )&lt;br /&gt;
        if r:find( &amp;quot;&amp;lt;noexport&amp;gt;&amp;quot;, 1, true ) then&lt;br /&gt;
            r = r:gsub( &amp;quot;&amp;lt;noexport&amp;gt;.*&amp;lt;/noexport&amp;gt;&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
        if r:find( &amp;quot;&amp;lt;exportonly&amp;gt;&amp;quot;, 1, true ) then&lt;br /&gt;
            r = r:gsub( &amp;quot;&amp;lt;/?exportonly&amp;gt;&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
        if r:find( &amp;quot;&#039;&#039;&amp;quot;, 1, true ) then&lt;br /&gt;
            r = r:gsub( &amp;quot;&#039;&#039;&#039;&amp;quot;, &amp;quot;&amp;quot; ):gsub( &amp;quot;&#039;&#039;&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
        if r:find( &amp;quot;&amp;lt;&amp;quot;, 1, true ) then&lt;br /&gt;
            local Text = Fetch( &amp;quot;Text&amp;quot; )&lt;br /&gt;
            r = Text.getPlain( r:gsub( &amp;quot;&amp;lt;br */?&amp;gt;&amp;quot;, &amp;quot;\r\n&amp;quot; ) )&lt;br /&gt;
        end&lt;br /&gt;
        if r:find( &amp;quot;[&amp;quot;, 1, true ) then&lt;br /&gt;
            local WLink = Fetch( &amp;quot;WLink&amp;quot; )&lt;br /&gt;
            if WLink.isBracketedURL( r ) then&lt;br /&gt;
                r = r:gsub( &amp;quot;%[([hf]tt?ps?://%S+) [^%]]+%]&amp;quot;, &amp;quot;%1&amp;quot; )&lt;br /&gt;
            end&lt;br /&gt;
            r = WLink.getPlain( r )&lt;br /&gt;
        end&lt;br /&gt;
        if r:find( &amp;quot;&amp;amp;&amp;quot;, 1, true ) then&lt;br /&gt;
            r = mw.text.decode( r )&lt;br /&gt;
            if r:find( &amp;quot;&amp;amp;shy;&amp;quot;, 1, true ) then&lt;br /&gt;
                r = r:gsub( &amp;quot;&amp;amp;shy;&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- flat()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function flush()&lt;br /&gt;
    -- JSON encode narrowed input; obey unnamed (numerical) parameters&lt;br /&gt;
    -- Returns &amp;lt;templatedata&amp;gt; JSON string&lt;br /&gt;
    local r&lt;br /&gt;
    if Data.tag then&lt;br /&gt;
        r = mw.text.jsonEncode( Data.tag ):gsub( &amp;quot;%}$&amp;quot;, &amp;quot;,&amp;quot; )&lt;br /&gt;
    else&lt;br /&gt;
        r = &amp;quot;{&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    r = r .. &amp;quot;\n\&amp;quot;params\&amp;quot;:{&amp;quot;&lt;br /&gt;
    if Data.order then&lt;br /&gt;
        local sep = &amp;quot;&amp;quot;&lt;br /&gt;
        local s&lt;br /&gt;
        for i = 1, #Data.order do&lt;br /&gt;
            s   = Data.order[ i ]&lt;br /&gt;
            r   = string.format( &amp;quot;%s%s\n%s:%s&amp;quot;,&lt;br /&gt;
                                 r,&lt;br /&gt;
                                 sep,&lt;br /&gt;
                                 mw.text.jsonEncode( s ),&lt;br /&gt;
                                 mw.text.jsonEncode( Data.params[ s ] ) )&lt;br /&gt;
            sep = &amp;quot;,\n&amp;quot;&lt;br /&gt;
        end -- for i = 1, #Data.order&lt;br /&gt;
    end&lt;br /&gt;
    r = r .. &amp;quot;\n}\n}&amp;quot;&lt;br /&gt;
    return r&lt;br /&gt;
end -- flush()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function focus( access )&lt;br /&gt;
    -- Check components; focus multilingual description, build trees&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     access  -- string, name of parameter, nil for root&lt;br /&gt;
    local f = function ( a, at )&lt;br /&gt;
                    local r&lt;br /&gt;
                    if at then&lt;br /&gt;
                        r = string.format( &amp;quot;&amp;lt;code&amp;gt;params.%s&amp;lt;/code&amp;gt;&amp;quot;, at )&lt;br /&gt;
                    else&lt;br /&gt;
                        r = &amp;quot;&#039;&#039;root&#039;&#039;&amp;quot;&lt;br /&gt;
                    end&lt;br /&gt;
                    if a then&lt;br /&gt;
                        r = string.format( &amp;quot;%s&amp;lt;code&amp;gt;.%s&amp;lt;/code&amp;gt;&amp;quot;, r, a )&lt;br /&gt;
                    end&lt;br /&gt;
                    return r&lt;br /&gt;
                end&lt;br /&gt;
    local parent&lt;br /&gt;
    if access then&lt;br /&gt;
        parent = Data.got.params[ access ]&lt;br /&gt;
    else&lt;br /&gt;
        parent = Data.got&lt;br /&gt;
    end&lt;br /&gt;
    if type( parent ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local elem, got, permit, s, scope, slot, tag, target&lt;br /&gt;
        if access then&lt;br /&gt;
            permit = Permit.params&lt;br /&gt;
            if type( access ) == &amp;quot;number&amp;quot; then&lt;br /&gt;
                slot = tostring( access )&lt;br /&gt;
            else&lt;br /&gt;
                slot = access&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            permit = Permit.root&lt;br /&gt;
        end&lt;br /&gt;
        for k, v in pairs( parent ) do&lt;br /&gt;
            scope = permit[ k ]&lt;br /&gt;
            if scope then&lt;br /&gt;
                s = type( v )&lt;br /&gt;
                if s == &amp;quot;string&amp;quot;  and  k ~= &amp;quot;format&amp;quot; then&lt;br /&gt;
                    v = mw.text.trim( v )&lt;br /&gt;
                end&lt;br /&gt;
                if scope:find( s, 1, true ) then&lt;br /&gt;
                    if scope:find( &amp;quot;I18N&amp;quot;, 1, true ) then&lt;br /&gt;
                        if s == &amp;quot;string&amp;quot; then&lt;br /&gt;
                            elem = fair( v )&lt;br /&gt;
                        elseif s == &amp;quot;table&amp;quot; then&lt;br /&gt;
                            local translated&lt;br /&gt;
                            v, translated = faraway( v )&lt;br /&gt;
                            if v then&lt;br /&gt;
                                if translated  and&lt;br /&gt;
                                   k == &amp;quot;description&amp;quot; then&lt;br /&gt;
                                    elem = { [ 1 ] = fair( v ),&lt;br /&gt;
                                             [ 2 ] = translated }&lt;br /&gt;
                                else&lt;br /&gt;
                                    elem = fair( v )&lt;br /&gt;
                                end&lt;br /&gt;
                            else&lt;br /&gt;
                                elem = false&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                        if type( v ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                            if k == &amp;quot;deprecated&amp;quot; then&lt;br /&gt;
                                if v == &amp;quot;1&amp;quot; then&lt;br /&gt;
                                    v = true&lt;br /&gt;
                                elseif v == &amp;quot;0&amp;quot; then&lt;br /&gt;
                                    v = false&lt;br /&gt;
                                end&lt;br /&gt;
                                elem = v&lt;br /&gt;
                            elseif scope:find( &amp;quot;nowiki&amp;quot;, 1, true ) then&lt;br /&gt;
                                elem = mw.text.nowiki( v )&lt;br /&gt;
                                elem = elem:gsub( &amp;quot;&amp;amp;#13;\n&amp;quot;, &amp;quot;&amp;lt;br&amp;gt;&amp;quot; )&lt;br /&gt;
                                v    = v:gsub( string.char( 13 ),  &amp;quot;&amp;quot; )&lt;br /&gt;
                            else&lt;br /&gt;
                                v = flat( v )&lt;br /&gt;
                            end&lt;br /&gt;
                        elseif s == &amp;quot;boolean&amp;quot; then&lt;br /&gt;
                            if scope:find( &amp;quot;boolean&amp;quot;, 1, true ) then&lt;br /&gt;
                                elem = v&lt;br /&gt;
                            else&lt;br /&gt;
                                s = &amp;quot;Type &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt; bad for &amp;quot;&lt;br /&gt;
                                    .. f( k, slot )&lt;br /&gt;
                                Fault( s )&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                    else&lt;br /&gt;
                        if k == &amp;quot;params&amp;quot;  and  not access then&lt;br /&gt;
                            v    = nil&lt;br /&gt;
                            elem = nil&lt;br /&gt;
                        elseif k == &amp;quot;format&amp;quot;  and  not access then&lt;br /&gt;
                            elem = mw.text.decode( v )&lt;br /&gt;
                            v    = nil&lt;br /&gt;
                        elseif k == &amp;quot;inherits&amp;quot; then&lt;br /&gt;
                            elem = v&lt;br /&gt;
                            if not Data.heirs then&lt;br /&gt;
                                Data.heirs = { }&lt;br /&gt;
                            end&lt;br /&gt;
                            Data.heirs[ slot ] = v&lt;br /&gt;
                            v                  = nil&lt;br /&gt;
                        elseif k == &amp;quot;style&amp;quot; then&lt;br /&gt;
                            elem = v&lt;br /&gt;
                            v    = nil&lt;br /&gt;
                        elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
                            v    = mw.text.nowiki( v )&lt;br /&gt;
                            elem = v&lt;br /&gt;
                        else&lt;br /&gt;
                            elem = v&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                    if type( elem ) ~= &amp;quot;nil&amp;quot; then&lt;br /&gt;
                        if not target then&lt;br /&gt;
                            if access then&lt;br /&gt;
                                if not Data.tree.params then&lt;br /&gt;
                                    Data.tree.params = { }&lt;br /&gt;
                                end&lt;br /&gt;
                                Data.tree.params[ slot ] = { }&lt;br /&gt;
                                target = Data.tree.params[ slot ]&lt;br /&gt;
                            else&lt;br /&gt;
                                Data.tree = { }&lt;br /&gt;
                                target    = Data.tree&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                        target[ k ] = elem&lt;br /&gt;
                        elem        = false&lt;br /&gt;
                    end&lt;br /&gt;
                    if type( v ) ~= &amp;quot;nil&amp;quot; then&lt;br /&gt;
                        if not tag then&lt;br /&gt;
                            if access then&lt;br /&gt;
                                if type( v ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
                                   v.sub( 1, 1 ) == &amp;quot;=&amp;quot; then&lt;br /&gt;
                                    v = nil&lt;br /&gt;
                                else&lt;br /&gt;
                                    if not Data.params then&lt;br /&gt;
                                        Data.params = { }&lt;br /&gt;
                                    end&lt;br /&gt;
                                    Data.params[ slot ] = { }&lt;br /&gt;
                                    tag = Data.params[ slot ]&lt;br /&gt;
                                end&lt;br /&gt;
                            else&lt;br /&gt;
                                Data.tag = { }&lt;br /&gt;
                                tag      = Data.tag&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                        if type( v ) ~= &amp;quot;nil&amp;quot;  and&lt;br /&gt;
                           k ~= &amp;quot;suggestedvalues&amp;quot; then&lt;br /&gt;
                            tag[ k ] = v&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    s = string.format( &amp;quot;Type &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt; bad for %s&amp;quot;,&lt;br /&gt;
                                       scope,  f( k, slot ) )&lt;br /&gt;
                    Fault( s )&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                Fault( &amp;quot;Unknown component &amp;quot; .. f( k, slot ) )&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        if not access  and Data.got.sets then&lt;br /&gt;
            fellows()&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        Fault( f() .. &amp;quot; needs to be of &amp;lt;code&amp;gt;object&amp;lt;/code&amp;gt; type&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
end -- focus()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function format()&lt;br /&gt;
    -- Build formatted element&lt;br /&gt;
    -- Returns &amp;lt;inline&amp;gt;&lt;br /&gt;
    local source = Data.tree.format:lower()&lt;br /&gt;
    local r, s&lt;br /&gt;
    if source == &amp;quot;inline&amp;quot;  or  source == &amp;quot;block&amp;quot; then&lt;br /&gt;
        r = mw.html.create( &amp;quot;i&amp;quot; )&lt;br /&gt;
                   :wikitext( source )&lt;br /&gt;
    else&lt;br /&gt;
        local code&lt;br /&gt;
        if source:find( &amp;quot;|&amp;quot;, 1, true ) then&lt;br /&gt;
            local scan = &amp;quot;^[\n ]*%{%{[\n _]*|[\n _]*=[\n _]*%}%}[\n ]*$&amp;quot;&lt;br /&gt;
            if source:match( scan ) then&lt;br /&gt;
                code = source:gsub( &amp;quot;\n&amp;quot;, &amp;quot;N&amp;quot; )&lt;br /&gt;
            else&lt;br /&gt;
                s = mw.text.nowiki( source ):gsub( &amp;quot;\n&amp;quot;, &amp;quot;&amp;amp;#92;n&amp;quot; )&lt;br /&gt;
                s = tostring( mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
                                     :wikitext( s ) )&lt;br /&gt;
                Fault( &amp;quot;Invalid format &amp;quot; .. s )&lt;br /&gt;
                source = false&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            local words = mw.text.split( source, &amp;quot;%s+&amp;quot; )&lt;br /&gt;
            local show, start, support, unknown&lt;br /&gt;
            for i = 1, #words do&lt;br /&gt;
                s = words[ i ]&lt;br /&gt;
                if i == 1 then&lt;br /&gt;
                    start = s&lt;br /&gt;
                end&lt;br /&gt;
                support = Permit.builder[ s ]&lt;br /&gt;
                if support == start  or&lt;br /&gt;
                   support == &amp;quot;*&amp;quot; then&lt;br /&gt;
                    Permit.builder[ s ] = true&lt;br /&gt;
                elseif s:match( &amp;quot;^[1-9]%d?&amp;quot; ) and&lt;br /&gt;
                       Permit.builder.align then&lt;br /&gt;
                    Permit.builder.align = tonumber( s )&lt;br /&gt;
                else&lt;br /&gt;
                    if unknown then&lt;br /&gt;
                        unknown = string.format( &amp;quot;%s %s&amp;quot;, unknown, s )&lt;br /&gt;
                    else&lt;br /&gt;
                        unknown = s&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end -- i = 1, #words&lt;br /&gt;
            if unknown then&lt;br /&gt;
                s = tostring( mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
                                     :css( &amp;quot;white-space&amp;quot;, &amp;quot;nowrap&amp;quot; )&lt;br /&gt;
                                     :wikitext( s ) )&lt;br /&gt;
                Fault( &amp;quot;Unknown/misplaced format keyword &amp;quot; .. s )&lt;br /&gt;
                source = false&lt;br /&gt;
                start  = false&lt;br /&gt;
            end&lt;br /&gt;
            if start == &amp;quot;inline&amp;quot; then&lt;br /&gt;
                if Permit.builder.half == true then&lt;br /&gt;
                    show = &amp;quot;inline half&amp;quot;&lt;br /&gt;
                    code = &amp;quot;{{_ |_=_}}&amp;quot;&lt;br /&gt;
                elseif Permit.builder.grouped == true then&lt;br /&gt;
                    show = &amp;quot;inline grouped&amp;quot;&lt;br /&gt;
                    code = &amp;quot;{{_ | _=_}}&amp;quot;&lt;br /&gt;
                elseif Permit.builder.spaced == true then&lt;br /&gt;
                    show = &amp;quot;inline spaced&amp;quot;&lt;br /&gt;
                    code = &amp;quot;{{_ | _ = _ }}&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if Permit.builder.newlines == true then&lt;br /&gt;
                    show = show or &amp;quot;inline&amp;quot;&lt;br /&gt;
                    code = code or &amp;quot;{{_|_=_}}&amp;quot;&lt;br /&gt;
                    show = show .. &amp;quot; newlines&amp;quot;&lt;br /&gt;
                    code = string.format( &amp;quot;N%sN&amp;quot;, code )&lt;br /&gt;
                end&lt;br /&gt;
            elseif start == &amp;quot;block&amp;quot; then&lt;br /&gt;
                local space  = &amp;quot;&amp;quot;     -- amid &amp;quot;|&amp;quot; and name&lt;br /&gt;
                local spaced = &amp;quot; &amp;quot;    -- preceding &amp;quot;=&amp;quot;&lt;br /&gt;
                local spacer = &amp;quot; &amp;quot;    -- following &amp;quot;=&amp;quot;&lt;br /&gt;
                local suffix = &amp;quot;N&amp;quot;    -- closing &amp;quot;}}&amp;quot; on new line&lt;br /&gt;
                show = &amp;quot;block&amp;quot;&lt;br /&gt;
                if Permit.builder.indent == true then&lt;br /&gt;
                    start = &amp;quot; &amp;quot;&lt;br /&gt;
                    show = &amp;quot;block indent&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                    start = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if Permit.builder.compressed == true then&lt;br /&gt;
                    spaced = &amp;quot;&amp;quot;&lt;br /&gt;
                    spacer = &amp;quot;&amp;quot;&lt;br /&gt;
                    show   = show .. &amp;quot; compressed&amp;quot;&lt;br /&gt;
                    if Permit.builder.last == true then&lt;br /&gt;
                        show = show .. &amp;quot; last&amp;quot;&lt;br /&gt;
                    else&lt;br /&gt;
                        suffix = &amp;quot;&amp;quot;&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    if Permit.builder.lead == true then&lt;br /&gt;
                        show  = show .. &amp;quot; lead&amp;quot;&lt;br /&gt;
                        space = &amp;quot; &amp;quot;&lt;br /&gt;
                    end&lt;br /&gt;
                    if type( Permit.builder.align ) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
                        local n&lt;br /&gt;
                        s = &amp;quot; align&amp;quot;&lt;br /&gt;
                        if Permit.builder.align == true then&lt;br /&gt;
                            n = 0&lt;br /&gt;
                            if type( Data.got ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                               type( Data.got.params ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                                for k, v in pairs( Data.got.params ) do&lt;br /&gt;
                                    if type( v ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                                       not v.deprecated  and&lt;br /&gt;
                                       type( k ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                                        k = mw.ustring.len( k )&lt;br /&gt;
                                        if k &amp;gt; n then&lt;br /&gt;
                                            n = k&lt;br /&gt;
                                        end&lt;br /&gt;
                                    end&lt;br /&gt;
                                end -- for k, v&lt;br /&gt;
                            end&lt;br /&gt;
                        else&lt;br /&gt;
                            n = Permit.builder.align&lt;br /&gt;
                            if type( n ) == &amp;quot;number&amp;quot;  and  n &amp;gt; 1 then&lt;br /&gt;
                                s = string.format( &amp;quot;%s %d&amp;quot;, s, n )&lt;br /&gt;
                            else&lt;br /&gt;
                                n = 0    -- How comes?&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                        if n &amp;gt; 1 then&lt;br /&gt;
                            spaced = string.rep( &amp;quot;_&amp;quot;,  n - 1 )  ..  &amp;quot; &amp;quot;&lt;br /&gt;
                        end&lt;br /&gt;
                        show = show .. s&lt;br /&gt;
                    elseif Permit.builder.after == true then&lt;br /&gt;
                        spaced = &amp;quot;&amp;quot;&lt;br /&gt;
                        show   = show .. &amp;quot; after&amp;quot;&lt;br /&gt;
                    elseif Permit.builder.dense == true then&lt;br /&gt;
                        spaced = &amp;quot;&amp;quot;&lt;br /&gt;
                        spacer = &amp;quot;&amp;quot;&lt;br /&gt;
                        show   = show .. &amp;quot; dense&amp;quot;&lt;br /&gt;
                    end&lt;br /&gt;
                    if Permit.builder.last == true then&lt;br /&gt;
                        suffix = spacer&lt;br /&gt;
                        show   = show .. &amp;quot; last&amp;quot;&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                code = string.format( &amp;quot;N{{_N%s|%s_%s=%s_%s}}N&amp;quot;,&lt;br /&gt;
                                      start,&lt;br /&gt;
                                      space,&lt;br /&gt;
                                      spaced,&lt;br /&gt;
                                      spacer,&lt;br /&gt;
                                      suffix )&lt;br /&gt;
                if show == &amp;quot;block&amp;quot; then&lt;br /&gt;
                    show = &amp;quot;block newlines&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if show then&lt;br /&gt;
                r = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                           :wikitext( show )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if code then&lt;br /&gt;
            source = code:gsub( &amp;quot;N&amp;quot;, &amp;quot;\n&amp;quot; )&lt;br /&gt;
            code   = mw.text.nowiki( code ):gsub( &amp;quot;N&amp;quot;, &amp;quot;&amp;amp;#92;n&amp;quot; )&lt;br /&gt;
            code   = mw.html.create( &amp;quot;code&amp;quot; )&lt;br /&gt;
                            :css( &amp;quot;margin-left&amp;quot;,  &amp;quot;1em&amp;quot; )&lt;br /&gt;
                            :css( &amp;quot;margin-right&amp;quot;, &amp;quot;1em&amp;quot; )&lt;br /&gt;
                            :wikitext( code )&lt;br /&gt;
            if r then&lt;br /&gt;
                r = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                           :node( r )&lt;br /&gt;
                           :node( code )&lt;br /&gt;
            else&lt;br /&gt;
                r = code&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if source and Data.tag then&lt;br /&gt;
        Data.tag.format = source&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- format()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function formatter()&lt;br /&gt;
    -- Build presented documentation&lt;br /&gt;
    -- Returns &amp;lt;div&amp;gt;&lt;br /&gt;
    local r = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
    local x = fashioned( Data.tree, true, r )&lt;br /&gt;
    local s&lt;br /&gt;
    if x then&lt;br /&gt;
        r = x&lt;br /&gt;
    end&lt;br /&gt;
    if Data.leading then&lt;br /&gt;
        local toc = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
        local shift&lt;br /&gt;
        if Config.suppressTOCnum then&lt;br /&gt;
            toc:addClass( Config.suppressTOCnum )&lt;br /&gt;
            if type( Config.stylesTOCnum ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                local src = Config.stylesTOCnum .. &amp;quot;/styles.css&amp;quot;&lt;br /&gt;
                s = TemplateData.frame:extensionTag( &amp;quot;templatestyles&amp;quot;,&lt;br /&gt;
                                                     nil,&lt;br /&gt;
                                                     { src = src } )&lt;br /&gt;
                r:newline()&lt;br /&gt;
                 :node( s )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        toc:addClass( &amp;quot;navigation-not-searchable&amp;quot; )&lt;br /&gt;
           :css( &amp;quot;margin-top&amp;quot;, &amp;quot;0.5em&amp;quot; )&lt;br /&gt;
           :wikitext( &amp;quot;__TOC__&amp;quot; )&lt;br /&gt;
        if Data.sibling then&lt;br /&gt;
            local block = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
            if TemplateData.ltr then&lt;br /&gt;
                shift = &amp;quot;right&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                shift = &amp;quot;left&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            block:css( &amp;quot;float&amp;quot;, shift )&lt;br /&gt;
                 :wikitext( Data.sibling )&lt;br /&gt;
            r:newline()&lt;br /&gt;
             :node( block )&lt;br /&gt;
             :newline()&lt;br /&gt;
        end&lt;br /&gt;
        r:newline()&lt;br /&gt;
         :node( toc )&lt;br /&gt;
         :newline()&lt;br /&gt;
        if shift then&lt;br /&gt;
            r:node( mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                           :css( &amp;quot;clear&amp;quot;, shift ) )&lt;br /&gt;
             :newline()&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    s = features()&lt;br /&gt;
    if s then&lt;br /&gt;
        if Data.leading then&lt;br /&gt;
            r:node( mw.html.create( &amp;quot;h&amp;quot; .. Config.nested )&lt;br /&gt;
                           :wikitext( factory( &amp;quot;doc-params&amp;quot; ) ) )&lt;br /&gt;
             :newline()&lt;br /&gt;
        end&lt;br /&gt;
        r:node( s )&lt;br /&gt;
    end&lt;br /&gt;
    if Data.shared then&lt;br /&gt;
        local global = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                              :attr( &amp;quot;id&amp;quot;, &amp;quot;templatedata-global&amp;quot; )&lt;br /&gt;
        local shift&lt;br /&gt;
        if TemplateData.ltr then&lt;br /&gt;
            shift = &amp;quot;right&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            shift = &amp;quot;left&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        global:css( &amp;quot;float&amp;quot;, shift )&lt;br /&gt;
              :wikitext( string.format( &amp;quot;[[%s|%s]]&amp;quot;,&lt;br /&gt;
                                        Data.shared, &amp;quot;Global&amp;quot; ) )&lt;br /&gt;
        r:newline()&lt;br /&gt;
         :node( global )&lt;br /&gt;
    end&lt;br /&gt;
    if Data.tree and Data.tree.format then&lt;br /&gt;
        local e = format()&lt;br /&gt;
        if e then&lt;br /&gt;
            local show = &amp;quot;Format&amp;quot;&lt;br /&gt;
            if Config.supportFormat then&lt;br /&gt;
                show = string.format( &amp;quot;[[%s|%s]]&amp;quot;,&lt;br /&gt;
                                      Config.supportFormat, show )&lt;br /&gt;
            end&lt;br /&gt;
            r:node( mw.html.create( &amp;quot;p&amp;quot; )&lt;br /&gt;
                           :addClass( &amp;quot;navigation-not-searchable&amp;quot; )&lt;br /&gt;
                           :wikitext( show .. &amp;quot;: &amp;quot; )&lt;br /&gt;
                           :node( e ) )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- formatter()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function free()&lt;br /&gt;
    -- Remove JSON comment lines&lt;br /&gt;
    if Data.source:find( &amp;quot;//&amp;quot;, 1, true ) then&lt;br /&gt;
        Data.source:gsub( &amp;quot;([{,\&amp;quot;&#039;])(%s*\n%s*//.*\n%s*)([{},\&amp;quot;&#039;])&amp;quot;,&lt;br /&gt;
                          &amp;quot;%1%3&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
end -- free()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function full()&lt;br /&gt;
    -- Build survey table from JSON data, append invisible &amp;lt;templatedata&amp;gt;&lt;br /&gt;
    Data.div = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                      :addClass( &amp;quot;mw-templatedata-doc-wrap&amp;quot; )&lt;br /&gt;
    if Permit.css.bg then&lt;br /&gt;
        Data.div:css( Permit.css.bg )&lt;br /&gt;
    end&lt;br /&gt;
    if Permit.css.fg then&lt;br /&gt;
        Data.div:css( Permit.css.fg )&lt;br /&gt;
    end&lt;br /&gt;
    focus()&lt;br /&gt;
    if Data.tag then&lt;br /&gt;
        if type( Data.got.params ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for k, v in pairs( Data.got.params ) do&lt;br /&gt;
                focus( k )&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
            if Data.heirs then&lt;br /&gt;
                fathers()&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    Data.div:node( formatter() )&lt;br /&gt;
    if not Data.lazy then&lt;br /&gt;
        Data.slim = flush()&lt;br /&gt;
        if TemplateData.frame then&lt;br /&gt;
            local div   = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
            local tdata = { [ 1 ] = &amp;quot;templatedata&amp;quot;,&lt;br /&gt;
                            [ 2 ] = Data.slim }&lt;br /&gt;
            Data.strip = TemplateData.frame:callParserFunction( &amp;quot;#tag&amp;quot;,&lt;br /&gt;
                                                                tdata )&lt;br /&gt;
            div:wikitext( Data.strip )&lt;br /&gt;
            if Config.loudly then&lt;br /&gt;
                Data.div:node( mw.html.create( &amp;quot;hr&amp;quot; )&lt;br /&gt;
                                      :css( { height = &amp;quot;7ex&amp;quot; } ) )&lt;br /&gt;
            else&lt;br /&gt;
                div:css( &amp;quot;display&amp;quot;, &amp;quot;none&amp;quot; )&lt;br /&gt;
            end&lt;br /&gt;
            Data.div:node( div )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if Data.lasting then&lt;br /&gt;
        Fault( &amp;quot;deprecated type syntax&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    if Data.less then&lt;br /&gt;
        Fault( Config.solo )&lt;br /&gt;
    end&lt;br /&gt;
end -- full()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function furnish( adapt, arglist )&lt;br /&gt;
    -- Analyze transclusion&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     adapt    -- table, #invoke parameters&lt;br /&gt;
    --     arglist  -- table, template parameters&lt;br /&gt;
    -- Returns string&lt;br /&gt;
    local source&lt;br /&gt;
    favorize()&lt;br /&gt;
    -- deprecated:&lt;br /&gt;
    for k, v in pairs( Config.basicCnf ) do&lt;br /&gt;
        if adapt[ k ]  and  adapt[ k ] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            Config[ v ] = adapt[ k ]&lt;br /&gt;
        end&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    if arglist.heading  and  arglist.heading:match( &amp;quot;^[3-6]$&amp;quot; ) then&lt;br /&gt;
        Config.nested = arglist.heading&lt;br /&gt;
    else&lt;br /&gt;
        Config.nested = &amp;quot;2&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    Config.loudly = faculty( arglist.debug or adapt.debug )&lt;br /&gt;
    Data.lazy     = faculty( arglist.lazy )  and  not Config.loudly&lt;br /&gt;
    Data.leading  = faculty( arglist.TOC )&lt;br /&gt;
    if Data.leading and arglist.TOCsibling then&lt;br /&gt;
        Data.sibling = mw.text.trim( arglist.TOCsibling )&lt;br /&gt;
    end&lt;br /&gt;
    if arglist.lang then&lt;br /&gt;
        Data.slang = arglist.lang:lower()&lt;br /&gt;
    elseif adapt.lang then&lt;br /&gt;
        Data.slang = adapt.lang:lower()&lt;br /&gt;
    end&lt;br /&gt;
    if arglist.JSON then&lt;br /&gt;
        source = arglist.JSON&lt;br /&gt;
    elseif arglist.Global then&lt;br /&gt;
        source = TemplateData.getGlobalJSON( arglist.Global,&lt;br /&gt;
                                             arglist.Local )&lt;br /&gt;
    elseif arglist[ 1 ] then&lt;br /&gt;
        local s     = mw.text.trim( arglist[ 1 ] )&lt;br /&gt;
        local start = s:sub( 1, 1 )&lt;br /&gt;
        if start == &amp;quot;&amp;lt;&amp;quot; then&lt;br /&gt;
            Data.strip = s&lt;br /&gt;
        elseif start == &amp;quot;{&amp;quot; then&lt;br /&gt;
            source = s&lt;br /&gt;
        elseif mw.ustring.sub( s, 1, 8 ) ==&lt;br /&gt;
               mw.ustring.char( 127, 39, 34, 96, 85, 78, 73, 81 ) then&lt;br /&gt;
            Data.strip = s&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( arglist.vertical ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
       arglist.vertical:match( &amp;quot;^%d*%.?%d+[emprx]+$&amp;quot; ) then&lt;br /&gt;
        Data.scroll = arglist.vertical&lt;br /&gt;
    end&lt;br /&gt;
    if not source then&lt;br /&gt;
        Data.title = mw.title.getCurrentTitle()&lt;br /&gt;
        source = find()&lt;br /&gt;
        if not source  and&lt;br /&gt;
           not Data.title.text:match( Config.subpage ) then&lt;br /&gt;
            local s = string.format( Config.suffix,&lt;br /&gt;
                                     Data.title.prefixedText )&lt;br /&gt;
            Data.title = mw.title.new( s )&lt;br /&gt;
            if Data.title.exists then&lt;br /&gt;
                source = find()&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not Data.lazy then&lt;br /&gt;
        if not Data.title then&lt;br /&gt;
            Data.title = mw.title.getCurrentTitle()&lt;br /&gt;
        end&lt;br /&gt;
        Data.lazy = Data.title.text:match( Config.subpage )&lt;br /&gt;
    end&lt;br /&gt;
    if type( source ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        TemplateData.getPlainJSON( source )&lt;br /&gt;
    end&lt;br /&gt;
    return finalize( faculty( arglist.source ) )&lt;br /&gt;
end -- furnish()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failsafe.failsafe = function ( atleast )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     atleast  -- string, with required version&lt;br /&gt;
    --                         or wikidata|item|~|@ or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string  -- with queried version/item, also if problem&lt;br /&gt;
    --              false   -- if appropriate&lt;br /&gt;
    -- 2020-08-17&lt;br /&gt;
    local since  = atleast&lt;br /&gt;
    local last   = ( since == &amp;quot;~&amp;quot; )&lt;br /&gt;
    local linked = ( since == &amp;quot;@&amp;quot; )&lt;br /&gt;
    local link   = ( since == &amp;quot;item&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    if last  or  link  or  linked  or  since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = Failsafe.item&lt;br /&gt;
        since = false&lt;br /&gt;
        if type( item ) == &amp;quot;number&amp;quot;  and  item &amp;gt; 0 then&lt;br /&gt;
            local suited = string.format( &amp;quot;Q%d&amp;quot;, item )&lt;br /&gt;
            if link then&lt;br /&gt;
                r = suited&lt;br /&gt;
            else&lt;br /&gt;
                local entity = mw.wikibase.getEntity( suited )&lt;br /&gt;
                if type( entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    local seek = Failsafe.serialProperty or &amp;quot;P348&amp;quot;&lt;br /&gt;
                    local vsn  = entity:formatPropertyValues( seek )&lt;br /&gt;
                    if type( vsn ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                       type( vsn.value ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
                       vsn.value ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                        if last  and  vsn.value == Failsafe.serial then&lt;br /&gt;
                            r = false&lt;br /&gt;
                        elseif linked then&lt;br /&gt;
                            if mw.title.getCurrentTitle().prefixedText&lt;br /&gt;
                               ==  mw.wikibase.getSitelink( suited ) then&lt;br /&gt;
                                r = false&lt;br /&gt;
                            else&lt;br /&gt;
                                r = suited&lt;br /&gt;
                            end&lt;br /&gt;
                        else&lt;br /&gt;
                            r = vsn.value&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;
    if type( r ) == &amp;quot;nil&amp;quot; then&lt;br /&gt;
        if not since  or  since &amp;lt;= Failsafe.serial then&lt;br /&gt;
            r = Failsafe.serial&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Failsafe.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TemplateData.getGlobalJSON = function ( access, adapt )&lt;br /&gt;
    -- Retrieve TemplateData from a global repository (JSON)&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     access  -- string, with page specifier (on WikiMedia Commons)&lt;br /&gt;
    --     adapt   -- JSON string or table with local overrides&lt;br /&gt;
    -- Returns true, if succeeded&lt;br /&gt;
    local plugin = Fetch( &amp;quot;/global&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    if type( plugin ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
       type( plugin.fetch ) == &amp;quot;function&amp;quot; then&lt;br /&gt;
        local s, got = plugin.fetch( access, adapt )&lt;br /&gt;
        if got then&lt;br /&gt;
            Data.got    = got&lt;br /&gt;
            Data.order  = got.paramOrder&lt;br /&gt;
            Data.shared = s&lt;br /&gt;
            r           = true&lt;br /&gt;
            full()&lt;br /&gt;
        else&lt;br /&gt;
            Fault( s )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- TemplateData.getGlobalJSON()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TemplateData.getPlainJSON = function ( adapt )&lt;br /&gt;
    -- Reduce enhanced JSON data to plain text localized JSON&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     adapt  -- string, with enhanced JSON&lt;br /&gt;
    -- Returns string, or not&lt;br /&gt;
    if type( adapt ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        Data.source = adapt&lt;br /&gt;
        free()&lt;br /&gt;
        local lucky&lt;br /&gt;
        lucky, Data.got = pcall( mw.text.jsonDecode, Data.source )&lt;br /&gt;
        if type( Data.got ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            full()&lt;br /&gt;
        elseif not Data.strip then&lt;br /&gt;
            local scream = type( Data.got )&lt;br /&gt;
            if scream == &amp;quot;string&amp;quot; then&lt;br /&gt;
                scream = Data.got&lt;br /&gt;
            else&lt;br /&gt;
                scream = &amp;quot;Data.got: &amp;quot; .. scream&lt;br /&gt;
            end&lt;br /&gt;
            Fault( &amp;quot;fatal JSON error: &amp;quot; .. scream )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Data.slim&lt;br /&gt;
end -- TemplateData.getPlainJSON()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TemplateData.test = function ( adapt, arglist )&lt;br /&gt;
    TemplateData.frame = mw.getCurrentFrame()&lt;br /&gt;
    return furnish( adapt, arglist )&lt;br /&gt;
end -- TemplateData.test()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
p.f = function ( frame )&lt;br /&gt;
    -- Template call&lt;br /&gt;
    local lucky, r&lt;br /&gt;
    TemplateData.frame = frame&lt;br /&gt;
    lucky, r = pcall( furnish, frame.args, frame:getParent().args )&lt;br /&gt;
    if not lucky then&lt;br /&gt;
        Fault( &amp;quot;INTERNAL: &amp;quot; .. r )&lt;br /&gt;
        r = failures()&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.f&lt;br /&gt;
&lt;br /&gt;
p.failsafe = function ( frame )&lt;br /&gt;
    -- Versioning interface&lt;br /&gt;
    local s = type( frame )&lt;br /&gt;
    local since&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        since = frame.args[ 1 ]&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        since = frame&lt;br /&gt;
    end&lt;br /&gt;
    if since then&lt;br /&gt;
        since = mw.text.trim( since )&lt;br /&gt;
        if since == &amp;quot;&amp;quot; then&lt;br /&gt;
            since = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Failsafe.failsafe( since )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.failsafe&lt;br /&gt;
&lt;br /&gt;
p.TemplateData = function ()&lt;br /&gt;
    -- Module interface&lt;br /&gt;
    return TemplateData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Format_TemplateData&amp;diff=2726</id>
		<title>Template:Format TemplateData</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Format_TemplateData&amp;diff=2726"/>
		<updated>2024-11-22T08:46:56Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{yesno-yes|{{{header}}}}}|yes|{{TemplateData header}}&lt;br /&gt;
}}{{#invoke:Format TemplateData| f |classNoNumTOC=nonumtoc |cssParams=border:#B3B7FF 1px solid;|docpageCreate=%s/doc |docpageDetect=/doc$ |msgDescMiss=Missing description |cat=Templates with TemplateData errors}}&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>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Main_other/doc&amp;diff=2724</id>
		<title>Template:Main other/doc</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Main_other/doc&amp;diff=2724"/>
		<updated>2024-11-22T08:46:56Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
{{used in system}}&lt;br /&gt;
{{cascade-protected template}}&lt;br /&gt;
{{Template shortcut|ns0|mo|ao}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD CATEGORIES AT THE BOTTOM OF THIS PAGE --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the {{tl|main other}} meta-template.&lt;br /&gt;
&lt;br /&gt;
This template helps other templates detect if they are on a main space (article) page or some &amp;quot;other&amp;quot; type of page.&lt;br /&gt;
&lt;br /&gt;
===Basic usage===&lt;br /&gt;
This template usually takes two parameters, like this:&lt;br /&gt;
: {{Tlc|main other&amp;amp;#32;|{{var|result if in mainspace}}&amp;amp;#32;|{{var|result if elsewhere}}}}&lt;br /&gt;
&lt;br /&gt;
If the template is on a main space (article) page, it will return this:&lt;br /&gt;
: {{main other |demospace=main |{{var|result if in mainspace}} |{{var|result if elsewhere}} }}&lt;br /&gt;
&lt;br /&gt;
If the template is on any other page, it will return this:&lt;br /&gt;
: {{main other |{{var|result if in mainspace}} |{{var|result if elsewhere}} }}&lt;br /&gt;
&lt;br /&gt;
A typical usage case would be to warn that a template should not be used on non-article pages:&lt;br /&gt;
: {{Tlc|main other&amp;amp;#32;|&amp;amp;#32;|This template should only be used in articles.}}&lt;br /&gt;
or vice versa:&lt;br /&gt;
: {{Tlc|main other&amp;amp;#32;|This template should not be used in articles.|&amp;amp;#32;}}&lt;br /&gt;
&lt;br /&gt;
Note that in the first case above the &amp;quot;main&amp;quot; parameter was not used, and in the second example the &amp;quot;other&amp;quot; parameter was left empty.&lt;br /&gt;
&lt;br /&gt;
===Demospace===&lt;br /&gt;
For testing and demonstration purposes, this template can take a parameter named &#039;&#039;&#039;demospace&#039;&#039;&#039;.&lt;br /&gt;
* If it has the value &#039;&#039;&#039;main&#039;&#039;&#039; it returns the article text.&lt;br /&gt;
* It if has the value &#039;&#039;&#039;other&#039;&#039;&#039; or any other value such as the name of some other namespace it returns the other pages text.&lt;br /&gt;
* If the parameter is empty or undefined, the actual page type determines the result.&lt;br /&gt;
&lt;br /&gt;
Like this:&lt;br /&gt;
: {{tlc|main other&amp;amp;#32;|{{var|result if in mainspace}}&amp;amp;#32;|{{var|result if elsewhere}}&amp;amp;#32;|demospace{{=}}main}}&lt;br /&gt;
&lt;br /&gt;
No matter on what kind of page the code above is used, it will return: {{main other |{{var|result if in mainspace}} |{{var|result if elsewhere}} |demospace=main}}&lt;br /&gt;
&lt;br /&gt;
You can make it so your template also understands the &#039;&#039;&#039;demospace&#039;&#039;&#039; parameter. That means you can demonstrate the different appearances of your template in the documentation for your template:&lt;br /&gt;
: {{tlc|main other&amp;amp;#32;|{{var|result if in mainspace}}&amp;amp;#32;|{{var|result if elsewhere}}&amp;amp;#32;|&amp;lt;nowiki&amp;gt;demospace={{{demospace|}}}&amp;lt;/nowiki&amp;gt;&amp;amp;#32;}}&lt;br /&gt;
&lt;br /&gt;
===Technical details===&lt;br /&gt;
This template detects article &amp;quot;Talk:&amp;quot; pages as type &#039;&#039;&#039;other&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This template works like {{tl|main talk other}}. For more examples and technical details, see the documentation there.&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;label&amp;quot;: &amp;quot;If mainspace&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Content if page is located in mainspace (i.e. article space)&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;If not mainspace&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Content if page is not located in mainspace&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Redirects===&lt;br /&gt;
* {{tl|article only}}&lt;br /&gt;
* {{tl|article other}}&lt;br /&gt;
&lt;br /&gt;
{{Namespace and pagename-detecting templates}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
[[Category:Namespace manipulation templates]]&lt;br /&gt;
[[Category:If-then-else templates]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Namespace_and_pagename-detecting_templates&amp;diff=2722</id>
		<title>Template:Namespace and pagename-detecting templates</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Namespace_and_pagename-detecting_templates&amp;diff=2722"/>
		<updated>2024-11-22T08:46:55Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox&lt;br /&gt;
| name = Namespace and pagename-detecting templates&lt;br /&gt;
| state = {{{state|{{{1|&amp;lt;noinclude&amp;gt;expanded&amp;lt;/noinclude&amp;gt;}}}}}}&lt;br /&gt;
| bodyclass=hlist&lt;br /&gt;
| title = Namespace and pagename-detecting templates&lt;br /&gt;
&lt;br /&gt;
| group1 = [[Wikipedia:Namespace|Namespace]]&lt;br /&gt;
| list1 =&lt;br /&gt;
 {{Navbox |child&lt;br /&gt;
  |groupstyle=font-weight:normal;&lt;br /&gt;
&lt;br /&gt;
  | group1 = Particular&lt;br /&gt;
  | list1 =&lt;br /&gt;
* {{tlbare|Main other}}&lt;br /&gt;
* {{tlbare|Talk other}}&lt;br /&gt;
* {{tlbare|Category other}}&lt;br /&gt;
* {{tlbare|Draft other}}&lt;br /&gt;
* {{tlbare|File other}}&lt;br /&gt;
** {{tlbare|Is Commons}}&lt;br /&gt;
* {{tlbare|Help other}}&lt;br /&gt;
* {{tlbare|Module other}}&lt;br /&gt;
* {{tlbare|Portal other}}&lt;br /&gt;
* {{tlbare|Template other}}&lt;br /&gt;
* {{tlbare|User other}}&lt;br /&gt;
* {{tlbare|Project other}}&lt;br /&gt;
* {{tlbare|Single namespace}}&lt;br /&gt;
* {{tlbare|If talkspace of}}&lt;br /&gt;
* {{tlbare|If usertalk of}}&lt;br /&gt;
  | group2 = More generic&lt;br /&gt;
  | list2 =&lt;br /&gt;
* {{tlbare|Namespace detect}}&lt;br /&gt;
* {{tlbare|Namespace detect showall}}&lt;br /&gt;
* {{tlbare|Main talk other}}&lt;br /&gt;
** {{tlbare|Main talk other flex}}&lt;br /&gt;
* {{tlbare|Talkspace detect}}&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
| group2 = [[Wikipedia:Page name|Pagename]]&lt;br /&gt;
| list2 = {{navbox|subgroup&lt;br /&gt;
  | groupstyle = line-height:1.2em; font-weight:normal; background:transparent;&lt;br /&gt;
  | liststyle = line-height:1.2em&lt;br /&gt;
   | group1 = {{tlbare|When on basepage}}&lt;br /&gt;
   | list1 = Detects and acts according to whether it is on a basepage &#039;&#039;or&#039;&#039; on any subpage (that is, a &amp;lt;code&amp;gt;../..&amp;lt;/code&amp;gt; subpage).&lt;br /&gt;
   | group2 = {{tlbare|When pagename is}}&lt;br /&gt;
   | list2  = For pattern matching on the pagename.&lt;br /&gt;
   | group3 = [[Module:Page]]&lt;br /&gt;
   | list3  = Can take apart and put together pagenames in several ways.&lt;br /&gt;
   | group4 = {{tlbare|IP-talk}}&lt;br /&gt;
   | list4  = Returns IP-user talkpage, registered-user talkpage or non-user talkpage.&lt;br /&gt;
   | group5 = {{tlbare|IP-user other}}&lt;br /&gt;
   | list5  = For detecting IP-user pages.&lt;br /&gt;
   | group6 = {{tlbare|Subpage other}}&lt;br /&gt;
   | list6  = Pagename has an after-slash part (not in mainspace)&lt;br /&gt;
   | group7 = {{tlbare|Sandbox other}}&lt;br /&gt;
   | list7  = Page is subpage /sandbox (template space)&lt;br /&gt;
   | group8 = {{tlbare|Testcases other}}&lt;br /&gt;
   | list8  = Page is subpage /testcases (template space)&lt;br /&gt;
   | group9 = {{tlbare|Rootpage other}}&lt;br /&gt;
   | list9  = Page is rootpage (vs. /subpage) (template space)&lt;br /&gt;
&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
| group3 = Others&lt;br /&gt;
| list3 = {{navbox|subgroup&lt;br /&gt;
  | groupstyle = line-height:1.2em; font-weight:normal; background:transparent;&lt;br /&gt;
  | liststyle = line-height:1.2em&lt;br /&gt;
   | group1 = {{tlbare|Stub other}}&lt;br /&gt;
   | list1 = Detects whether it is on a page with a stub template or not. &lt;br /&gt;
   | group2 = {{tlbare|Redirect other}}&lt;br /&gt;
   | list2 = Detects whether it is on a redirect or not.&lt;br /&gt;
   | group3 = {{tlbare|If preview}}&lt;br /&gt;
   | list3 = Detects whether page is viewed as a preview or not. &lt;br /&gt;
   | group4 = {{tlbare|If IP}}&lt;br /&gt;
   | list4 = Displays different content to IP users and logged-in users.&lt;br /&gt;
   | group5 = {{tlbare|If autoconfirmed}}&lt;br /&gt;
   | list5 = Displays different content to autoconfirmed and non-autoconfirmed users.&lt;br /&gt;
   | group6 = {{tlbare|If extended confirmed}}&lt;br /&gt;
   | list6 = Displays different content to extended confirmed and non-extended confirmed users.&lt;br /&gt;
   | group7 = {{tlbare|If administrator}}&lt;br /&gt;
   | list7 = Displays content only to admins.&lt;br /&gt;
   | group8 = {{tlbare|If mobile}}&lt;br /&gt;
   | list8 = Displays different content to mobile users and desktop users.&lt;br /&gt;
   | group9 = {{tlbare|If dark}}&lt;br /&gt;
   | list9 = Displays different content to dark mode users and light mode users.&lt;br /&gt;
   | group10 = {{tlbare|Noscript}}&lt;br /&gt;
   | list10 = Detects whether page is viewed with a JavaScript-capable client or not. &lt;br /&gt;
&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
| below =&lt;br /&gt;
* [[Wikipedia:Namespace]]&lt;br /&gt;
* [[Wikipedia:Page name]]&lt;br /&gt;
* [[mw:Help:Magic words|Magic words]]&lt;br /&gt;
* [[mw:Help:Extension:ParserFunctions|ParserFunctions]]&lt;br /&gt;
&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>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Module:Navbox_with_columns&amp;diff=2720</id>
		<title>Module:Navbox with columns</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Module:Navbox_with_columns&amp;diff=2720"/>
		<updated>2024-11-22T08:46:54Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
local parentCfg = mw.loadData(&#039;Module:Navbox/configuration&#039;)&lt;br /&gt;
local thisCfg = mw.loadData(&#039;Module:Navbox with columns/configuration&#039;)&lt;br /&gt;
local cfg = {}&lt;br /&gt;
for k, v in pairs(thisCfg) do&lt;br /&gt;
	if type(v) == &#039;table&#039; then&lt;br /&gt;
		cfg[k] = {}&lt;br /&gt;
		if type(parentCfg[k]) == &#039;table&#039; then&lt;br /&gt;
			for kk, vv in pairs(parentCfg[k]) do cfg[k][kk] = vv end&lt;br /&gt;
		end&lt;br /&gt;
		for kk, vv in pairs(v) do cfg[k][kk] = vv end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
local inArray = require(&amp;quot;Module:TableTools&amp;quot;).inArray&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
-- helper functions&lt;br /&gt;
local andnum = function(s, n) return string.format(cfg.arg[s..&#039;_and_num&#039;], n) end&lt;br /&gt;
	&lt;br /&gt;
local isblank = function(v) return (v or &#039;&#039;) == &#039;&#039; end&lt;br /&gt;
&lt;br /&gt;
local function concatstrings(s)&lt;br /&gt;
	local r = table.concat(s, &#039;&#039;)&lt;br /&gt;
	if r:match(&#039;^%s*$&#039;) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
local function concatstyles(s)&lt;br /&gt;
	local r = &#039;&#039;&lt;br /&gt;
	for _, v in ipairs(s) do&lt;br /&gt;
		v = mw.text.trim(v, &amp;quot;%s;&amp;quot;)&lt;br /&gt;
		if not isblank(v) then r = r .. v .. &#039;;&#039; end&lt;br /&gt;
	end&lt;br /&gt;
	if isblank(r) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
local function getSubgroup(args, listnum, listText, prefix)&lt;br /&gt;
	local subArgs = {&lt;br /&gt;
		[cfg.arg.border] = cfg.keyword.border_subgroup,&lt;br /&gt;
		[cfg.arg.navbar] = cfg.keyword.navbar_plain&lt;br /&gt;
	}&lt;br /&gt;
	local hasSubArgs = false&lt;br /&gt;
	local subgroups = prefix and {prefix} or cfg.keyword.subgroups&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = tostring(k)&lt;br /&gt;
		for _, w in ipairs(subgroups) do&lt;br /&gt;
			w = w .. listnum .. &amp;quot;_&amp;quot;&lt;br /&gt;
			if (#k &amp;gt; #w) and (k:sub(1, #w) == w) then&lt;br /&gt;
				subArgs[k:sub(#w + 1)] = v&lt;br /&gt;
				hasSubArgs = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return hasSubArgs and p._navbox(subArgs) or listText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main functions&lt;br /&gt;
p._navbox = require(&#039;Module:Navbox&#039;)._navbox&lt;br /&gt;
&lt;br /&gt;
function p._withColumns(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
	&lt;br /&gt;
	-- tables of column numbers&lt;br /&gt;
	local colheadernums = {}&lt;br /&gt;
	local colnums = {}&lt;br /&gt;
	local colfooternums = {}&lt;br /&gt;
	&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthrough = {&lt;br /&gt;
		[cfg.arg.above]=true,[cfg.arg.aboveclass]=true,[cfg.arg.abovestyle]=true,&lt;br /&gt;
		[cfg.arg.basestyle]=true,&lt;br /&gt;
		[cfg.arg.below]=true,[cfg.arg.belowclass]=true,[cfg.arg.belowstyle]=true,&lt;br /&gt;
		[cfg.arg.bodyclass]=true,&lt;br /&gt;
		[cfg.arg.evenstyle]=true,&lt;br /&gt;
		[cfg.arg.groupclass]=true,[cfg.arg.groupstyle]=true,&lt;br /&gt;
		[cfg.arg.image]=true,[cfg.arg.imageclass]=true,[cfg.arg.imagestyle]=true,&lt;br /&gt;
		[cfg.arg.imageleft]=true,[cfg.arg.imageleftstyle]=true,&lt;br /&gt;
		[cfg.arg.listclass]=true,[cfg.arg.liststyle]=true,&lt;br /&gt;
		[cfg.arg.name]=true,&lt;br /&gt;
		[cfg.arg.navbar]=true,&lt;br /&gt;
		[cfg.arg.oddstyle]=true,&lt;br /&gt;
		[cfg.arg.state]=true,&lt;br /&gt;
		[cfg.arg.title]=true,[cfg.arg.titleclass]=true,[cfg.arg.titlestyle]=true,&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if passthrough[k] then&lt;br /&gt;
			targs[k] = v&lt;br /&gt;
		elseif type(k) == &#039;string&#039; then&lt;br /&gt;
			if k:match(cfg.pattern.listnum) then&lt;br /&gt;
				local n = k:match(cfg.pattern.listnum)&lt;br /&gt;
				targs[andnum(&#039;liststyle&#039;, n + 2)] = pargs[andnum(&#039;liststyle&#039;, n)]&lt;br /&gt;
				targs[andnum(&#039;group&#039;, n + 2)] = pargs[andnum(&#039;group&#039;, n)]&lt;br /&gt;
				targs[andnum(&#039;groupstyle&#039;, n + 2)] = pargs[andnum(&#039;groupstyle&#039;, n)]&lt;br /&gt;
				if v and inArray(cfg.keyword.subgroups, v) then&lt;br /&gt;
					targs[andnum(&#039;list&#039;, n + 2)] = getSubgroup(pargs, n, v)&lt;br /&gt;
				else&lt;br /&gt;
					targs[andnum(&#039;list&#039;, n + 2)] = v&lt;br /&gt;
				end&lt;br /&gt;
			elseif (k:match(cfg.pattern.colheadernum) and v ~= &#039;&#039;) then&lt;br /&gt;
				table.insert(colheadernums, tonumber(k:match(cfg.pattern.colheadernum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colnum) and v ~= &#039;&#039;) then&lt;br /&gt;
				table.insert(colnums,  tonumber(k:match(cfg.pattern.colnum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colfooternum) and v ~= &#039;&#039;) then&lt;br /&gt;
				table.insert(colfooternums,  tonumber(k:match(cfg.pattern.colfooternum)))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(colheadernums)&lt;br /&gt;
	table.sort(colnums)&lt;br /&gt;
	table.sort(colfooternums)&lt;br /&gt;
		&lt;br /&gt;
	-- HTML table for list1&lt;br /&gt;
	local coltable = mw.html.create( &#039;table&#039; ):attr(&#039;class&#039;, &#039;navbox-columns-table&#039;)&lt;br /&gt;
	local row, col&lt;br /&gt;
	&lt;br /&gt;
	local tablestyle = ( (#colheadernums &amp;gt; 0) or (not isblank(pargs[cfg.arg.fullwidth])) )&lt;br /&gt;
		and &#039;width:100%&#039;&lt;br /&gt;
		or &#039;width:auto; margin-left:auto; margin-right:auto&#039;&lt;br /&gt;
	&lt;br /&gt;
	coltable:attr(&#039;style&#039;, concatstyles({&lt;br /&gt;
		&#039;border-spacing: 0px; text-align:left&#039;,&lt;br /&gt;
		tablestyle,&lt;br /&gt;
		pargs[cfg.arg.coltablestyle] or &#039;&#039;&lt;br /&gt;
	}))&lt;br /&gt;
	&lt;br /&gt;
	--- Header row ---&lt;br /&gt;
	if (#colheadernums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&#039;tr&#039;)&lt;br /&gt;
		for k, n in ipairs(colheadernums) do&lt;br /&gt;
			col = row:tag(&#039;td&#039;):attr(&#039;class&#039;, &#039;navbox-abovebelow&#039;)&lt;br /&gt;
			col:attr(&#039;style&#039;, concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
				&#039;font-weight:bold&#039;,&lt;br /&gt;
				pargs[cfg.arg.colheaderstyle] or &#039;&#039;,&lt;br /&gt;
				pargs[andnum(&#039;colheaderstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
			}))&lt;br /&gt;
			if tonumber(pargs[andnum(&#039;colheadercolspan&#039;, n)]) then&lt;br /&gt;
				col:attr(&#039;colspan&#039;, pargs[andnum(&#039;colheadercolspan&#039;, n)])&lt;br /&gt;
			end&lt;br /&gt;
			col:wikitext(pargs[andnum(&#039;colheader&#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--- Main columns ---&lt;br /&gt;
	row = coltable:tag(&#039;tr&#039;):attr(&#039;style&#039;, &#039;vertical-align:top&#039;)&lt;br /&gt;
	for k, n in ipairs(colnums) do&lt;br /&gt;
		if k == 1 and isblank(pargs[andnum(&#039;colheader&#039;, 1)])&lt;br /&gt;
				and isblank(pargs[andnum(&#039;colfooter&#039;, 1)])&lt;br /&gt;
				and isblank(pargs[cfg.arg.fullwidth]) then&lt;br /&gt;
			local nopad = inArray(&lt;br /&gt;
				{&#039;off&#039;, &#039;0&#039;, &#039;0em&#039;, &#039;0px&#039;},&lt;br /&gt;
				mw.ustring.gsub(pargs[cfg.arg.padding] or &#039;&#039;, &#039;[;%%]&#039;, &#039;&#039;))&lt;br /&gt;
			if not nopad then&lt;br /&gt;
				row:tag(&#039;td&#039;):wikitext(&#039;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;)&lt;br /&gt;
					:attr(&#039;style&#039;, &#039;width:&#039;..(pargs[cfg.arg.padding] or &#039;5em&#039;)..&#039;;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		col = row:tag(&#039;td&#039;):attr(&#039;class&#039;, &#039;navbox-list&#039;)&lt;br /&gt;
		col:attr(&#039;style&#039;, concatstyles({&lt;br /&gt;
			(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
			&#039;padding:0px&#039;,&lt;br /&gt;
			pargs[cfg.arg.colstyle] or &#039;&#039;,&lt;br /&gt;
			((n%2 == 0) and pargs[cfg.arg.evencolstyle] or pargs[cfg.arg.oddcolstyle]) or &#039;&#039;,&lt;br /&gt;
			pargs[andnum(&#039;colstyle&#039;, n)] or &#039;&#039;,&lt;br /&gt;
			&#039;width:&#039; .. (pargs[andnum(&#039;colwidth&#039;, n)] or pargs[cfg.arg.colwidth] or &#039;10em&#039;)&lt;br /&gt;
		}))&lt;br /&gt;
		local wt = pargs[andnum(&#039;col&#039;, n)]&lt;br /&gt;
		if wt and inArray(cfg.keyword.subgroups, wt) then&lt;br /&gt;
			local prefix = mw.ustring.gsub(cfg.arg.col_and_num,&amp;quot;%%d&amp;quot;,&amp;quot;&amp;quot;)&lt;br /&gt;
			wt = getSubgroup(pargs, n, wt, prefix)&lt;br /&gt;
		end&lt;br /&gt;
		col:tag(&#039;div&#039;):newline():wikitext(wt):newline()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--- Footer row ---&lt;br /&gt;
	if (#colfooternums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&#039;tr&#039;)&lt;br /&gt;
		for k, n in ipairs(colfooternums) do&lt;br /&gt;
			col = row:tag(&#039;td&#039;):attr(&#039;class&#039;, &#039;navbox-abovebelow&#039;)&lt;br /&gt;
			col:attr(&#039;style&#039;, concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
				&#039;font-weight:bold&#039;,&lt;br /&gt;
				pargs[cfg.arg.colfooterstyle] or &#039;&#039;,&lt;br /&gt;
				pargs[andnum(&#039;colfooterstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
			}))&lt;br /&gt;
			if tonumber(pargs[andnum(&#039;colfootercolspan&#039;, n)]) then&lt;br /&gt;
				col:attr(&#039;colspan&#039;, pargs[andnum(&#039;colfootercolspan&#039;, n)])&lt;br /&gt;
			end&lt;br /&gt;
			col:wikitext(pargs[andnum(&#039;colfooter&#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- assign table to list1&lt;br /&gt;
	targs[andnum(&#039;list&#039;, 1)] = tostring(coltable)&lt;br /&gt;
	if isblank(pargs[andnum(&#039;colheader&#039;, 1)]) &lt;br /&gt;
			and isblank(pargs[andnum(&#039;col&#039;, 1)])&lt;br /&gt;
			and isblank(pargs[andnum(&#039;colfooter&#039;, 1)]) then&lt;br /&gt;
		targs[andnum(&#039;list&#039;, 1)] = targs[andnum(&#039;list&#039;, 1)] ..&lt;br /&gt;
			&#039;[[&#039; .. cfg.pattern.without_first_col .. &#039;]]&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Other parameters&lt;br /&gt;
	targs[cfg.arg.border] = pargs[cfg.arg.border] or pargs[1]&lt;br /&gt;
	targs[cfg.arg.evenodd] = (not isblank(pargs[cfg.arg.evenodd])) and pargs[cfg.arg.evenodd] or nil&lt;br /&gt;
	targs[cfg.arg.list1padding] = &#039;0px&#039;&lt;br /&gt;
	targs[andnum(&#039;liststyle&#039;, 1)] = &#039;background:transparent;color:inherit;&#039;&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({pargs[cfg.arg.style], pargs[cfg.arg.bodystyle]})&lt;br /&gt;
	targs[cfg.arg.tracking] = &#039;no&#039;&lt;br /&gt;
	&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Template entry points&lt;br /&gt;
function p.navbox (frame, boxtype)&lt;br /&gt;
	local function readArgs(args, prefix)&lt;br /&gt;
		-- Read the arguments in the order they&#039;ll be output in, to make references&lt;br /&gt;
		-- number in the right order.&lt;br /&gt;
		local _&lt;br /&gt;
		_ = args[prefix .. cfg.arg.title]&lt;br /&gt;
		_ = args[prefix .. cfg.arg.above]&lt;br /&gt;
		-- Limit this to 20 as covering &#039;most&#039; cases (that&#039;s a SWAG) and because&lt;br /&gt;
		-- iterator approach won&#039;t work here&lt;br /&gt;
		for i = 1, 20 do&lt;br /&gt;
			_ = args[prefix .. andnum(&#039;group&#039;, i)]&lt;br /&gt;
			if inArray(cfg.keyword.subgroups, args[prefix .. andnum(&#039;list&#039;, i)]) then&lt;br /&gt;
				for _, v in ipairs(cfg.keyword.subgroups) do&lt;br /&gt;
					readArgs(args, prefix .. v .. i .. &amp;quot;_&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		_ = args[prefix .. cfg.arg.below]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame, {wrappers = {cfg.pattern[boxtype or &#039;navbox&#039;]}})&lt;br /&gt;
	readArgs(args, &amp;quot;&amp;quot;)&lt;br /&gt;
	return p[&#039;_&#039;..(boxtype or &#039;navbox&#039;)](args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[&#039;with columns&#039;] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &#039;withColumns&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local q = {}&lt;br /&gt;
q._navbox = p._withColumns&lt;br /&gt;
q.navbox = p[&#039;with columns&#039;]&lt;br /&gt;
return q&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Module:Navbox_with_columns/configuration&amp;diff=2718</id>
		<title>Module:Navbox with columns/configuration</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Module:Navbox_with_columns/configuration&amp;diff=2718"/>
		<updated>2024-11-22T08:46:54Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	--These values will be merged with those from [[Module:Navbox/configuration]]&lt;br /&gt;
	keyword = {},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		colnum = &#039;^col(%d+)$&#039;,&lt;br /&gt;
		colheadernum = &#039;^col(%d+)header$&#039;,&lt;br /&gt;
		colfooternum = &#039;^col(%d+)footer$&#039;,&lt;br /&gt;
		withColumns = &#039;Template:Navbox with columns&#039;,&lt;br /&gt;
		without_first_col = &#039;Category:Pages using navbox columns without the first column&#039;&lt;br /&gt;
	},&lt;br /&gt;
	arg = {&lt;br /&gt;
		colheaderstyle = &#039;colheaderstyle&#039;,&lt;br /&gt;
		colheader_and_num = &#039;col%dheader&#039;,&lt;br /&gt;
		colheaderstyle_and_num = &#039;col%dheaderstyle&#039;,&lt;br /&gt;
		colheadercolspan_and_num = &#039;col%dheadercolspan&#039;,&lt;br /&gt;
		colstyle = &#039;colstyle&#039;,&lt;br /&gt;
		col_and_num = &#039;col%d&#039;,&lt;br /&gt;
		colstyle_and_num = &#039;col%dstyle&#039;,&lt;br /&gt;
		colwidth = &#039;colwidth&#039;,&lt;br /&gt;
		colwidth_and_num = &#039;col%dwidth&#039;,&lt;br /&gt;
		colhfooterstyle = &#039;colfooterstyle&#039;,&lt;br /&gt;
		colfooter_and_num = &#039;col%dfooter&#039;,&lt;br /&gt;
		colfooterstyle_and_num = &#039;col%dfooterstyle&#039;,&lt;br /&gt;
		colfootercolspan_and_num = &#039;col%dfootercolspan&#039;,&lt;br /&gt;
		coltablestyle = &#039;coltablestyle&#039;,&lt;br /&gt;
		evencolstyle = &#039;evencolstyle&#039;,&lt;br /&gt;
		fullwidth = &#039;fullwidth&#039;,&lt;br /&gt;
		oddcolstyle = &#039;oddcolstyle&#039;,&lt;br /&gt;
		padding = &#039;padding&#039;&lt;br /&gt;
	},&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Module:Navbox_with_collapsible_groups/configuration&amp;diff=2716</id>
		<title>Module:Navbox with collapsible groups/configuration</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Module:Navbox_with_collapsible_groups/configuration&amp;diff=2716"/>
		<updated>2024-11-22T08:46:54Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	--These values will be merged with those from [[Module:Navbox/configuration]]&lt;br /&gt;
	keyword = {&lt;br /&gt;
		state_uncollapsed = &#039;uncollapsed&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		contentnum = &#039;^content(%d+)$&#039;,&lt;br /&gt;
		groupnum = &#039;^group(%d+)$&#039;,&lt;br /&gt;
		num = &#039;^%a+(%d+)$&#039;,&lt;br /&gt;
		sectnum = &#039;^sect(%d+)$&#039;,&lt;br /&gt;
		sectionnum = &#039;^section(%d+)$&#039;,&lt;br /&gt;
		withCollapsibleGroups = &#039;Template:Navbox with collapsible groups&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	arg = {&lt;br /&gt;
		abbr_and_num = &#039;abbr%d&#039;,&lt;br /&gt;
		content_and_num = &#039;content%d&#039;,&lt;br /&gt;
		contentstyle_and_num = &#039;content%dstyle&#039;,&lt;br /&gt;
		contentstyle = &#039;contentstyle&#039;,&lt;br /&gt;
		image_and_num = &#039;image%d&#039;,&lt;br /&gt;
		imageleft_and_num = &#039;imageleft%d&#039;,&lt;br /&gt;
		sect_and_num = &#039;sect%d&#039;,&lt;br /&gt;
		section_and_num = &#039;section%d&#039;,&lt;br /&gt;
		secttitlestyle = &#039;secttitlestyle&#039;,&lt;br /&gt;
		sectiontitlestyle_and_num = &#039;section%dtitlestyle&#039;,&lt;br /&gt;
		selected = &#039;selected&#039;,&lt;br /&gt;
		state_and_num = &#039;state%d&#039;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Convinfobox/doc&amp;diff=2714</id>
		<title>Template:Convinfobox/doc</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Convinfobox/doc&amp;diff=2714"/>
		<updated>2024-11-22T08:46:54Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
{{high-use}}&lt;br /&gt;
{{Lua|Module:ConvertIB}}&lt;br /&gt;
&amp;lt;!-- EDIT TEMPLATE DOCUMENTATION BELOW THIS LINE --&amp;gt;&lt;br /&gt;
This template is a frontend for {{tl|convert}}.  It is intended as a meta-template for use within the code for a template, where the input is not known &#039;&#039;a priori&#039;&#039;.  For unit conversions within articles, one should use {{tl|convert}} directly.&lt;br /&gt;
&lt;br /&gt;
This template accepts from four to seven unnamed parameters.  Odd parameters must be numerical (or empty) and specify the numerical value of a measurement and the intended precision of the conversion.  Even parameters must be unit codes as used in {{tlf|convert}}.  Named parameters are the same as used by {{tlf|convert}}.&lt;br /&gt;
&lt;br /&gt;
This template differs from {{tlf|convert}} in the following respects.&lt;br /&gt;
&lt;br /&gt;
* The units to convert to and the units to convert from must be specified (therefore there are no default convert-to units).&lt;br /&gt;
* Fields for the numerical value of a measurement may be left blank.&lt;br /&gt;
* The default is to abbreviate units (where abbreviations exist).&lt;br /&gt;
* Range conversions are not available.&lt;br /&gt;
&lt;br /&gt;
This template may be used when it is unknown in which direction the conversion is to be made.  The direction is determined as shown in the following examples.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|100|m2||sqft}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|100|m2||sqft}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||m2|100|sqft}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||m2|100|sqft}}&lt;br /&gt;
&lt;br /&gt;
==Dual conversions==&lt;br /&gt;
Dual conversions may be performed by adding a fifth (possibly blank) and sixth unnamed parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|375|ml||impoz||USoz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|375|ml||impoz||USoz}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||ml|40|impoz||USoz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||ml|40|impoz||USoz}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||ml||impoz|32|USoz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||ml||impoz|32|USoz}}&lt;br /&gt;
&lt;br /&gt;
==Paired units==&lt;br /&gt;
Length may be expressed in feet and inches.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|180|cm||ft||in}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|180|cm||ft||in}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||cm|5|ft||in}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||cm|5|ft||in}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||cm||ft|120|in}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||cm||ft|120|in}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||cm|5|ft|6|in}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||cm|5|ft|6|in}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||ft||in|180|cm}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||ft||in|180|cm}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|5|ft||in||cm}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|5|ft||in||cm}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||ft|120|in||cm}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||ft|120|in||cm}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|5|ft|6|in||cm}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|5|ft|6|in||cm}}&lt;br /&gt;
&lt;br /&gt;
Similarly, mass may be expressed in pounds and ounces.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|8.5|kg||lb||oz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|8.5|kg||lb||oz}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||kg|4|lb|3|oz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||kg|4|lb|3|oz}}&lt;br /&gt;
&lt;br /&gt;
Mass may also be expressed in stone and pounds.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|65|kg||st||lb}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|65|kg||st||lb}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||kg|10|st||lb}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||kg|10|st||lb}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||kg|10|st|7|lb}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||kg|10|st|7|lb}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||kg||st|145|lb}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||kg||st|145|lb}}&lt;br /&gt;
&lt;br /&gt;
==Specifying more than one value==&lt;br /&gt;
The template currently bases conversions on the first non-blank numerical value ignoring any secondary or tertiary values.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|100|m2|100|sqft}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|100|m2|100|sqft}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|375|ml|40|impoz||USoz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|375|ml|40|impoz||USoz}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|375|ml||impoz|32|USoz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|375|ml||impoz|32|USoz}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||ml|40|impoz|32|USoz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||ml|40|impoz|32|USoz}}&lt;br /&gt;
&lt;br /&gt;
==Rounding==&lt;br /&gt;
As with {{tlf|convert}} rounding can be done automatically or manually by specifying the precision and/or number of significant figures in the converted value.  The number of significant figures can be determined by the parameter {{para|sigfig|}}.  The precision can be determined by the fifth (if there is no sixth) or seventh (if there is a sixth) unnamed parameter as shown in the examples below.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|100|m2||sqft|4}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|100|m2||sqft|4}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|100|m2||sqft|sigfig=4}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|100|m2||sqft|sigfig=4}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||ml|40|impoz||USoz|2}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||ml|40|impoz||USoz|2}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||ml|40|impoz||USoz|sigfig=3}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||ml|40|impoz||USoz|sigfig=3}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||kg|10|st|7|lb|3}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||kg|10|st|7|lb|3}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||kg|10|st|7|lb|sigfig=5}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||kg|10|st|7|lb|sigfig=5}}&lt;br /&gt;
&lt;br /&gt;
Specify precision &amp;quot;0&amp;quot; to prevent rounding of values ending in zero:&lt;br /&gt;
* kilograms (kg)&lt;br /&gt;
** with &amp;quot;0&amp;quot;: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|110|kg||lb|0}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|110|kg||lb|0}}&lt;br /&gt;
** without: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|110|kg||lb}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|110|kg||lb}}&lt;br /&gt;
* pounds (lb)&lt;br /&gt;
** with &amp;quot;0&amp;quot;: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||kg|240|lb|0}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||kg|240|lb|0}}&lt;br /&gt;
** without: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||kg|240|lb}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||kg|240|lb}}&lt;br /&gt;
* metres (m)&lt;br /&gt;
** with &amp;quot;0&amp;quot;: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|100|m||ft|0}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|100|m||ft|0}}&lt;br /&gt;
** without: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox|100|m||ft}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox|100|m||ft}}&lt;br /&gt;
* inches (in)&lt;br /&gt;
** with &amp;quot;0&amp;quot;: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||cm|100|in|0}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||cm|100|in|0}}&lt;br /&gt;
** without: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||cm|100|in}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||cm|100|in}}&lt;br /&gt;
&lt;br /&gt;
==Leaving all numerical fields blank==&lt;br /&gt;
If all numerical value fields are left blank the template returns nothing.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||m2||sqft}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||m2||sqft}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{convinfobox||ml||impoz||USoz}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{convinfobox||ml||impoz||USoz}}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
; Supporting templates&lt;br /&gt;
* [[Template:Convert]] (invokes [[Module:Convert]])&lt;br /&gt;
&lt;br /&gt;
; Templates transcluding {{tl|convinfobox}}&lt;br /&gt;
{{Collapsible list | framestyle = border 1px; | titlestyle = text-align:left;background-color:lightgrey; |&lt;br /&gt;
# [[Template:Infobox amusement park]]&lt;br /&gt;
# [[Template:Infobox animal]]&lt;br /&gt;
# [[Template:Infobox bandy biography]]&lt;br /&gt;
# [[Template:Infobox body of water]]&lt;br /&gt;
# [[Template:Infobox cemetery]]&lt;br /&gt;
# [[Template:Infobox college football player]]&lt;br /&gt;
# [[Template:Infobox combat robot]]&lt;br /&gt;
# [[Template:Infobox diocese]]&lt;br /&gt;
# [[Template:Infobox figure skater]]&lt;br /&gt;
# [[Template:Infobox football biography]]&lt;br /&gt;
# [[Template:Infobox hiking trail]]&lt;br /&gt;
# [[Template:Infobox islands/area]]&lt;br /&gt;
#* [[Template:Infobox islands]] (via [[Template:Infobox islands/area]])&lt;br /&gt;
# [[Template:Infobox mountain]]&lt;br /&gt;
#* [[Template:Infobox Berg]] (via [[Template:Infobox mountain]])&lt;br /&gt;
# [[Template:Infobox mountain range]]&lt;br /&gt;
#* [[Template:Infobox Gebirgsgruppe]] (via [[Template:Infobox mountain range]])&lt;br /&gt;
# [[Template:Infobox NFL player]]&lt;br /&gt;
# [[Template:Infobox person]]&lt;br /&gt;
# [[Template:Infobox pipeline]]&lt;br /&gt;
# [[Template:Infobox power transmission line]]&lt;br /&gt;
# [[Template:Infobox protected area]]&lt;br /&gt;
# [[Template:Infobox rail line]]&lt;br /&gt;
#* [[Template:Infobox Paris Metro line]] (via [[Template:Infobox rail line]])&lt;br /&gt;
# [[Template:Infobox rugby biography]]&lt;br /&gt;
# [[Template:Infobox rugby league biography]]&lt;br /&gt;
# [[Template:Infobox sportsperson]]&lt;br /&gt;
#* [[Template:Infobox biathlete]] (via [[Template:Infobox sportsperson]])&lt;br /&gt;
#* [[Template:Infobox boxer (amateur)]] (via [[Template:Infobox sportsperson]])&lt;br /&gt;
#* [[Template:Infobox sailor]] (via [[Template:Infobox sportsperson]])&lt;br /&gt;
#* [[Template:Infobox speed skater]] (via [[Template:Infobox sportsperson]])&lt;br /&gt;
#* [[Template:Infobox sport wrestler]] (via [[Template:Infobox sportsperson]])&lt;br /&gt;
#* [[Template:Infobox swimmer]] (via [[Template:Infobox sportsperson]])&lt;br /&gt;
# [[Template:Infobox tennis biography]]&lt;br /&gt;
# [[Template:Infobox themed area]]&lt;br /&gt;
# [[Template:Infobox valley]]&lt;br /&gt;
# [[Template:Infobox water park]]&lt;br /&gt;
# [[Template:Infobox YouTube personality]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Math templates|conversion}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories go here --&amp;gt;&lt;br /&gt;
[[Category:Numerical conversion templates]]&lt;br /&gt;
[[Category:Convert-like templates|{{SUBPAGENAME}}]]&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Math_templates&amp;diff=2712</id>
		<title>Template:Math templates</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Math_templates&amp;diff=2712"/>
		<updated>2024-11-22T08:46:53Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- This template uses British English. --&amp;gt;&lt;br /&gt;
{{Navbox with collapsible groups&lt;br /&gt;
| name = Math templates&lt;br /&gt;
| state = {{{state|expanded}}}&lt;br /&gt;
| bodyclass = hlist&lt;br /&gt;
| title = Math templates&lt;br /&gt;
| liststyle = font-size:110%;&amp;lt;!--(as some templates&#039; descriptions include links)--&amp;gt;&lt;br /&gt;
| selected = {{{selected|{{{expanded|{{{1|}}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-------------- Functions / Numeral systems --------------&amp;gt;&lt;br /&gt;
| abbr1 = FN&lt;br /&gt;
| group1 =&lt;br /&gt;
*Functions&lt;br /&gt;
*Numeral systems&lt;br /&gt;
| state1 = &amp;lt;noinclude&amp;gt;expanded&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| list1 =&lt;br /&gt;
 {{Navbox |child&lt;br /&gt;
  | group1 = Functions&lt;br /&gt;
  | list1 =&lt;br /&gt;
*{{tlbare|elementary arithmetic}}&lt;br /&gt;
*{{tlbare|precision}}&lt;br /&gt;
*{{tlbare|val}}&amp;amp;nbsp;(value formatting)&lt;br /&gt;
*{{tlbare|percentage}}&lt;br /&gt;
  | group2 = Numeral systems&lt;br /&gt;
  | list2 =&lt;br /&gt;
*{{ml|BaseConvert|&#039;&#039;X&#039;&#039;to&#039;&#039;Y&#039;&#039;}}&lt;br /&gt;
*{{tlbare|binary}}&lt;br /&gt;
*{{tlbare|decimal2Base}}&lt;br /&gt;
*{{tlbare|hex2dec}}&lt;br /&gt;
*{{tlbare|hexadecimal}}&lt;br /&gt;
*{{tlbare|octal}}&lt;br /&gt;
*{{tlbare|quaternary}}&lt;br /&gt;
*{{tlbare|rn}}&lt;br /&gt;
*{{tlbare|roman}}&lt;br /&gt;
*{{tlbare|ternary}}&lt;br /&gt;
*{{tlbare|vigesimal}}&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---------------------- Conversions ----------------------&amp;gt;&lt;br /&gt;
| abbr2 = conversions&lt;br /&gt;
| group2 = Conversions&lt;br /&gt;
| state2 = &amp;lt;noinclude&amp;gt;expanded&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| list2 =&lt;br /&gt;
 {{Aligned table&lt;br /&gt;
  |style=margin:0 auto 0;text-align:left;&lt;br /&gt;
  | {{Aligned table&lt;br /&gt;
     |style=padding-right:2.5em;&lt;br /&gt;
     |col1style=text-align:right;white-space:nowrap;padding-right:1.0em;&lt;br /&gt;
     |col2style=font-size:90%;&amp;lt;!--(see liststyle above)--&amp;gt; vertical-align:middle;line-height:1.3em;font-style:italic;&lt;br /&gt;
     | {{tlbare|convert}}       | many units (see: [[Template:Convert/list_of_units |list]])&lt;br /&gt;
     | {{tlbare|cvt}}           | abbreviated {{tl|convert}}&lt;br /&gt;
     | {{tlbare|convinfobox}}   | {{tl|convert}} for infoboxes&lt;br /&gt;
     | {{tlbare|bbl to t}}      | barrels of oil to tonnes&lt;br /&gt;
     | {{tlbare|long ton}}      | long hundredweights, quarters and pounds to kilograms;&amp;lt;br/&amp;gt;long tons and hundredweights to pounds and metric tons&lt;br /&gt;
     | {{tlbare|miles-chains}}  | miles and chains to kilometres linking &amp;quot;chains&amp;quot;&lt;br /&gt;
   }}&lt;br /&gt;
  | {{Aligned table&lt;br /&gt;
     |col1style=text-align:right;white-space:nowrap;padding-right:1.0em;&lt;br /&gt;
     |col2style=font-size:90%;&amp;lt;!--(as above)--&amp;gt; vertical-align:middle;line-height:1.3em;font-style:italic;&lt;br /&gt;
     | {{tlbare|decdeg}}          | degrees, minutes, and seconds to [[decimal degrees]]&lt;br /&gt;
     | {{tlbare|deg2DMS|deg2dms}} | decimal degrees to degrees, minutes, and seconds&lt;br /&gt;
     | {{tlbare|deg2HMS|deg2hms}} | decimal degrees to [[hour angle]] (in hours, minutes, and seconds)&lt;br /&gt;
     | {{tlbare|HMS2Deg|hms2deg}} | [[hour angle]] (in hours, minutes, and seconds) to decimal degrees&lt;br /&gt;
     | {{tlbare|inflation}}       | calculate inflation of Consumer Price Index-related prices&lt;br /&gt;
     | {{tlbare|pop density}}     | population density in an area&lt;br /&gt;
     | {{tlbare|track gauge}}     | railway track gauges&lt;br /&gt;
    }}&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----------------------- Notation &amp;amp; formatting ------------------------&amp;gt;&lt;br /&gt;
| group3 = Notation and {{Category link|Mathematical formatting templates|formatting}}&lt;br /&gt;
| abbr3 = notation&lt;br /&gt;
| state3 = &amp;lt;noinclude&amp;gt;expanded&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| list3 =&lt;br /&gt;
 {{Aligned table&lt;br /&gt;
  |style=margin:0 auto 0;text-align:left;&lt;br /&gt;
  | {{Aligned table&lt;br /&gt;
     |style=padding-right:2.5em;&lt;br /&gt;
     |col1style=text-align:right;white-space:nowrap;padding-right:1.0em;&lt;br /&gt;
     |col2style=font-size:90%;&amp;lt;!--(as above)--&amp;gt; vertical-align:middle;line-height:1.3em;font-style:italic;&lt;br /&gt;
     | {{tlbare|bigmath}} | bigger font to match {{noitalic|[[TeX]]}} {{noitalic|&amp;lt;samp&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;displaystyle&amp;lt;/samp&amp;gt;}} (standalone formulas only)&lt;br /&gt;
     | &lt;br /&gt;
*{{tlbare|bra-ket}}&lt;br /&gt;
*{{tlbare|braket}}&lt;br /&gt;
*{{tlbare|bra}}&lt;br /&gt;
*{{tlbare|ket}} | [[bra–ket notation]]&lt;br /&gt;
     | {{tlbare|ceil}}, {{tlbare|floor}}  | calculations [[:mw:Help:Extension:ParserFunctions##expr|:mw:Help:#expr]]; formatting indicators {{noitalic|1={{ceil|3.14}}}}, {{noitalic|1={{floor|3.14}}}} (no calculation performed)&lt;br /&gt;
     | {{tlbare|fraction}}    | slant fractions {{frac|3|5}}  (not for maths/science articles; use &#039;&#039;standing&#039;&#039; or upright fractions {{noitalic|{{tlx|sfrac}}}} instead)&lt;br /&gt;
     | {{tlbare|intmath}} | [[integral symbol]]s&lt;br /&gt;
     | &lt;br /&gt;
*{{tlbare|langle}}&lt;br /&gt;
*{{tlbare|rangle}}&lt;br /&gt;
*{{tlbare|Angle bracket|angbr}} | [[Bracket#Angular brackets|angular bracket]]s&lt;br /&gt;
     | &lt;br /&gt;
*{{tlbare|ldelim}}&lt;br /&gt;
*{{tlbare|rdelim}} | multiline delimiters (2–5 lines inclusive)&lt;br /&gt;
     | {{tlbare|abs}}     | absolute values (paired vertical lines)&lt;br /&gt;
     | {{tlbare|math}}    | short text-based formulas&lt;br /&gt;
     | {{tlbare|mathcal}} | [mathematical] calligraphic font; alternative to {{noitalic|[[LaTeX]]}}  {{noitalic|&amp;lt;samp&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;mathcal{...}&amp;lt;/samp&amp;gt;}}&lt;br /&gt;
    }}&lt;br /&gt;
  | {{Aligned table&lt;br /&gt;
     |col1style=text-align:right;white-space:nowrap;padding-right:1.0em;&lt;br /&gt;
     |col2style=font-size:90%;&amp;lt;!--(as above)--&amp;gt; vertical-align:middle;line-height:1.3em;font-style:italic;&lt;br /&gt;
     | {{tlbare|mvar}}    | individual italicized maths variables in normal text&lt;br /&gt;
     | &lt;br /&gt;
*{{tlbare|overline}}&lt;br /&gt;
*{{tlbare|underline}} | a line set above/below a sequence of characters&lt;br /&gt;
     | {{tlbare|overarc}} | an arc set above a sequence of characters&lt;br /&gt;
     | &lt;br /&gt;
*{{tlbare|overset}}&lt;br /&gt;
*{{tlbare|underset}} | arbitrary characters/diacritics set above/below one another&lt;br /&gt;
     | {{tlbare|pars}}    | parentheses that can be resized {{noitalic|1={{math|{{pars|s=150|{{large|∑}}}}}}}}&lt;br /&gt;
     | {{tlbare|sfrac}}   | &amp;quot;standing&amp;quot; or upright fractions {{sfrac|3|5}} (use in maths/science articles instead of{{noitalic|{{tlx|fraction}}}})&lt;br /&gt;
     | &lt;br /&gt;
*{{tlbare|sub}}&lt;br /&gt;
*{{tlbare|sup}}&lt;br /&gt;
*{{tlbare|su}} | subscripts and superscripts&lt;br /&gt;
     |style7.1=vertical-align:middle;text-align:right;padding-right:1.0em;| {{tlbare|tmath}}&lt;br /&gt;
     | Wrap {{noitalic|[[TeX]]}} in {{noitalic|&amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;&amp;lt;/nowiki&amp;gt;}} tags&lt;br /&gt;
     | {{tlbare|tombstone}} | symbol indicating the [[Tombstone (typography)|end of a proof]]&lt;br /&gt;
     | {{tlbare|val}}     | measurement values, uncertainties and units&lt;br /&gt;
     | {{tlbare|vec}}     | various overarrows, underarrows, etc.&amp;lt;!--pointing left, right or both ways--&amp;gt;&lt;br /&gt;
    }}&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---------------- Boxes / Tags / Notices -----------------&amp;gt;&lt;br /&gt;
| abbr4 = BTN&lt;br /&gt;
| group4 =&lt;br /&gt;
*Boxes&lt;br /&gt;
*Tags&lt;br /&gt;
*Notices&lt;br /&gt;
| state4 = &amp;lt;noinclude&amp;gt;expanded&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| list4 =&lt;br /&gt;
 {{Navbox with columns |child&lt;br /&gt;
  |colstyle=text-align:center;&lt;br /&gt;
  | col1header = Boxes&lt;br /&gt;
  | col1 =&lt;br /&gt;
*{{tlbare|arithmetic operations}}&lt;br /&gt;
*{{tlbare|calculus}}&lt;br /&gt;
*{{tlbare|Infobox mathematical function}}&lt;br /&gt;
*{{tlbare|functions}}&lt;br /&gt;
  | col2header = Tags&lt;br /&gt;
  | col2 =&lt;br /&gt;
*{{tlbare|metricate}}&lt;br /&gt;
*{{tlbare|undue precision}}&lt;br /&gt;
*{{tlbare|units attention}}&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
| below =&lt;br /&gt;
*{{icon|Category}} {{c|Mathematics templates|Category}}&lt;br /&gt;
*[[:Module:Math]]&lt;br /&gt;
&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>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Ceil&amp;diff=2710</id>
		<title>Template:Ceil</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Ceil&amp;diff=2710"/>
		<updated>2024-11-22T08:46:53Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;⌈{{{1}}}⌉&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Pars&amp;diff=2708</id>
		<title>Template:Pars</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Pars&amp;diff=2708"/>
		<updated>2024-11-22T08:46:52Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{&lt;br /&gt;
  #if: {{{2|}}}&lt;br /&gt;
     |{{font | size={{{2}}} | text=(}}&amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;padding-left:0.1em; padding-right:0.1em;&amp;quot;&amp;gt;{{{1|&amp;amp;nbsp;&amp;amp;nbsp;}}}&amp;lt;/span&amp;gt;{{font | size={{{2}}} | text=)}}|{{#if: {{{s|}}}&lt;br /&gt;
           |{{font | size={{{s}}} | text=(}}|(}}{{&lt;br /&gt;
                #if: {{{1|}}}&lt;br /&gt;
                   |&amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;padding-left:0.1em; padding-right:0.1em;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;|&amp;amp;nbsp;&amp;amp;nbsp;}}{{&lt;br /&gt;
                #if: {{{s|}}}&lt;br /&gt;
                   |{{font | size={{{s}}} | text=)}}|)}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!------- &lt;br /&gt;
&lt;br /&gt;
Below, we add spacing to the above code to make it more readable: &lt;br /&gt;
&lt;br /&gt;
-------&amp;gt;&lt;br /&gt;
{{#if: {{{2|}}}  |   &amp;lt;!--- Start case where 2 is defined ---&amp;gt;&lt;br /&gt;
{{font | {{{2}}} | text=(}}&amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;padding-left:0.1em; padding-right:0.1em;&amp;quot;&amp;gt;{{{1|&amp;amp;nbsp;&amp;amp;nbsp;}}}&amp;lt;/span&amp;gt;{{font | {{{2}}} | text=)}}      &amp;lt;!--- End case where 2 is defined --&amp;gt;&lt;br /&gt;
|                  &amp;lt;!-- Start case where 2 is NOT defined --&amp;gt;&lt;br /&gt;
{{#if: {{{s|}}} |{{font | size={{{s}}} | text=(}}|(}} &amp;lt;!--- If s is defined then font ( otherwise, print a normal ( ---&amp;gt;&lt;br /&gt;
{{#if: {{{1|}}} |   &amp;lt;!--- Start case where 1 is defined ---&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;padding-left:0.1em; padding-right:0.1em;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
|                  &amp;lt;!--- Start case where 1 is NOT defined ---&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;}}&lt;br /&gt;
{{#if: {{{s|}}} |{{font | size={{{s}}} | text=)}}|)}} &amp;lt;!--- If s is defined then font ) otherwise, else print a normal ) ---&amp;gt;&lt;br /&gt;
}}&amp;lt;!--- End the if statement: {{#if: {{{2|}}} | ...  ---&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Floor&amp;diff=2706</id>
		<title>Template:Floor</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Floor&amp;diff=2706"/>
		<updated>2024-11-22T08:46:52Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;font-size:{{{2|1em}}}&amp;quot;&amp;gt;⌊&amp;lt;/span&amp;gt;{{{1}}}&amp;lt;span style=&amp;quot;font-size:{{{2|1em}}}&amp;quot;&amp;gt;⌋&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Font&amp;diff=2704</id>
		<title>Template:Font</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Font&amp;diff=2704"/>
		<updated>2024-11-22T08:46:52Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span style=&amp;quot;{{ {{{|safesubst:}}}#if: {{{font|}}} |font-family:{{{font}}};}}{{ {{{|safesubst:}}}#if: {{{size|}}} |font-size:{{{size}}};}}{{ {{{|safesubst:}}}#if: {{{color|}}} |color:{{{color}}};}}{{ {{{|safesubst:}}}#if: {{{bgcolor|}}} |background-color:{{{bgcolor}}};}}{{ {{{|safesubst:}}}#if: {{{css|}}} |{{{css}}}}}&amp;quot;&amp;gt;{{ {{{|safesubst:}}}#if: {{{1|}}} |{{{1}}}|{{{text}}}}}&amp;lt;/span&amp;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>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Math&amp;diff=2702</id>
		<title>Template:Math</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Math&amp;diff=2702"/>
		<updated>2024-11-22T08:46:52Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;texhtml {{#if:{{{big|}}}{{{size|}}}|texhtml-big}}&amp;quot; {{#if:{{{big|}}}{{{size|}}}|style=&amp;quot;font-size:{{{size|165%}}};&amp;quot;}}&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#invoke:Check for unknown parameters|check&lt;br /&gt;
| unknown = {{main other|[[Category:Pages using Math with unknown parameters|_VALUE_]]}}&lt;br /&gt;
| showblankpositional=1&lt;br /&gt;
| preview = unknown parameter &amp;quot;_VALUE_&amp;quot; (consider using &amp;lt;code&amp;gt;{{!}}1=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{!}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{=}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 1 | big | size&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>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Navbox_with_columns&amp;diff=2700</id>
		<title>Template:Navbox with columns</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Navbox_with_columns&amp;diff=2700"/>
		<updated>2024-11-22T08:46:52Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Navbox with columns|navbox}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---Please add metadata to the &amp;lt;includeonly&amp;gt; section at the bottom of the /doc subpage---&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Sfrac/styles.css&amp;diff=2698</id>
		<title>Template:Sfrac/styles.css</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Sfrac/styles.css&amp;diff=2698"/>
		<updated>2024-11-22T08:46:51Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.sfrac {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sfrac.tion,&lt;br /&gt;
.sfrac .tion {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: -0.5em;&lt;br /&gt;
	font-size: 85%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sfrac .num {&lt;br /&gt;
	display: block;&lt;br /&gt;
	line-height: 1em;&lt;br /&gt;
	margin: 0.0em 0.1em;&lt;br /&gt;
	border-bottom: 1px solid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sfrac .den {&lt;br /&gt;
	display: block;&lt;br /&gt;
	line-height: 1em;&lt;br /&gt;
	margin: 0.1em 0.1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* [[Template:Screen reader-only]] is canonical implementation onwiki */&lt;br /&gt;
.sr-only {&lt;br /&gt;
	border: 0;&lt;br /&gt;
	clip: rect(0, 0, 0, 0); /* removed from CSS */&lt;br /&gt;
	clip-path: polygon(0px 0px, 0px 0px, 0px 0px);&lt;br /&gt;
	height: 1px;&lt;br /&gt;
	margin: -1px;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	width: 1px;&lt;br /&gt;
	/* white-space: nowrap; /* already have nowrap above */&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Sfrac&amp;diff=2696</id>
		<title>Template:Sfrac</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Sfrac&amp;diff=2696"/>
		<updated>2024-11-22T08:46:51Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ {{{|safesubst:}}}#invoke:Unsubst||$B=&amp;lt;templatestyles src=&amp;quot;Sfrac/styles.css&amp;quot; /&amp;gt;&amp;lt;span class=&amp;quot;sfrac&amp;quot;&amp;gt;&amp;amp;NoBreak;{{#if:{{{3|}}}|{{{1}}}&amp;lt;span class=&amp;quot;sr-only&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;}}&amp;lt;!--&lt;br /&gt;
 --&amp;gt;&amp;lt;span class=&amp;quot;tion&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
  --&amp;gt;&amp;lt;span class=&amp;quot;num&amp;quot;&amp;gt;{{#if:{{{3|}}}|{{{2}}}|{{#if:{{{2|}}}|{{{1}}}|1}}}}&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
  --&amp;gt;&amp;lt;span class=&amp;quot;sr-only&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
  --&amp;gt;&amp;lt;span class=&amp;quot;den&amp;quot;&amp;gt;{{{3|{{{2|{{{1|1}}}}}}}}}&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
 --&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;amp;NoBreak;&amp;lt;/span&amp;gt;}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to /doc subpage, not here. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Noitalic/styles.css&amp;diff=2694</id>
		<title>Template:Noitalic/styles.css</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Noitalic/styles.css&amp;diff=2694"/>
		<updated>2024-11-22T08:46:51Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template}} */&lt;br /&gt;
/* Styling for Template:Noitalic */&lt;br /&gt;
.noitalic {&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Noitalic&amp;diff=2692</id>
		<title>Template:Noitalic</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Noitalic&amp;diff=2692"/>
		<updated>2024-11-22T08:46:51Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Noitalic/styles.css&amp;quot;/&amp;gt;&amp;lt;span class=&amp;quot;noitalic&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Module:Navbox_with_collapsible_groups&amp;diff=2690</id>
		<title>Module:Navbox with collapsible groups</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Module:Navbox_with_collapsible_groups&amp;diff=2690"/>
		<updated>2024-11-22T08:46:51Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{Navbox with collapsible groups}}&lt;br /&gt;
&lt;br /&gt;
require(&#039;strict&#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
local parentCfg = mw.loadData(&#039;Module:Navbox/configuration&#039;)&lt;br /&gt;
local thisCfg = mw.loadData(&#039;Module:Navbox with collapsible groups/configuration&#039;)&lt;br /&gt;
local cfg = {}&lt;br /&gt;
for k, v in pairs(thisCfg) do&lt;br /&gt;
	if type(v) == &#039;table&#039; then&lt;br /&gt;
		cfg[k] = {}&lt;br /&gt;
		if type(parentCfg[k]) == &#039;table&#039; then&lt;br /&gt;
			for kk, vv in pairs(parentCfg[k]) do cfg[k][kk] = vv end&lt;br /&gt;
		end&lt;br /&gt;
		for kk, vv in pairs(v) do cfg[k][kk] = vv end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
local inArray = require(&amp;quot;Module:TableTools&amp;quot;).inArray&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
&lt;br /&gt;
-- helper functions&lt;br /&gt;
local andnum = function(s, n) return string.format(cfg.arg[s..&#039;_and_num&#039;], n) end&lt;br /&gt;
	&lt;br /&gt;
local isblank = function(v) return (v or &#039;&#039;) == &#039;&#039; end&lt;br /&gt;
&lt;br /&gt;
local function concatstrings(s)&lt;br /&gt;
	local r = table.concat(s, &#039;&#039;)&lt;br /&gt;
	if r:match(&#039;^%s*$&#039;) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
local function concatstyles(s)&lt;br /&gt;
	local r = &#039;&#039;&lt;br /&gt;
	for _, v in ipairs(s) do&lt;br /&gt;
		v = mw.text.trim(v, &amp;quot;%s;&amp;quot;)&lt;br /&gt;
		if not isblank(v) then r = r .. v .. &#039;;&#039; end&lt;br /&gt;
	end&lt;br /&gt;
	if isblank(r) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
local function getSubgroup(args, listnum, listText)&lt;br /&gt;
	local subArgs = {&lt;br /&gt;
		[cfg.arg.border] = cfg.keyword.border_subgroup,&lt;br /&gt;
		[cfg.arg.navbar] = cfg.keyword.navbar_plain&lt;br /&gt;
	}&lt;br /&gt;
	local hasSubArgs = false&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = tostring(k)&lt;br /&gt;
		for _, w in ipairs(cfg.keyword.subgroups) do&lt;br /&gt;
			w = w .. listnum .. &amp;quot;_&amp;quot;&lt;br /&gt;
			if (#k &amp;gt; #w) and (k:sub(1, #w) == w) then&lt;br /&gt;
				subArgs[k:sub(#w + 1)] = v&lt;br /&gt;
				hasSubArgs = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return hasSubArgs and p._navbox(subArgs) or listText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main functions&lt;br /&gt;
p._navbox = require(&#039;Module:Navbox&#039;)._navbox&lt;br /&gt;
&lt;br /&gt;
function p._withCollapsibleGroups(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthrough = {&lt;br /&gt;
		[cfg.arg.above]=true,[cfg.arg.aboveclass]=true,[cfg.arg.abovestyle]=true,&lt;br /&gt;
		[cfg.arg.basestyle]=true,&lt;br /&gt;
		[cfg.arg.below]=true,[cfg.arg.belowclass]=true,[cfg.arg.belowstyle]=true,&lt;br /&gt;
		[cfg.arg.bodyclass]=true,[cfg.arg.bodystyle]=true,&lt;br /&gt;
		[cfg.arg.border]=true,&lt;br /&gt;
		[cfg.arg.groupclass]=true,&lt;br /&gt;
		[cfg.arg.image]=true,[cfg.arg.imageclass]=true,[cfg.arg.imagestyle]=true,&lt;br /&gt;
		[cfg.arg.imageleft]=true,[cfg.arg.imageleftstyle]=true,&lt;br /&gt;
		[cfg.arg.listclass]=true,&lt;br /&gt;
		[cfg.arg.name]=true,&lt;br /&gt;
		[cfg.arg.navbar]=true,&lt;br /&gt;
		[cfg.arg.state]=true,&lt;br /&gt;
		[cfg.arg.style]=true,&lt;br /&gt;
		[cfg.arg.title]=true,[cfg.arg.titleclass]=true,[cfg.arg.titlestyle]=true&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if k and type(k) == &#039;string&#039; then&lt;br /&gt;
			if passthrough[k] then&lt;br /&gt;
				targs[k] = v&lt;br /&gt;
			elseif (k:match(cfg.pattern.num)) then&lt;br /&gt;
				local n = k:match(cfg.pattern.num)&lt;br /&gt;
				local list_and_num = andnum(&#039;list&#039;, n)&lt;br /&gt;
				if ((k:match(cfg.pattern.listnum) or k:match(cfg.pattern.contentnum))&lt;br /&gt;
						and targs[list_and_num] == nil&lt;br /&gt;
						and pargs[andnum(&#039;group&#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&#039;sect&#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&#039;section&#039;, n)] == nil) then&lt;br /&gt;
					targs[list_and_num] = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;content&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					if (targs[list_and_num] and inArray(cfg.keyword.subgroups, targs[list_and_num])) then&lt;br /&gt;
						targs[list_and_num] = getSubgroup(pargs, n, targs[list_and_num])&lt;br /&gt;
					end&lt;br /&gt;
				elseif ((k:match(cfg.pattern.groupnum) or k:match(cfg.pattern.sectnum) or k:match(cfg.pattern.sectionnum))&lt;br /&gt;
						and targs[list_and_num] == nil) then&lt;br /&gt;
					local titlestyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.groupstyle] or &#039;&#039;,&lt;br /&gt;
						pargs[cfg.arg.secttitlestyle] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;groupstyle&#039;, n)] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;sectiontitlestyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local liststyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.liststyle] or &#039;&#039;,&lt;br /&gt;
						pargs[cfg.arg.contentstyle] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;liststyle&#039;, n)] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;contentstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local title = concatstrings({&lt;br /&gt;
						pargs[andnum(&#039;group&#039;, n)] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;sect&#039;, n)] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;section&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local list = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;content&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					if list and inArray(cfg.keyword.subgroups, list) then&lt;br /&gt;
						list = getSubgroup(pargs, n, list)&lt;br /&gt;
					end&lt;br /&gt;
					local abbr_and_num = andnum(&#039;abbr&#039;, n)&lt;br /&gt;
					local state = (pargs[abbr_and_num] and pargs[abbr_and_num] == pargs[cfg.arg.selected]) &lt;br /&gt;
						and cfg.keyword.state_uncollapsed&lt;br /&gt;
						or (pargs[andnum(&#039;state&#039;, n)] or cfg.keyword.state_collapsed)&lt;br /&gt;
					&lt;br /&gt;
					targs[list_and_num] =p._navbox({&lt;br /&gt;
						cfg.keyword.border_child,&lt;br /&gt;
						[cfg.arg.navbar] = cfg.keyword.navbar_plain,&lt;br /&gt;
						[cfg.arg.state] = state,&lt;br /&gt;
						[cfg.arg.basestyle] = pargs[cfg.arg.basestyle],&lt;br /&gt;
						[cfg.arg.title] = title,&lt;br /&gt;
						[cfg.arg.titlestyle] = titlestyle,&lt;br /&gt;
						[andnum(&#039;list&#039;, 1)] = list,&lt;br /&gt;
						[cfg.arg.liststyle] = liststyle,&lt;br /&gt;
						[cfg.arg.listclass] = pargs[andnum(&#039;listclass&#039;, n)],&lt;br /&gt;
						[cfg.arg.image] = pargs[andnum(&#039;image&#039;, n)],&lt;br /&gt;
						[cfg.arg.imageleft] = pargs[andnum(&#039;imageleft&#039;, n)],&lt;br /&gt;
						[cfg.arg.listpadding] = pargs[cfg.arg.listpadding]&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- ordering of style and bodystyle&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({targs[cfg.arg.style] or &#039;&#039;, targs[cfg.arg.bodystyle] or &#039;&#039;})&lt;br /&gt;
	targs[cfg.arg.bodystyle] = nil&lt;br /&gt;
	&lt;br /&gt;
	-- child or subgroup&lt;br /&gt;
	if targs[cfg.arg.border] == nil then targs[cfg.arg.border] = pargs[1] end&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Template entry points&lt;br /&gt;
function p.navbox (frame, boxtype)&lt;br /&gt;
	local function readArgs(args, prefix)&lt;br /&gt;
		-- Read the arguments in the order they&#039;ll be output in, to make references&lt;br /&gt;
		-- number in the right order.&lt;br /&gt;
		local _&lt;br /&gt;
		_ = args[prefix .. cfg.arg.title]&lt;br /&gt;
		_ = args[prefix .. cfg.arg.above]&lt;br /&gt;
		-- Limit this to 20 as covering &#039;most&#039; cases (that&#039;s a SWAG) and because&lt;br /&gt;
		-- iterator approach won&#039;t work here&lt;br /&gt;
		for i = 1, 20 do&lt;br /&gt;
			_ = args[prefix .. andnum(&#039;group&#039;, i)]&lt;br /&gt;
			if inArray(cfg.keyword.subgroups, args[prefix .. andnum(&#039;list&#039;, i)]) then&lt;br /&gt;
				for _, v in ipairs(cfg.keyword.subgroups) do&lt;br /&gt;
					readArgs(args, prefix .. v .. i .. &amp;quot;_&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		_ = args[prefix .. cfg.arg.below]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame, {wrappers = {cfg.pattern[boxtype or &#039;navbox&#039;]}})&lt;br /&gt;
	readArgs(args, &amp;quot;&amp;quot;)&lt;br /&gt;
	return p[&#039;_&#039;..(boxtype or &#039;navbox&#039;)](args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[&#039;with collapsible groups&#039;] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &#039;withCollapsibleGroups&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local q = {}&lt;br /&gt;
q._navbox = p._withCollapsibleGroups&lt;br /&gt;
q.navbox = p[&#039;with collapsible groups&#039;]&lt;br /&gt;
return q&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Navbox_with_collapsible_groups&amp;diff=2688</id>
		<title>Template:Navbox with collapsible groups</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Navbox_with_collapsible_groups&amp;diff=2688"/>
		<updated>2024-11-22T08:46:51Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Navbox with collapsible groups|navbox}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Infobox_person/height/doc&amp;diff=2686</id>
		<title>Template:Infobox person/height/doc</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Infobox_person/height/doc&amp;diff=2686"/>
		<updated>2024-11-22T08:46:51Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
&amp;lt;!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) --&amp;gt;&lt;br /&gt;
{{Notice|This is for use in templates. For articles, please use {{tl|Convert}} or {{tl|Height}}.}}&lt;br /&gt;
{{high-use}}&lt;br /&gt;
{{Lua|Module:Person height}}&lt;br /&gt;
&lt;br /&gt;
This template is used to automatically add conversions of height measurements displayed by [[Template:Infobox person]] and other [[:Category:Infobox templates|infoboxes]] with a {{para|height}} parameter.&lt;br /&gt;
&lt;br /&gt;
{{Template see also|Infobox person/weight|Infobox person/length}}&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
{{Infobox&lt;br /&gt;
...&lt;br /&gt;
| label# = Height&lt;br /&gt;
| data#  = {{#if: {{{height|}}} | {{Infobox person/height|{{{height}}}}} }}&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
[[Centimetre]]s:&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|1 centimetre}} &amp;amp;rarr; {{Infobox person/height|1 centimetre}}&lt;br /&gt;
* {{Para|height|1centimeter}} &amp;amp;rarr; {{Infobox person/height|1centimeter}}&lt;br /&gt;
* {{Para|height|1&amp;amp;amp;nbsp;centimeter}} &amp;amp;rarr; {{Infobox person/height|1&amp;amp;nbsp;centimeter}}&lt;br /&gt;
* {{Para|height|157 centimetres}} &amp;amp;rarr; {{Infobox person/height|157 centimetres}}&lt;br /&gt;
* {{Para|height|157 centimeters}} &amp;amp;rarr; {{Infobox person/height|157 centimeters}}&lt;br /&gt;
* {{Para|height|157 cms}} &amp;amp;rarr; {{Infobox person/height|157 cms}}&lt;br /&gt;
* {{Para|height|157 cm.}} &amp;amp;rarr; {{Infobox person/height|157 cm.}}&lt;br /&gt;
&lt;br /&gt;
[[Metre]]s:&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|1 metre}} &amp;amp;rarr; {{Infobox person/height|1 metre}}&lt;br /&gt;
* {{Para|height|1meter}} &amp;amp;rarr; {{Infobox person/height|1meter}}&lt;br /&gt;
* {{Para|height|1&amp;amp;amp;nbsp;meter}} &amp;amp;rarr; {{Infobox person/height|1&amp;amp;nbsp;meter}}&lt;br /&gt;
* {{Para|height|1.57 metres}} &amp;amp;rarr; {{Infobox person/height|1.57 metres}}&lt;br /&gt;
* {{Para|height|1.57 meters}} &amp;amp;rarr; {{Infobox person/height|1.57 meters}}&lt;br /&gt;
* {{Para|height|1.57 ms}} &amp;amp;rarr; {{Infobox person/height|1.57 ms}}&lt;br /&gt;
* {{Para|height|1.57 m.}} &amp;amp;rarr; {{Infobox person/height|1.57 m.}}&lt;br /&gt;
&lt;br /&gt;
[[Foot (unit)|Feet]]:&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|1 foot}} &amp;amp;rarr; {{Infobox person/height|1 foot}}&lt;br /&gt;
* {{Para|height|1foot}} &amp;amp;rarr; {{Infobox person/height|1foot}}&lt;br /&gt;
* {{Para|height|1&amp;amp;amp;nbsp;foot}} &amp;amp;rarr; {{Infobox person/height|1&amp;amp;nbsp;foot}}&lt;br /&gt;
* {{Para|height|2 feet}} &amp;amp;rarr; {{Infobox person/height|2 feet}}&lt;br /&gt;
* {{Para|height|2 ft.}} &amp;amp;rarr; {{Infobox person/height|2 ft.}}&lt;br /&gt;
* {{Para|height|2.5 ft}} &amp;amp;rarr; {{Infobox person/height|2.5 ft}}&lt;br /&gt;
* {{Para|height|2+1/2 ft}} &amp;amp;rarr; {{Infobox person/height|2+1/2 ft}}&lt;br /&gt;
&lt;br /&gt;
[[Inch]]es:&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|1 inch}} &amp;amp;rarr; {{Infobox person/height|1 inch}}&lt;br /&gt;
* {{Para|height|1inch}} &amp;amp;rarr; {{Infobox person/height|1inch}}&lt;br /&gt;
* {{Para|height|1&amp;amp;amp;nbsp;inch}} &amp;amp;rarr; {{Infobox person/height|1&amp;amp;nbsp;inch}}&lt;br /&gt;
* {{Para|height|2 inches}} &amp;amp;rarr; {{Infobox person/height|2 inches}}&lt;br /&gt;
* {{Para|height|2 ins}} &amp;amp;rarr; {{Infobox person/height|2 ins}}&lt;br /&gt;
* {{Para|height|2 in.}} &amp;amp;rarr; {{Infobox person/height|2 in.}}&lt;br /&gt;
* {{Para|height|2.5 in}} &amp;amp;rarr; {{Infobox person/height|2.5 in}}&lt;br /&gt;
* {{Para|height|2+1/2 in}} &amp;amp;rarr; {{Infobox person/height|2+1/2 in}}&lt;br /&gt;
&lt;br /&gt;
[[Human height|Feet and inches]]:&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|5 feet 2 inches}} &amp;amp;rarr; {{Infobox person/height|5 feet 2 inches}}&lt;br /&gt;
* {{Para|height|5feet 2inches}} &amp;amp;rarr; {{Infobox person/height|5feet 2inches}}&lt;br /&gt;
* {{Para|height|5&amp;amp;amp;nbsp;feet 2&amp;amp;amp;nbsp;inches}} &amp;amp;rarr; {{Infobox person/height|5&amp;amp;nbsp;feet 2&amp;amp;nbsp;inches}}&lt;br /&gt;
* {{Para|height|5 feet, 2 inches}} &amp;amp;rarr; {{Infobox person/height|5 feet, 2 inches}}&lt;br /&gt;
* {{Para|height|5 ft. 2 in.}} &amp;amp;rarr; {{Infobox person/height|5 ft. 2 in.}}&lt;br /&gt;
* {{Para|height|5 ft 2.5 in}} &amp;amp;rarr; {{Infobox person/height|5 ft 2.5 in}}&lt;br /&gt;
* {{Para|height|5 ft 2+1/2 in}} &amp;amp;rarr; {{Infobox person/height|5 ft 2+1/2 in}}&lt;br /&gt;
&lt;br /&gt;
Text and/or [[Help:Footnotes|footnotes (references)]] after height:&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|5 feet 2 inches (2012)}} &amp;amp;rarr; {{Infobox person/height|5 feet 2 inches (2012)}}&lt;br /&gt;
* {{Para|height|5 feet 2 inches&amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;citation goes here&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|5 feet 2 inches&amp;lt;ref&amp;gt;citation goes here&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
* {{Para|height|5 feet 2 inches (2012)&amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;{{cite news|title=title|work=work}}&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|5 feet 2 inches (2012)&amp;lt;ref&amp;gt;{{cite news|title=title|work=work}}&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
: &#039;&#039;&#039;Example references&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{tl|Convert}} templates, without and with [[wikilink]]ed unit names:&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2|in|cm|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2|in|cm|abbr=off}}}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2|in|cm|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2|in|cm|abbr=off|lk=on}}}}&lt;br /&gt;
** {{nowiki template demo|format=inline|prefix=output of convert template:&amp;amp;nbsp;|showcode=no|output=nowiki|code=&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2|in|cm|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2|in|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2|in|abbr=off}}}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2|in|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2|in|abbr=off|lk=on}}}}&lt;br /&gt;
** {{nowiki template demo|format=inline|prefix=output of convert template:&amp;amp;nbsp;|showcode=no|output=nowiki|code=&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2|in|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2.5|in|cm|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2.5|in|cm|abbr=off}}}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2.5|in|cm|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2.5|in|cm|abbr=off|lk=on}}}}&lt;br /&gt;
** {{nowiki template demo|format=inline|prefix=output of convert template:&amp;amp;nbsp;|showcode=no|output=nowiki|code=&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2.5|in|cm|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2+1/2|in|cm|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2+1/2|in|cm|abbr=off}}}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2+1/2|in|cm|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2+1/2|in|cm|abbr=off|lk=on}}}}&lt;br /&gt;
** {{nowiki template demo|format=inline|prefix=output of convert template:&amp;amp;nbsp;|showcode=no|output=nowiki|code=&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2+1/2|in|cm|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|157|cm|ftin|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|157|cm|ftin|abbr=off}}}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|157|cm|ftin|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|157|cm|ftin|abbr=off|lk=on}}}}&lt;br /&gt;
** {{nowiki template demo|format=inline|prefix=output of convert template:&amp;amp;nbsp;|showcode=no|output=nowiki|code=&amp;lt;nowiki&amp;gt;{{Convert|157|cm|ftin|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|1.57|m|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|1.57|m|abbr=off}}}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|1.57|m|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|1.57|m|abbr=off|lk=on}}}}&lt;br /&gt;
** {{nowiki template demo|format=inline|prefix=output of convert template:&amp;amp;nbsp;|showcode=no|output=nowiki|code=&amp;lt;nowiki&amp;gt;{{Convert|1.57|m|abbr=off|lk=on}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Exceptions ==&lt;br /&gt;
&lt;br /&gt;
Does not replace numbers in manually entered conversions, but does replace unit names with abbreviations (examples intentionally show incorrect conversions):&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|5 feet 2 inches (1.00 metres)}} &amp;amp;rarr; {{Infobox person/height|5 feet 2 inches (1.00 metres)}}&lt;br /&gt;
* {{Para|height|5 feet 2 inches (100 centimetres)}} &amp;amp;rarr; {{Infobox person/height|5 feet 2 inches (100 centimetres)}}&lt;br /&gt;
* {{Para|height|1.57 metres (5 feet 5 inches)}} &amp;amp;rarr; {{Infobox person/height|1.57 metres (5 feet 5 inches)}}&lt;br /&gt;
* {{Para|height|157 centimetres (5 feet 5 inches)}} &amp;amp;rarr; {{Infobox person/height|157 centimetres (5 feet 5 inches)}}&lt;br /&gt;
&lt;br /&gt;
Does not replace numeric output of conversion templates such as {{tl|convert}} or {{tl|height}}, but does replace unit names with abbreviations (examples intentionally show different precision than usual):&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2|in|m|3|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2|in|m|3|abbr=off}}}}&lt;br /&gt;
** output of convert template: {{Convert|5|ft|2|in|m|3|abbr=off}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|5|ft|2|in|cm|sigfig=4|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|5|ft|2|in|cm|sigfig=4|abbr=off}}}}&lt;br /&gt;
** output of convert template: {{Convert|5|ft|2|in|cm|sigfig=4|abbr=off}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|1.57|m|ftin|1|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|1.57|m|ftin|1|abbr=off}}}}&lt;br /&gt;
** output of convert template: {{Convert|1.57|m|ftin|1|abbr=off}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Convert|157|cm|ftin|1|abbr=off}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Convert|157|cm|ftin|1|abbr=off}}}}&lt;br /&gt;
** output of convert template: {{Convert|157|cm|ftin|1|abbr=off}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Height|m=1.57|frac=4|abbr=no}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Height|m=1.57|frac=4|abbr=no}}}}&lt;br /&gt;
** output of height template: {{Height|m=1.57|frac=4|abbr=no}}&lt;br /&gt;
* {{Para|height|&amp;lt;nowiki&amp;gt;{{Height|cm=157|frac=4|abbr=no}}&amp;lt;/nowiki&amp;gt;}} &amp;amp;rarr; {{Infobox person/height|{{Height|cm=157|frac=4|abbr=no}}}}&lt;br /&gt;
** output of height template: {{Height|cm=157|frac=4|abbr=no}}&lt;br /&gt;
&lt;br /&gt;
== Areas for improvement ==&lt;br /&gt;
&lt;br /&gt;
{{Fixed}} – Conversions not displayed if unit name contains uppercase characters:&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|157 CM}} &amp;amp;rarr; {{Infobox person/height|157 CM}}&lt;br /&gt;
* {{Para|height|1.57 M}} &amp;amp;rarr; {{Infobox person/height|1.57 M}}&lt;br /&gt;
* {{Para|height|5 FT 2 IN}} &amp;amp;rarr; {{Infobox person/height|5 FT 2 IN}}&lt;br /&gt;
&lt;br /&gt;
{{Fixed}} – Conversion not displayed if symbols are used for feet and inches:&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|5&#039; 2&amp;quot;}} &amp;amp;rarr; {{Infobox person/height|5&#039; 2&amp;quot;}}&lt;br /&gt;
* {{Para|height|5′ 2″}} &amp;amp;rarr; {{Infobox person/height|5′ 2″}}&lt;br /&gt;
&lt;br /&gt;
{{Fixed}} – Does not recognize symbols for feet and inches in a manually entered conversion (adds a second conversion):&lt;br /&gt;
&lt;br /&gt;
* {{Para|height|157cm (5&#039; 2&amp;quot;)}} &amp;amp;rarr; {{Infobox person/height|157cm (5&#039; 2&amp;quot;)}}&lt;br /&gt;
* {{Para|height|1.57m (5′ 2″)}} &amp;amp;rarr; {{Infobox person/height|1.57m (5′ 2″)}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line, please; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
[[Category:Template implementation details]]&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Template_see_also&amp;diff=2684</id>
		<title>Template:Template see also</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Template_see_also&amp;diff=2684"/>
		<updated>2024-11-22T08:46:48Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hatnote|{{{altphrase|See also}}}: {{#if:{{{1|}}}&lt;br /&gt;
  |&amp;lt;!--then:--&amp;gt;{{tl|{{{1}}}}}&lt;br /&gt;
  |&amp;lt;!--else:--&amp;gt;&amp;lt;includeonly&amp;gt;{{Error|{{tl|Template see also}} requires at least one template name}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
  }}{{#if: {{{2|}}}&lt;br /&gt;
  |{{#if:{{{3|}}}|,|&amp;amp;nbsp;and}} {{tl|{{{2}}}}}&lt;br /&gt;
  }}{{#if: {{{3|}}}&lt;br /&gt;
  |{{#if:{{{4|}}}|,|, and}} {{tl|{{{3}}}}}&lt;br /&gt;
  }}{{#if: {{{4|}}}&lt;br /&gt;
  |{{#if:{{{5|}}}|,|, and}} {{tl|{{{4}}}}}&lt;br /&gt;
  }}{{#if: {{{5|}}}&lt;br /&gt;
  |, and {{tl|{{{5}}}}}&lt;br /&gt;
  }} {{#if: {{{6|}}}&lt;br /&gt;
  |{{Error|{{tl|Template see also}} has too many links specified (maximum is 5)}}&lt;br /&gt;
  }}&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>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Height&amp;diff=2682</id>
		<title>Template:Height</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Height&amp;diff=2682"/>
		<updated>2024-11-22T08:46:48Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:{{#if:{{{centimeter|{{{centimeters|{{{centimetre|{{{centimetres|{{{cm|}}}}}}}}}}}}}}}|1|0}}{{#if:{{{meter|{{{meters|{{{metre|{{{metres|{{{m|}}}}}}}}}}}}}}}|1|0}}{{#if:{{{foot|{{{feet|{{{ft|}}}}}}}}}|1|0}}{{#if:{{{inch|{{{inches|{{{in|}}}}}}}}}|1|0}}&lt;br /&gt;
|1000={{convert|{{{centimeter|{{{centimeters|{{{centimetre|{{{centimetres|{{{cm|}}}}}}}}}}}}}}}|cm|ftin|frac={{#ifeq:{{{precision}}}|0||{{{frac|2}}}}}|abbr={{#switch:{{{abbr}}}|no=off|mos=def|#default=on}}|lk={{#ifeq:{{{wiki|}}}|yes|on|off}}|{{{precision|1}}} }}&lt;br /&gt;
|0100={{convert|{{{meter|{{{meters|{{{metre|{{{metres|{{{m}}}}}}}}}}}}}}}|m|ftin|frac={{#ifeq:{{{precision}}}|0||{{{frac|2}}}}}|abbr={{#switch:{{{abbr}}}|no=off|mos=def|#default=on}}|lk={{#ifeq:{{{wiki|}}}|yes|on|off}}|{{{precision|1}}} }}&lt;br /&gt;
|0011={{convert|{{{foot|{{{feet|{{{ft|}}}}}}}}}|ft|{{{inch|{{{inches|{{{in|}}}}}}}}}|in|{{#ifeq:{{{out|}}}|cm|cm|m}}|abbr={{#switch:{{{abbr}}}|no=off|mos=def|#default=on}}|lk={{#ifeq:{{{wiki|}}}|yes|on|off}}|{{#if:{{{precision|}}}|{{{precision}}}|{{#ifeq:{{{out|}}}|cm|0|2}}}} }}&lt;br /&gt;
|0010={{convert|{{{foot|{{{feet|{{{ft|}}}}}}}}}|ft|0|in|{{#ifeq:{{{out|}}}|cm|cm|m}}|abbr={{#switch:{{{abbr}}}|no=off|mos=def|#default=on}}|lk={{#ifeq:{{{wiki|}}}|yes|on|off}}|{{#if:{{{precision|}}}|{{{precision}}}|{{#ifeq:{{{out|}}}|cm|0|2}}}} }}&lt;br /&gt;
|0001={{convert|0|ft|{{{inch|{{{inches|{{{in|}}}}}}}}}|in|{{#ifeq:{{{out|}}}|cm|cm|m}}|abbr={{#switch:{{{abbr}}}|no=off|mos=def|#default=on}}|lk={{#ifeq:{{{wiki|}}}|yes|on|off}}|{{#if:{{{precision|}}}|{{{precision}}}|{{#ifeq:{{{out|}}}|cm|0|2}}}} }}&lt;br /&gt;
|0000=&lt;br /&gt;
|#default={{Error|Error: please specify height using only one type of units}}&lt;br /&gt;
}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using height with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Height]] with unknown parameter &amp;quot;_VALUE_&amp;quot;|ignoreblank=y| abbr | centimeter | centimeters | centimetre | centimetres | cm | feet | foot | frac | ft | in | inch | inches | m | meter | meters | metre | metres | out | precision | wiki | {{#ifeq:{{{1}}}|0|1|_NULLPARAMETER_}}&lt;br /&gt;
}}{{#ifeq:{{{1}}}|0|{{main other|[[Category:Pages using height with 1 equal 0]]}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Fixed&amp;diff=2680</id>
		<title>Template:Fixed</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Fixed&amp;diff=2680"/>
		<updated>2024-11-22T08:46:48Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Respond|Pictogram voting keep.svg|{{{1|Fixed}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Count/testcases&amp;diff=2678</id>
		<title>Template:Count/testcases</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Count/testcases&amp;diff=2678"/>
		<updated>2024-11-22T08:46:47Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{testcases notice}}&lt;br /&gt;
{{large|&#039;&#039;&#039;Note:&#039;&#039;&#039;}} {{LinkTemplate|Count/testcase1}} tests nesting of templates calling {{LinkTemplate|Count}}.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable width=100%&lt;br /&gt;
|-&lt;br /&gt;
! width=50% | Call&lt;br /&gt;
! width=50% | Result&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count|A|B||D}}&lt;br /&gt;
| {{Count|A|B||D}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1}}&lt;br /&gt;
| {{Count/testcase1}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|base{{=}}1}}&lt;br /&gt;
| {{Count/testcase1|base=1}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|base{{=}}0}}&lt;br /&gt;
| {{Count/testcase1|base=0}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc}}&lt;br /&gt;
| {{Count/testcase1|abc}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc|base{{=}}0}}&lt;br /&gt;
| {{Count/testcase1|abc|base=0}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc|base{{=}}1}}&lt;br /&gt;
| {{Count/testcase1|abc|base=1}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1||DEF}}&lt;br /&gt;
| {{Count/testcase1||DEF}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc|DEF}}&lt;br /&gt;
| {{Count/testcase1|abc|DEF}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc|DEF|}}&lt;br /&gt;
| {{Count/testcase1|abc|DEF|}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc|DEF|ghi}}&lt;br /&gt;
| {{Count/testcase1|abc|DEF|ghi}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc||ghi}}&lt;br /&gt;
| {{Count/testcase1|abc||ghi}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc|DEF|ghi|JKL|mno|PQR|stu|VWX|yz#}}&lt;br /&gt;
| {{Count/testcase1|abc|DEF|ghi|JKL|mno|PQR|stu|VWX|yz#}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc|DEF|ghi|JKL|mno|PQR|stu|VWX|yz@|#$%}}&lt;br /&gt;
| {{Count/testcase1|abc|DEF|ghi|JKL|mno|PQR|stu|VWX|yz@|#$%}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc|DEF|ghi|JKL|mno|PQR|stu|VWX|yz@|#$%|^&amp;amp;*|()_|+:&amp;quot;|123|456|789|000}}&lt;br /&gt;
| {{Count/testcase1|abc|DEF|ghi|JKL|mno|PQR|stu|VWX|yz@|#$%|^&amp;amp;*|()_|+:&amp;quot;|123|456|789|000}} &amp;amp;nbsp; &#039;&#039;&#039;Only counts to 10 right now!&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|abc||ghi||mno||stu||yz@|}}&lt;br /&gt;
| {{Count/testcase1|abc||ghi||mno||stu||yz@|}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1||DEF||JKL||PQR||VWX||#$%}}&lt;br /&gt;
| {{Count/testcase1||DEF||JKL||PQR||VWX||#$%}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|DEF|JKL|PQR|VWX|#$%}}&lt;br /&gt;
| {{Count/testcase1|DEF|JKL|PQR|VWX|#$%}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1||||||||||#$%}}&lt;br /&gt;
| {{Count/testcase1||||||||||#$%}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|||||||||}}&lt;br /&gt;
| {{Count/testcase1||||||||||}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1||||||||||base{{=}}0}}&lt;br /&gt;
| {{Count/testcase1|||||||||||base=0}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1||||||||||base{{=}}1}}&lt;br /&gt;
| {{Count/testcase1|||||||||||base=1}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|base{{=}}0|||||||||}}&lt;br /&gt;
| {{Count/testcase1|base=0||||||||||}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|base{{=}}1|||||||||}}&lt;br /&gt;
| {{Count/testcase1|base=1||||||||||}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|base{{=}}0||||||PQR|||}}&lt;br /&gt;
| {{Count/testcase1|base=0||||||PQR||||}}&lt;br /&gt;
|-&lt;br /&gt;
| {{LinkTemplate|Count/testcase1|base{{=}}1||||||PQR|||}}&lt;br /&gt;
| {{Count/testcase1|base=1||||||PQR||||}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Count/testcase1&amp;diff=2676</id>
		<title>Template:Count/testcase1</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Count/testcase1&amp;diff=2676"/>
		<updated>2024-11-22T08:46:46Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Count|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}|{{{10|}}}|base={{{base|0}}}}}&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
	<entry>
		<id>http://breadsandwich.net/colwiki/index.php?title=Template:Count/doc&amp;diff=2674</id>
		<title>Template:Count/doc</title>
		<link rel="alternate" type="text/html" href="http://breadsandwich.net/colwiki/index.php?title=Template:Count/doc&amp;diff=2674"/>
		<updated>2024-11-22T08:46:46Z</updated>

		<summary type="html">&lt;p&gt;Steve: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
{{High-use}}&lt;br /&gt;
&amp;lt;!-- Categories go at the bottom of this page and interwikis go in Wikidata. --&amp;gt;&lt;br /&gt;
{{Lua|Module:ParameterCount}}&lt;br /&gt;
Returns a number from (0 or 1) to 10 indicating the number of &#039;&#039;&#039;defined&#039;&#039;&#039; parameters passed.&amp;amp;nbsp; Currently supports a &#039;&#039;&#039;maximum of 10 parameters&#039;&#039;&#039;.&amp;lt;!--NOTE: Update [[Template:Count/testcases]] if support is added for more parameters. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
Set &#039;&#039;base=0&#039;&#039; or &#039;&#039;base=1&#039;&#039; to change from the default value returned if there are no &#039;&#039;&#039;defined&#039;&#039;&#039; parameters.&amp;amp;nbsp; (i.e. If no &#039;&#039;&#039;defined&#039;&#039;&#039; parameters, returns 0 by default &amp;lt;small&amp;gt;(or 1 if &#039;&#039;base=1&#039;&#039;)&amp;lt;/small&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
{{Count/testcases}}&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*{{tl|Counter}}&lt;br /&gt;
* [[:module:ParameterCount]], with more options&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories go here and interwikis go in Wikidata. --&amp;gt;&lt;br /&gt;
[[Category:Parameter handling templates]]&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steve</name></author>
	</entry>
</feed>