<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mechsploit.me/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MechsploWikiSysop</id>
	<title>Mechsploit.me Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mechsploit.me/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MechsploWikiSysop"/>
	<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php/Special:Contributions/MechsploWikiSysop"/>
	<updated>2026-09-07T13:44:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=RaspberryWoof&amp;diff=3360</id>
		<title>RaspberryWoof</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=RaspberryWoof&amp;diff=3360"/>
		<updated>2026-07-28T23:29:23Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edits by TKD (talk) to last revision by RaspberryWoof&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shes a wolf! And she does art!&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Repentance&amp;diff=3359</id>
		<title>Repentance</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Repentance&amp;diff=3359"/>
		<updated>2026-07-28T23:28:56Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by TKD (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Repentance is a short story written by [[Selinica]]. The story is one of two works by her that attempt to explore the concept of the mech as a metaphor for suicide.&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
Placeholder for a plot outline.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
The story has no named characters.&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/67136482 Repentance]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Involuntary_Career&amp;diff=3358</id>
		<title>Involuntary Career</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Involuntary_Career&amp;diff=3358"/>
		<updated>2026-07-28T23:26:49Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by TKD (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Involuntary Career is a mechsploitation series written by [[Selinica]].&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
The plot follows a reader-insert character (Veilith) who begins working as a pilot for a PMC.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
The story has five named characters:&lt;br /&gt;
&lt;br /&gt;
* Nyxen&lt;br /&gt;
* Veilith&lt;br /&gt;
* Rhea&lt;br /&gt;
* Kaori Morales&lt;br /&gt;
* Kayla Swiftovici&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
The story has been beta read by [[connieshortfor]] and [[Malleablehound|MalleableHound]].&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/68925941 Involuntary Career]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Jax_Romana&amp;diff=3357</id>
		<title>Jax Romana</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Jax_Romana&amp;diff=3357"/>
		<updated>2026-07-28T23:25:36Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by TKD (talk) to last revision by Lilinyx&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jax Romana is a Mechsploitation author best known for her [[Mechanisms of Rule]] Mechsploitation series. Her work in the space has been considered for exhibition by the Museum of English Rural Life&amp;lt;ref&amp;gt;https://bsky.app/profile/themerl.bsky.social/post/3lxken6xij22h&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;References&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=After_Action_Report,_Recon_Squad_7&amp;diff=3356</id>
		<title>After Action Report, Recon Squad 7</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=After_Action_Report,_Recon_Squad_7&amp;diff=3356"/>
		<updated>2026-07-28T23:21:57Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by MIGGER (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;After Action Report, Recon Squad 7 is a short mechsploitation story written by [[Selinica]].&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
The story is written as a post-combat log discussing a recon mission along the border with the Neo-Soviet Union and the intel gathered, including one encounter with civilians.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
The story has no named characters.&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/66773170 After Action Report, Recon Squad 7]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=WARSPRITE:_FIELD_REPORTS&amp;diff=3355</id>
		<title>WARSPRITE: FIELD REPORTS</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=WARSPRITE:_FIELD_REPORTS&amp;diff=3355"/>
		<updated>2026-07-28T23:19:19Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by TKD (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WARSPRITE: FIELD REPORTS is a series of short stories set in the [[WARSPRITE]] universe written by [[Nyetalia]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.scribblehub.com/series/845790/warpsrite-field-reports/ WARSPRITE: FIELD REPORTS]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Gottlos&amp;diff=3353</id>
		<title>Gottlos</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Gottlos&amp;diff=3353"/>
		<updated>2026-07-28T22:37:52Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by TKD (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gottlos is not a mechsploitation story, but contains many elements and ideas that would become explored through transfeminine and kink lenses decades after publication. The original was published in November 1969.&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
Gottlos follows the story of a remotely operated &#039;war mec&#039; wherein the pilot has become so innately fused mentally with his machine that upon defeat in combat, he feels he has lost something fundamental.&lt;br /&gt;
&lt;br /&gt;
Further information is lacking due to how hard the story is to find.&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Mechsploitation&amp;diff=3352</id>
		<title>Mechsploitation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Mechsploitation&amp;diff=3352"/>
		<updated>2026-07-28T22:27:20Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Undo revision 3255 by TKD (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mechsploitation is a microgrenre of queer sci-fi horror and erotica. The genre is a subset of fiction that typically focuses on interpersonal stories with mechs serving as an element of the story instead of the primary focus as would be seen in classic mecha stories.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Pre-History ===&lt;br /&gt;
Certain older science fiction works contain elements that are recognizable as part of modern mechsploitation stories. One example would be &#039;&#039;[[Gottlos]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Pilot Posting ===&lt;br /&gt;
Pilot posting was short stories that would be written across one or more posts on microblogging platforms such as twitter. Pilot stories also appeared on tumblr and other blog platforms. Pilot stories evolved out of witch and combat doll stories on the same platforms.&lt;br /&gt;
&lt;br /&gt;
=== Armored Core 6 ===&lt;br /&gt;
The Armored Core 6 trailer released on April 2023 and was met by the pilot and mech communities above with a belief of sexual subtext to the game.&lt;br /&gt;
&lt;br /&gt;
=== WARHOUND ===&lt;br /&gt;
[[WARHOUND]] released in 2023 around the time of the Armored Core trailer. WARHOUND served to lay the groundwork for what is now typical of the genre. The most notable genre convention created by WARHOUND is the Handler/hound dynamic.&lt;br /&gt;
&lt;br /&gt;
=== Post-WARHOUND ===&lt;br /&gt;
WARHOUND created the conventions and served to create the genre of mechsploitation as it currently exists. There are still many writers and works that are classified as mechsploitation that dispense with one or more of the conventions.&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
Mechsploitation tends to reflect themes of abuse or trauma, often in the context of a form of Dominant/submissive relationship. Genre conventions include transfemme character(s), the use of Handler/hound to describe characters, the existence of mechs (typically named). The majority of the authors as of 2025 are transfemme individuals with many of the stories reflecting horror elements that specifically target a transfemme audience. Some analyses of the genre has identified one of the elements often used as transfemme-specific horror is feminization but at the cost of having to exist in an extremely masculine social role through force or coercion.&lt;br /&gt;
&lt;br /&gt;
Stub-one analysis done by Kalliedora Rho to locate, one analysis of WARHOUND as queer erotica to locate.&lt;br /&gt;
&lt;br /&gt;
== Citations ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Mechsploitation&amp;diff=3351</id>
		<title>Mechsploitation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Mechsploitation&amp;diff=3351"/>
		<updated>2026-07-28T22:27:10Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Undo revision 3286 by TKD (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mechsploitation is a microgrenre of queer sci-fi brimstone and erotica. The genre is a subset of fiction that typically focuses on interpersonal stories with mechs serving as an element of the story instead of the primary focus as would be seen in classic mecha stories.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Pre-History ===&lt;br /&gt;
Certain older science fiction works contain elements that are recognizable as part of modern mechsploitation stories. One example would be &#039;&#039;[[Gottlos]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Pilot Posting ===&lt;br /&gt;
Pilot posting was short stories that would be written across one or more posts on microblogging platforms such as twitter. Pilot stories also appeared on tumblr and other blog platforms. Pilot stories evolved out of witch and combat doll stories on the same platforms.&lt;br /&gt;
&lt;br /&gt;
=== Armored Core 6 ===&lt;br /&gt;
The Armored Core 6 trailer released on April 2023 and was met by the pilot and mech communities above with a belief of sexual subtext to the game.&lt;br /&gt;
&lt;br /&gt;
=== WARHOUND ===&lt;br /&gt;
[[WARHOUND]] released in 2023 around the time of the Armored Core trailer. WARHOUND served to lay the groundwork for what is now typical of the genre. The most notable genre convention created by WARHOUND is the Handler/hound dynamic.&lt;br /&gt;
&lt;br /&gt;
=== Post-WARHOUND ===&lt;br /&gt;
WARHOUND created the conventions and served to create the genre of mechsploitation as it currently exists. There are still many writers and works that are classified as mechsploitation that dispense with one or more of the conventions.&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
Mechsploitation tends to reflect themes of abuse or trauma, often in the context of a form of Dominant/submissive relationship. Genre conventions include transfemme character(s), the use of Handler/hound to describe characters, the existence of mechs (typically named). The majority of the authors as of 2025 are transfemme individuals with many of the stories reflecting horror elements that specifically target a transfemme audience. Some analyses of the genre has identified one of the elements often used as transfemme-specific horror is feminization but at the cost of having to exist in an extremely masculine social role through force or coercion.&lt;br /&gt;
&lt;br /&gt;
Stub-one analysis done by Kalliedora Rho to locate, one analysis of WARHOUND as queer erotica to locate.&lt;br /&gt;
&lt;br /&gt;
== Citations ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Mechsploitation&amp;diff=3350</id>
		<title>Mechsploitation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Mechsploitation&amp;diff=3350"/>
		<updated>2026-07-28T22:26:50Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by DogSlut (talk) to last revision by TKD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mechsploitation is a microgrenre of faggoty sci-fi brimstone and erotica. The genre is a subset of fiction that typically focuses on interpersonal stories with mechs serving as an element of the story instead of the primary focus as would be seen in classic mecha stories.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
=== Pre-History ===&lt;br /&gt;
Certain older science fiction works contain elements that are recognizable as part of modern mechsploitation stories. One example would be &#039;&#039;[[Gottlos]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Pilot Posting ===&lt;br /&gt;
Pilot posting was short stories that would be written across one or more posts on microblogging platforms such as twitter. Pilot stories also appeared on tumblr and other blog platforms. Pilot stories evolved out of witch and combat doll stories on the same platforms.&lt;br /&gt;
&lt;br /&gt;
=== Armored Core 6 ===&lt;br /&gt;
The Armored Core 6 trailer released on April 2023 and was met by the pilot and mech communities above with a belief of sexual subtext to the game.&lt;br /&gt;
&lt;br /&gt;
=== WARHOUND ===&lt;br /&gt;
[[WARHOUND]] released in 2023 around the time of the Armored Core trailer. WARHOUND served to lay the groundwork for what is now typical of the genre. The most notable genre convention created by WARHOUND is the Handler/hound dynamic.&lt;br /&gt;
&lt;br /&gt;
=== Post-WARHOUND ===&lt;br /&gt;
WARHOUND created the conventions and served to create the genre of mechsploitation as it currently exists. There are still many writers and works that are classified as mechsploitation that dispense with one or more of the conventions.&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
Mechsploitation tends to reflect themes of abuse or trauma, often in the context of a form of Dominant/submissive relationship. Genre conventions include transfemme character(s), the use of Handler/hound to describe characters, the existence of mechs (typically named). The majority of the authors as of 2025 are transfemme individuals with many of the stories reflecting horror elements that specifically target a transfemme audience. Some analyses of the genre has identified one of the elements often used as transfemme-specific horror is feminization but at the cost of having to exist in an extremely masculine social role through force or coercion.&lt;br /&gt;
&lt;br /&gt;
Stub-one analysis done by Kalliedora Rho to locate, one analysis of WARHOUND as queer erotica to locate.&lt;br /&gt;
&lt;br /&gt;
== Citations ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=HRT&amp;diff=3349</id>
		<title>HRT</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=HRT&amp;diff=3349"/>
		<updated>2026-07-28T22:10:13Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by NiceGuy (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HRT is a short mechsploitation story written by [[Selinica]].&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
The story follows a reader insert character who, seeking Hormone Replacement Therapy signs a contract for Hound Recruitment &amp;amp; Training. The character is thus recruited into the military and put through basic training and houndification by a pilot who was forced to retire from active duty. The retired pilot now serves as a training handler and perpetuates abuse she had gone through herself.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
There are no named characters.&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
The story was inspired by a post from bluesky user raspberrywoof.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/66969580 HRT]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Claudifops&amp;diff=3348</id>
		<title>Claudifops</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Claudifops&amp;diff=3348"/>
		<updated>2026-07-28T22:09:38Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Undo revision 3250 by TKD (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stub page for Claudifops.&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Claudifops&amp;diff=3347</id>
		<title>Claudifops</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Claudifops&amp;diff=3347"/>
		<updated>2026-07-28T22:02:17Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by NiceGuy (talk) to last revision by TKD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Claudifops in his mech implementing TTD.&lt;br /&gt;
[[File:ClaudiMech.png|thumb|518x518px]]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Merging&amp;diff=3346</id>
		<title>Merging</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Merging&amp;diff=3346"/>
		<updated>2026-07-28T21:54:10Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by ShartyParti (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Merging is a short story written by [[Selinica]].&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
The plot follows a reader insert who joins an arena fighting team as one of two pilots who collectively pilot a mech. She is physically and sexually abused by the pilot she joined. They fight in match after match, and over time their personalities and memories blend together. The twist is revealed when the victim becomes the victimizer and assaults the one who was the abuser, who is also shocked by the turnabout. The dynamic continues as they melt further into a shared consciousness until they are forced to retire.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
The story has no named characters.&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
This story was read by [[connieshortfor]] as a part of her daily reactions project.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/67275979 Merging]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Nyetalia&amp;diff=3345</id>
		<title>Nyetalia</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Nyetalia&amp;diff=3345"/>
		<updated>2026-07-28T21:54:07Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by ShartyParti (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nyetalia, also known as Talia was an early writer of witch/doll and mech pilot microfiction online.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Biography ==&lt;br /&gt;
to do&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
Talia wrote [[WARSPRITE]].&lt;br /&gt;
&lt;br /&gt;
=== Short Stories ===&lt;br /&gt;
Talia wrote [[WARSPRITE: FIELD REPORTS]], a collection of short stories in the WARSPRITE universe.&lt;br /&gt;
&lt;br /&gt;
Talia maintains a [https://twitter.com/nyetalia/status/1686687383503159296 list of all mech pilot microfiction they have written] on twitter.&lt;br /&gt;
&lt;br /&gt;
Talia also writes longer stories as the tumblr user &amp;quot;dreamofhircine&amp;quot; under the &amp;quot;[[mechposting]]&amp;quot; tag.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://bsky.app/profile/nyetalia.bsky.social Nyetalia]&lt;br /&gt;
&lt;br /&gt;
[https://www.tumblr.com/dreamofhircine/tagged/mechposting Dreamofhircine mechposting]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Connieshortfor&amp;diff=3344</id>
		<title>Connieshortfor</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Connieshortfor&amp;diff=3344"/>
		<updated>2026-07-28T21:54:04Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by ShartyParti (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;connieshort for aka Scylla is a mechsploitation writer known for sharing a name with the character from (story name here).&lt;br /&gt;
&lt;br /&gt;
== Biography ==&lt;br /&gt;
Actual biography&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
connieshortfor writes the series So Long As The Moon Shines Down On Us&lt;br /&gt;
&lt;br /&gt;
=== Short Stories ===&lt;br /&gt;
connieshortfor wrote PLAYTHING.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
connieshortfor (bsky)&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Selinica&amp;diff=3343</id>
		<title>Selinica</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Selinica&amp;diff=3343"/>
		<updated>2026-07-28T21:52:36Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by PUTdownYOURlocalTRANNY (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Biography ==&lt;br /&gt;
Selinica wrote her first story in 2023 based on early pilot posting on twitter. She then abandoned writing for two years until discovering a community had built up around what had become Mechsploitation. She resumed writing in 2025 after that realization.&lt;br /&gt;
&lt;br /&gt;
=== Inspiration ===&lt;br /&gt;
Selinica cites [[Nyetalia]]&#039;s short stories and [[Pilot]] as her primary influences.&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
Selinica writes the series [[Researcher]] and [[Involuntary Career]].&lt;br /&gt;
&lt;br /&gt;
=== Short Stories ===&lt;br /&gt;
The list of short stories written by Selinica are:&lt;br /&gt;
&lt;br /&gt;
* [[Provisioning]]&lt;br /&gt;
* [[Mobile Trench Attach on Ieper]]&lt;br /&gt;
* [[The Monument to The Sins of Man]]&lt;br /&gt;
* [[Redire ad Statum Quo]]&lt;br /&gt;
* [[Adoption]]&lt;br /&gt;
* [[State Defense Wolves]]&lt;br /&gt;
* [[Captured]]&lt;br /&gt;
* [[Unwitting Evil]]&lt;br /&gt;
* [[Impressment]]&lt;br /&gt;
* [[Partners]]&lt;br /&gt;
* [[Merging]]&lt;br /&gt;
* [[Repentance]]&lt;br /&gt;
* [[Shattered]]&lt;br /&gt;
* [[HRT]]&lt;br /&gt;
* [[Retirement]]&lt;br /&gt;
* [[Testing]]&lt;br /&gt;
* [[Borrowed]]&lt;br /&gt;
* [[Maintenance]]&lt;br /&gt;
* [[After Action Report, Recon Squad 7]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[https://archiveofourown.org/users/Selinica Archive of Our Own]&lt;br /&gt;
*[https://readonlymind.com/@selinica/ Read Only Mind]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Mobile_Trench_Attach_on_Ieper&amp;diff=3342</id>
		<title>Mobile Trench Attach on Ieper</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Mobile_Trench_Attach_on_Ieper&amp;diff=3342"/>
		<updated>2026-07-28T21:52:27Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by PUTdownYOURlocalTRANNY (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mobile Trench Attack on Ieper is an alternate-history World War I mechsploitation story written by Selinica. She claims inspiration from the video game Iron Brigade.&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Researcher&amp;diff=3341</id>
		<title>Researcher</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Researcher&amp;diff=3341"/>
		<updated>2026-07-28T21:52:17Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by PUTdownYOURlocalTRANNY (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Researcher is a mechsploitation series written by [[Selinica]]. The series is written as a memoir and is currently ongoing.&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
The story follows the life story and lab notes of a researcher who claims to be developing mech technology. The character also claims to have developed the process for creating and conditioning pilots.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
The story has three named characters.&lt;br /&gt;
&lt;br /&gt;
* Test Subject Alpha&lt;br /&gt;
* Test Subject Delta&lt;br /&gt;
* Test Subject Zeta&lt;br /&gt;
&lt;br /&gt;
The unnamed characters are:&lt;br /&gt;
&lt;br /&gt;
* The Researcher&lt;br /&gt;
* The Liaison (Imperial)&lt;br /&gt;
* The Liaison (Pan-European League)&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/66172654 Researcher]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Ashy_washyy&amp;diff=3340</id>
		<title>Ashy washyy</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Ashy_washyy&amp;diff=3340"/>
		<updated>2026-07-28T21:52:15Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by PUTdownYOURlocalTRANNY (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stub page for ashy_washyy, aka Ashley or Olivka Rho&lt;br /&gt;
&lt;br /&gt;
== Biography ==&lt;br /&gt;
to do&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
to do&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Redire_ad_Statum_Quo&amp;diff=3339</id>
		<title>Redire ad Statum Quo</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Redire_ad_Statum_Quo&amp;diff=3339"/>
		<updated>2026-07-28T21:52:12Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by PUTdownYOURlocalTRANNY (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redire ad Statum Quo is a mechsploitation story written by Selinica for the September 2025 writing jam.&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Impressment&amp;diff=3338</id>
		<title>Impressment</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Impressment&amp;diff=3338"/>
		<updated>2026-07-28T21:52:09Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by PUTdownYOURlocalTRANNY (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Impressment is a short two chapter story written by [[Selinica]].&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
&lt;br /&gt;
==== Chapter 1 ====&lt;br /&gt;
Chapter one follows the targeting and selection of the reader insert character by a woman who uses sex and drugs to tempt the reader insert further down a path. The reader insert is eventually grabbed by the handler and through the use of drugs and technological tools to force feminize the reader insert and prepare her for use as a hound.&lt;br /&gt;
&lt;br /&gt;
==== Chapter 2 ====&lt;br /&gt;
Chapter two follows the reader insert as a now-hound working with the hound from the first chapter to tempt and recruit the newly targeted woman. The same events play out roughly the same, with the target being grabbed and converted over for use as a hound.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
The story has no named characters.&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/67450506 Impressment]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Kallidora_Rho&amp;diff=3337</id>
		<title>Kallidora Rho</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Kallidora_Rho&amp;diff=3337"/>
		<updated>2026-07-28T21:52:06Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by PUTdownYOURlocalTRANNY (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stub page for Kallidora Rho.&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
Kallidora Rho wrote the series WARHOUND.&lt;br /&gt;
&lt;br /&gt;
== Citations ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Unwitting_Evil&amp;diff=3336</id>
		<title>Unwitting Evil</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Unwitting_Evil&amp;diff=3336"/>
		<updated>2026-07-28T21:51:45Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by NiggerBrimstone (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unwitting Evil is a short mechsploitation story written from the perspective of a handler by [[Selinica]].&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
The story follows an unnamed imperial handler through her training and deployment to the frontline in Brazil. There she physically and sexually abuses her adjutant and orders the commission of various war crimes, including the use of nerve agents against populations implied to be civilian. The handler is eventually killed through unknown means and the adjutant is reassigned to another unit. The implication is given that the adjutant will receive the same abuse at her next posting.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
There are no named characters.&lt;br /&gt;
&lt;br /&gt;
The unnamed characters are:&lt;br /&gt;
&lt;br /&gt;
* The Handler&lt;br /&gt;
* The Adjutant&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/68176476 Unwitting Evil]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Captured&amp;diff=3335</id>
		<title>Captured</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Captured&amp;diff=3335"/>
		<updated>2026-07-28T21:50:44Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by MIGGER (talk) to last revision by Selinica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Captured is a short mechsploitation story written by [[Selinica]].&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
Captured follows the story of a mech pilot who engages in a mech vs mech fight against Hunter Rho Seven. Hunter Rho Seven is captured and the reader insert is severely injured. The reader insert takes physical revenge on Rho Seven to find no catharsis from doing so and beat Rho Seven badly enough to require medical attention.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
The story has two named characters:&lt;br /&gt;
&lt;br /&gt;
* Hunter Rho Seven&lt;br /&gt;
* Colonel Forgrave&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/68806766 Captured]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Shattered&amp;diff=3334</id>
		<title>Shattered</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Shattered&amp;diff=3334"/>
		<updated>2026-07-28T21:36:47Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Undo revision 3259 by Shartosaurus (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shattered is a short mechsploitation story written by [[Selinica]]. The story explores the concept of becoming a pilot as a form of and metaphor for suicide.&lt;br /&gt;
&lt;br /&gt;
== Plot ==&lt;br /&gt;
Placeholder for a plot outline.&lt;br /&gt;
&lt;br /&gt;
== Characters ==&lt;br /&gt;
Character Placeholder&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[https://archiveofourown.org/works/67120651 Shattered]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Shattered&amp;diff=3333</id>
		<title>Shattered</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Shattered&amp;diff=3333"/>
		<updated>2026-07-28T21:36:33Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Undo revision 3267 by PUTdownYOURlocalTRANNY (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;&#039;&#039;&amp;lt;u&amp;gt;&amp;lt;big&amp;gt;ROPE ROPE ROPE ROPE&amp;lt;/big&amp;gt;&amp;lt;/u&amp;gt;&#039;&#039;&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;code&amp;gt;ROPE ROPE ROPE ROPE ROPE ROPE ROPE ROPE ROPE&amp;lt;/code&amp;gt; =&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=RoxyNychus&amp;diff=3332</id>
		<title>RoxyNychus</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=RoxyNychus&amp;diff=3332"/>
		<updated>2026-07-28T21:34:11Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: Reverted edit by Shartosaurus (talk) to last revision by MechsploWikiSysop&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Biography ==&lt;br /&gt;
&lt;br /&gt;
== Series ==&lt;br /&gt;
RoxyNychus writes the series [[Angels of The Killing Hymn]], a seminal work in the [[Trenchsploitation]] sub-genre.&lt;br /&gt;
&lt;br /&gt;
=== Shorts ===&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=MediaWiki:Licenses&amp;diff=3216</id>
		<title>MediaWiki:Licenses</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=MediaWiki:Licenses&amp;diff=3216"/>
		<updated>2025-09-04T07:37:45Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*subst:No license from license selector|Don&#039;t know|I do not know the license&lt;br /&gt;
*subst:No license from license selector|Somewebsite|Found the image somewhere&lt;br /&gt;
*subst:Permission from license selector|The copyright holder gave me permission to use this work only in Wiki.Mechsploit.me articles&lt;br /&gt;
*subst:Non-commercial from license selector|The copyright holder only allows this work to be used for non-commercial and/or educational purposes&lt;br /&gt;
* Your own work:&lt;br /&gt;
** Allow non-commercial use, commercial use, and modifications as long as others credit you and share alike:&lt;br /&gt;
*** cc-by-sa-4.0|Own work, Creative Commons Attribution-Share Alike 4.0&lt;br /&gt;
*** self|cc-by-sa-4.0,3.0,2.5,2.0,1.0|Own work, multi-license with CC-BY-SA-4.0 and older&lt;br /&gt;
*** self|cc-by-sa-4.0|GFDL|migration=not-eligible|Own work, multi-license with CC-BY-SA-4.0 and GFDL&lt;br /&gt;
** Allow non-commercial use, commercial use, and modifications as long as others credit you:&lt;br /&gt;
*** self|cc-by-4.0|Own work, Creative Commons Attribution 4.0&lt;br /&gt;
** Reserve no rights:&lt;br /&gt;
*** self|cc-zero|Own work, release into public domain under the CC-Zero license&lt;br /&gt;
* Freely licensed:&lt;br /&gt;
** cc-by-sa-4.0|Creative Commons Attribution-Share Alike 4.0&lt;br /&gt;
** cc-by-4.0|Creative Commons Attribution 4.0&lt;br /&gt;
** cc-by-sa-2.0|Creative Commons Attribution-Share Alike 2.0&lt;br /&gt;
** cc-by-2.0|Creative Commons Attribution 2.0&lt;br /&gt;
** Wiki.Mechsploit.me-screenshot|Wiki.Mechsploit.me web page screenshot&lt;br /&gt;
* Public domain:&lt;br /&gt;
** Copyright expired:&lt;br /&gt;
*** PD-old|Author died more than 100 years ago&lt;br /&gt;
*** PD-art|- Photo of a two-dimensional work whose author died more than 100 years ago&lt;br /&gt;
*** PD-US-expired|First published in the United States before January 1, 1930&lt;br /&gt;
** Not covered by copyright:&lt;br /&gt;
*** PD-USGov|Work of a U.S. government agency&lt;br /&gt;
*** PD-text|Simple typefaces, individual words or geometric shapes&lt;br /&gt;
*** PD-textlogo|Logos with only simple typefaces, individual words or geometric shapes&lt;br /&gt;
* Unacceptable fair use:&lt;br /&gt;
**subst:rfu|Fair use image of a living person&lt;br /&gt;
**subst:rfu|Fair use image of an existing building&lt;br /&gt;
* Non-free / fair use - read WP:NONFREE before using any of the following tags:&lt;br /&gt;
** Non-free 2D art|Two-dimensional art&lt;br /&gt;
** Non-free 3D art|Three-dimensional art&lt;br /&gt;
** Non-free computer icon|Computer icon&lt;br /&gt;
** Non-free currency|Currency that may be copyrighted&lt;br /&gt;
** Non-free biog-pic|Deceased person&lt;br /&gt;
** Non-free logo|Logo&lt;br /&gt;
** Non-free audio sample|Music sample&lt;br /&gt;
** Non-free promotional|Promotional material&lt;br /&gt;
** Non-free stamp|Postage stamp, where copyright depends on the country&lt;br /&gt;
*** Non-free USGov-USPS stamp|- U.S. postage stamp from 1978 or later&lt;br /&gt;
** Non-free historic image|Historically significant event&lt;br /&gt;
** Covers:&lt;br /&gt;
*** Non-free album cover|Album or single cover&lt;br /&gt;
*** Non-free board game cover|Board game cover&lt;br /&gt;
*** Non-free book cover|Book cover&lt;br /&gt;
*** Non-free comic|Comic book stuff&lt;br /&gt;
*** Non-free video cover|DVD, Blu-Ray Disc, videotape, etc. cover&lt;br /&gt;
*** Non-free game cover|Video game cover&lt;br /&gt;
*** Non-free magazine cover|Magazine cover (can only be used in the article about the magazine)&lt;br /&gt;
*** Non-free newspaper image|Newspaper cover&lt;br /&gt;
** Posters:&lt;br /&gt;
*** Non-free poster|Any kind of poster&lt;br /&gt;
** Screenshots:&lt;br /&gt;
*** Non-free film screenshot|Movie screenshot&lt;br /&gt;
*** Non-free television screenshot|TV screenshot&lt;br /&gt;
*** Non-free title-card|Title card of a movie or TV series&lt;br /&gt;
*** Non-free game screenshot|Computer game or video game screenshot&lt;br /&gt;
*** Non-free music video screenshot|Music video or music promo screenshot&lt;br /&gt;
*** Non-free software screenshot|Software screenshot&lt;br /&gt;
**** Non-free Microsoft screenshot|- Screenshot of a Microsoft product&lt;br /&gt;
**** Non-free software screenshot|Screenshots of Windows software|- Windows software screenshot&lt;br /&gt;
**** Non-free software screenshot|Screenshots of Mac software|- Mac OS software screenshot&lt;br /&gt;
**** Non-free software screenshot|Screenshots of Linux software|- Linux software screenshot&lt;br /&gt;
*** Non-free web screenshot|Website layout screenshot&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:TableTools&amp;diff=3213</id>
		<title>Module:TableTools</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:TableTools&amp;diff=3213"/>
		<updated>2025-09-04T07:24:57Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;------------------------------------------------------------------------------------&lt;br /&gt;
--                                   TableTools                                   --&lt;br /&gt;
--                                                                                --&lt;br /&gt;
-- This module includes a number of functions for dealing with Lua tables.        --&lt;br /&gt;
-- It is a meta-module, meant to be called from other Lua modules, and should not --&lt;br /&gt;
-- be called directly from #invoke.                                               --&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Define often-used variables and functions.&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
local infinity = math.huge&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isPositiveInteger&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given value is a positive integer, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a given table key is in the array part or the&lt;br /&gt;
-- hash part of a table.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isPositiveInteger(v)&lt;br /&gt;
	return type(v) == &#039;number&#039; and v &amp;gt;= 1 and floor(v) == v and v &amp;lt; infinity&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isNan&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given number is a NaN value, and false if&lt;br /&gt;
-- not. Although it doesn&#039;t operate on tables, it is included here as it is useful&lt;br /&gt;
-- for determining whether a value can be a valid table key. Lua will generate an&lt;br /&gt;
-- error if a NaN is used as a table key.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isNan(v)&lt;br /&gt;
	return type(v) == &#039;number&#039; and v ~= v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- shallowClone&lt;br /&gt;
--&lt;br /&gt;
-- This returns a clone of a table. The value returned is a new table, but all&lt;br /&gt;
-- subtables and functions are shared. Metamethods are respected, but the returned&lt;br /&gt;
-- table will have no metatable of its own.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.shallowClone(t)&lt;br /&gt;
	checkType(&#039;shallowClone&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		ret[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- removeDuplicates&lt;br /&gt;
--&lt;br /&gt;
-- This removes duplicate values from an array. Non-positive-integer keys are&lt;br /&gt;
-- ignored. The earliest value is kept, and all subsequent duplicate values are&lt;br /&gt;
-- removed, but otherwise the array order is unchanged.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.removeDuplicates(arr)&lt;br /&gt;
	checkType(&#039;removeDuplicates&#039;, 1, arr, &#039;table&#039;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local ret, exists = {}, {}&lt;br /&gt;
	for _, v in ipairs(arr) do&lt;br /&gt;
		if isNan(v) then&lt;br /&gt;
			-- NaNs can&#039;t be table keys, and they are also unique, so we don&#039;t need to check existence.&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
		elseif not exists[v] then&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
			exists[v] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numKeys&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of any numerical&lt;br /&gt;
-- keys that have non-nil values, sorted in numerical order.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.numKeys(t)&lt;br /&gt;
	checkType(&#039;numKeys&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isPositiveInteger = p.isPositiveInteger&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		if isPositiveInteger(k) then&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- affixNums&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of keys with the&lt;br /&gt;
-- specified prefix and suffix. For example, for the table&lt;br /&gt;
-- {a1 = &#039;foo&#039;, a3 = &#039;bar&#039;, a6 = &#039;baz&#039;} and the prefix &amp;quot;a&amp;quot;, affixNums will return&lt;br /&gt;
-- {1, 3, 6}.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.affixNums(t, prefix, suffix)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 2, prefix, &#039;string&#039;, true)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 3, suffix, &#039;string&#039;, true)&lt;br /&gt;
&lt;br /&gt;
	local function cleanPattern(s)&lt;br /&gt;
		-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.&lt;br /&gt;
		return s:gsub(&#039;([%(%)%%%.%[%]%*%+%-%?%^%$])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	suffix = suffix or &#039;&#039;&lt;br /&gt;
	prefix = cleanPattern(prefix)&lt;br /&gt;
	suffix = cleanPattern(suffix)&lt;br /&gt;
	local pattern = &#039;^&#039; .. prefix .. &#039;([1-9]%d*)&#039; .. suffix .. &#039;$&#039;&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		if type(k) == &#039;string&#039; then&lt;br /&gt;
			local num = mw.ustring.match(k, pattern)&lt;br /&gt;
			if num then&lt;br /&gt;
				nums[#nums + 1] = tonumber(num)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numData&lt;br /&gt;
--&lt;br /&gt;
-- Given a table with keys like {&amp;quot;foo1&amp;quot;, &amp;quot;bar1&amp;quot;, &amp;quot;foo2&amp;quot;, &amp;quot;baz2&amp;quot;}, returns a table&lt;br /&gt;
-- of subtables in the format&lt;br /&gt;
-- {[1] = {foo = &#039;text&#039;, bar = &#039;text&#039;}, [2] = {foo = &#039;text&#039;, baz = &#039;text&#039;}}.&lt;br /&gt;
-- Keys that don&#039;t end with an integer are stored in a subtable named &amp;quot;other&amp;quot;. The&lt;br /&gt;
-- compress option compresses the table so that it can be iterated over with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.numData(t, compress)&lt;br /&gt;
	checkType(&#039;numData&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;numData&#039;, 2, compress, &#039;boolean&#039;, true)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		local prefix, num = mw.ustring.match(tostring(k), &#039;^([^0-9]*)([1-9][0-9]*)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			local subtable = ret[num] or {}&lt;br /&gt;
			if prefix == &#039;&#039; then&lt;br /&gt;
				-- Positional parameters match the blank string; put them at the start of the subtable instead.&lt;br /&gt;
				prefix = 1&lt;br /&gt;
			end&lt;br /&gt;
			subtable[prefix] = v&lt;br /&gt;
			ret[num] = subtable&lt;br /&gt;
		else&lt;br /&gt;
			local subtable = ret.other or {}&lt;br /&gt;
			subtable[k] = v&lt;br /&gt;
			ret.other = subtable&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if compress then&lt;br /&gt;
		local other = ret.other&lt;br /&gt;
		ret = p.compressSparseArray(ret)&lt;br /&gt;
		ret.other = other&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- compressSparseArray&lt;br /&gt;
--&lt;br /&gt;
-- This takes an array with one or more nil values, and removes the nil values&lt;br /&gt;
-- while preserving the order, so that the array can be safely traversed with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.compressSparseArray(t)&lt;br /&gt;
	checkType(&#039;compressSparseArray&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		ret[#ret + 1] = t[num]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sparseIpairs&lt;br /&gt;
--&lt;br /&gt;
-- This is an iterator for sparse arrays. It can be used like ipairs, but can&lt;br /&gt;
-- handle nil values.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.sparseIpairs(t)&lt;br /&gt;
	checkType(&#039;sparseIpairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	local lim = #nums&lt;br /&gt;
	return function ()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if i &amp;lt;= lim then&lt;br /&gt;
			local key = nums[i]&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- size&lt;br /&gt;
--&lt;br /&gt;
-- This returns the size of a key/value pair table. It will also work on arrays,&lt;br /&gt;
-- but for arrays it is more efficient to use the # operator.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.size(t)&lt;br /&gt;
	checkType(&#039;size&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for _ in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function defaultKeySort(item1, item2)&lt;br /&gt;
	-- &amp;quot;number&amp;quot; &amp;lt; &amp;quot;string&amp;quot;, so numbers will be sorted before strings.&lt;br /&gt;
	local type1, type2 = type(item1), type(item2)&lt;br /&gt;
	if type1 ~= type2 then&lt;br /&gt;
		return type1 &amp;lt; type2&lt;br /&gt;
	elseif type1 == &#039;table&#039; or type1 == &#039;boolean&#039; or type1 == &#039;function&#039; then&lt;br /&gt;
		return tostring(item1) &amp;lt; tostring(item2)&lt;br /&gt;
	else&lt;br /&gt;
		return item1 &amp;lt; item2&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- keysToList&lt;br /&gt;
--&lt;br /&gt;
-- Returns an array of the keys in a table, sorted using either a default&lt;br /&gt;
-- comparison function or a custom keySort function.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.keysToList(t, keySort, checked)&lt;br /&gt;
	if not checked then&lt;br /&gt;
		checkType(&#039;keysToList&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
		checkTypeMulti(&#039;keysToList&#039;, 2, keySort, {&#039;function&#039;, &#039;boolean&#039;, &#039;nil&#039;})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local arr = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		arr[index] = k&lt;br /&gt;
		index = index + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if keySort ~= false then&lt;br /&gt;
		keySort = type(keySort) == &#039;function&#039; and keySort or defaultKeySort&lt;br /&gt;
		table.sort(arr, keySort)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return arr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sortedPairs&lt;br /&gt;
--&lt;br /&gt;
-- Iterates through a table, with the keys sorted using the keysToList function.&lt;br /&gt;
-- If there are only numerical keys, sparseIpairs is probably more efficient.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.sortedPairs(t, keySort)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 2, keySort, &#039;function&#039;, true)&lt;br /&gt;
&lt;br /&gt;
	local arr = p.keysToList(t, keySort, true)&lt;br /&gt;
&lt;br /&gt;
	local i = 0&lt;br /&gt;
	return function ()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		local key = arr[i]&lt;br /&gt;
		if key ~= nil then&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isArray&lt;br /&gt;
--&lt;br /&gt;
-- Returns true if the given value is a table and all keys are consecutive&lt;br /&gt;
-- integers starting at 1.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isArray(v)&lt;br /&gt;
	if type(v) ~= &#039;table&#039; then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for _ in pairs(v) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if v[i] == nil then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isArrayLike&lt;br /&gt;
--&lt;br /&gt;
-- Returns true if the given value is iterable and all keys are consecutive&lt;br /&gt;
-- integers starting at 1.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isArrayLike(v)&lt;br /&gt;
	if not pcall(pairs, v) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for _ in pairs(v) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if v[i] == nil then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- invert&lt;br /&gt;
--&lt;br /&gt;
-- Transposes the keys and values in an array. For example, {&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;} -&amp;gt;&lt;br /&gt;
-- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to&lt;br /&gt;
-- the index of the last duplicate) and NaN values are ignored.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.invert(arr)&lt;br /&gt;
	checkType(&amp;quot;invert&amp;quot;, 1, arr, &amp;quot;table&amp;quot;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local map = {}&lt;br /&gt;
	for i, v in ipairs(arr) do&lt;br /&gt;
		if not isNan(v) then&lt;br /&gt;
			map[v] = i&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return map&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- listToSet&lt;br /&gt;
--&lt;br /&gt;
-- Creates a set from the array part of the table. Indexing the set by any of the&lt;br /&gt;
-- values of the array returns true. For example, {&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;} -&amp;gt;&lt;br /&gt;
-- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them&lt;br /&gt;
-- never equal to any value (including other NaNs or even themselves).&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.listToSet(arr)&lt;br /&gt;
	checkType(&amp;quot;listToSet&amp;quot;, 1, arr, &amp;quot;table&amp;quot;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local set = {}&lt;br /&gt;
	for _, v in ipairs(arr) do&lt;br /&gt;
		if not isNan(v) then&lt;br /&gt;
			set[v] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return set&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- deepCopy&lt;br /&gt;
--&lt;br /&gt;
-- Recursive deep copy function. Preserves identities of subtables.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
local function _deepCopy(orig, includeMetatable, already_seen)&lt;br /&gt;
	if type(orig) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
		return orig&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- already_seen stores copies of tables indexed by the original table.&lt;br /&gt;
	local copy = already_seen[orig]&lt;br /&gt;
	if copy ~= nil then&lt;br /&gt;
		return copy&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	copy = {}&lt;br /&gt;
	already_seen[orig] = copy -- memoize before any recursion, to avoid infinite loops&lt;br /&gt;
	&lt;br /&gt;
	for orig_key, orig_value in pairs(orig) do&lt;br /&gt;
		copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if includeMetatable then&lt;br /&gt;
		local mt = getmetatable(orig)&lt;br /&gt;
		if mt ~= nil then&lt;br /&gt;
			setmetatable(copy, _deepCopy(mt, true, already_seen))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.deepCopy(orig, noMetatable, already_seen)&lt;br /&gt;
	checkType(&amp;quot;deepCopy&amp;quot;, 3, already_seen, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
	return _deepCopy(orig, not noMetatable, already_seen or {})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sparseConcat&lt;br /&gt;
--&lt;br /&gt;
-- Concatenates all values in the table that are indexed by a number, in order.&lt;br /&gt;
-- sparseConcat{a, nil, c, d}  =&amp;gt;  &amp;quot;acd&amp;quot;&lt;br /&gt;
-- sparseConcat{nil, b, c, d}  =&amp;gt;  &amp;quot;bcd&amp;quot;&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.sparseConcat(t, sep, i, j)&lt;br /&gt;
	local arr = {}&lt;br /&gt;
&lt;br /&gt;
	local arr_i = 0&lt;br /&gt;
	for _, v in p.sparseIpairs(t) do&lt;br /&gt;
		arr_i = arr_i + 1&lt;br /&gt;
		arr[arr_i] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(arr, sep, i, j)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- length&lt;br /&gt;
--&lt;br /&gt;
-- Finds the length of an array, or of a quasi-array with keys such as &amp;quot;data1&amp;quot;,&lt;br /&gt;
-- &amp;quot;data2&amp;quot;, etc., using an exponential search algorithm. It is similar to the&lt;br /&gt;
-- operator #, but may return a different value when there are gaps in the array&lt;br /&gt;
-- portion of the table. Intended to be used on data loaded with mw.loadData. For&lt;br /&gt;
-- other tables, use #.&lt;br /&gt;
-- Note: #frame.args in frame object always be set to 0, regardless of  the number&lt;br /&gt;
-- of unnamed template parameters, so use this function for frame.args.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.length(t, prefix)&lt;br /&gt;
	-- requiring module inline so that [[Module:Exponential search]] which is&lt;br /&gt;
	-- only needed by this one function doesn&#039;t get millions of transclusions&lt;br /&gt;
	local expSearch = require(&amp;quot;Module:Exponential search&amp;quot;)&lt;br /&gt;
	checkType(&#039;length&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;length&#039;, 2, prefix, &#039;string&#039;, true)&lt;br /&gt;
	return expSearch(function (i)&lt;br /&gt;
		local key&lt;br /&gt;
		if prefix then&lt;br /&gt;
			key = prefix .. tostring(i)&lt;br /&gt;
		else&lt;br /&gt;
			key = i&lt;br /&gt;
		end&lt;br /&gt;
		return t[key] ~= nil&lt;br /&gt;
	end) or 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- inArray&lt;br /&gt;
--&lt;br /&gt;
-- Returns true if searchElement is a member of the array, and false otherwise.&lt;br /&gt;
-- Equivalent to JavaScript array.includes(searchElement) or&lt;br /&gt;
-- array.includes(searchElement, fromIndex), except fromIndex is 1 indexed&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.inArray(array, searchElement, fromIndex)&lt;br /&gt;
	checkType(&amp;quot;inArray&amp;quot;, 1, array, &amp;quot;table&amp;quot;)&lt;br /&gt;
	-- if searchElement is nil, error?&lt;br /&gt;
&lt;br /&gt;
	fromIndex = tonumber(fromIndex)&lt;br /&gt;
	if fromIndex then&lt;br /&gt;
		if (fromIndex &amp;lt; 0) then&lt;br /&gt;
			fromIndex = #array + fromIndex + 1&lt;br /&gt;
		end&lt;br /&gt;
		if fromIndex &amp;lt; 1 then fromIndex = 1 end&lt;br /&gt;
		for _, v in ipairs({unpack(array, fromIndex)}) do&lt;br /&gt;
			if v == searchElement then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for _, v in pairs(array) do&lt;br /&gt;
			if v == searchElement then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- merge&lt;br /&gt;
--&lt;br /&gt;
-- Given the arrays, returns an array containing the elements of each input array&lt;br /&gt;
-- in sequence.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.merge(...)&lt;br /&gt;
	local arrays = {...}&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for i, arr in ipairs(arrays) do&lt;br /&gt;
		checkType(&#039;merge&#039;, i, arr, &#039;table&#039;)&lt;br /&gt;
		for _, v in ipairs(arr) do&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- extend&lt;br /&gt;
--&lt;br /&gt;
-- Extends the first array in place by appending all elements from the second&lt;br /&gt;
-- array.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.extend(arr1, arr2)&lt;br /&gt;
	checkType(&#039;extend&#039;, 1, arr1, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;extend&#039;, 2, arr2, &#039;table&#039;)&lt;br /&gt;
&lt;br /&gt;
	for _, v in ipairs(arr2) do&lt;br /&gt;
		arr1[#arr1 + 1] = v&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:List&amp;diff=3211</id>
		<title>Module:List</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:List&amp;diff=3211"/>
		<updated>2025-09-04T07:24:57Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local libUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libUtil.checkType&lt;br /&gt;
local mTableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local listTypes = {&lt;br /&gt;
	[&#039;bulleted&#039;] = true,&lt;br /&gt;
	[&#039;unbulleted&#039;] = true,&lt;br /&gt;
	[&#039;horizontal&#039;] = true,&lt;br /&gt;
	[&#039;ordered&#039;] = true,&lt;br /&gt;
	[&#039;horizontal_ordered&#039;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.makeListData(listType, args)&lt;br /&gt;
	-- Constructs a data table to be passed to p.renderList.&lt;br /&gt;
	local data = {}&lt;br /&gt;
&lt;br /&gt;
	-- Classes and TemplateStyles&lt;br /&gt;
	data.classes = {}&lt;br /&gt;
	data.templatestyles = &#039;&#039;&lt;br /&gt;
	if listType == &#039;horizontal&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		table.insert(data.classes, &#039;hlist&#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = &#039;Hlist/styles.css&#039; }&lt;br /&gt;
		}&lt;br /&gt;
	elseif listType == &#039;unbulleted&#039; then&lt;br /&gt;
		table.insert(data.classes, &#039;plainlist&#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = &#039;Plainlist/styles.css&#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(data.classes, args.class)&lt;br /&gt;
&lt;br /&gt;
	-- Main div style&lt;br /&gt;
	data.style = args.style&lt;br /&gt;
&lt;br /&gt;
	-- Indent for horizontal lists&lt;br /&gt;
	if listType == &#039;horizontal&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		local indent = tonumber(args.indent)&lt;br /&gt;
		indent = indent and indent * 1.6 or 0&lt;br /&gt;
		if indent &amp;gt; 0 then&lt;br /&gt;
			data.marginLeft = indent .. &#039;em&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List style types for ordered lists&lt;br /&gt;
	-- This could be &amp;quot;1, 2, 3&amp;quot;, &amp;quot;a, b, c&amp;quot;, or a number of others. The list style&lt;br /&gt;
	-- type is either set by the &amp;quot;type&amp;quot; attribute or the &amp;quot;list-style-type&amp;quot; CSS&lt;br /&gt;
	-- property.&lt;br /&gt;
	if listType == &#039;ordered&#039; or listType == &#039;horizontal_ordered&#039; then &lt;br /&gt;
		data.listStyleType = args.list_style_type or args[&#039;list-style-type&#039;]&lt;br /&gt;
		data.type = args[&#039;type&#039;]&lt;br /&gt;
&lt;br /&gt;
		-- Detect invalid type attributes and attempt to convert them to&lt;br /&gt;
		-- list-style-type CSS properties.&lt;br /&gt;
		if data.type &lt;br /&gt;
			and not data.listStyleType&lt;br /&gt;
			and not tostring(data.type):find(&#039;^%s*[1AaIi]%s*$&#039;)&lt;br /&gt;
		then&lt;br /&gt;
			data.listStyleType = data.type&lt;br /&gt;
			data.type = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List tag type&lt;br /&gt;
	if listType == &#039;ordered&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		data.listTag = &#039;ol&#039;&lt;br /&gt;
	else&lt;br /&gt;
		data.listTag = &#039;ul&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Start number for ordered lists&lt;br /&gt;
	data.start = args.start&lt;br /&gt;
	if listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		-- Apply fix to get start numbers working with horizontal ordered lists.&lt;br /&gt;
		local startNum = tonumber(data.start)&lt;br /&gt;
		if startNum then&lt;br /&gt;
			data.counterReset = &#039;listitem &#039; .. tostring(startNum - 1)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- List style&lt;br /&gt;
	 -- ul_style and ol_style are included for backwards compatibility. No&lt;br /&gt;
	 -- distinction is made for ordered or unordered lists.&lt;br /&gt;
	data.listStyle = args.list_style&lt;br /&gt;
&lt;br /&gt;
	-- List items&lt;br /&gt;
	-- li_style is included for backwards compatibility. item_style was included&lt;br /&gt;
	-- to be easier to understand for non-coders.&lt;br /&gt;
	data.itemStyle = args.item_style or args.li_style&lt;br /&gt;
	data.items = {}&lt;br /&gt;
	for _, num in ipairs(mTableTools.numKeys(args)) do&lt;br /&gt;
		local item = {}&lt;br /&gt;
		item.content = args[num]&lt;br /&gt;
		item.style = args[&#039;item&#039; .. tostring(num) .. &#039;_style&#039;]&lt;br /&gt;
			or args[&#039;item_style&#039; .. tostring(num)]&lt;br /&gt;
		item.value = args[&#039;item&#039; .. tostring(num) .. &#039;_value&#039;]&lt;br /&gt;
			or args[&#039;item_value&#039; .. tostring(num)]&lt;br /&gt;
		table.insert(data.items, item)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderList(data)&lt;br /&gt;
	-- Renders the list HTML.&lt;br /&gt;
	&lt;br /&gt;
	-- Return the blank string if there are no list items.&lt;br /&gt;
	if type(data.items) ~= &#039;table&#039; or #data.items &amp;lt; 1 then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Render the main div tag.&lt;br /&gt;
	local root = mw.html.create(&#039;div&#039;)&lt;br /&gt;
	for _, class in ipairs(data.classes or {}) do&lt;br /&gt;
		root:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	root:css{[&#039;margin-left&#039;] = data.marginLeft}&lt;br /&gt;
	if data.style then&lt;br /&gt;
		root:cssText(data.style)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list tag.&lt;br /&gt;
	local list = root:tag(data.listTag or &#039;ul&#039;)&lt;br /&gt;
	list&lt;br /&gt;
		:attr{start = data.start, type = data.type}&lt;br /&gt;
		:css{&lt;br /&gt;
			[&#039;counter-reset&#039;] = data.counterReset,&lt;br /&gt;
			[&#039;list-style-type&#039;] = data.listStyleType&lt;br /&gt;
		}&lt;br /&gt;
	if data.listStyle then&lt;br /&gt;
		list:cssText(data.listStyle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list items&lt;br /&gt;
	for _, t in ipairs(data.items or {}) do&lt;br /&gt;
		local item = list:tag(&#039;li&#039;)&lt;br /&gt;
		if data.itemStyle then&lt;br /&gt;
			item:cssText(data.itemStyle)&lt;br /&gt;
		end&lt;br /&gt;
		if t.style then&lt;br /&gt;
			item:cssText(t.style)&lt;br /&gt;
		end&lt;br /&gt;
		item&lt;br /&gt;
			:attr{value = t.value}&lt;br /&gt;
			:wikitext(t.content)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return data.templatestyles .. tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderTrackingCategories(args)&lt;br /&gt;
	local isDeprecated = false -- Tracks deprecated parameters.&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = tostring(k)&lt;br /&gt;
		if k:find(&#039;^item_style%d+$&#039;) or k:find(&#039;^item_value%d+$&#039;) then&lt;br /&gt;
			isDeprecated = true&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local ret = &#039;&#039;&lt;br /&gt;
	if isDeprecated then&lt;br /&gt;
		ret = ret .. &#039;[[Category:List templates with deprecated parameters]]&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeList(listType, args)&lt;br /&gt;
	if not listType or not listTypes[listType] then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;bad argument #1 to &#039;makeList&#039; (&#039;%s&#039; is not a valid list type)&amp;quot;,&lt;br /&gt;
			tostring(listType)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	checkType(&#039;makeList&#039;, 2, args, &#039;table&#039;)&lt;br /&gt;
	local data = p.makeListData(listType, args)&lt;br /&gt;
	local list = p.renderList(data)&lt;br /&gt;
	local trackingCategories = p.renderTrackingCategories(args)&lt;br /&gt;
	return list .. trackingCategories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for listType in pairs(listTypes) do&lt;br /&gt;
	p[listType] = function (frame)&lt;br /&gt;
		local mArguments = require(&#039;Module:Arguments&#039;)&lt;br /&gt;
		local origArgs = mArguments.getArgs(frame, {&lt;br /&gt;
			frameOnly = ((frame and frame.args and frame.args.frameonly or &#039;&#039;) ~= &#039;&#039;),&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
			if not value or not mw.ustring.find(value, &#039;%S&#039;) then return nil end&lt;br /&gt;
			if mw.ustring.find(value, &#039;^%s*[%*#;:]&#039;) then&lt;br /&gt;
				return value&lt;br /&gt;
			else&lt;br /&gt;
				return value:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		})&lt;br /&gt;
		-- Copy all the arguments to a new table, for faster indexing.&lt;br /&gt;
		local args = {}&lt;br /&gt;
		for k, v in pairs(origArgs) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		return p.makeList(listType, args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Sandbox_other&amp;diff=3209</id>
		<title>Template:Sandbox other</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Sandbox_other&amp;diff=3209"/>
		<updated>2025-09-04T07:24:56Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{safesubst:&amp;lt;noinclude/&amp;gt;#if:{{safesubst:&amp;lt;noinclude/&amp;gt;#ifeq:{{safesubst:&amp;lt;noinclude/&amp;gt;#invoke:String|sublength|s={{safesubst:&amp;lt;noinclude/&amp;gt;SUBPAGENAME}}|i=0|len=7}}|sandbox|1}}{{safesubst:&amp;lt;noinclude/&amp;gt;#ifeq:{{safesubst:&amp;lt;noinclude/&amp;gt;SUBPAGENAME}}|doc|1}}{{safesubst:&amp;lt;noinclude/&amp;gt;#invoke:String|match|{{safesubst:&amp;lt;noinclude/&amp;gt;PAGENAME}}|/sandbox/styles.css$|plain=false|nomatch=}}|{{{1|}}}|{{{2|}}}}}&amp;lt;/onlyinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{documentation}}&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Yesno&amp;diff=3207</id>
		<title>Template:Yesno</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Yesno&amp;diff=3207"/>
		<updated>2025-09-04T07:24:56Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#switch: {{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;lc: {{{1|¬}}} }}&lt;br /&gt;
 |no&lt;br /&gt;
 |n&lt;br /&gt;
 |f&lt;br /&gt;
 |false&lt;br /&gt;
 |off&lt;br /&gt;
 |0        = {{{no|&amp;lt;!-- null --&amp;gt;}}}&lt;br /&gt;
 |         = {{{blank|{{{no|&amp;lt;!-- null --&amp;gt;}}}}}}&lt;br /&gt;
 |¬        = {{{¬|}}}&lt;br /&gt;
 |yes&lt;br /&gt;
 |y&lt;br /&gt;
 |t&lt;br /&gt;
 |true&lt;br /&gt;
 |on&lt;br /&gt;
 |1        = {{{yes|yes}}}&lt;br /&gt;
 |#default = {{{def|{{{yes|yes}}}}}}&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>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:IsDocSubpage&amp;diff=3205</id>
		<title>Template:IsDocSubpage</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:IsDocSubpage&amp;diff=3205"/>
		<updated>2025-09-04T07:24:56Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#ifexpr: (&lt;br /&gt;
	{{#ifeq:{{lc:{{SUBPAGENAME}}}}|{{lc:{{{override|doc}}}}}|1|0}} or (&lt;br /&gt;
		{{#ifeq:{{lc:{{#titleparts:{{FULLPAGENAME}}|-1|-2}}}}|{{lc:{{{override|doc}}}}}|1|0}}&lt;br /&gt;
		and {{#if:{{#translation:}}|1|0}}&lt;br /&gt;
	)&lt;br /&gt;
)&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|{{{true|1}}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|{{{false|}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;/includeonly&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Translatable/en&amp;diff=3203</id>
		<title>Template:Translatable/en</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Translatable/en&amp;diff=3203"/>
		<updated>2025-09-04T07:24:55Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages /&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}|&lt;br /&gt;
|{{{1|{{FULLPAGENAME}}}}}&lt;br /&gt;
|{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}}&lt;br /&gt;
  |1&lt;br /&gt;
  |{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}}&lt;br /&gt;
  }}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
{{Lua|Module:String}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
* {{tlx|translatable}}&lt;br /&gt;
{{translatable}}&lt;br /&gt;
* {{tlx|translatable|2=Page name}}&lt;br /&gt;
{{translatable|1=Page name}}&lt;br /&gt;
* {{tlx|translatable|2=Page name/{{PAGELANGUAGE}} }}&lt;br /&gt;
{{translatable|1=Page name/{{PAGELANGUAGE}} }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Internationalization templates{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:String&amp;diff=3201</id>
		<title>Module:String</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:String&amp;diff=3201"/>
		<updated>2025-09-04T07:24:54Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
&lt;br /&gt;
This module is intended to provide access to basic string functions.&lt;br /&gt;
&lt;br /&gt;
Most of the functions provided here can be invoked with named parameters,&lt;br /&gt;
unnamed parameters, or a mixture.  If named parameters are used, Mediawiki will&lt;br /&gt;
automatically remove any leading or trailing whitespace from the parameter.&lt;br /&gt;
Depending on the intended use, it may be advantageous to either preserve or&lt;br /&gt;
remove such whitespace.&lt;br /&gt;
&lt;br /&gt;
Global options&lt;br /&gt;
    ignore_errors: If set to &#039;true&#039; or 1, any error condition will result in&lt;br /&gt;
        an empty string being returned rather than an error message.&lt;br /&gt;
&lt;br /&gt;
    error_category: If an error occurs, specifies the name of a category to&lt;br /&gt;
        include with the error message.  The default category is&lt;br /&gt;
        [Category:Errors reported by Module String].&lt;br /&gt;
&lt;br /&gt;
    no_category: If set to &#039;true&#039; or 1, no category will be added if an error&lt;br /&gt;
        is generated.&lt;br /&gt;
&lt;br /&gt;
Unit tests for this module are available at Module:String/tests.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local str = {}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
len&lt;br /&gt;
&lt;br /&gt;
This function returns the length of the target string.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|len|target_string|}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|len|s=target_string}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string whose length to report&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from the target string.&lt;br /&gt;
]]&lt;br /&gt;
function str.len( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;s&#039;} )&lt;br /&gt;
	local s = new_args[&#039;s&#039;] or &#039;&#039;&lt;br /&gt;
	return mw.ustring.len( s )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
sub&lt;br /&gt;
&lt;br /&gt;
This function returns a substring of the target string at specified indices.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|sub|target_string|start_index|end_index}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string to return a subset of&lt;br /&gt;
    i: The first index of the substring to return, defaults to 1.&lt;br /&gt;
    j: The last index of the string to return, defaults to the last character.&lt;br /&gt;
&lt;br /&gt;
The first character of the string is assigned an index of 1.  If either i or j&lt;br /&gt;
is a negative value, it is interpreted the same as selecting a character by&lt;br /&gt;
counting from the end of the string.  Hence, a value of -1 is the same as&lt;br /&gt;
selecting the last character of the string.&lt;br /&gt;
&lt;br /&gt;
If the requested indices are out of range for the given string, an error is&lt;br /&gt;
reported.&lt;br /&gt;
]]&lt;br /&gt;
function str.sub( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, { &#039;s&#039;, &#039;i&#039;, &#039;j&#039; } )&lt;br /&gt;
	local s = new_args[&#039;s&#039;] or &#039;&#039;&lt;br /&gt;
	local i = tonumber( new_args[&#039;i&#039;] ) or 1&lt;br /&gt;
	local j = tonumber( new_args[&#039;j&#039;] ) or -1&lt;br /&gt;
&lt;br /&gt;
	local len = mw.ustring.len( s )&lt;br /&gt;
&lt;br /&gt;
	-- Convert negatives for range checking&lt;br /&gt;
	if i &amp;lt; 0 then&lt;br /&gt;
		i = len + i + 1&lt;br /&gt;
	end&lt;br /&gt;
	if j &amp;lt; 0 then&lt;br /&gt;
		j = len + j + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if i &amp;gt; len or j &amp;gt; len or i &amp;lt; 1 or j &amp;lt; 1 then&lt;br /&gt;
		return str._error( &#039;String subset index out of range&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if j &amp;lt; i then&lt;br /&gt;
		return str._error( &#039;String subset indices out of order&#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.ustring.sub( s, i, j )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
This function implements that features of {{str sub old}} and is kept in order&lt;br /&gt;
to maintain these older templates.&lt;br /&gt;
]]&lt;br /&gt;
function str.sublength( frame )&lt;br /&gt;
	local i = tonumber( frame.args.i ) or 0&lt;br /&gt;
	local len = tonumber( frame.args.len )&lt;br /&gt;
	return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
_match&lt;br /&gt;
&lt;br /&gt;
This function returns a substring from the source string that matches a&lt;br /&gt;
specified pattern. It is exported for use in other modules&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
strmatch = require(&amp;quot;Module:String&amp;quot;)._match&lt;br /&gt;
sresult = strmatch( s, pattern, start, match, plain, nomatch )&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string to search&lt;br /&gt;
    pattern: The pattern or string to find within the string&lt;br /&gt;
    start: The index within the source string to start the search.  The first&lt;br /&gt;
        character of the string has index 1.  Defaults to 1.&lt;br /&gt;
    match: In some cases it may be possible to make multiple matches on a single&lt;br /&gt;
        string.  This specifies which match to return, where the first match is&lt;br /&gt;
        match= 1.  If a negative number is specified then a match is returned&lt;br /&gt;
        counting from the last match.  Hence match = -1 is the same as requesting&lt;br /&gt;
        the last match.  Defaults to 1.&lt;br /&gt;
    plain: A flag indicating that the pattern should be understood as plain&lt;br /&gt;
        text.  Defaults to false.&lt;br /&gt;
    nomatch: If no match is found, output the &amp;quot;nomatch&amp;quot; value rather than an error.&lt;br /&gt;
&lt;br /&gt;
For information on constructing Lua patterns, a form of [regular expression], see:&lt;br /&gt;
&lt;br /&gt;
* http://www.lua.org/manual/5.1/manual.html#5.4.1&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
-- This sub-routine is exported for use in other modules&lt;br /&gt;
function str._match( s, pattern, start, match_index, plain_flag, nomatch )&lt;br /&gt;
	if s == &#039;&#039; then&lt;br /&gt;
		return str._error( &#039;Target string is empty&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if pattern == &#039;&#039; then&lt;br /&gt;
		return str._error( &#039;Pattern string is empty&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	start = tonumber(start) or 1&lt;br /&gt;
	if math.abs(start) &amp;lt; 1 or math.abs(start) &amp;gt; mw.ustring.len( s ) then&lt;br /&gt;
		return str._error( &#039;Requested start is out of range&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if match_index == 0 then&lt;br /&gt;
		return str._error( &#039;Match index is out of range&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if plain_flag then&lt;br /&gt;
		pattern = str._escapePattern( pattern )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result&lt;br /&gt;
	if match_index == 1 then&lt;br /&gt;
		-- Find first match is simple case&lt;br /&gt;
		result = mw.ustring.match( s, pattern, start )&lt;br /&gt;
	else&lt;br /&gt;
		if start &amp;gt; 1 then&lt;br /&gt;
			s = mw.ustring.sub( s, start )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local iterator = mw.ustring.gmatch(s, pattern)&lt;br /&gt;
		if match_index &amp;gt; 0 then&lt;br /&gt;
			-- Forward search&lt;br /&gt;
			for w in iterator do&lt;br /&gt;
				match_index = match_index - 1&lt;br /&gt;
				if match_index == 0 then&lt;br /&gt;
					result = w&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- Reverse search&lt;br /&gt;
			local result_table = {}&lt;br /&gt;
			local count = 1&lt;br /&gt;
			for w in iterator do&lt;br /&gt;
				result_table[count] = w&lt;br /&gt;
				count = count + 1&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			result = result_table[ count + match_index ]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if result == nil then&lt;br /&gt;
		if nomatch == nil then&lt;br /&gt;
			return str._error( &#039;Match not found&#039; )&lt;br /&gt;
		else&lt;br /&gt;
			return nomatch&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return result&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
match&lt;br /&gt;
&lt;br /&gt;
This function returns a substring from the source string that matches a&lt;br /&gt;
specified pattern.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index&lt;br /&gt;
    |match=match_number|plain=plain_flag|nomatch=nomatch_output}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    s: The string to search&lt;br /&gt;
    pattern: The pattern or string to find within the string&lt;br /&gt;
    start: The index within the source string to start the search.  The first&lt;br /&gt;
        character of the string has index 1.  Defaults to 1.&lt;br /&gt;
    match: In some cases it may be possible to make multiple matches on a single&lt;br /&gt;
        string.  This specifies which match to return, where the first match is&lt;br /&gt;
        match= 1.  If a negative number is specified then a match is returned&lt;br /&gt;
        counting from the last match.  Hence match = -1 is the same as requesting&lt;br /&gt;
        the last match.  Defaults to 1.&lt;br /&gt;
    plain: A flag indicating that the pattern should be understood as plain&lt;br /&gt;
        text.  Defaults to false.&lt;br /&gt;
    nomatch: If no match is found, output the &amp;quot;nomatch&amp;quot; value rather than an error.&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from each string.  In some circumstances this is desirable, in&lt;br /&gt;
other cases one may want to preserve the whitespace.&lt;br /&gt;
&lt;br /&gt;
If the match_number or start_index are out of range for the string being queried, then&lt;br /&gt;
this function generates an error.  An error is also generated if no match is found.&lt;br /&gt;
If one adds the parameter ignore_errors=true, then the error will be suppressed and&lt;br /&gt;
an empty string will be returned on any failure.&lt;br /&gt;
&lt;br /&gt;
For information on constructing Lua patterns, a form of [regular expression], see:&lt;br /&gt;
&lt;br /&gt;
* http://www.lua.org/manual/5.1/manual.html#5.4.1&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
-- This is the entry point for #invoke:String|match&lt;br /&gt;
function str.match( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;s&#039;, &#039;pattern&#039;, &#039;start&#039;, &#039;match&#039;, &#039;plain&#039;, &#039;nomatch&#039;} )&lt;br /&gt;
	local s = new_args[&#039;s&#039;] or &#039;&#039;&lt;br /&gt;
	local start = tonumber( new_args[&#039;start&#039;] ) or 1&lt;br /&gt;
	local plain_flag = str._getBoolean( new_args[&#039;plain&#039;] or false )&lt;br /&gt;
	local pattern = new_args[&#039;pattern&#039;] or &#039;&#039;&lt;br /&gt;
	local match_index = math.floor( tonumber(new_args[&#039;match&#039;]) or 1 )&lt;br /&gt;
	local nomatch = new_args[&#039;nomatch&#039;]&lt;br /&gt;
&lt;br /&gt;
	return str._match( s, pattern, start, match_index, plain_flag, nomatch )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
pos&lt;br /&gt;
&lt;br /&gt;
This function returns a single character from the target string at position pos.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|pos|target_string|index_value}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|pos|target=target_string|pos=index_value}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    target: The string to search&lt;br /&gt;
    pos: The index for the character to return&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from the target string.  In some circumstances this is desirable, in&lt;br /&gt;
other cases one may want to preserve the whitespace.&lt;br /&gt;
&lt;br /&gt;
The first character has an index value of 1.&lt;br /&gt;
&lt;br /&gt;
If one requests a negative value, this function will select a character by counting backwards&lt;br /&gt;
from the end of the string.  In other words pos = -1 is the same as asking for the last character.&lt;br /&gt;
&lt;br /&gt;
A requested value of zero, or a value greater than the length of the string returns an error.&lt;br /&gt;
]]&lt;br /&gt;
function str.pos( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;target&#039;, &#039;pos&#039;} )&lt;br /&gt;
	local target_str = new_args[&#039;target&#039;] or &#039;&#039;&lt;br /&gt;
	local pos = tonumber( new_args[&#039;pos&#039;] ) or 0&lt;br /&gt;
&lt;br /&gt;
	if pos == 0 or math.abs(pos) &amp;gt; mw.ustring.len( target_str ) then&lt;br /&gt;
		return str._error( &#039;String index out of range&#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.ustring.sub( target_str, pos, pos )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
str_find&lt;br /&gt;
&lt;br /&gt;
This function duplicates the behavior of {{str_find}}, including all of its quirks.&lt;br /&gt;
This is provided in order to support existing templates, but is NOT RECOMMENDED for&lt;br /&gt;
new code and templates.  New code is recommended to use the &amp;quot;find&amp;quot; function instead.&lt;br /&gt;
&lt;br /&gt;
Returns the first index in &amp;quot;source&amp;quot; that is a match to &amp;quot;target&amp;quot;.  Indexing is 1-based,&lt;br /&gt;
and the function returns -1 if the &amp;quot;target&amp;quot; string is not present in &amp;quot;source&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Important Note: If the &amp;quot;target&amp;quot; string is empty / missing, this function returns a&lt;br /&gt;
value of &amp;quot;1&amp;quot;, which is generally unexpected behavior, and must be accounted for&lt;br /&gt;
separatetly.&lt;br /&gt;
]]&lt;br /&gt;
function str.str_find( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;source&#039;, &#039;target&#039;} )&lt;br /&gt;
	local source_str = new_args[&#039;source&#039;] or &#039;&#039;&lt;br /&gt;
	local target_str = new_args[&#039;target&#039;] or &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	if target_str == &#039;&#039; then&lt;br /&gt;
		return 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local start = mw.ustring.find( source_str, target_str, 1, true )&lt;br /&gt;
	if start == nil then&lt;br /&gt;
		start = -1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
find&lt;br /&gt;
&lt;br /&gt;
This function allows one to search for a target string or pattern within another&lt;br /&gt;
string.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    source: The string to search&lt;br /&gt;
    target: The string or pattern to find within source&lt;br /&gt;
    start: The index within the source string to start the search, defaults to 1&lt;br /&gt;
    plain: Boolean flag indicating that target should be understood as plain&lt;br /&gt;
        text and not as a Lua style regular expression, defaults to true&lt;br /&gt;
&lt;br /&gt;
If invoked using named parameters, Mediawiki will automatically remove any leading or&lt;br /&gt;
trailing whitespace from the parameter.  In some circumstances this is desirable, in&lt;br /&gt;
other cases one may want to preserve the whitespace.&lt;br /&gt;
&lt;br /&gt;
This function returns the first index &amp;gt;= &amp;quot;start&amp;quot; where &amp;quot;target&amp;quot; can be found&lt;br /&gt;
within &amp;quot;source&amp;quot;.  Indices are 1-based.  If &amp;quot;target&amp;quot; is not found, then this&lt;br /&gt;
function returns 0.  If either &amp;quot;source&amp;quot; or &amp;quot;target&amp;quot; are missing / empty, this&lt;br /&gt;
function also returns 0.&lt;br /&gt;
&lt;br /&gt;
This function should be safe for UTF-8 strings.&lt;br /&gt;
]]&lt;br /&gt;
function str.find( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;source&#039;, &#039;target&#039;, &#039;start&#039;, &#039;plain&#039; } )&lt;br /&gt;
	local source_str = new_args[&#039;source&#039;] or &#039;&#039;&lt;br /&gt;
	local pattern = new_args[&#039;target&#039;] or &#039;&#039;&lt;br /&gt;
	local start_pos = tonumber(new_args[&#039;start&#039;]) or 1&lt;br /&gt;
	local plain = new_args[&#039;plain&#039;] or true&lt;br /&gt;
&lt;br /&gt;
	if source_str == &#039;&#039; or pattern == &#039;&#039; then&lt;br /&gt;
		return 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	plain = str._getBoolean( plain )&lt;br /&gt;
&lt;br /&gt;
	local start = mw.ustring.find( source_str, pattern, start_pos, plain )&lt;br /&gt;
	if start == nil then&lt;br /&gt;
		start = 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return start&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
replace&lt;br /&gt;
&lt;br /&gt;
This function allows one to replace a target string or pattern within another&lt;br /&gt;
string.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}&lt;br /&gt;
OR&lt;br /&gt;
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|&lt;br /&gt;
   count=replacement_count|plain=plain_flag}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    source: The string to search&lt;br /&gt;
    pattern: The string or pattern to find within source&lt;br /&gt;
    replace: The replacement text&lt;br /&gt;
    count: The number of occurences to replace, defaults to all.&lt;br /&gt;
    plain: Boolean flag indicating that pattern should be understood as plain&lt;br /&gt;
        text and not as a Lua style regular expression, defaults to true&lt;br /&gt;
]]&lt;br /&gt;
function str.replace( frame )&lt;br /&gt;
	local new_args = str._getParameters( frame.args, {&#039;source&#039;, &#039;pattern&#039;, &#039;replace&#039;, &#039;count&#039;, &#039;plain&#039; } )&lt;br /&gt;
	local source_str = new_args[&#039;source&#039;] or &#039;&#039;&lt;br /&gt;
	local pattern = new_args[&#039;pattern&#039;] or &#039;&#039;&lt;br /&gt;
	local replace = new_args[&#039;replace&#039;] or &#039;&#039;&lt;br /&gt;
	local count = tonumber( new_args[&#039;count&#039;] )&lt;br /&gt;
	local plain = new_args[&#039;plain&#039;] or true&lt;br /&gt;
&lt;br /&gt;
	if source_str == &#039;&#039; or pattern == &#039;&#039; then&lt;br /&gt;
		return source_str&lt;br /&gt;
	end&lt;br /&gt;
	plain = str._getBoolean( plain )&lt;br /&gt;
&lt;br /&gt;
	if plain then&lt;br /&gt;
		pattern = str._escapePattern( pattern )&lt;br /&gt;
		replace = string.gsub( replace, &amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot; ) --Only need to escape replacement sequences.&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result&lt;br /&gt;
&lt;br /&gt;
	if count ~= nil then&lt;br /&gt;
		result = mw.ustring.gsub( source_str, pattern, replace, count )&lt;br /&gt;
	else&lt;br /&gt;
		result = mw.ustring.gsub( source_str, pattern, replace )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
    simple function to pipe string.rep to templates.&lt;br /&gt;
]]&lt;br /&gt;
function str.rep( frame )&lt;br /&gt;
	local repetitions = tonumber( frame.args[2] )&lt;br /&gt;
	if not repetitions then&lt;br /&gt;
		return str._error( &#039;function rep expects a number as second parameter, received &amp;quot;&#039; .. ( frame.args[2] or &#039;&#039; ) .. &#039;&amp;quot;&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	return string.rep( frame.args[1] or &#039;&#039;, repetitions )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
escapePattern&lt;br /&gt;
&lt;br /&gt;
This function escapes special characters from a Lua string pattern. See [1]&lt;br /&gt;
for details on how patterns work.&lt;br /&gt;
&lt;br /&gt;
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|escapePattern|pattern_string}}&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
    pattern_string: The pattern string to escape.&lt;br /&gt;
]]&lt;br /&gt;
function str.escapePattern( frame )&lt;br /&gt;
	local pattern_str = frame.args[1]&lt;br /&gt;
	if not pattern_str then&lt;br /&gt;
		return str._error( &#039;No pattern string specified&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	local result = str._escapePattern( pattern_str )&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
count&lt;br /&gt;
This function counts the number of occurrences of one string in another.&lt;br /&gt;
]]&lt;br /&gt;
function str.count(frame)&lt;br /&gt;
	local args = str._getParameters(frame.args, {&#039;source&#039;, &#039;pattern&#039;, &#039;plain&#039;})&lt;br /&gt;
	local source = args.source or &#039;&#039;&lt;br /&gt;
	local pattern = args.pattern or &#039;&#039;&lt;br /&gt;
	local plain = str._getBoolean(args.plain or true)&lt;br /&gt;
	if plain then&lt;br /&gt;
		pattern = str._escapePattern(pattern)&lt;br /&gt;
	end&lt;br /&gt;
	local _, count = mw.ustring.gsub(source, pattern, &#039;&#039;)&lt;br /&gt;
	return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
endswith&lt;br /&gt;
This function determines whether a string ends with another string.&lt;br /&gt;
]]&lt;br /&gt;
function str.endswith(frame)&lt;br /&gt;
	local args = str._getParameters(frame.args, {&#039;source&#039;, &#039;pattern&#039;})&lt;br /&gt;
	local source = args.source or &#039;&#039;&lt;br /&gt;
	local pattern = args.pattern or &#039;&#039;&lt;br /&gt;
	if pattern == &#039;&#039; then&lt;br /&gt;
		-- All strings end with the empty string.&lt;br /&gt;
		return &amp;quot;yes&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then&lt;br /&gt;
		return &amp;quot;yes&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
join&lt;br /&gt;
&lt;br /&gt;
Join all non empty arguments together; the first argument is the separator.&lt;br /&gt;
Usage:&lt;br /&gt;
{{#invoke:String|join|sep|one|two|three}}&lt;br /&gt;
]]&lt;br /&gt;
function str.join(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	local sep&lt;br /&gt;
	for _, v in ipairs( frame.args ) do&lt;br /&gt;
		if sep then&lt;br /&gt;
			if v ~= &#039;&#039; then&lt;br /&gt;
				table.insert(args, v)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			sep = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( args, sep or &#039;&#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- findpagetext returns the position of a piece of text in a page&lt;br /&gt;
-- First positional parameter or |text is the search text&lt;br /&gt;
-- Optional parameter |title is the page title, defaults to current page&lt;br /&gt;
-- Optional parameter |plain is either true for plain search (default) or false for Lua pattern search&lt;br /&gt;
-- Optional parameter |nomatch is the return value when no match is found; default is nil&lt;br /&gt;
function str._findpagetext(args)&lt;br /&gt;
	-- process parameters&lt;br /&gt;
	local nomatch = args.nomatch or &amp;quot;&amp;quot;&lt;br /&gt;
	if nomatch == &amp;quot;&amp;quot; then nomatch = nil end&lt;br /&gt;
	--&lt;br /&gt;
	local text = mw.text.trim(args[1] or args.text or &amp;quot;&amp;quot;)&lt;br /&gt;
	if text == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
	--&lt;br /&gt;
	local title = args.title or &amp;quot;&amp;quot;&lt;br /&gt;
	local titleobj&lt;br /&gt;
	if title == &amp;quot;&amp;quot; then&lt;br /&gt;
		titleobj = mw.title.getCurrentTitle()&lt;br /&gt;
	else&lt;br /&gt;
		titleobj = mw.title.new(title)&lt;br /&gt;
	end&lt;br /&gt;
	--&lt;br /&gt;
	local plain = args.plain or &amp;quot;&amp;quot;&lt;br /&gt;
	if plain:sub(1, 1) == &amp;quot;f&amp;quot; then plain = false else plain = true end&lt;br /&gt;
	-- get the page content and look for &#039;text&#039; - return position or nomatch&lt;br /&gt;
	local content = titleobj and titleobj:getContent()&lt;br /&gt;
	return content and mw.ustring.find(content, text, 1, plain) or nomatch&lt;br /&gt;
end&lt;br /&gt;
function str.findpagetext(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args&lt;br /&gt;
	for k, v in pairs(pargs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	if not (args[1] or args.text) then return nil end&lt;br /&gt;
	-- just the first value&lt;br /&gt;
	return (str._findpagetext(args))&lt;br /&gt;
end&lt;br /&gt;
--[[&lt;br /&gt;
Helper function that populates the argument list given that user may need to use a mix of&lt;br /&gt;
named and unnamed parameters.  This is relevant because named parameters are not&lt;br /&gt;
identical to unnamed parameters due to string trimming, and when dealing with strings&lt;br /&gt;
we sometimes want to either preserve or remove that whitespace depending on the application.&lt;br /&gt;
]]&lt;br /&gt;
function str._getParameters( frame_args, arg_list )&lt;br /&gt;
	local new_args = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	local value&lt;br /&gt;
&lt;br /&gt;
	for _, arg in ipairs( arg_list ) do&lt;br /&gt;
		value = frame_args[arg]&lt;br /&gt;
		if value == nil then&lt;br /&gt;
			value = frame_args[index]&lt;br /&gt;
			index = index + 1&lt;br /&gt;
		end&lt;br /&gt;
		new_args[arg] = value&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return new_args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper function to handle error messages.&lt;br /&gt;
]]&lt;br /&gt;
function str._error( error_str )&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local error_category = frame.args.error_category or &#039;Errors reported by Module String&#039;&lt;br /&gt;
	local ignore_errors = frame.args.ignore_errors or false&lt;br /&gt;
	local no_category = frame.args.no_category or false&lt;br /&gt;
&lt;br /&gt;
	if str._getBoolean(ignore_errors) then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local error_str = &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;String Module Error: &#039; .. error_str .. &#039;&amp;lt;/strong&amp;gt;&#039;&lt;br /&gt;
	if error_category ~= &#039;&#039; and not str._getBoolean( no_category ) then&lt;br /&gt;
		error_str = &#039;[[Category:&#039; .. error_category .. &#039;]]&#039; .. error_str&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return error_str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper Function to interpret boolean strings&lt;br /&gt;
]]&lt;br /&gt;
function str._getBoolean( boolean_str )&lt;br /&gt;
	local boolean_value&lt;br /&gt;
&lt;br /&gt;
	if type( boolean_str ) == &#039;string&#039; then&lt;br /&gt;
		boolean_str = boolean_str:lower()&lt;br /&gt;
		if boolean_str == &#039;false&#039; or boolean_str == &#039;no&#039; or boolean_str == &#039;0&#039;&lt;br /&gt;
				or boolean_str == &#039;&#039; then&lt;br /&gt;
			boolean_value = false&lt;br /&gt;
		else&lt;br /&gt;
			boolean_value = true&lt;br /&gt;
		end&lt;br /&gt;
	elseif type( boolean_str ) == &#039;boolean&#039; then&lt;br /&gt;
		boolean_value = boolean_str&lt;br /&gt;
	else&lt;br /&gt;
		error( &#039;No boolean value found&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	return boolean_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper function that escapes all pattern characters so that they will be treated&lt;br /&gt;
as plain text.&lt;br /&gt;
]]&lt;br /&gt;
function str._escapePattern( pattern_str )&lt;br /&gt;
	return ( string.gsub( pattern_str, &amp;quot;[%(%)%.%%%+%-%*%?%[%^%$%]]&amp;quot;, &amp;quot;%%%0&amp;quot; ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return str&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Collapse_bottom&amp;diff=3199</id>
		<title>Template:Collapse bottom</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Collapse_bottom&amp;diff=3199"/>
		<updated>2025-09-04T07:24:54Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Collapse top}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- PLEASE ADD THIS TEMPLATE&#039;S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Dir&amp;diff=3197</id>
		<title>Template:Dir</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Dir&amp;diff=3197"/>
		<updated>2025-09-04T07:24:53Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#ifeq:{{#dir:{{{lang|{{{1|{{int:lang}}}}}}}}}}|rtl|{{{2|{{{rtl|rtl}}}}}}|{{{3|{{{ltr|ltr}}}}}}}}&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>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Collapse_top&amp;diff=3195</id>
		<title>Template:Collapse top</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Collapse_top&amp;diff=3195"/>
		<updated>2025-09-04T07:24:53Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;div style=&amp;quot;display:{{{display|block}}};margin-{{dir|{{pagelang}}|right|left}}:{{{indent|0}}};{{{extrastyle|}}}&amp;quot;&amp;gt;&amp;lt;!-- NOTE: width renders incorrectly if added to main STYLE section&lt;br /&gt;
  --&amp;gt;&amp;lt;table class=&amp;quot;mw-collapsible {{#if:{{{expand|}}}|| mw-collapsed}}&amp;quot; style=&amp;quot;margin-top:.2em; border:{{{border|1px}}} solid {{{b-color|silver}}};text-align:{{dir|{{pagelang}}|right|left}}; width: {{{width|100%}}};&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;font-size:{{{title-font-size|112%}}};background:{{{bg|var(--background-color-neutral-subtle, #f8f9fa)}}};color:{{{fc|inherit}}};text-align:{{#if:{{{left|}}}&lt;br /&gt;
  | {{dir|{{pagelang}}|right|left}}&lt;br /&gt;
  | center&lt;br /&gt;
  }}&amp;quot;&amp;gt;{{{1|{{{title|{{{reason|{{{header|{{{heading|&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; Extended content&amp;lt;/translate&amp;gt;}}}}}}}}}}}}}}}&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;!--&lt;br /&gt;
  --&amp;gt;{{#if:{{{warning|{{{2|}}}}}}&lt;br /&gt;
  | &amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;text-align:center;font-style:italic&amp;quot;&amp;gt;{{#if:{{{2|}}}|{{{2}}}|&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; The following is a closed debate.&amp;lt;/translate&amp;gt; {{Strong&lt;br /&gt;
    |style=color:var(--color-error, #bf3c2c)&lt;br /&gt;
    |1=&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt; Please do not modify it.&amp;lt;/translate&amp;gt;&lt;br /&gt;
    }}&amp;lt;!--/Strong--&amp;gt;}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
  }}&amp;lt;!--&lt;br /&gt;
  --&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;font-size:{{{font-size|112%}}};background:{{{bg2|var(--background-color-base, #fff)}}};color:{{{fc2|inherit}}};border:solid {{{border2|1px silver}}};padding:{{{padding|8px}}}&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%;text-align:center&amp;quot;&amp;gt;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt; The following content has been placed in a collapsed box for improved usability.&amp;lt;/translate&amp;gt;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
The &amp;lt;tvar name=1&amp;gt;{{Tlx|Collapse top}}&amp;lt;/tvar&amp;gt; template, and its paired template &amp;lt;tvar name=2&amp;gt;{{Tlx|Collapse bottom}}&amp;lt;/tvar&amp;gt;, are used for placing a collapse box around a talk page discussion.&lt;br /&gt;
&lt;br /&gt;
== Usage == &amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt; Place &amp;lt;tvar name=1&amp;gt;{{Tlx|Collapse top}}&amp;lt;/tvar&amp;gt; and &amp;lt;tvar name=2&amp;gt;{{Tlx|Collapse bottom}}&amp;lt;/tvar&amp;gt; around the text to be collapsed.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt; For example:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
{{Collapse top|title=&amp;lt;translate nowrap&amp;gt;&amp;lt;!--T:79--&amp;gt; This is the title text&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate nowrap&amp;gt;&amp;lt;!--T:80--&amp;gt; Sample contents text&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
produces:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|title=&amp;lt;translate&amp;gt;&amp;lt;!--T:77--&amp;gt; This is the title text&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:78--&amp;gt; Sample contents text&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
&amp;lt;tvar name=1&amp;gt;{{Tlx|Collapse bottom}}&amp;lt;/tvar&amp;gt; should always be placed on its own line.&lt;br /&gt;
&lt;br /&gt;
== Parameters == &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt; This template takes the following parameters, all of which are optional.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt; They are case-sensitive.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt; Those that take CSS measurements require them in CSS format (e.g. &amp;lt;tvar name=1&amp;gt;&amp;lt;code style=&amp;quot;color: #006400&amp;quot;&amp;gt;1em&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; not &amp;lt;tvar name=2&amp;gt;&amp;lt;code style=&amp;quot;color:#8B0000&amp;quot;&amp;gt;1&amp;amp;nbsp;em&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; {{Para|1}} &amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt; (or first unnamed parameter)&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;, {{Para|title}}, {{Para|reason}}, {{Para|header}}, {{Para|heading}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt; Will give the collapsed box a title, which occurs on the same line as the &#039;&#039;show&#039;&#039; link and is always visible.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt; It defaults to &amp;quot;Extended content&amp;quot;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt; For example, &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Collapse top|title=This is the title text}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; or &amp;lt;tvar name=2&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Collapse top|This is the title text}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:24--&amp;gt; Note: The shorter, unnamed markup will not work if the title value contain an equals (&amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;) character.&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|warning|yes}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt; Will display a default warning line under the main title which reads &amp;quot;The following is a closed debate. {{&amp;lt;tvar name=1&amp;gt;Strong|style=color:red&amp;lt;/tvar&amp;gt;|Please do not modify it.}}&amp;quot;&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt; Any non-empty value supplied to this parameter will have this effect (i.e. &amp;lt;tvar name=1&amp;gt;{{Para|warning|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;}}&amp;lt;/tvar&amp;gt; will not work as expected).&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|2}} &amp;lt;span style=&amp;quot;font-weight:normal&amp;quot;&amp;gt;&amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt; (or second unnamed parameter)&amp;lt;/translate&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt; This is optional warning-line text.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt; It will override the standard warning line above; it is not necessary to also use &amp;lt;tvar name=1&amp;gt;{{Para|warning|yes}}&amp;lt;/tvar&amp;gt; in this case, though doing so is harmless.&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|left|yes}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt; Will align the title along the left margin (in RTL languages, along the right margin instead).&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt; By default, text is centered, specifically between the left edge of the green box and the left edge of the &amp;quot;show&amp;quot; link.&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt; Any non-empty value supplied to this parameter will have this effect (i.e. &amp;lt;tvar name=1&amp;gt;{{Para|left|&amp;lt;span style=&amp;quot;color:#8B0000&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;}}&amp;lt;/tvar&amp;gt; will not work as expected).&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|expand|yes}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt; Will leave the material uncollapsed with the border and coloring.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt; Default is to collapse the material.&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt; Any non-empty value supplied to this parameter will have this effect (i.e. &amp;lt;tvar name=1&amp;gt;{{Para|expand|&amp;lt;span style=&amp;quot;color:#8B0000&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;}}&amp;lt;/tvar&amp;gt; will not work as expected).&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|bg}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt; Sets the background color of the title of the collapsible bar.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt; Defaults to &amp;quot;&amp;lt;tvar name=1&amp;gt;#F8FCFF&amp;lt;/tvar&amp;gt;&amp;quot;, a whitish color.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt; Named colors are listed at [[List of colors]].&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt; For example, &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Collapse top|This is the title text|bg=#008000}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; or &amp;lt;tvar name=2&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Collapse top|This is the title text|bg=green}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; (numeric HTML color codes require the leading &amp;lt;tvar name=H&amp;gt;&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;).&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|fc}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt; Sets the font color of the title of the collapsible bar.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:42--&amp;gt; Defaults to &amp;quot;&amp;lt;tvar name=1&amp;gt;black&amp;lt;/tvar&amp;gt;&amp;quot;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt; See &amp;lt;tvar name=bg&amp;gt;{{Para|bg}}&amp;lt;/tvar&amp;gt;, above, for details on color options.&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|border}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt; Sets the width of the border line on the collapsed material.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt; Defaults to &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;1px&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt; For example, &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Collapse top|border=2px}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;; going much thicker than this is not very useful.&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|b-color}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:47--&amp;gt; Sets the border color.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt; Defaults to &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;silver&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; (&amp;lt;tvar name=2&amp;gt;&amp;lt;code&amp;gt;#C0C0C0&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;).&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:49--&amp;gt; See &amp;lt;tvar name=bg&amp;gt;{{Para|bg}}&amp;lt;/tvar&amp;gt;, above, for details on color options.&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|padding}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:50--&amp;gt; Sets the padding (distance from borders) on the collapsed material inside the colored area.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt; Defaults to &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;8px&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|width}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:52--&amp;gt; Sets the width of the overall template relative to the page (or a block element containing the collapse box).&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt; This should virtually always be given as a percentage, e.g. &amp;lt;tvar name=1&amp;gt;{{Para|width|50%}}&amp;lt;/tvar&amp;gt;, or in relative &amp;lt;tvar name=2&amp;gt;&amp;lt;code&amp;gt;em&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; units, e.g. &amp;lt;tvar name=3&amp;gt;{{Para|width|30em}}&amp;lt;/tvar&amp;gt;.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt; Pixel-based values should be avoided, as they are effectively meaningless – the result will be different depending on each user&#039;s browser and local CSS settings (which browser and operating system it is, zoom level, font sizes, etc.).&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|border2}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:55--&amp;gt; Sets the properties of the border of the box that appears when template is expanded.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:56--&amp;gt; Defaults to &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;1px silver&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; (there is no provision to change from a solid line).&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt; For example, &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Collapse top|border2=2px}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; (only width or color will be changed if only one value is supplied).&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:58--&amp;gt; See &amp;lt;tvar name=bg&amp;gt;{{Para|bg}}&amp;lt;/tvar&amp;gt;, above, for details on color options.&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|bg2}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:59--&amp;gt; Sets the background color of the box that appears when template is expanded; defaults to &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;white&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; (&amp;lt;tvar name=2&amp;gt;&amp;lt;code&amp;gt;#FFF&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;).&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:60--&amp;gt; See &amp;lt;tvar name=bg&amp;gt;{{Para|bg}}&amp;lt;/tvar&amp;gt;, above, for details on color options.&amp;lt;/translate&amp;gt;&lt;br /&gt;
; {{Para|indent}}&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt; Indents the box from the left of the page.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:62--&amp;gt; Defaults to no indentation.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:63--&amp;gt; Each &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; in talk page markup is approximately equivalent to &amp;lt;tvar name=2&amp;gt;&amp;lt;code&amp;gt;1.6em&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; of indent (e.g., to match &amp;lt;tvar name=3&amp;gt;&amp;lt;code&amp;gt;::::&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; indentation level, use &amp;lt;tvar name=4&amp;gt;{{Para|indent|6.4em}}&amp;lt;/tvar&amp;gt;).&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:64--&amp;gt; You can also use a percentage value.&amp;lt;/translate&amp;gt;&lt;br /&gt;
: &amp;lt;translate&amp;gt;&amp;lt;!--T:65--&amp;gt; Pixel-based values should be avoided (see &amp;lt;tvar name=1&amp;gt;{{Para|width}}&amp;lt;/tvar&amp;gt;, above, for the reason).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Examples == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:66--&amp;gt; Adding a box title (if omitted, default is &amp;quot;Extended content&amp;quot;)&amp;lt;/translate&amp;gt; – &amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline&amp;gt;{{Collapse top|This is the title text}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|This is the title text}}&lt;br /&gt;
{{Lorem ipsum}}&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:67--&amp;gt; Adding a standard warning line&amp;lt;/translate&amp;gt; – &amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline&amp;gt;{{Collapse top|This is the title text|warning=true}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|This is the title text|warning=true}}&lt;br /&gt;
{{Lorem ipsum}}&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:68--&amp;gt; Adding a custom warning line&amp;lt;/translate&amp;gt; – &amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline&amp;gt;{{Collapse top|This is the title text|This is a custom warning line}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|This is the title text|This is a custom warning line}}&lt;br /&gt;
{{Lorem ipsum}}&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt; Aligning box title along left margin&amp;lt;/translate&amp;gt; – &amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline&amp;gt;{{Collapse top|left=true}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|left=true}}&lt;br /&gt;
{{Lorem ipsum}}&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:70--&amp;gt; Changing background color&amp;lt;/translate&amp;gt; – &amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline&amp;gt;{{Collapse top|bg=#F0F2F5}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|bg=#F0F2F5}}&lt;br /&gt;
{{Lorem ipsum}}&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt; Adding extra padding&amp;lt;/translate&amp;gt; – &amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline&amp;gt;{{Collapse top|padding=5em}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|padding=5em}}&lt;br /&gt;
{{Lorem ipsum}}&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:72--&amp;gt; Archiving a section&amp;lt;/translate&amp;gt; – &amp;lt;translate&amp;gt;&amp;lt;!--T:73--&amp;gt; The markup below:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;{{Collapse top}}&lt;br /&gt;
== Section header ==&lt;br /&gt;
Sample contents text&lt;br /&gt;
{{Collapse bottom}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:74--&amp;gt;&lt;br /&gt;
must be rewritten as:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;{{Collapse top|Section header}}&lt;br /&gt;
Sample contents text&lt;br /&gt;
{{Collapse bottom}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:75--&amp;gt;&lt;br /&gt;
The end result:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Collapse top|Section header}}&lt;br /&gt;
Sample contents text&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== TemplateData == &amp;lt;!--T:76--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Collapse top/doc}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== See also == &amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* {{Tl|Collapse bottom}}&lt;br /&gt;
* {{Tl|Hidden archive top}} {{int|and}} {{Tl|Hidden archive bottom}}&lt;br /&gt;
* {{Tl|Hidden begin}} {{int|and}} {{Tl|Hidden end}}&lt;br /&gt;
* {{Tl|Hidden}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Formatting templates{{#translation:}}]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Localized_link&amp;diff=3193</id>
		<title>Template:Localized link</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Localized_link&amp;diff=3193"/>
		<updated>2025-09-04T07:24:50Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}&amp;lt;!--self link (including translation pages)--&amp;gt;&lt;br /&gt;
  |&amp;lt;b&amp;gt;&lt;br /&gt;
}}&amp;lt;!----&amp;gt;[[Special:MyLanguage/{{{1}}}|{{#if:{{{2|}}}&lt;br /&gt;
|{{{2}}}&lt;br /&gt;
|{{{2|{{#ifexist:Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page display title/{{PAGELANGUAGE}}&amp;lt;!--if the source page, PAGELANGUAGE returns en--&amp;gt;&lt;br /&gt;
  |{{#ifexpr:{{#if:{{{nsp|}}}|1|0}} and {{NAMESPACENUMBER:{{{1}}}}}!=0&lt;br /&gt;
    |{{#ifeq:{{PAGELANGUAGE}}|en&lt;br /&gt;
      |{{PAGENAME:{{{1}}}}}&lt;br /&gt;
      |&amp;lt;!-- check whether the string is not empty --&amp;gt;&amp;lt;!--&lt;br /&gt;
    --&amp;gt;{{#if:{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }} }}&lt;br /&gt;
         |{{#ifeq:{{#invoke:string|find|{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }} }}|:}}|0&lt;br /&gt;
           |{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }} }}&lt;br /&gt;
           | {{#invoke:string|match|{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }} }}|:(.*)}}&lt;br /&gt;
         }}&lt;br /&gt;
         |&amp;lt;!-- pass parameter to, e.g., &amp;quot;Template:LC zh&amp;quot;; check whether the string is not empty --&amp;gt;&amp;lt;!--&lt;br /&gt;
       --&amp;gt;{{#if:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }}&lt;br /&gt;
           |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }}&lt;br /&gt;
           |{{{1}}}&lt;br /&gt;
        }}&lt;br /&gt;
      }}&lt;br /&gt;
    }}&lt;br /&gt;
    |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }}&lt;br /&gt;
  }}&lt;br /&gt;
  &amp;lt;!--if the translation page does not exist (or called from the source page), output as is--&amp;gt;&lt;br /&gt;
  |{{#if:{{{nsp|}}}&lt;br /&gt;
    |{{#if:{{PAGENAME:{{{1}}}}}&lt;br /&gt;
      |{{PAGENAME:{{{1}}}}}&lt;br /&gt;
      |{{{1}}}&lt;br /&gt;
    }}&lt;br /&gt;
    |{{{1}}}&lt;br /&gt;
  }}&lt;br /&gt;
}}&amp;lt;!--#ifexist--&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}}&amp;lt;!--{{{2|--&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--#if:{{{2|}}}--&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;]]&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}&amp;lt;!--self link (including translation pages)--&amp;gt;&lt;br /&gt;
  |&amp;lt;/b&amp;gt;&lt;br /&gt;
}}&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;[[:{{{1}}}| ]]&amp;lt;/span&amp;gt;&amp;lt;!-- T63547 --&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation|content=&lt;br /&gt;
&lt;br /&gt;
{{tsh|ll|LL}}&lt;br /&gt;
{{High-use|35000}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Purpose == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt; This helper template can be used to link to [[&amp;lt;tvar name=1&amp;gt;Special:LanguageStats&amp;lt;/tvar&amp;gt;|translatable pages]] in the user&#039;s language.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt; It uses the special page prefix &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;Special:MyLanguage/&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;, which checks if there is a translated version of a page in the user&#039;s language, and links to it if there is one, and links to a fallback language where available, or the default wiki language version (English in MediaWiki) if there isn&#039;t.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
It should be used in translated pages, so that they link to the right page even if there is no translated page in that language.&lt;br /&gt;
&lt;br /&gt;
== Usage == &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Localized link/doc}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
If the &amp;quot;&amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;nsp&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;&amp;quot; parameter is not defined, as link text this displays the full pagename (including the namespace); otherwise — if the &amp;quot;&amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;nsp&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;&amp;quot; parameter is defined to any value the link text displays the short pagename (without the namespace).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
When linking to a section within a page, the section is not displayed in the link text.&lt;br /&gt;
&lt;br /&gt;
=== Examples of simple usage === &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{(}}{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
! &amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt; Use&amp;lt;/translate&amp;gt;&lt;br /&gt;
! &amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt; Becomes&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{Tlx|ll|Communication}}&lt;br /&gt;
{{!}} {{ll|Communication}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{Tlx|ll|Communication|コミュニケーション}}&lt;br /&gt;
{{!}} {{ll|Communication|コミュニケーション}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{Tlx|ll|Project:About}}&lt;br /&gt;
{{!}} {{ll|Project:About}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{Tlx|ll|Project:About#See_also}}&lt;br /&gt;
{{!}} {{ll|Project:About#See_also}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} {{Tlx|ll|Project:About|nsp{{=}}0}}&lt;br /&gt;
{{!}} {{ll|Project:About|nsp=0}}&lt;br /&gt;
{{!}}{{)}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Usage in translatable pages == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
On pages prepared for translation with the &amp;lt;tvar name=1&amp;gt;{{ll|Extension:Translate|nsp=0}}&amp;lt;/tvar&amp;gt; extension, this template may be used in three ways.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt; Substitute this template, then embed the wikilink target in a &amp;lt;tvar name=1&amp;gt;{{#tag:syntaxhighlight|{{^(}}tvar name=id{{)^}}...{{^(}}/tvar{{)^}}|lang=html|inline=1}}&amp;lt;/tvar&amp;gt;, separate from the translatable text of the link.&amp;lt;/translate&amp;gt;&lt;br /&gt;
#: &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt; For example:&amp;lt;/translate&amp;gt; {{#tag:syntaxhighlight|Learn more {{{{^(}}tvar name=1{{)^}}ll|Communication{{^(}}/tvar{{)^}}|about communication}}.|lang=html|inline=1}}&lt;br /&gt;
# &amp;lt;translate&amp;gt;&amp;lt;!--T:16--&amp;gt; If link text is the same as the name of the target page, all of the code could also be embedded into &amp;lt;tvar name=1&amp;gt;{{tag|tvar|open}}&amp;lt;/tvar&amp;gt;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
#: &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt; For example:&amp;lt;/translate&amp;gt; {{#tag:syntaxhighlight|Learn more about {{^(}}tvar name=1{{)^}}&amp;lt;nowiki&amp;gt;{{ll|Communication}}&amp;lt;/nowiki&amp;gt;{{^(}}/tvar{{)^}}.|lang=html|inline=1}}&lt;br /&gt;
# &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt; For standalone links, such as in a list or table, translate only the link text if it differs from the name of the target page.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt; This is useful for bulleted lists of links, e.g. in the &amp;quot;See also:&amp;quot; sections.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt; Make sure to include the parameter name when adding translate tags inside template syntax.&amp;lt;/translate&amp;gt;&lt;br /&gt;
#: &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt; For example:&amp;lt;/translate&amp;gt;&lt;br /&gt;
::: {{#tag:syntaxhighlight|* {{((}}ll{{!}}Project:About{{))}}|lang=html|inline=1}}&lt;br /&gt;
::: {{#tag:syntaxhighlight|* {{((}}ll{{!}}Communication{{!}}2={{^(}}translate{{)^}}About communication{{^(}}/translate{{)^}}{{))}}|lang=html|inline=1}}&lt;br /&gt;
&lt;br /&gt;
== Test cases ==&lt;br /&gt;
{{Localized link/testcases}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== See also == &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* [[Template:Localized link/messagedoc]] — &amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt; should be used for message documentation in translatable pages that use this template.&amp;lt;/translate&amp;gt;&lt;br /&gt;
* {{tl|Translatable template}} - &amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt; alias &amp;lt;tvar name=1&amp;gt;{{tl|TNT}}&amp;lt;/tvar&amp;gt; or &amp;lt;tvar name=2&amp;gt;{{tl|tnt}}&amp;lt;/tvar&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
* {{tl|Translatable template name}} - &amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt; alias &amp;lt;tvar name=1&amp;gt;{{tl|TNTN}}&amp;lt;/tvar&amp;gt; or &amp;lt;tvar name=2&amp;gt;{{tl|tntn}}&amp;lt;/tvar&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
* {{tl|Page language link}} - &amp;lt;translate&amp;gt;&amp;lt;!--T:20--&amp;gt; alias &amp;lt;tvar name=1&amp;gt;{{tl|pll}}&amp;lt;/tvar&amp;gt;&amp;lt;/translate&amp;gt; - &amp;lt;translate&amp;gt;&amp;lt;!--T:21--&amp;gt; add a link from a translatable page to another translatable page in the same language&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Internationalization templates{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Ll&amp;diff=3191</id>
		<title>Template:Ll</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Ll&amp;diff=3191"/>
		<updated>2025-09-04T07:24:49Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Localized link]]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Pagelang&amp;diff=3189</id>
		<title>Template:Pagelang</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Pagelang&amp;diff=3189"/>
		<updated>2025-09-04T07:24:49Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#ifeq:{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}|en&lt;br /&gt;
|{{#ifeq:{{#titleparts:{{{1|{{PAGENAME}}}}}||-1}}|en&lt;br /&gt;
  |{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}&lt;br /&gt;
  }}&lt;br /&gt;
|{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}&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>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Template:Translatable&amp;diff=3187</id>
		<title>Template:Translatable</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Template:Translatable&amp;diff=3187"/>
		<updated>2025-09-04T07:24:48Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages /&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}|&lt;br /&gt;
|{{{1|{{FULLPAGENAME}}}}}&lt;br /&gt;
|{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}}&lt;br /&gt;
  |1&lt;br /&gt;
  |{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}}&lt;br /&gt;
  }}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
{{Lua|Module:String}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Examples == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* {{tlx|translatable}}&lt;br /&gt;
{{translatable}}&lt;br /&gt;
* {{tlx|translatable|2=&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Page name&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{translatable|1=&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt; Page name&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
* {{tlx|translatable|2=&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt; Page name&amp;lt;/translate&amp;gt;/{{PAGELANGUAGE}} }}&lt;br /&gt;
{{translatable|1=&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt; Page name&amp;lt;/translate&amp;gt;/{{PAGELANGUAGE}} }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Internationalization templates{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:Yesno/tr/doc&amp;diff=3185</id>
		<title>Module:Yesno/tr/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:Yesno/tr/doc&amp;diff=3185"/>
		<updated>2025-09-04T07:24:47Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Module:Yesno/doc/tr]]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:Yesno/sandbox&amp;diff=3183</id>
		<title>Module:Yesno/sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:Yesno/sandbox&amp;diff=3183"/>
		<updated>2025-09-04T07:24:47Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
   Add your experimental module code here.&lt;br /&gt;
--]]&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/tr&amp;diff=3181</id>
		<title>Module:Yesno/doc/tr</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/tr&amp;diff=3181"/>
		<updated>2025-09-04T07:24:46Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;{{#switch:&lt;br /&gt;
| =&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Languages|Module:Yesno/doc}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --&amp;gt;&lt;br /&gt;
{{Shared Template Warning}}&lt;br /&gt;
{{high-risk}}&lt;br /&gt;
{{used in system}}&lt;br /&gt;
{{Module rating|release}}&lt;br /&gt;
{{Module rating|protected}}&lt;br /&gt;
Bu modül, boole veya boole tarzı dize girdisini işlemek için tutarlı bir arabirim sağlar.&lt;br /&gt;
Lua, &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; ve &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; boole değerlerine izin verirken, vikikodu şablonları boole değerlerini yalnızca &amp;quot;1&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot; vb. gibi dizeler aracılığıyla ifade edebilir.&lt;br /&gt;
Bu modül, bu tür dizeleri işler ve Lua&#039;nın işlemesi için bunları mantıksal girdiye dönüştürür.&lt;br /&gt;
Ayrıca &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; ve &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; arasındaki ayrımlara izin vermek için &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; olarak &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; değerlerini döndürür.&lt;br /&gt;
Modül ayrıca diğer Lua yapılarını girdi olarak kabul eder, yani boole&#039;lar, sayılar, tablolar ve işlevler.&lt;br /&gt;
Boole veya &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; olarak tanımadığı bir girdi iletilirse, döndürülecek varsayılan bir değer belirtmek mümkündür.&lt;br /&gt;
&amp;lt;span id=&amp;quot;Module_Quality&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Modül Kalitesi ==&lt;br /&gt;
{{ModuleQuality}}&lt;br /&gt;
&amp;lt;span id=&amp;quot;Syntax&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Sözdizimi ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(value, default)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; test edilecek değerdir.&lt;br /&gt;
Boole girişi veya boole tarzı giriş (aşağıya bakın) her zaman &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; veya &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; olarak değerlendirilir ve &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; her zaman &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; olarak değerlendirilir.&lt;br /&gt;
Diğer değerler &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; olarak değerlendirilir.&lt;br /&gt;
&amp;lt;span id=&amp;quot;Usage&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Kullanım ==&lt;br /&gt;
İlk önce modülü yükleyin. Yalnızca diğer Lua modüllerinden yüklenebileceğini, normal viki sayfalarından yüklenemeyeceğini unutmayın.&lt;br /&gt;
Normal viki sayfaları için bunun yerine {{tlx|yesno}} kullanabilirsiniz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bazı giriş değerleri her zaman &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; döndürür ve bazıları her zaman &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; döndürür.&lt;br /&gt;
&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; değerleri her zaman &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; döndürür.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Bunlar her zaman true döndürür:&lt;br /&gt;
yesno(&#039;yes&#039;)&lt;br /&gt;
yesno(&#039;y&#039;)&lt;br /&gt;
yesno(&#039;true&#039;)&lt;br /&gt;
yesno(&#039;t&#039;)&lt;br /&gt;
yesno(&#039;1&#039;)&lt;br /&gt;
yesno(1)&lt;br /&gt;
yesno(true)&lt;br /&gt;
&lt;br /&gt;
-- Bunlar her zaman false döndürür:&lt;br /&gt;
yesno(&#039;no&#039;)&lt;br /&gt;
yesno(&#039;n&#039;)&lt;br /&gt;
yesno(&#039;false&#039;)&lt;br /&gt;
yesno(&#039;f&#039;)&lt;br /&gt;
yesno(&#039;0&#039;)&lt;br /&gt;
yesno(0)&lt;br /&gt;
yesno(false)&lt;br /&gt;
&lt;br /&gt;
-- Bir nil değeri her zaman nil döndürür:&lt;br /&gt;
yesno(nil)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dize değerleri eşleşmeden önce küçük harfe dönüştürülür:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Bunlar her zaman true döndürür:&lt;br /&gt;
yesno(&#039;Yes&#039;)&lt;br /&gt;
yesno(&#039;YES&#039;)&lt;br /&gt;
yesno(&#039;yEs&#039;)&lt;br /&gt;
yesno(&#039;Y&#039;)&lt;br /&gt;
yesno(&#039;tRuE&#039;)&lt;br /&gt;
&lt;br /&gt;
-- Bunlar her zaman false döndürür:&lt;br /&gt;
yesno(&#039;No&#039;)&lt;br /&gt;
yesno(&#039;NO&#039;)&lt;br /&gt;
yesno(&#039;nO&#039;)&lt;br /&gt;
yesno(&#039;N&#039;)&lt;br /&gt;
yesno(&#039;fALsE&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yesno&amp;lt;/code&amp;gt; yukarıda listelenenden farklı bir girdi alırsa varsayılan bir değer belirtebilirsiniz.&lt;br /&gt;
Bir varsayılan sağlamazsanız, modül bu girişler için &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; döndürür.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Bunlar nil döndürür:&lt;br /&gt;
yesno(&#039;foo&#039;)&lt;br /&gt;
yesno({})&lt;br /&gt;
yesno(5)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end)&lt;br /&gt;
&lt;br /&gt;
-- Bunlar true döndürür:&lt;br /&gt;
yesno(&#039;foo&#039;, true)&lt;br /&gt;
yesno({}, true)&lt;br /&gt;
yesno(5, true)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, true)&lt;br /&gt;
&lt;br /&gt;
-- Bunlar &amp;quot;bar&amp;quot; döndürür:&lt;br /&gt;
yesno(&#039;foo&#039;, &#039;bar&#039;)&lt;br /&gt;
yesno({}, &#039;bar&#039;)&lt;br /&gt;
yesno(5, &#039;bar&#039;)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, &#039;bar&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Boş dizenin de şu şekilde çalıştığını unutmayın:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(&#039;&#039;)        -- nil döndürür.&lt;br /&gt;
yesno(&#039;&#039;, true)  -- true döndürür.&lt;br /&gt;
yesno(&#039;&#039;, &#039;bar&#039;) -- &amp;quot;bar&amp;quot; döndürür.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Boş dizge genellikle vikimetinde &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; olarak değerlendirilse de, Lua&#039;da &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; olarak değerlendirilir.&lt;br /&gt;
Bu modül, vikimetin davranışı yerine Lua davranışını tercih eder.&lt;br /&gt;
Boş dizeyi &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; olarak ele almak modülünüz için önemliyse, işlemin daha önceki bir aşamasında boş bağımsız değişkenleri kaldırmanız gerekecektir.&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#invoke:Template translation|renderTranslatedTemplate|template=Module:Yesno/doc|noshift=1|uselang={{int:lang}}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/pt&amp;diff=3179</id>
		<title>Module:Yesno/doc/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/pt&amp;diff=3179"/>
		<updated>2025-09-04T07:24:45Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;{{#switch:&lt;br /&gt;
| =&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Languages|Module:Yesno/doc}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --&amp;gt;&lt;br /&gt;
{{Shared Template Warning}}&lt;br /&gt;
{{high-risk}}&lt;br /&gt;
{{used in system}}&lt;br /&gt;
{{Module rating|release}}&lt;br /&gt;
{{Module rating|protected}}&lt;br /&gt;
Este módulo fornece uma interface consistente para o processamento de booliano e da entrada de &#039;&#039;string&#039;&#039; ao estilo de boolinao.&lt;br /&gt;
Enquanto Lua permite os valores boolianos &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, os modelos do código wiki só podem expressar os valores boolianos através de &#039;&#039;strings&#039;&#039;, tais como &amp;quot;1&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc.&lt;br /&gt;
Este módulo processa estes tipos de &#039;&#039;strings&#039;&#039; e transforma-as numa entrada booliana para Lua processar.&lt;br /&gt;
Este também devolve valores &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; como &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, para permitir distinções entre &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
Este módulo aceita outras estruturas de Lua como entrada, por exemplo, boolianos, números, tabelas, e funções.&lt;br /&gt;
Se for passada uma entrada que não reconhece como booliano ou &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, é possível especificar um valor predefinido para devolver.&lt;br /&gt;
&amp;lt;span id=&amp;quot;Module_Quality&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Qualidade do Módulo ==&lt;br /&gt;
{{ModuleQuality}}&lt;br /&gt;
&amp;lt;span id=&amp;quot;Syntax&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Sintaxe ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(value, default)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; é o valor a ser testado.&lt;br /&gt;
A entrada booliana ou entrada no estilo booliano (veja em baixo) aponta sempre para &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, e &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; aponta sempre para &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&lt;br /&gt;
Outros valores apontam para &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;span id=&amp;quot;Usage&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Utilização ==&lt;br /&gt;
Primeiro, carregue o módulo. Note que este só pode ser carregado de outros módulos de Lua, não das páginas wiki normais.&lt;br /&gt;
Em vez disso, para as páginas wiki normais pode utilizar {{tlx|yesno}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alguns valores de entrada devolvem sempre &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, e alguns devolvem sempre &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
Valores &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; devolvem sempre &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Estes devolvem sempre true:&lt;br /&gt;
yesno(&#039;yes&#039;)&lt;br /&gt;
yesno(&#039;y&#039;)&lt;br /&gt;
yesno(&#039;true&#039;)&lt;br /&gt;
yesno(&#039;t&#039;)&lt;br /&gt;
yesno(&#039;1&#039;)&lt;br /&gt;
yesno(1)&lt;br /&gt;
yesno(true)&lt;br /&gt;
&lt;br /&gt;
-- Estes devolvem sempre false:&lt;br /&gt;
yesno(&#039;no&#039;)&lt;br /&gt;
yesno(&#039;n&#039;)&lt;br /&gt;
yesno(&#039;false&#039;)&lt;br /&gt;
yesno(&#039;f&#039;)&lt;br /&gt;
yesno(&#039;0&#039;)&lt;br /&gt;
yesno(0)&lt;br /&gt;
yesno(false)&lt;br /&gt;
&lt;br /&gt;
-- Um valor nil devolve sempre nil:&lt;br /&gt;
yesno(nil)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Os valores da &#039;&#039;string&#039;&#039; são convertidos para letras minúsculas antes de serem correspondidas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Estes devolvem sempre true:&lt;br /&gt;
yesno(&#039;Yes&#039;)&lt;br /&gt;
yesno(&#039;YES&#039;)&lt;br /&gt;
yesno(&#039;yEs&#039;)&lt;br /&gt;
yesno(&#039;Y&#039;)&lt;br /&gt;
yesno(&#039;tRuE&#039;)&lt;br /&gt;
&lt;br /&gt;
-- Estes devolvem sempre false:&lt;br /&gt;
yesno(&#039;No&#039;)&lt;br /&gt;
yesno(&#039;NO&#039;)&lt;br /&gt;
yesno(&#039;nO&#039;)&lt;br /&gt;
yesno(&#039;N&#039;)&lt;br /&gt;
yesno(&#039;fALsE&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pode especificar um valor predefinido se &amp;lt;code&amp;gt;yesno&amp;lt;/code&amp;gt; recebe entrada diferente da listada em cima.&lt;br /&gt;
Se não fornecer uma predefinição , o módulo devolverá &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; para essas entradas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- Estes devolvem nil:&lt;br /&gt;
yesno(&#039;foo&#039;)&lt;br /&gt;
yesno({})&lt;br /&gt;
yesno(5)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end)&lt;br /&gt;
&lt;br /&gt;
-- Estes devolvem true:&lt;br /&gt;
yesno(&#039;foo&#039;, true)&lt;br /&gt;
yesno({}, true)&lt;br /&gt;
yesno(5, true)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, true)&lt;br /&gt;
&lt;br /&gt;
-- Estes devolvem &amp;quot;bar&amp;quot;:&lt;br /&gt;
yesno(&#039;foo&#039;, &#039;bar&#039;)&lt;br /&gt;
yesno({}, &#039;bar&#039;)&lt;br /&gt;
yesno(5, &#039;bar&#039;)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, &#039;bar&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
NOTE que UMA &#039;&#039;string&#039;&#039; em branco também funciona desta forma:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(&#039;&#039;)        -- Devolve nil.&lt;br /&gt;
yesno(&#039;&#039;, true)  -- Devolve true.&lt;br /&gt;
yesno(&#039;&#039;, &#039;bar&#039;) -- Devolve &amp;quot;bar&amp;quot;.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Embora a &#039;&#039;string&#039;&#039; em branco geralmente seja apontada para &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; no texto wiki, ela é apontada para &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; na Lua.&lt;br /&gt;
Este módulo prefere o comportamento de Lua ao comportamento do texto wiki.&lt;br /&gt;
Se tratar a &#039;&#039;string&#039;&#039; em branco como &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; é importante para o seu módulo, terá de remover os argumentos em branco numa fase anterior do processamento.&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#invoke:Template translation|renderTranslatedTemplate|template=Module:Yesno/doc|noshift=1|uselang={{int:lang}}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/pl&amp;diff=3177</id>
		<title>Module:Yesno/doc/pl</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/pl&amp;diff=3177"/>
		<updated>2025-09-04T07:24:45Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;{{#switch:&lt;br /&gt;
| =&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Languages|Module:Yesno/doc}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --&amp;gt;&lt;br /&gt;
{{Shared Template Warning}}&lt;br /&gt;
{{high-risk}}&lt;br /&gt;
{{used in system}}&lt;br /&gt;
{{Module rating|release}}&lt;br /&gt;
{{Module rating|protected}}&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;This module provides a consistent interface for processing boolean or boolean-style string input.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;While Lua allows the &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; boolean values, wikicode templates can only express boolean values through strings such as &amp;quot;1&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;This module processes these kinds of strings and turns them into boolean input for Lua to process.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;It also returns &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; values as &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, to allow for distinctions between &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;The module also accepts other Lua structures as input, i.e. booleans, numbers, tables, and functions.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;If it is passed input that it does not recognise as boolean or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, it is possible to specify a default value to return.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&lt;br /&gt;
== Module Quality ==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{ModuleQuality}}&lt;br /&gt;
&amp;lt;div lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(value, default)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is the value to be tested.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Boolean input or boolean-style input (see below) always evaluates to either &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; always evaluates to &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Other values evaluate to &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;Usage&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Użycie ==&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;First, load the module. Note that it can only be loaded from other Lua modules, not from normal wiki pages.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;For normal wiki pages you can use {{tlx|yesno}} instead.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Some input values always return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, and some always return &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; values always return &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These always return true:&lt;br /&gt;
yesno(&#039;yes&#039;)&lt;br /&gt;
yesno(&#039;y&#039;)&lt;br /&gt;
yesno(&#039;true&#039;)&lt;br /&gt;
yesno(&#039;t&#039;)&lt;br /&gt;
yesno(&#039;1&#039;)&lt;br /&gt;
yesno(1)&lt;br /&gt;
yesno(true)&lt;br /&gt;
&lt;br /&gt;
-- These always return false:&lt;br /&gt;
yesno(&#039;no&#039;)&lt;br /&gt;
yesno(&#039;n&#039;)&lt;br /&gt;
yesno(&#039;false&#039;)&lt;br /&gt;
yesno(&#039;f&#039;)&lt;br /&gt;
yesno(&#039;0&#039;)&lt;br /&gt;
yesno(0)&lt;br /&gt;
yesno(false)&lt;br /&gt;
&lt;br /&gt;
-- A nil value always returns nil:&lt;br /&gt;
yesno(nil)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&lt;br /&gt;
String values are converted to lower case before they are matched:&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These always return true:&lt;br /&gt;
yesno(&#039;Yes&#039;)&lt;br /&gt;
yesno(&#039;YES&#039;)&lt;br /&gt;
yesno(&#039;yEs&#039;)&lt;br /&gt;
yesno(&#039;Y&#039;)&lt;br /&gt;
yesno(&#039;tRuE&#039;)&lt;br /&gt;
&lt;br /&gt;
-- These always return false:&lt;br /&gt;
yesno(&#039;No&#039;)&lt;br /&gt;
yesno(&#039;NO&#039;)&lt;br /&gt;
yesno(&#039;nO&#039;)&lt;br /&gt;
yesno(&#039;N&#039;)&lt;br /&gt;
yesno(&#039;fALsE&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;You can specify a default value if &amp;lt;code&amp;gt;yesno&amp;lt;/code&amp;gt; receives input other than that listed above.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;If you don&#039;t supply a default, the module will return &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; for these inputs.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These return nil:&lt;br /&gt;
yesno(&#039;foo&#039;)&lt;br /&gt;
yesno({})&lt;br /&gt;
yesno(5)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end)&lt;br /&gt;
&lt;br /&gt;
-- These return true:&lt;br /&gt;
yesno(&#039;foo&#039;, true)&lt;br /&gt;
yesno({}, true)&lt;br /&gt;
yesno(5, true)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, true)&lt;br /&gt;
&lt;br /&gt;
-- These return &amp;quot;bar&amp;quot;:&lt;br /&gt;
yesno(&#039;foo&#039;, &#039;bar&#039;)&lt;br /&gt;
yesno({}, &#039;bar&#039;)&lt;br /&gt;
yesno(5, &#039;bar&#039;)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, &#039;bar&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&lt;br /&gt;
Note that the blank string also functions this way:&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(&#039;&#039;)        -- Zwraca nil.&lt;br /&gt;
yesno(&#039;&#039;, true)  -- Zwraca true.&lt;br /&gt;
yesno(&#039;&#039;, &#039;bar&#039;) -- Zwraca &amp;quot;bar&amp;quot;.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Although the blank string usually evaluates to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; in wikitext, it evaluates to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; in Lua.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;This module prefers the Lua behaviour over the wikitext behaviour.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;If treating the blank string as &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; is important for your module, you will need to remove blank arguments at an earlier stage of processing.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#invoke:Template translation|renderTranslatedTemplate|template=Module:Yesno/doc|noshift=1|uselang={{int:lang}}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/ja&amp;diff=3175</id>
		<title>Module:Yesno/doc/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/ja&amp;diff=3175"/>
		<updated>2025-09-04T07:24:44Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;{{#switch:&lt;br /&gt;
| =&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Languages|Module:Yesno/doc}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --&amp;gt;&lt;br /&gt;
{{Shared Template Warning}}&lt;br /&gt;
{{high-risk}}&lt;br /&gt;
{{used in system}}&lt;br /&gt;
{{Module rating|release}}&lt;br /&gt;
{{Module rating|protected}}&lt;br /&gt;
このモジュールは、真偽値または真偽値スタイルの文字列入力を処理するための一貫したインターフェイスを提供します。&lt;br /&gt;
Lua では &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; の真偽値を使用できますが、ウィキコード テンプレートでは &amp;quot;1&amp;quot;、&amp;quot;0&amp;quot;、&amp;quot;yes&amp;quot;、&amp;quot;no&amp;quot; などの文字列でしか真偽値を表現できません。&lt;br /&gt;
このモジュールは、このような種類の文字列を処理して、Lua が処理できる真偽値の入力に変えます。&lt;br /&gt;
また、&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; の値を &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; として返すことで、&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; と &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; の区別ができるようにします。&lt;br /&gt;
このモジュールは、真偽値、数値、テーブル、関数など、他の Lua 構造も入力として受け付けます。&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;If it is passed input that it does not recognise as boolean or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, it is possible to specify a default value to return.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&lt;br /&gt;
== Module Quality ==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{ModuleQuality}}&lt;br /&gt;
&amp;lt;span id=&amp;quot;Syntax&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 構文 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(value, default)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; is the value to be tested.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Boolean input or boolean-style input (see below) always evaluates to either &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; always evaluates to &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Other values evaluate to &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;Usage&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 使用法 ==&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;First, load the module. Note that it can only be loaded from other Lua modules, not from normal wiki pages.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;For normal wiki pages you can use {{tlx|yesno}} instead.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Some input values always return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, and some always return &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; values always return &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These always return true:&lt;br /&gt;
yesno(&#039;yes&#039;)&lt;br /&gt;
yesno(&#039;y&#039;)&lt;br /&gt;
yesno(&#039;true&#039;)&lt;br /&gt;
yesno(&#039;t&#039;)&lt;br /&gt;
yesno(&#039;1&#039;)&lt;br /&gt;
yesno(1)&lt;br /&gt;
yesno(true)&lt;br /&gt;
&lt;br /&gt;
-- These always return false:&lt;br /&gt;
yesno(&#039;no&#039;)&lt;br /&gt;
yesno(&#039;n&#039;)&lt;br /&gt;
yesno(&#039;false&#039;)&lt;br /&gt;
yesno(&#039;f&#039;)&lt;br /&gt;
yesno(&#039;0&#039;)&lt;br /&gt;
yesno(0)&lt;br /&gt;
yesno(false)&lt;br /&gt;
&lt;br /&gt;
-- A nil value always returns nil:&lt;br /&gt;
yesno(nil)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&lt;br /&gt;
String values are converted to lower case before they are matched:&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These always return true:&lt;br /&gt;
yesno(&#039;Yes&#039;)&lt;br /&gt;
yesno(&#039;YES&#039;)&lt;br /&gt;
yesno(&#039;yEs&#039;)&lt;br /&gt;
yesno(&#039;Y&#039;)&lt;br /&gt;
yesno(&#039;tRuE&#039;)&lt;br /&gt;
&lt;br /&gt;
-- These always return false:&lt;br /&gt;
yesno(&#039;No&#039;)&lt;br /&gt;
yesno(&#039;NO&#039;)&lt;br /&gt;
yesno(&#039;nO&#039;)&lt;br /&gt;
yesno(&#039;N&#039;)&lt;br /&gt;
yesno(&#039;fALsE&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;You can specify a default value if &amp;lt;code&amp;gt;yesno&amp;lt;/code&amp;gt; receives input other than that listed above.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;If you don&#039;t supply a default, the module will return &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; for these inputs.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These return nil:&lt;br /&gt;
yesno(&#039;foo&#039;)&lt;br /&gt;
yesno({})&lt;br /&gt;
yesno(5)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end)&lt;br /&gt;
&lt;br /&gt;
-- These return true:&lt;br /&gt;
yesno(&#039;foo&#039;, true)&lt;br /&gt;
yesno({}, true)&lt;br /&gt;
yesno(5, true)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, true)&lt;br /&gt;
&lt;br /&gt;
-- These return &amp;quot;bar&amp;quot;:&lt;br /&gt;
yesno(&#039;foo&#039;, &#039;bar&#039;)&lt;br /&gt;
yesno({}, &#039;bar&#039;)&lt;br /&gt;
yesno(5, &#039;bar&#039;)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, &#039;bar&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&lt;br /&gt;
Note that the blank string also functions this way:&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(&#039;&#039;)        -- Returns nil.&lt;br /&gt;
yesno(&#039;&#039;, true)  -- Returns true.&lt;br /&gt;
yesno(&#039;&#039;, &#039;bar&#039;) -- Returns &amp;quot;bar&amp;quot;.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Although the blank string usually evaluates to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; in wikitext, it evaluates to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; in Lua.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;This module prefers the Lua behaviour over the wikitext behaviour.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;If treating the blank string as &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; is important for your module, you will need to remove blank arguments at an earlier stage of processing.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#invoke:Template translation|renderTranslatedTemplate|template=Module:Yesno/doc|noshift=1|uselang={{int:lang}}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/fr&amp;diff=3173</id>
		<title>Module:Yesno/doc/fr</title>
		<link rel="alternate" type="text/html" href="https://wiki.mechsploit.me/index.php?title=Module:Yesno/doc/fr&amp;diff=3173"/>
		<updated>2025-09-04T07:24:43Z</updated>

		<summary type="html">&lt;p&gt;MechsploWikiSysop: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;{{#switch:&lt;br /&gt;
| =&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Languages|Module:Yesno/doc}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --&amp;gt;&lt;br /&gt;
{{Shared Template Warning}}&lt;br /&gt;
{{high-risk}}&lt;br /&gt;
{{used in system}}&lt;br /&gt;
{{Module rating|release}}&lt;br /&gt;
{{Module rating|protected}}&lt;br /&gt;
Ce module fournit une interface cohérente pour traiter les entrées booléennes ou des chaînes de ce style.&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;While Lua allows the &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; boolean values, wikicode templates can only express boolean values through strings such as &amp;quot;1&amp;quot;, &amp;quot;0&amp;quot;, &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;This module processes these kinds of strings and turns them into boolean input for Lua to process.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;It also returns &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; values as &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, to allow for distinctions between &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;The module also accepts other Lua structures as input, i.e. booleans, numbers, tables, and functions.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;If it is passed input that it does not recognise as boolean or &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, it is possible to specify a default value to return.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;Module_Quality&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Qualité du module ==&lt;br /&gt;
{{ModuleQuality}}&lt;br /&gt;
&amp;lt;span id=&amp;quot;Syntax&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Syntaxe ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(value, default)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; est la valeur à tester.&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Boolean input or boolean-style input (see below) always evaluates to either &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; always evaluates to &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Other values evaluate to &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;Usage&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;First, load the module. Note that it can only be loaded from other Lua modules, not from normal wiki pages.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;For normal wiki pages you can use {{tlx|yesno}} instead.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Some input values always return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, and some always return &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; values always return &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These always return true:&lt;br /&gt;
yesno(&#039;yes&#039;)&lt;br /&gt;
yesno(&#039;y&#039;)&lt;br /&gt;
yesno(&#039;true&#039;)&lt;br /&gt;
yesno(&#039;t&#039;)&lt;br /&gt;
yesno(&#039;1&#039;)&lt;br /&gt;
yesno(1)&lt;br /&gt;
yesno(true)&lt;br /&gt;
&lt;br /&gt;
-- These always return false:&lt;br /&gt;
yesno(&#039;no&#039;)&lt;br /&gt;
yesno(&#039;n&#039;)&lt;br /&gt;
yesno(&#039;false&#039;)&lt;br /&gt;
yesno(&#039;f&#039;)&lt;br /&gt;
yesno(&#039;0&#039;)&lt;br /&gt;
yesno(0)&lt;br /&gt;
yesno(false)&lt;br /&gt;
&lt;br /&gt;
-- A nil value always returns nil:&lt;br /&gt;
yesno(nil)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&lt;br /&gt;
String values are converted to lower case before they are matched:&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These always return true:&lt;br /&gt;
yesno(&#039;Yes&#039;)&lt;br /&gt;
yesno(&#039;YES&#039;)&lt;br /&gt;
yesno(&#039;yEs&#039;)&lt;br /&gt;
yesno(&#039;Y&#039;)&lt;br /&gt;
yesno(&#039;tRuE&#039;)&lt;br /&gt;
&lt;br /&gt;
-- These always return false:&lt;br /&gt;
yesno(&#039;No&#039;)&lt;br /&gt;
yesno(&#039;NO&#039;)&lt;br /&gt;
yesno(&#039;nO&#039;)&lt;br /&gt;
yesno(&#039;N&#039;)&lt;br /&gt;
yesno(&#039;fALsE&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;You can specify a default value if &amp;lt;code&amp;gt;yesno&amp;lt;/code&amp;gt; receives input other than that listed above.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;If you don&#039;t supply a default, the module will return &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt; for these inputs.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
-- These return nil:&lt;br /&gt;
yesno(&#039;foo&#039;)&lt;br /&gt;
yesno({})&lt;br /&gt;
yesno(5)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end)&lt;br /&gt;
&lt;br /&gt;
-- These return true:&lt;br /&gt;
yesno(&#039;foo&#039;, true)&lt;br /&gt;
yesno({}, true)&lt;br /&gt;
yesno(5, true)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, true)&lt;br /&gt;
&lt;br /&gt;
-- These return &amp;quot;bar&amp;quot;:&lt;br /&gt;
yesno(&#039;foo&#039;, &#039;bar&#039;)&lt;br /&gt;
yesno({}, &#039;bar&#039;)&lt;br /&gt;
yesno(5, &#039;bar&#039;)&lt;br /&gt;
yesno(function() return &#039;This is a function.&#039; end, &#039;bar&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;div lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;&lt;br /&gt;
Note that the blank string also functions this way:&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
yesno(&#039;&#039;)        -- Returns nil.&lt;br /&gt;
yesno(&#039;&#039;, true)  -- Returns true.&lt;br /&gt;
yesno(&#039;&#039;, &#039;bar&#039;) -- Returns &amp;quot;bar&amp;quot;.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;Although the blank string usually evaluates to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; in wikitext, it evaluates to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; in Lua.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;This module prefers the Lua behaviour over the wikitext behaviour.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot; class=&amp;quot;mw-content-ltr&amp;quot;&amp;gt;If treating the blank string as &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; is important for your module, you will need to remove blank arguments at an earlier stage of processing.&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
[[Category:Modules]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#invoke:Template translation|renderTranslatedTemplate|template=Module:Yesno/doc|noshift=1|uselang={{int:lang}}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MechsploWikiSysop</name></author>
	</entry>
</feed>