<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://voute.proletaire.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LeProletaire</id>
	<title>La Voûte - Strainopedia - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://voute.proletaire.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LeProletaire"/>
	<link rel="alternate" type="text/html" href="https://voute.proletaire.net/db/Sp%C3%A9cial:Contributions/LeProletaire"/>
	<updated>2026-06-02T10:34:50Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Accueil&amp;diff=599</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Accueil&amp;diff=599"/>
		<updated>2025-08-26T23:30:42Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Aide:Ébauche]]&lt;br /&gt;
&lt;br /&gt;
[[Aide:Comment_modifier_une_page]]&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Aide:Comment_modifier_une_page&amp;diff=598</id>
		<title>Aide:Comment modifier une page</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Aide:Comment_modifier_une_page&amp;diff=598"/>
		<updated>2025-08-26T23:29:08Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : Page créée avec « N&amp;#039;importe qui peut modifier une page de Strainopedia pour y apporter du contenu, corriger une faute, améliorer le style, etc.&amp;lt;br&amp;gt; Dans Strainopedia, il existe deux techniques de modification : le &amp;#039;&amp;#039;&amp;#039;wikicode&amp;#039;&amp;#039;&amp;#039; et l&amp;#039;&amp;#039;&amp;#039;&amp;#039;éditeur visuel&amp;#039;&amp;#039;&amp;#039;.  == À retenir == {| |style=&amp;quot;width:50%&amp;quot; valign=&amp;quot;center&amp;quot; |alt=Positionnement des liens &amp;quot;modifier&amp;quot; et modifier le code&amp;quot; dans l&amp;#039;interface en haut d&amp;#039;une page  |style=&amp;quot;width:50%&amp;quot;... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;N&#039;importe qui peut modifier une page de Strainopedia pour y apporter du contenu, corriger une faute, améliorer le style, etc.&amp;lt;br&amp;gt; Dans Strainopedia, il existe deux techniques de modification : le &#039;&#039;&#039;wikicode&#039;&#039;&#039; et l&#039;&#039;&#039;&#039;éditeur visuel&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== À retenir ==&lt;br /&gt;
{|&lt;br /&gt;
|style=&amp;quot;width:50%&amp;quot; valign=&amp;quot;center&amp;quot; |[[File:VisualEditor - Edit tab - fr.png|400px|link=|alt=Positionnement des liens &amp;quot;modifier&amp;quot; et modifier le code&amp;quot; dans l&#039;interface en haut d&#039;une page]]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;width:50%&amp;quot; valign=&amp;quot;center&amp;quot; |&lt;br /&gt;
Le lien « &#039;&#039;&#039;Modifier&#039;&#039;&#039; » permet la modification des articles encyclopédiques à l’aide de l’[[Aide:ÉditeurVisuel|éditeur visuel]], qui fonctionne comme un logiciel de traitement de texte.&lt;br /&gt;
&lt;br /&gt;
Le lien « &#039;&#039;&#039;Modifier le code&#039;&#039;&#039; » permet la modification d’une page [[Aide:Comment modifier une page en wikicode|en modifiant le code source (wikicode)]]. Cela nécessite de connaître la [[Aide:Syntaxe|syntaxe wiki]].&lt;br /&gt;
|-&lt;br /&gt;
|[[File:VisualEditor - Section edit links - fr.png|404px|link=|alt=Positionnement des liens &amp;quot;modifier&amp;quot; et modifier le code&amp;quot; au droit de chaque titre de section]]&lt;br /&gt;
|&lt;br /&gt;
Pour plus de commodité, des liens pour modifier sont présents à droite de chaque intertitre d’un article. Ces liens permettent de ne modifier que la section concernée.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{relief|&#039;&#039;&#039;Si vous ajoutez des faits&#039;&#039;&#039; n’oubliez pas de [[WP:Citez vos sources|citer les références de qualité qui prouvent ce que vous ajoutez]]. Ces références peuvent être un livre, un article, un site Web... Dans tous les cas, ces références doivent être connues pour leur qualité. Citez leur titre, leur auteur… Ne les copiez pas dans l&#039;article !}}&lt;br /&gt;
&lt;br /&gt;
== La modification est impossible ? ==&lt;br /&gt;
Si un onglet « &#039;&#039;&#039;Voir la source&#039;&#039;&#039; » remplace les onglets de modification, cela signifie que la page est soit [[Wikipédia:Protection|protégée en écriture]] (elle ne peut être modifiée que par un [[Wikipédia:Administrateur|administrateur]]), soit [[Wikipédia:Semi-protection|semi-protégée]] (elle ne peut être modifiée que par les utilisateurs inscrits depuis plus de quatre jours). Vous pouvez alors faire une requête motivée pour qu&#039;[[ Wikipédia:Demande d&#039;intervention sur une page protégée|un administrateur apporte une modification à cette page]].&lt;br /&gt;
&lt;br /&gt;
== Décrire votre modification dans la boîte de résumé ==&lt;br /&gt;
{{Article détaillé|Aide:Boîte de résumé}}&lt;br /&gt;
Il est préférable de &#039;&#039;&#039;[[Aide:Boîte de résumé|décrire les modifications]] que vous faites&#039;&#039;&#039;. Ces descriptions sont enregistrées en même temps que votre modification et sont affichées dans l&#039;historique des articles. Elles ne peuvent pas être changées après coup.&lt;br /&gt;
&lt;br /&gt;
Correctement décrire votre modification permet aux autres wikipédiens de comprendre votre intention, et éventuellement vous aider si vous avez commis une maladresse.&lt;br /&gt;
[[Fichier:Éditeur visuel — résumé de modification et bouton publier.png|thumb|center|upright=3|Boîte de dialogue pour publier à partir de l&#039;éditeur visuel.]]&lt;br /&gt;
&lt;br /&gt;
=== Modification majeure ou mineure ? ===&lt;br /&gt;
Il est possible grâce aux liens « modifier le code » de faire deux types de modifications :&lt;br /&gt;
* une &#039;&#039;&#039;[[Aide:Boîte de résumé#Modification mineure|modification mineure]]&#039;&#039;&#039; portant sur l&#039;orthographe, le style, l&#039;ajout d&#039;un lien interne, etc. ;&lt;br /&gt;
* une &#039;&#039;&#039;modification majeure&#039;&#039;&#039;, qui permet d&#039;apporter un contenu. Dans ce cas :&lt;br /&gt;
** n&#039;oubliez pas d&#039;[[WP:Citez vos sources|insérer les références de qualité qui prouvent le fait que vous ajoutez]],&lt;br /&gt;
** ne copiez pas de texte, ni d&#039;une page web, ni d&#039;un autre support : [[Wikipédia:Droit d&#039;auteur|respectez le droit d&#039;auteur]].&lt;br /&gt;
&lt;br /&gt;
== Éditeur visuel ou wikicode, comment les utiliser ? ==&lt;br /&gt;
Les deux éditeurs permettent de tout faire. C&#039;est en fonction des choix et des habitudes de chacun d&#039;utiliser l&#039;un ou l&#039;autre éditeur.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous, vous trouverez les liens vers les pages d&#039;aide pour utiliser les deux éditeurs en fonction de ce que vous voulez faire.&lt;br /&gt;
{{Début de colonnes|nombre=2| taille = 20em|style=margin:0}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;aa-fond-gris&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;strong class=&amp;quot;aa-titre aa-faux-h4&amp;quot;&amp;gt;{{Gris|Éditeur visuel}}&amp;lt;/strong&amp;gt;&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;strong style=&amp;quot;font-family: Arial,sans-serif; font-size: 1.1em;&amp;quot;&amp;gt;Utiliser « Modifier » pour : &amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*[[Aide:Insérer du contenu textuel (Éditeur visuel)|Insérer du contenu textuel]]&lt;br /&gt;
*[[Aide:Insérer un lien (Éditeur visuel)|Insérer un lien]] (interne ou externe)&lt;br /&gt;
*[[Aide:Insérer une référence (Éditeur visuel)|Insérer une référence]]&lt;br /&gt;
*[[Aide:Insérer une image (Éditeur visuel)|Insérer une image]]&lt;br /&gt;
*[[Aide:Insérer un modèle (Éditeur visuel)|Insérer un modèle]]&lt;br /&gt;
*[[Aide:Insérer un tableau (Éditeur visuel)|Insérer un tableau]]&lt;br /&gt;
*[[Aide:Insérer une catégorie (Éditeur visuel)|Insérer une catégorie]]&lt;br /&gt;
*[[Aide:Insérer une formule mathématique (Éditeur visuel)|Insérer une formule mathématique]]&lt;br /&gt;
*[[Aide:Insérer une partition musicale (Éditeur visuel)|Insérer une partition musicale]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aa-fond-gris&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;strong class=&amp;quot;aa-titre aa-faux-h4&amp;quot;&amp;gt;{{Gris|Wikicode}}&amp;lt;/strong&amp;gt;&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;strong style=&amp;quot;font-family: Arial,sans-serif; font-size: 1.1em;&amp;quot;&amp;gt;Utiliser « Modifier le code » pour :&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
*[[Aide:Insérer du contenu textuel (wikicode)|Insérer du contenu textuel]]&lt;br /&gt;
*[[Aide:Insérer un lien (wikicode)|Insérer un lien]] (interne ou externe)&lt;br /&gt;
*[[Aide:Insérer une référence (wikicode)|Insérer une référence]]&lt;br /&gt;
*[[Aide:Insérer une image (wikicode)|Insérer une image]]&lt;br /&gt;
*[[Aide:Insérer un modèle (wikicode)|Insérer un modèle]]&lt;br /&gt;
*[[Aide:Insérer un tableau (wikicode)|Insérer un tableau]]&lt;br /&gt;
*[[Aide:Insérer une catégorie (wikicode)|Insérer une catégorie]]&lt;br /&gt;
*[[Aide:Insérer une formule mathématique (wikicode)|Insérer une formule mathématique]]&lt;br /&gt;
*[[Aide:Insérer une partition musicale (wikicode)|Insérer une partition musicale]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Fin de colonnes}}&lt;br /&gt;
&lt;br /&gt;
== Quel plan respecter ? ==&lt;br /&gt;
&lt;br /&gt;
Pour aller plus loin, vous pouvez lire [[Wikipédia:Conventions de plan]] pour connaître comment est usuellement structuré un article. &lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
{{Palette Aide aux contributeurs débutants}}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Accueil&amp;diff=597</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Accueil&amp;diff=597"/>
		<updated>2025-08-26T22:42:42Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Aide:Ébauche]]&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Accueil&amp;diff=596</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Accueil&amp;diff=596"/>
		<updated>2025-08-26T22:42:28Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : Page créée avec « Aide:Ébauche »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aide:Ébauche&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Aide:%C3%89bauche&amp;diff=595</id>
		<title>Aide:Ébauche</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Aide:%C3%89bauche&amp;diff=595"/>
		<updated>2025-08-26T22:23:38Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : Page créée avec « == Avertissements préalables == * Un article déjà relativement long mais portant sur un sujet complexe peut être considéré comme une ébauche, au regard du sujet traité (survol du sujet...). * Un article court peut être tout à fait complet si le sujet ne se prête pas à des développements à rallonge. * Une ébauche ne se définit pas par sa « wikification » (mise en page) : un article au contenu informatif considérable mais d... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Avertissements préalables ==&lt;br /&gt;
* Un article déjà relativement long mais portant sur un sujet complexe peut être considéré comme une ébauche, au regard du sujet traité (survol du sujet...).&lt;br /&gt;
* Un article court peut être tout à fait complet si le sujet ne se prête pas à des développements à rallonge.&lt;br /&gt;
* Une ébauche ne se définit pas par sa « [[Aide:Wikification|wikification]] » (mise en page) : un article au contenu informatif considérable mais dépourvu de liens vers d&#039;autres articles n&#039;est pas considéré comme une ébauche, mais il mérite l&#039;attention d&#039;un contributeur voulant en améliorer la mise en page.&lt;br /&gt;
&lt;br /&gt;
== Créer un article ébauché ==&lt;br /&gt;
L&#039;important à la création est que l&#039;article comporte des informations de base, faute de quoi l&#039;ébauche risque d&#039;être supprimée sans avoir eu la chance d&#039;être améliorée. &lt;br /&gt;
* Commencez par la définition ou la description du sujet abordé, qui pourra par la suite servir d&#039;introduction à l&#039;article.&lt;br /&gt;
* En identifier les limites, par exemple par les dates de naissance et de décès, s&#039;il s&#039;agit d&#039;une biographie, ou la localisation, s&#039;il s&#039;agit d&#039;un lieu.&lt;br /&gt;
* [[Aide:catégorisation|Mettre des catégories]] à la création d&#039;article, pour augmenter sa visibilité pour les membres du projet.&lt;br /&gt;
Ensuite, on peut :&lt;br /&gt;
* étendre ces informations de base. Une recherche devrait permettre d&#039;exposer les grandes lignes du sujet. Le plus important est de donner, en quelques phrases claires et concises, une vue générale du sujet et/ou des problématiques qu&#039;il pose ;&lt;br /&gt;
* créer quelques liens vers d&#039;autres articles, qui vont aider le lecteur à contextualiser le sujet, à défaut d&#039;en avoir un traitement complet.&lt;br /&gt;
&lt;br /&gt;
Une ébauche étant un article comme un autre sur le plan factuel, elle doit respecter les [[Wikipédia:Principes fondateurs|principes fondateurs]] de l&#039;encyclopédie, notamment la [[Wikipédia:NPOV|neutralité de point de vue]]. Pour bien commencer, voir aussi les plans types d&#039;articles dans la [[:Catégorie:Modèle d&#039;article]] dont l&#039;exemple ci-dessous :&lt;br /&gt;
{{Aide détaillée|Projet:Biologie/Plan ébauche taxon}}&lt;br /&gt;
&lt;br /&gt;
On peut signaler qu&#039;une section d&#039;un article existant est vide, ou insuffisamment détaillée, ou incomplète par le modèle {{m|...}}.&lt;br /&gt;
&lt;br /&gt;
== Comment améliorer une ébauche ? ==&lt;br /&gt;
{{voir aussi|Aide:Comment rédiger un bon article}}&lt;br /&gt;
# Établir un plan simple qui fait le tour du sujet : par exemple aborder l&#039;historique, son fonctionnement, une description de ses caractéristiques (géographiques, sociales, économiques), ses conséquences{{etc.}} ;&lt;br /&gt;
# Trouver des [[Wikipédia:Citez vos sources|sources]] pour remplir de contenu chaque section.&lt;br /&gt;
&lt;br /&gt;
== Signaler une ébauche ==&lt;br /&gt;
=== À quoi sert un bandeau d&#039;ébauche ? ===&lt;br /&gt;
Le bandeau {{m|Ébauche}} permet :&lt;br /&gt;
* d&#039;attirer l&#039;attention des contributeurs disponibles et conscients sur certains articles, par l&#039;intermédiaire de la page [[:Catégorie:Wikipédia:ébauche]], afin de les compléter ;&lt;br /&gt;
* d&#039;avertir les lecteurs que l&#039;article est incomplet, afin que par exemple les visiteurs occasionnels ne puissent pas tirer de conclusion erronée sur la qualité des articles de Wikipédia à cause d&#039;un article incomplet ;&lt;br /&gt;
* de connaître la part d&#039;articles considérés comme « corrects » ou bien la [[Special:Whatlinkshere/Aide:Ébauche|liste]] exhaustive de toutes les pages désignées comme « ébauche ».&lt;br /&gt;
&lt;br /&gt;
Il est considéré, sur Wikipédia, qu&#039;un article n&#039;est jamais vraiment terminé. Il y a toujours des améliorations possibles et des détails à rajouter qui peuvent avoir été ignorés ou négligés. Ainsi les articles sans le bandeau ébauche n&#039;en sont donc pas pour autant dispensés d&#039;amélioration.&lt;br /&gt;
&lt;br /&gt;
=== Ajouter le statut d&#039;ébauche ===&lt;br /&gt;
{{article connexe|Projet:Accueil}}&lt;br /&gt;
&lt;br /&gt;
* [[Aide:Insérer un modèle (Éditeur visuel)|Placer le modèle]] {{m|ébauche}} en haut de l&#039;article, tout en précisant autant que possible le thème de l&#039;ébauche (exemple : {{m/ébauche|Afrique}} pour un article à propos de l&#039;Afrique).&lt;br /&gt;
* Il est possible de préciser plusieurs thèmes (exemple : {{m/ébauche|Afrique|histoire}} pour un article concernant l&#039;histoire de l&#039;Afrique).&lt;br /&gt;
* Le gadget &#039;&#039;BandeauxEbauches&#039;&#039; dans les [[aide:Préférences|préférences]] permet l&#039;ajout et le retrait rapide de bandeaux d&#039;ébauches.&lt;br /&gt;
&lt;br /&gt;
Chaque bandeau ajoute l&#039;article à la catégorie cachée [[:Catégorie:Wikipédia:ébauche]] ou dans une sous-catégorie en fonction du thème ajouté (exemple : [[:Catégorie:Wikipédia:ébauche géologie]]). Ainsi les thèmes ajoutés au bandeau d&#039;ébauche permettent de classer les articles dans ces sous-catégories cachées.&lt;br /&gt;
&lt;br /&gt;
=== Retirer le statut d&#039;ébauche ===&lt;br /&gt;
Lorsque l&#039;article s&#039;est étoffé et amélioré, le bandeau {{m|ébauche}} peut être retiré &#039;&#039;&#039;par n&#039;importe quel contributeur et cela sans procédure particulière&#039;&#039;&#039;. Si vous avez un doute, vous pouvez poser la question sur la page de discussion de l&#039;article ou demander leur avis aux membres du [[projet:accueil|projet]] concerné par la page. Le retrait n&#039;est pas nécessairement définitif.&lt;br /&gt;
&lt;br /&gt;
== Créer un nouveau thème d&#039;ébauche ==&lt;br /&gt;
Si un groupe d&#039;ébauches n&#039;a aucun bandeau d&#039;ébauche spécialisée, ou si une catégorie d&#039;ébauche qui comporte trop d&#039;articles peut être scindée en plusieurs catégories, il est possible de créer un nouveau thème d&#039;ébauche (Voir [[Aide:Ébauche/Aide paramètres]]). Il est cependant important de vérifier qu&#039;il n&#039;existe pas déjà un thème d&#039;ébauche ou une sous-catégorie d&#039;ébauche sur le sujet. Voir [[:Catégorie:Catégorie d&#039;ébauche]] et [[:Catégorie:Wikipédia:ébauche]].&lt;br /&gt;
&lt;br /&gt;
== Liens internes ==&lt;br /&gt;
* [[Projet:Accueil]] : page recensant les projets thématiques classés à partir de douze groupements, permettant de qualifier plus facilement un bandeau d&#039;ébauche.&lt;br /&gt;
* [[Projet:Évaluation/Avancement]] : désigne le stade quantitatif ET qualitatif des informations présentes sur l’article. Il est défini par quatre stades d’évolution, dont l&#039;ébauche. &lt;br /&gt;
* [[:Catégorie:Catégorie d&#039;ébauche]] &#039;&#039;liste&#039;&#039; les catégories d&#039;ébauches thématiques&lt;br /&gt;
* [[Wikipédia:Bandeau d&#039;ébauche]] donne un &#039;&#039;aperçu&#039;&#039; des thèmes d&#039;ébauche&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Ebauche}}&lt;br /&gt;
[[Catégorie:Aide]]&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Documentation_subpage/layout&amp;diff=594</id>
		<title>Modèle:Documentation subpage/layout</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Documentation_subpage/layout&amp;diff=594"/>
		<updated>2025-08-26T15:53:49Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;messagebox layouttemplate&amp;quot; id=&amp;quot;doc_page_viewed_directly&amp;quot; lang=&amp;quot;{{#bcp47:{{{lang|}}}}}&amp;quot; dir=&amp;quot;{{#dir:{{{lang|}}}}}&amp;quot;&amp;gt;&lt;br /&gt;
{{{text}}}&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;p lang=&amp;quot;&amp;quot;&amp;gt;{{Documentation subpage/lang}}&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;[[Category:Layout templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Documentation_subpage/lang&amp;diff=592</id>
		<title>Modèle:Documentation subpage/lang</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Documentation_subpage/lang&amp;diff=592"/>
		<updated>2025-08-26T15:53:49Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;font-size:small;line-height:1.4&amp;quot; class=&amp;quot;plainlinks noprint&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ar &amp;lt;bdi class=&amp;quot;language lang-ar&amp;quot; lang=&amp;quot;ar&amp;quot;&amp;gt;العربية&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ast &amp;lt;bdi class=&amp;quot;language lang-ast&amp;quot; lang=&amp;quot;ast&amp;quot;&amp;gt;asturianu&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/bar &amp;lt;bdi class=&amp;quot;language lang-bar&amp;quot; lang=&amp;quot;bar&amp;quot;&amp;gt;Boarisch&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/be-tarask &amp;lt;bdi class=&amp;quot;language lang-be-tarask&amp;quot; lang=&amp;quot;be-tarask&amp;quot;&amp;gt;беларуская (тарашкевіца)&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/bg &amp;lt;bdi class=&amp;quot;language lang-bg&amp;quot; lang=&amp;quot;bg&amp;quot;&amp;gt;български&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/bn &amp;lt;bdi class=&amp;quot;language lang-bn&amp;quot; lang=&amp;quot;bn&amp;quot;&amp;gt;বাংলা&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ca &amp;lt;bdi class=&amp;quot;language lang-ca&amp;quot; lang=&amp;quot;ca&amp;quot;&amp;gt;català&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/cs &amp;lt;bdi class=&amp;quot;language lang-cs&amp;quot; lang=&amp;quot;cs&amp;quot;&amp;gt;čeština&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/da &amp;lt;bdi class=&amp;quot;language lang-da&amp;quot; lang=&amp;quot;da&amp;quot;&amp;gt;dansk&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/de &amp;lt;bdi class=&amp;quot;language lang-de&amp;quot; lang=&amp;quot;de&amp;quot;&amp;gt;Deutsch&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/diq &amp;lt;bdi class=&amp;quot;language lang-diq&amp;quot; lang=&amp;quot;diq&amp;quot;&amp;gt;Zazaki&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/el &amp;lt;bdi class=&amp;quot;language lang-el&amp;quot; lang=&amp;quot;el&amp;quot;&amp;gt;Ελληνικά&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/en &amp;lt;bdi class=&amp;quot;language lang-en&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;English&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/eo &amp;lt;bdi class=&amp;quot;language lang-eo&amp;quot; lang=&amp;quot;eo&amp;quot;&amp;gt;Esperanto&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/es &amp;lt;bdi class=&amp;quot;language lang-es&amp;quot; lang=&amp;quot;es&amp;quot;&amp;gt;español&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/et &amp;lt;bdi class=&amp;quot;language lang-et&amp;quot; lang=&amp;quot;et&amp;quot;&amp;gt;eesti&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/eu &amp;lt;bdi class=&amp;quot;language lang-eu&amp;quot; lang=&amp;quot;eu&amp;quot;&amp;gt;euskara&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/fa &amp;lt;bdi class=&amp;quot;language lang-fa&amp;quot; lang=&amp;quot;fa&amp;quot;&amp;gt;فارسی&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/fi &amp;lt;bdi class=&amp;quot;language lang-fi&amp;quot; lang=&amp;quot;fi&amp;quot;&amp;gt;suomi&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/fr &amp;lt;bdi class=&amp;quot;language lang-fr&amp;quot; lang=&amp;quot;fr&amp;quot;&amp;gt;français&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/gl &amp;lt;bdi class=&amp;quot;language lang-gl&amp;quot; lang=&amp;quot;gl&amp;quot;&amp;gt;galego&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/he &amp;lt;bdi class=&amp;quot;language lang-he&amp;quot; lang=&amp;quot;he&amp;quot;&amp;gt;עברית&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/hi &amp;lt;bdi class=&amp;quot;language lang-hi&amp;quot; lang=&amp;quot;hi&amp;quot;&amp;gt;हिन्दी&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/hr &amp;lt;bdi class=&amp;quot;language lang-hr&amp;quot; lang=&amp;quot;hr&amp;quot;&amp;gt;hrvatski&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/hu &amp;lt;bdi class=&amp;quot;language lang-hu&amp;quot; lang=&amp;quot;hu&amp;quot;&amp;gt;magyar&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/id &amp;lt;bdi class=&amp;quot;language lang-id&amp;quot; lang=&amp;quot;id&amp;quot;&amp;gt;Bahasa Indonesia&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/it &amp;lt;bdi class=&amp;quot;language lang-it&amp;quot; lang=&amp;quot;it&amp;quot;&amp;gt;italiano&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ja &amp;lt;bdi class=&amp;quot;language lang-ja&amp;quot; lang=&amp;quot;ja&amp;quot;&amp;gt;日本語&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ka &amp;lt;bdi class=&amp;quot;language lang-ka&amp;quot; lang=&amp;quot;ka&amp;quot;&amp;gt;ქართული&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ko &amp;lt;bdi class=&amp;quot;language lang-ko&amp;quot; lang=&amp;quot;ko&amp;quot;&amp;gt;한국어&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ky &amp;lt;bdi class=&amp;quot;language lang-ky&amp;quot; lang=&amp;quot;ky&amp;quot;&amp;gt;кыргызча&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/lb &amp;lt;bdi class=&amp;quot;language lang-lb&amp;quot; lang=&amp;quot;lb&amp;quot;&amp;gt;Lëtzebuergesch&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/mk &amp;lt;bdi class=&amp;quot;language lang-mk&amp;quot; lang=&amp;quot;mk&amp;quot;&amp;gt;македонски&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ml &amp;lt;bdi class=&amp;quot;language lang-ml&amp;quot; lang=&amp;quot;ml&amp;quot;&amp;gt;മലയാളം&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/mnw &amp;lt;bdi class=&amp;quot;language lang-mnw&amp;quot; lang=&amp;quot;mnw&amp;quot;&amp;gt;ဘာသာမန်&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ms &amp;lt;bdi class=&amp;quot;language lang-ms&amp;quot; lang=&amp;quot;ms&amp;quot;&amp;gt;Bahasa Melayu&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/mwl &amp;lt;bdi class=&amp;quot;language lang-mwl&amp;quot; lang=&amp;quot;mwl&amp;quot;&amp;gt;Mirandés&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/my &amp;lt;bdi class=&amp;quot;language lang-my&amp;quot; lang=&amp;quot;my&amp;quot;&amp;gt;မြန်မာဘာသာ&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/nb &amp;lt;bdi class=&amp;quot;language lang-nb&amp;quot; lang=&amp;quot;nb&amp;quot;&amp;gt;norsk bokmål&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/nds &amp;lt;bdi class=&amp;quot;language lang-nds&amp;quot; lang=&amp;quot;nds&amp;quot;&amp;gt;Plattdüütsch&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/nl &amp;lt;bdi class=&amp;quot;language lang-nl&amp;quot; lang=&amp;quot;nl&amp;quot;&amp;gt;Nederlands&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/no &amp;lt;bdi class=&amp;quot;language lang-no&amp;quot; lang=&amp;quot;no&amp;quot;&amp;gt;norsk&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/pl &amp;lt;bdi class=&amp;quot;language lang-pl&amp;quot; lang=&amp;quot;pl&amp;quot;&amp;gt;polski&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/pt &amp;lt;bdi class=&amp;quot;language lang-pt&amp;quot; lang=&amp;quot;pt&amp;quot;&amp;gt;português&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/pt-br &amp;lt;bdi class=&amp;quot;language lang-pt-br&amp;quot; lang=&amp;quot;pt-br&amp;quot;&amp;gt;português do Brasil&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ru &amp;lt;bdi class=&amp;quot;language lang-ru&amp;quot; lang=&amp;quot;ru&amp;quot;&amp;gt;русский&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/scn &amp;lt;bdi class=&amp;quot;language lang-scn&amp;quot; lang=&amp;quot;scn&amp;quot;&amp;gt;sicilianu&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/sco &amp;lt;bdi class=&amp;quot;language lang-sco&amp;quot; lang=&amp;quot;sco&amp;quot;&amp;gt;Scots&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/sl &amp;lt;bdi class=&amp;quot;language lang-sl&amp;quot; lang=&amp;quot;sl&amp;quot;&amp;gt;slovenščina&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/sr &amp;lt;bdi class=&amp;quot;language lang-sr&amp;quot; lang=&amp;quot;sr&amp;quot;&amp;gt;српски / srpski&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/sv &amp;lt;bdi class=&amp;quot;language lang-sv&amp;quot; lang=&amp;quot;sv&amp;quot;&amp;gt;svenska&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/th &amp;lt;bdi class=&amp;quot;language lang-th&amp;quot; lang=&amp;quot;th&amp;quot;&amp;gt;ไทย&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/tr &amp;lt;bdi class=&amp;quot;language lang-tr&amp;quot; lang=&amp;quot;tr&amp;quot;&amp;gt;Türkçe&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/uk &amp;lt;bdi class=&amp;quot;language lang-uk&amp;quot; lang=&amp;quot;uk&amp;quot;&amp;gt;українська&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/ur &amp;lt;bdi class=&amp;quot;language lang-ur&amp;quot; lang=&amp;quot;ur&amp;quot;&amp;gt;اردو&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/uz &amp;lt;bdi class=&amp;quot;language lang-uz&amp;quot; lang=&amp;quot;uz&amp;quot;&amp;gt;oʻzbekcha / ўзбекча&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/vi &amp;lt;bdi class=&amp;quot;language lang-vi&amp;quot; lang=&amp;quot;vi&amp;quot;&amp;gt;Tiếng Việt&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/zh &amp;lt;bdi class=&amp;quot;language lang-zh&amp;quot; lang=&amp;quot;zh&amp;quot;&amp;gt;中文&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/zh-hans &amp;lt;bdi class=&amp;quot;language lang-zh-hans&amp;quot; lang=&amp;quot;zh-hans&amp;quot;&amp;gt;中文（简体）&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[//commons.wikimedia.org/wiki/Template:Documentation_subpage/zh-hant &amp;lt;bdi class=&amp;quot;language lang-zh-hant&amp;quot; lang=&amp;quot;zh-hant&amp;quot;&amp;gt;中文（繁體）&amp;lt;/bdi&amp;gt;]&amp;amp;nbsp;&amp;lt;b&amp;gt;∙&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{edit|Template:Documentation subpage/lang}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Language link templates|Documentation subpage]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Documentation_subpage/en&amp;diff=590</id>
		<title>Modèle:Documentation subpage/en</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Documentation_subpage/en&amp;diff=590"/>
		<updated>2025-08-26T15:53:49Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage/layout&lt;br /&gt;
|text=This subpage contains [[Commons:Template documentation|documentation]], [[Commons:Categories|categories]], or other content that is not part of the {{lc:{{SUBJECTSPACE}}}}.&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size:0.9em&amp;quot;&amp;gt;To view the {{lc:{{SUBJECTSPACE}}}} page itself, see [[{{#if:{{{page|}}}|{{{page|}}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}]].&amp;lt;/span&amp;gt;&lt;br /&gt;
|lang=en&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{translated tag|documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Edit&amp;diff=588</id>
		<title>Modèle:Edit</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Edit&amp;diff=588"/>
		<updated>2025-08-26T15:53:48Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;small class=&amp;quot;plainlinks&amp;quot;&amp;gt;[{{fullurl:{{{1|{{FULLPAGENAME}}}}}|action=edit{{#if:{{{preload|}}}|&amp;amp;preload={{urlencode:{{{preload}}}}}}}{{#if:{{{editintro|}}}|&amp;amp;editintro={{urlencode:{{{editintro}}}}}}}}} +/−]&amp;lt;/small&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{heavily used template}}&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Message_box/mbox.css&amp;diff=586</id>
		<title>Module:Message box/mbox.css</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Message_box/mbox.css&amp;diff=586"/>
		<updated>2025-08-26T15:53:47Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.messagebox {&lt;br /&gt;
	margin: 4px 0;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	border-collapse: collapse;&lt;br /&gt;
	border: 2px solid var(--border-color-progressive,#6485d1);&lt;br /&gt;
	background-color: var(--background-color-neutral-subtle,#fbfcff);&lt;br /&gt;
	color: var(--color-base,#202122);&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox.mbox-small {&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-warning, .mbox-speedy {&lt;br /&gt;
	border: 2px solid var(--border-color-error,#b22222);&lt;br /&gt;
	background: var(--background-color-error-subtle,#ffdbdb);&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-serious, .mbox-delete, .mbox-stop {&lt;br /&gt;
	border: 2px solid var(--border-color-error,#b22222);&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-issue, .mbox-content {&lt;br /&gt;
	border: 2px solid #f28500;&lt;br /&gt;
	background:var(--background-color-warning-subtle,#ffe);&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-query, .mbox-style {&lt;br /&gt;
	border: 2px solid #f4c430;&lt;br /&gt;
	background: var(--background-color-warning-subtle,#ffe);&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-shit {&lt;br /&gt;
	border: 2px solid #960;&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-license {&lt;br /&gt;
	border: 2px solid #88a;&lt;br /&gt;
	border-inline-start-width: initial;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-legal {&lt;br /&gt;
	border: 2px solid var(--border-color-notice,#666);&lt;br /&gt;
	background: var(--background-color-base,#fff);&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-honor {&lt;br /&gt;
	border: 2px solid #ca3;&lt;br /&gt;
	background: var(--background-color-warning-subtle,#fcf4db);&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-growth {&lt;br /&gt;
	border: 2px solid #8d4;&lt;br /&gt;
	background:var(--background-color-success-subtle,#d5fdf4);&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-move {&lt;br /&gt;
	border: 2px solid #93c;&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mbox-protection, .mbox-message {&lt;br /&gt;
	border: 2px solid var(--border-color-base,#aaa);&lt;br /&gt;
	border-inline-start-width: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox .mbox-text {&lt;br /&gt;
	border: none;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	padding: 0.25em 0.9em;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox .mbox-image {&lt;br /&gt;
	border: none;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	padding: 2px 0 2px 0.9em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox .mbox-imageright {&lt;br /&gt;
	border: none;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	padding: 2px 0.9em 2px 0;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* An empty narrow cell */&lt;br /&gt;
.messagebox .mbox-empty-cell {           &lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	width: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.messagebox .mbox-invalid-type {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 720px) {&lt;br /&gt;
	.messagebox {&lt;br /&gt;
		margin: 4px 10%;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	.messagebox.mbox-small {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin: 4px 0 4px 1em;&lt;br /&gt;
		width: 238px;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** T367463 */&lt;br /&gt;
body.skin--responsive table.messagebox img {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Collapse_top/styles.css&amp;diff=584</id>
		<title>Modèle:Collapse top/styles.css</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Collapse_top/styles.css&amp;diff=584"/>
		<updated>2025-08-26T15:53:47Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.cot-header-mainspace {&lt;br /&gt;
	background:#F0F2F5;&lt;br /&gt;
	color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.cot-header-other {&lt;br /&gt;
	background:#CCFFCC;&lt;br /&gt;
	color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .cot-header-mainspace {&lt;br /&gt;
		background:#14181F;&lt;br /&gt;
		color:inherit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	html.skin-theme-clientpref-night .cot-header-other {&lt;br /&gt;
		background:#003500;&lt;br /&gt;
		color:inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .cot-header-mainspace {&lt;br /&gt;
		background:#14181F;&lt;br /&gt;
		color:inherit;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	html.skin-theme-clientpref-os .cot-header-other {&lt;br /&gt;
		background:#003500;&lt;br /&gt;
		color:inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:See_also/styles.css&amp;diff=582</id>
		<title>Modèle:See also/styles.css</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:See_also/styles.css&amp;diff=582"/>
		<updated>2025-08-26T15:53:47Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Template:See also */&lt;br /&gt;
.see-also {&lt;br /&gt;
	background: var(--background-color-interactive-subtle,#f8f9fa);&lt;br /&gt;
	margin: 1em 0;&lt;br /&gt;
	border: 1px solid var(--border-color-subtle,#c8ccd1);&lt;br /&gt;
	padding: 2px;&lt;br /&gt;
	color: var(--color-base, #202122);&lt;br /&gt;
	clear: left;&lt;br /&gt;
	overflow: hidden; /* force new block formatting context, so we can fit next to infoboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* {{Protected}} */&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Colon&amp;diff=580</id>
		<title>Module:Colon</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Colon&amp;diff=580"/>
		<updated>2025-08-26T15:53:47Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local langSwitch = require(&#039;Module:LangSwitch&#039;)._langSwitch&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._colon(args)&lt;br /&gt;
	local lang = args.lang or mw.getCurrentFrame():preprocess(&amp;quot;{{Int:Lang}}&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- Please keep the ASCII colon returned as HTML-encoded everywhere, as it MUST NOT be parsed as wiki markup&lt;br /&gt;
	local colons = {&lt;br /&gt;
		-- Colon with no space before and space after&lt;br /&gt;
		-- &amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
		[&#039;ger&#039;] = &#039;&amp;amp;#x3A;&amp;amp;#32;&#039;,&lt;br /&gt;
		&lt;br /&gt;
		-- Colon with narrow space before and space after&lt;br /&gt;
		-- &amp;quot; : &amp;quot;&lt;br /&gt;
		[&#039;fr&#039;] = &#039;&amp;amp;#x202F;&amp;amp;#x3A;&amp;amp;#32;&#039;,&lt;br /&gt;
		&lt;br /&gt;
		--[=[ Colon with non-breaking space before and space after, avoiding confusion with:&lt;br /&gt;
			several Arabic diacritics,&lt;br /&gt;
			U+0589 Armenian punctuation Full stop,&lt;br /&gt;
			U+05C3 Hebrew punctuation sign Sof Pasuk,&lt;br /&gt;
			U+0983 Bengali combining sign Visarga,&lt;br /&gt;
			U+0903 Devanagari combining sign Visarga,&lt;br /&gt;
			U+0A03 Gurmukhi combining sign Visarga,&lt;br /&gt;
			U+0A83 Gujarati combining sign Visarga,&lt;br /&gt;
			U+0B03 Oryia combining sign Visarga,&lt;br /&gt;
			U+0B83 Tamil combining sign Visarga,&lt;br /&gt;
			Telugu combining sign Visarga,&lt;br /&gt;
			Kannada combining sign Visarga,&lt;br /&gt;
			U+0D03 Malayalam combining sign Visarga,&lt;br /&gt;
			U+0D83 Sinhalese combining sign Visarga,&lt;br /&gt;
			U+0F7F Tibetan combining sign Rnam Bcad (Nam Che),&lt;br /&gt;
			U+17C7 / U+17C8 Khmer combining signs Reahmuk / Yukaleakpintu,&lt;br /&gt;
			U+2D53 Tifinagh letter Yu (Touareg Yaw)&lt;br /&gt;
		]=]&lt;br /&gt;
		-- &amp;quot; : &amp;quot;&lt;br /&gt;
		[&#039;sp&#039;] = &#039;&amp;amp;nbsp;&amp;amp;#x3A;&amp;amp;#32;&#039;,&lt;br /&gt;
		&lt;br /&gt;
		--[=[ Myanmar:&lt;br /&gt;
			do not use the ASCII colon&lt;br /&gt;
			(too confusable with a Myanmar letter in many fonts, notably at small sizes);&lt;br /&gt;
			use an en-dash instead&lt;br /&gt;
		]=]&lt;br /&gt;
		-- &amp;quot; – &amp;quot;&lt;br /&gt;
		[&#039;my&#039;] = &#039;&amp;amp;#x202F;&amp;amp;#x2013;&amp;amp;#32;&#039;,&lt;br /&gt;
		&lt;br /&gt;
		-- No spacing&lt;br /&gt;
		-- &amp;quot;:&amp;quot;&lt;br /&gt;
		[&#039;no&#039;] = &#039;&amp;amp;#x3A;&#039;,&lt;br /&gt;
		&lt;br /&gt;
		-- Ethiopic punctuation sign colon&lt;br /&gt;
		-- &amp;quot;፥ &amp;quot;&lt;br /&gt;
		[&#039;eth&#039;] = &#039;&amp;amp;#x1365;&amp;amp;#32;&#039;,&lt;br /&gt;
		&lt;br /&gt;
		-- Mongolian/Mandchu punctuation sign colon&lt;br /&gt;
		-- &amp;quot;᠄&amp;quot;&lt;br /&gt;
		[&#039;mong&#039;] = &#039;&amp;amp;#x1804;&#039;,&lt;br /&gt;
		&lt;br /&gt;
		--[=[ CJK punctuation fullwidth colon&lt;br /&gt;
			(rotated if vertical layout)&lt;br /&gt;
			for Indo-Sinitic scripts used along with Chinese&lt;br /&gt;
		]=]&lt;br /&gt;
		-- &amp;quot;：&amp;quot;&lt;br /&gt;
		[&#039;cjk&#039;] = &#039;&amp;amp;#xFF1A;&#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local text_args = {&lt;br /&gt;
		[&#039;default&#039;] =				colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;af&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;am&#039;] =					colons[&#039;eth&#039;],&lt;br /&gt;
		[&#039;ar&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Arab&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Armn&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;arz&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;bar&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;be-tarask&#039;] =				colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;be&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;Beng&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;ber&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;bg&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;bn&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;bo&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Bpmf&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;br&#039;] =					colons[&#039;fr&#039;],&lt;br /&gt;
		[&#039;bs&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;ca&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;co&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;cs&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;Cyrl&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;de&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;Deva&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;el&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;eml&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;en&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;es&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;Ethi&#039;] =					colons[&#039;eth&#039;],&lt;br /&gt;
		[&#039;ext&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;fa&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;fr-be&#039;] =					colons[&#039;fr&#039;],&lt;br /&gt;
		[&#039;fr-ca&#039;] =					colons[&#039;fr&#039;],&lt;br /&gt;
		[&#039;fr-ch&#039;] =					colons[&#039;fr&#039;],&lt;br /&gt;
		[&#039;fr-lb&#039;] =					colons[&#039;fr&#039;],&lt;br /&gt;
		[&#039;fr&#039;] =					colons[&#039;fr&#039;],&lt;br /&gt;
		[&#039;gl&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;glk&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Grek&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;gsw&#039;] =					colons[&#039;gsw&#039;],&lt;br /&gt;
		[&#039;gu&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Gujr&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Guru&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Hang&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;Hani&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;Hans&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;Hant&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;he&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Hebr&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;hi&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;hr&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;hu&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;hy&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;ii&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;it&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;ja&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;Jpan&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;Khmr&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;km&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;kn&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Knda&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;ko-kp&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;ko&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;la&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;lb&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;li&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;lzh&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;mk&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;ml&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Mlym&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;mn-Mong&#039;] =				colons[&#039;mong&#039;],&lt;br /&gt;
		[&#039;Mong&#039;] =					colons[&#039;mong&#039;],&lt;br /&gt;
		[&#039;my&#039;] =					colons[&#039;my&#039;],&lt;br /&gt;
		[&#039;Mymr&#039;] =					colons[&#039;my&#039;],&lt;br /&gt;
		[&#039;nap&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;nds-nl&#039;] =				colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;nds&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;ne&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;nl&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;oc&#039;] =					colons[&#039;fr&#039;],&lt;br /&gt;
		[&#039;or&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Orya&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;pa&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Phpa&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;pnt&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;prd&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;ps&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;pt-br&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;pt&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;rgn&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;rm&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;ro&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;ru&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;scn&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;shy&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;si&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Sinh&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;sk&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;sl&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;sr-ec&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;sr-el&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;sr-Latn&#039;] =				colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;sr&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;ta&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Tale&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;Talu&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;Taml&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;te&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Telu&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Tfng&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;th&#039;] =					colons[&#039;no&#039;],&lt;br /&gt;
		[&#039;Thai&#039;] =					colons[&#039;no&#039;],&lt;br /&gt;
		[&#039;ti&#039;] =					colons[&#039;eth&#039;],&lt;br /&gt;
		[&#039;Tibt&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;tzm&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;ug&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;ur&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;vec&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;vls&#039;] =					colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;wa&#039;] =					colons[&#039;fr&#039;],&lt;br /&gt;
		[&#039;wuu&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;ydd&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;yi&#039;] =					colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Yiii&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;yue&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;zh-Hans&#039;] =				colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;zh-Hant&#039;] =				colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;zh&#039;] =					colons[&#039;cjk&#039;],&lt;br /&gt;
		[&#039;Zinh-nbsp-Po-space&#039;] =	colons[&#039;sp&#039;],&lt;br /&gt;
		[&#039;Zinh-nnbsp-Po-space&#039;] =	colons[&#039;fr&#039;],&lt;br /&gt;
		[&#039;Zinh-Po-space&#039;] =			colons[&#039;ger&#039;],&lt;br /&gt;
		[&#039;Zinh-Po&#039;] =				colons[&#039;no&#039;]&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return langSwitch(text_args, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.colon(frame)&lt;br /&gt;
	return p._colon(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Creator/styles.css&amp;diff=578</id>
		<title>Module:Creator/styles.css</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Creator/styles.css&amp;diff=578"/>
		<updated>2025-08-26T15:53:47Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.commons-creator-table {&lt;br /&gt;
	background-color: #f0f0ff;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	font-size: 95%;&lt;br /&gt;
	text-align: start;&lt;br /&gt;
	color: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.commons-creator-table &amp;gt; tbody &amp;gt; tr {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.commons-creator-table &amp;gt; tbody &amp;gt; tr &amp;gt; th {&lt;br /&gt;
    background-color: var(--background-color-neutral,#e0e0ee);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-align: start;&lt;br /&gt;
    color: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Add arrows to toggle-blocks for collapsible elements */&lt;br /&gt;
.mw-collapsible-toggle-expanded.mw-collapsible-arrowtoggle,&lt;br /&gt;
.mw-collapsible-toggle-expanded .mw-collapsible-arrowtoggle {&lt;br /&gt;
 padding-left: 20px !important;&lt;br /&gt;
 background-image: url(&#039;https://upload.wikimedia.org/wikipedia/commons/1/10/MediaWiki_Vector_skin_action_arrow.png&#039;);&lt;br /&gt;
 background-repeat: no-repeat;&lt;br /&gt;
 background-position: left center;&lt;br /&gt;
}&lt;br /&gt;
.mw-collapsible-toggle-collapsed.mw-collapsible-arrowtoggle,&lt;br /&gt;
.mw-collapsible-toggle-collapsed .mw-collapsible-arrowtoggle {&lt;br /&gt;
 padding-left: 20px !important;&lt;br /&gt;
 background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
.commons-creator-table[dir=&amp;quot;ltr&amp;quot;] .mw-collapsible-toggle-collapsed.mw-collapsible-arrowtoggle,&lt;br /&gt;
.commons-creator-table[dir=&amp;quot;ltr&amp;quot;] .mw-collapsible-toggle-collapsed .mw-collapsible-arrowtoggle {&lt;br /&gt;
 background-image: url(&#039;https://upload.wikimedia.org/wikipedia/commons/4/41/MediaWiki_Vector_skin_right_arrow.png&#039;);&lt;br /&gt;
 /* @noflip */&lt;br /&gt;
 background-position: left center;&lt;br /&gt;
}&lt;br /&gt;
.commons-creator-table[dir=&amp;quot;rtl&amp;quot;] .mw-collapsible-toggle-collapsed.mw-collapsible-arrowtoggle,&lt;br /&gt;
.commons-creator-table[dir=&amp;quot;rtl&amp;quot;] .mw-collapsible-toggle-collapsed .mw-collapsible-arrowtoggle {&lt;br /&gt;
 background-image: url(&#039;https://upload.wikimedia.org/wikipedia/commons/1/1e/MediaWiki_Vector_skin_left_arrow.png&#039;);&lt;br /&gt;
 /* @noflip */&lt;br /&gt;
 background-position: right center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 719px) {&lt;br /&gt;
	.commons-creator-table,&lt;br /&gt;
	.commons-creator-table &amp;gt; tbody {&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	.commons-creator-table &amp;gt; tbody {&lt;br /&gt;
		border-right: 1px solid var(--border-color-base,#aaa);&lt;br /&gt;
		border-bottom: 1px solid var(--border-color-base,#aaa);&lt;br /&gt;
	}&lt;br /&gt;
	.commons-creator-table &amp;gt; tbody &amp;gt; tr {&lt;br /&gt;
		border-top: 1px solid var(--border-color-base,#aaa);&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.commons-creator-table &amp;gt; tbody &amp;gt; tr &amp;gt; th {&lt;br /&gt;
		border-left: 1px solid var(--border-color-base,#aaa);&lt;br /&gt;
		padding: 2px;&lt;br /&gt;
		flex: 1 1 100%;&lt;br /&gt;
	}&lt;br /&gt;
	.commons-creator-table &amp;gt; tbody &amp;gt; tr &amp;gt; td {&lt;br /&gt;
		border-left: 1px solid var(--border-color-base,#aaa);&lt;br /&gt;
		padding: 2px;&lt;br /&gt;
		flex: 1 1;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 720px) {&lt;br /&gt;
	.commons-creator-table {&lt;br /&gt;
		border: 1px solid var(--border-color-base,#aaa);&lt;br /&gt;
		border-collapse: collapse;&lt;br /&gt;
		border-spacing: 0;&lt;br /&gt;
		padding: 5px;&lt;br /&gt;
	}&lt;br /&gt;
    .commons-creator-table &amp;gt; tbody &amp;gt; tr &amp;gt; th,&lt;br /&gt;
    .commons-creator-table &amp;gt; tbody &amp;gt; tr &amp;gt; td {&lt;br /&gt;
    	border: 1px solid var(--border-color-base,#aaa);&lt;br /&gt;
    	padding: 2px;&lt;br /&gt;
    }&lt;br /&gt;
	.commons-creator-table &amp;gt; tbody &amp;gt; tr &amp;gt; .halfwidth {&lt;br /&gt;
		max-width: 10em;&lt;br /&gt;
	}&lt;br /&gt;
	.commons-creator-table &amp;gt; tbody &amp;gt; tr &amp;gt; .fullwidth {&lt;br /&gt;
		max-width: 20em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .commons-creator-table {&lt;br /&gt;
		background-color: #0c0b19;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .commons-creator-table {&lt;br /&gt;
		background-color: #0c0b19;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Information/styles.css&amp;diff=576</id>
		<title>Module:Information/styles.css</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Information/styles.css&amp;diff=576"/>
		<updated>2025-08-26T15:53:47Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * IMPORTANT:&lt;br /&gt;
 *&lt;br /&gt;
 * These styles are copied to [[MediaWiki:Filepage.css]].&lt;br /&gt;
 * If you make any changes here, make sure to update that page as well.&lt;br /&gt;
 *&lt;br /&gt;
 * When previewing changes, you must use a file outside the File namespace.&lt;br /&gt;
 *&lt;br /&gt;
 * See [[Module talk:Information/styles.css]] for details.&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Generally we have div.commons-file-information-table &amp;gt; table.fileinfotpl-type-information&lt;br /&gt;
 * But additional cells have table.commons-file-information-table&lt;br /&gt;
 * We currently only deal with tbody, as there are no known usages of thead/tfoot&lt;br /&gt;
 * This is hyper specific to avoid &lt;br /&gt;
 */&lt;br /&gt;
table.commons-file-information-table,&lt;br /&gt;
.fileinfotpl-type-information,&lt;br /&gt;
.fileinfotpl-type-artwork {&lt;br /&gt;
	/* toccolours */&lt;br /&gt;
	border: 1px solid var(--border-color-base,#a2a9b1);&lt;br /&gt;
	background-color: var(--background-color-interactive-subtle,#f8f9fa);&lt;br /&gt;
	padding: 5px;&lt;br /&gt;
	font-size: 95%;&lt;br /&gt;
	/* end of toccolours */&lt;br /&gt;
	border-spacing: 2px;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	color: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.commons-file-information-table &amp;gt; tbody &amp;gt; tr,&lt;br /&gt;
.fileinfotpl-type-information &amp;gt; tbody &amp;gt; tr,&lt;br /&gt;
.fileinfotpl-type-artwork &amp;gt; tbody &amp;gt; tr {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.commons-file-information-table &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.commons-file-information-table &amp;gt; tbody &amp;gt; tr &amp;gt; th, &lt;br /&gt;
.fileinfotpl-type-information &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
.fileinfotpl-type-information &amp;gt; tbody &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.fileinfotpl-type-artwork &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
.fileinfotpl-type-artwork &amp;gt; tbody &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* This should be removed from MediaWiki:Filepage.css and MediaWiki:Common.css */&lt;br /&gt;
.fileinfo-paramfield {&lt;br /&gt;
	background: #ccf;&lt;br /&gt;
	text-align: right;&lt;br /&gt;
	padding-right: 0.4em;&lt;br /&gt;
	width: 15%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	color: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* stack with additional adjacent templates */&lt;br /&gt;
.commons-file-information-table + table.commons-file-information-table,&lt;br /&gt;
.commons-file-information-table + div.commons-file-information-table &amp;gt; table {&lt;br /&gt;
	border-top: 0;&lt;br /&gt;
	padding-top: 0;&lt;br /&gt;
	margin-top: -8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Layout on mobile devices */&lt;br /&gt;
@media only screen and (max-width:719px) {&lt;br /&gt;
	table.commons-file-information-table,&lt;br /&gt;
	.commons-file-information-table .fileinfotpl-type-information,&lt;br /&gt;
	.commons-file-information-table .fileinfotpl-type-artwork {&lt;br /&gt;
		border-spacing: 0;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		word-break: break-word;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.commons-file-information-table &amp;gt; tbody,&lt;br /&gt;
	.fileinfotpl-type-information &amp;gt; tbody,&lt;br /&gt;
	.fileinfotpl-type-artwork &amp;gt; tbody {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.commons-file-information-table &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
	.commons-file-information-table &amp;gt; tbody &amp;gt; tr &amp;gt; th,&lt;br /&gt;
	.fileinfotpl-type-information &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
	.fileinfotpl-type-information &amp;gt; tbody &amp;gt; tr &amp;gt; th,&lt;br /&gt;
	.fileinfotpl-type-artwork &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
	.fileinfotpl-type-artwork &amp;gt; tbody &amp;gt; tr &amp;gt; th {&lt;br /&gt;
		padding: 0.2em 0.4em;&lt;br /&gt;
		text-align: left;&lt;br /&gt;
		text-align: start;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.commons-file-information-table &amp;gt; tbody &amp;gt; tr,&lt;br /&gt;
	.fileinfotpl-type-information &amp;gt; tbody &amp;gt; tr,&lt;br /&gt;
	.fileinfotpl-type-artwork &amp;gt; tbody &amp;gt; tr {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* stack with additional adjacent templates */&lt;br /&gt;
	.commons-file-information-table + table.commons-file-information-table,&lt;br /&gt;
	.commons-file-information-table + div.commons-file-information-table &amp;gt; table {&lt;br /&gt;
		margin-top: -1px;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	table .fileinfo-paramfield {&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		flex: 1 0 100%;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.commons-file-information-table, .fileinfotpl-type-information, .fileinfotpl-type-artwork,&lt;br /&gt;
.fileinfo-paramfield {&lt;br /&gt;
	color: var(--color-base,#202122);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/********* General fixes for night mode *********/&lt;br /&gt;
html.skin-theme-clientpref-night .fileinfo-paramfield {&lt;br /&gt;
	background: #2a2a5c;&lt;br /&gt;
	color: white;&lt;br /&gt;
}&lt;br /&gt;
html.skin-theme-clientpref-night .fileinfotpl-type-artwork tbody &amp;gt; tr &amp;gt; th[style*=&amp;quot;#ccf&amp;quot;] {&lt;br /&gt;
	background-color: #2a2a5c !important;;	&lt;br /&gt;
	color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .fileinfo-paramfield {&lt;br /&gt;
		background: #2a2a5c;&lt;br /&gt;
		color: white;&lt;br /&gt;
	}&lt;br /&gt;
	html.skin-theme-clientpref-os .fileinfotpl-type-artwork tbody &amp;gt; tr &amp;gt; th[style*=&amp;quot;#ccf&amp;quot;] {&lt;br /&gt;
		background-color: #2a2a5c !important;;	&lt;br /&gt;
		color: white;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Suppress_categories&amp;diff=574</id>
		<title>Module:Suppress categories</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Suppress_categories&amp;diff=574"/>
		<updated>2025-08-26T15:53:47Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This is a simple module to strip categories from wikitext. It does&lt;br /&gt;
-- not support nested links or magic words like __TOC__, etc. Even so,&lt;br /&gt;
-- it should still handle most categories.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Detects if a category link is valid or not. If it is valid,&lt;br /&gt;
-- the function returns the blank string. If not, the input&lt;br /&gt;
-- is returned with no changes.&lt;br /&gt;
local function processCategory( all, submatch )&lt;br /&gt;
    local beforePipe = mw.ustring.match( submatch, &#039;^(.-)[%s_]*|[%s_]*.-$&#039; )&lt;br /&gt;
    beforePipe = beforePipe or submatch&lt;br /&gt;
    if mw.ustring.match( beforePipe, &#039;[%[%]&amp;lt;&amp;gt;{}%c\n]&#039; ) then&lt;br /&gt;
        return all&lt;br /&gt;
    else&lt;br /&gt;
        return &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Preprocess the content if we aren&#039;t being called from #invoke,&lt;br /&gt;
-- and pass it to gsub to remove valid category links.&lt;br /&gt;
local function suppress( content, isPreprocessed )&lt;br /&gt;
    if not isPreprocessed then&lt;br /&gt;
        content = mw.getCurrentFrame():preprocess( content )&lt;br /&gt;
    end&lt;br /&gt;
    content = mw.ustring.gsub(&lt;br /&gt;
        content,&lt;br /&gt;
        &#039;(%[%[[%s_]*[cC][aA][tT][eE][gG][oO][rR][yY][%s_]*:[%s_]*(.-)[%s_]*%]%])&#039;,&lt;br /&gt;
        processCategory&lt;br /&gt;
    )&lt;br /&gt;
    return content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the content to suppress categories from, and find&lt;br /&gt;
-- whether the content has already been preprocessed. (If the&lt;br /&gt;
-- module is called from #invoke, it has been preprocessed already.)&lt;br /&gt;
function p.main( frame )&lt;br /&gt;
    local content, isPreprocessed&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        content = frame:getParent().args[1]&lt;br /&gt;
        if frame.args[1] then&lt;br /&gt;
            content = frame.args[1]&lt;br /&gt;
        end&lt;br /&gt;
        isPreprocessed = true&lt;br /&gt;
    else&lt;br /&gt;
        content = frame&lt;br /&gt;
        isPreprocessed = false&lt;br /&gt;
    end&lt;br /&gt;
    return suppress( content, isPreprocessed )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Suppress_categories&amp;diff=572</id>
		<title>Modèle:Suppress categories</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Suppress_categories&amp;diff=572"/>
		<updated>2025-08-26T15:53:46Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{{{{|safesubst:}}}#invoke:Suppress categories|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:T1&amp;diff=570</id>
		<title>Modèle:T1</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:T1&amp;diff=570"/>
		<updated>2025-08-26T15:53:46Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{T/main|{{{1|}}}&lt;br /&gt;
|{{{2|}}}&lt;br /&gt;
|{{{3|{{{lang|}}}}}}&lt;br /&gt;
|{{{4|}}}&lt;br /&gt;
|{{{5|}}}&lt;br /&gt;
|incl={{{incl|{{{i|1}}}}}}&lt;br /&gt;
|code={{{code|}}}&lt;br /&gt;
|link={{{link|}}}&lt;br /&gt;
|case={{{case|}}}&lt;br /&gt;
|i18n={{{i18n|}}}&lt;br /&gt;
|parm={{{parm|}}}&lt;br /&gt;
|full={{{full|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation|Template:T/doc}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Uses_TemplateStyles/config&amp;diff=568</id>
		<title>Module:Uses TemplateStyles/config</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Uses_TemplateStyles/config&amp;diff=568"/>
		<updated>2025-08-26T15:53:46Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local cfg = {} -- Don’t touch this line.&lt;br /&gt;
&lt;br /&gt;
-- Subpage blacklist: these subpages will not be categorized (except for the&lt;br /&gt;
-- error category, which is always added if there is an error).&lt;br /&gt;
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have&lt;br /&gt;
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,&lt;br /&gt;
-- so they *will* have categories. All rules should be in the&lt;br /&gt;
--   [&#039;&amp;lt;subpage name&amp;gt;&#039;] = true,&lt;br /&gt;
-- format.&lt;br /&gt;
cfg[&#039;subpage_blacklist&#039;] = {&lt;br /&gt;
	[&#039;doc&#039;] = true,&lt;br /&gt;
	[&#039;sandbox&#039;] = true,&lt;br /&gt;
	[&#039;sandbox2&#039;] = true,&lt;br /&gt;
	[&#039;testcases&#039;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Sandbox title: if the stylesheet’s title is &amp;lt;template&amp;gt;/&amp;lt;stylesheet&amp;gt;.css, the&lt;br /&gt;
-- stylesheet’s sandbox is expected to be at &amp;lt;template&amp;gt;/&amp;lt;sandbox_title&amp;gt;/&amp;lt;stylesheet&amp;gt;.css&lt;br /&gt;
-- Set to nil to disable sandbox links.&lt;br /&gt;
cfg[&#039;sandbox_title&#039;] = &#039;sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- Error category: this category is added if the module call contains errors&lt;br /&gt;
-- (e.g. no stylesheet listed). A category name without namespace, or nil&lt;br /&gt;
-- to disable categorization (not recommended).&lt;br /&gt;
cfg[&#039;error_category&#039;] = &#039;Uses TemplateStyles templates with errors&#039;&lt;br /&gt;
&lt;br /&gt;
-- Default category: this category is added if no custom category is specified&lt;br /&gt;
-- in module/template call. A category name without namespace, or nil&lt;br /&gt;
-- to disable categorization.&lt;br /&gt;
cfg[&#039;default_category&#039;] = &#039;Templates using TemplateStyles&#039;&lt;br /&gt;
&lt;br /&gt;
-- Protection conflict category: this category is added if the protection level&lt;br /&gt;
-- of any stylesheet differs from the one of the template. A category name&lt;br /&gt;
-- without namespace, or nil to disable categorization (not recommended).&lt;br /&gt;
cfg[&#039;protection_conflict_category&#039;] = &#039;Templates using TemplateStyles with a different protection level&#039;&lt;br /&gt;
&lt;br /&gt;
-- Padlock pattern: Lua pattern to search on protected stylesheets for, or nil&lt;br /&gt;
-- to disable padlock check.&lt;br /&gt;
cfg[&#039;padlock_pattern&#039;] = nil&lt;br /&gt;
&lt;br /&gt;
-- Missing padlock category: this category is added if a protected stylesheet&lt;br /&gt;
-- doesn’t contain any padlock template (specified by the above Lua pattern).&lt;br /&gt;
-- A category name without namespace (no nil allowed) if the pattern is not nil,&lt;br /&gt;
-- unused (and thus may be nil) otherwise.&lt;br /&gt;
cfg[&#039;missing_padlock_category&#039;] = &#039;Templates using TemplateStyles without padlocks&#039;&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don’t touch this line.&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Uses_TemplateStyles&amp;diff=566</id>
		<title>Module:Uses TemplateStyles</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Uses_TemplateStyles&amp;diff=566"/>
		<updated>2025-08-26T15:53:46Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements the {{Uses TemplateStyles}} template.&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
local mList = require(&#039;Module:List&#039;)&lt;br /&gt;
local mTableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
local mMessageBox = require(&#039;Module:Message box&#039;)&lt;br /&gt;
local TNT = require(&#039;Module:TNT&#039;)&lt;br /&gt;
local lang = mw.getCurrentFrame():preprocess(&#039;{{int:lang}}&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function format(msg, ...)&lt;br /&gt;
	return TNT.formatInLanguage(lang, &#039;I18n/Uses TemplateStyles&#039;, msg, ...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getConfig()&lt;br /&gt;
	return mw.loadData(&#039;Module:Uses TemplateStyles/config&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local origArgs = frame:getParent().args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		v = v:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if v ~= &#039;&#039; then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local tStyles = mTableTools.compressSparseArray(args)&lt;br /&gt;
	local box = p.renderBox(tStyles)&lt;br /&gt;
	local trackingCategories = p.renderTrackingCategories(args, tStyles)&lt;br /&gt;
	return box .. trackingCategories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderBox(tStyles)&lt;br /&gt;
	local boxArgs = {}&lt;br /&gt;
	if #tStyles &amp;lt; 1 then&lt;br /&gt;
		boxArgs.text = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, format(&#039;error-emptylist&#039;))&lt;br /&gt;
	else&lt;br /&gt;
		local cfg = getConfig()&lt;br /&gt;
		local tStylesLinks = {}&lt;br /&gt;
		for i, ts in ipairs(tStyles) do&lt;br /&gt;
			local link = string.format(&#039;[[:%s]]&#039;, ts)&lt;br /&gt;
			local sandboxLink = nil&lt;br /&gt;
			local tsTitle = mw.title.new(ts)&lt;br /&gt;
			if tsTitle and cfg[&#039;sandbox_title&#039;] then&lt;br /&gt;
				local tsSandboxTitle = mw.title.new(string.format(&lt;br /&gt;
					&#039;%s:%s/%s/%s&#039;, tsTitle.nsText, tsTitle.baseText, cfg[&#039;sandbox_title&#039;], tsTitle.subpageText))&lt;br /&gt;
				if tsSandboxTitle and tsSandboxTitle.exists then&lt;br /&gt;
					sandboxLink = format(&#039;sandboxlink&#039;, link, &#039;:&#039; .. tsSandboxTitle.prefixedText)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			tStylesLinks[i] = sandboxLink or link&lt;br /&gt;
		end&lt;br /&gt;
		local tStylesList = mList.makeList(&#039;bulleted&#039;, tStylesLinks)&lt;br /&gt;
		boxArgs.text = format(&lt;br /&gt;
			mw.title.getCurrentTitle():inNamespaces(828,829) and &#039;header-module&#039; or &#039;header-template&#039;) ..&lt;br /&gt;
			&#039;\n&#039; .. tStylesList&lt;br /&gt;
	end&lt;br /&gt;
	boxArgs.type = &#039;notice&#039;&lt;br /&gt;
	boxArgs.small = true&lt;br /&gt;
	boxArgs.image = string.format(&#039;[[File:Farm-Fresh css add.svg|32px|alt=%s]]&#039;, format(&#039;logo-alt&#039;))&lt;br /&gt;
	return mMessageBox.main(&#039;mbox&#039;, boxArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderTrackingCategories(args, tStyles, titleObj)&lt;br /&gt;
	if yesno(args.nocat) then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local cfg = getConfig()&lt;br /&gt;
	&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Error category&lt;br /&gt;
	if #tStyles &amp;lt; 1 and cfg[&#039;error_category&#039;] then&lt;br /&gt;
		cats[#cats + 1] = cfg[&#039;error_category&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- TemplateStyles category&lt;br /&gt;
	titleObj = titleObj or mw.title.getCurrentTitle()&lt;br /&gt;
	if (titleObj.namespace == 10 or titleObj.namespace == 828)&lt;br /&gt;
		and not cfg[&#039;subpage_blacklist&#039;][titleObj.subpageText]&lt;br /&gt;
	then&lt;br /&gt;
		local category = args.category or cfg[&#039;default_category&#039;]&lt;br /&gt;
		if category then&lt;br /&gt;
			cats[#cats + 1] = category&lt;br /&gt;
		end&lt;br /&gt;
		if not yesno(args.noprotcat) and (cfg[&#039;protection_conflict_category&#039;] or cfg[&#039;padlock_pattern&#039;]) then&lt;br /&gt;
			local currentProt = titleObj.protectionLevels[&amp;quot;edit&amp;quot;] and titleObj.protectionLevels[&amp;quot;edit&amp;quot;][1] or nil&lt;br /&gt;
			local addedLevelCat = false&lt;br /&gt;
			local addedPadlockCat = false&lt;br /&gt;
			for i, ts in ipairs(tStyles) do&lt;br /&gt;
				local tsTitleObj = mw.title.new(ts)&lt;br /&gt;
				local tsProt = tsTitleObj.protectionLevels[&amp;quot;edit&amp;quot;] and tsTitleObj.protectionLevels[&amp;quot;edit&amp;quot;][1] or nil&lt;br /&gt;
				if cfg[&#039;protection_conflict_category&#039;] and tsProt ~= currentProt and not addedLevelCat then&lt;br /&gt;
					cats[#cats + 1] = cfg[&#039;protection_conflict_category&#039;]&lt;br /&gt;
				end&lt;br /&gt;
				if cfg[&#039;padlock_pattern&#039;] and tsProt and not addedPadlockCat then&lt;br /&gt;
					local content = tsTitleObj:getContent()&lt;br /&gt;
					if not content:find(cfg[&#039;padlock_pattern&#039;]) then&lt;br /&gt;
						cats[#cats + 1] = cfg[&#039;missing_padlock_category&#039;]&lt;br /&gt;
						addedPadlockCat = true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, cat in ipairs(cats) do&lt;br /&gt;
		cats[i] = string.format(&#039;[[Category:%s]]&#039;, cat)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(cats)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Uses_TemplateStyles&amp;diff=564</id>
		<title>Modèle:Uses TemplateStyles</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Uses_TemplateStyles&amp;diff=564"/>
		<updated>2025-08-26T15:53:46Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Uses TemplateStyles|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Lua_banner/config&amp;diff=562</id>
		<title>Module:Lua banner/config</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Lua_banner/config&amp;diff=562"/>
		<updated>2025-08-26T15:53:46Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local cfg = {} -- Don’t touch this line.&lt;br /&gt;
&lt;br /&gt;
-- Subpage blacklist: these subpages will not be categorized (except for the&lt;br /&gt;
-- error category, which is always added if there is an error).&lt;br /&gt;
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have&lt;br /&gt;
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,&lt;br /&gt;
-- so they *will* have categories. All rules should be in the&lt;br /&gt;
--   [&#039;&amp;lt;subpage name&amp;gt;&#039;] = true,&lt;br /&gt;
-- format.&lt;br /&gt;
cfg[&#039;subpage_blacklist&#039;] = {&lt;br /&gt;
	[&#039;doc&#039;] = true,&lt;br /&gt;
	[&#039;sandbox&#039;] = true,&lt;br /&gt;
	[&#039;sandbox2&#039;] = true,&lt;br /&gt;
	[&#039;testcases&#039;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Allow wishes: whether wishes for conversion to Lua are allowed.&lt;br /&gt;
-- If true, calls with zero parameters are valid, and considered to be wishes:&lt;br /&gt;
-- The box’s text is “This template should use Lua”, and cfg[&#039;wish_category&#039;] is&lt;br /&gt;
-- added. If false, such calls are invalid, an error message appears, and&lt;br /&gt;
-- cfg[&#039;error_category&#039;] is added.&lt;br /&gt;
cfg[&#039;allow_wishes&#039;] = true&lt;br /&gt;
&lt;br /&gt;
-- Default category: this category is added if the module call contains errors&lt;br /&gt;
-- (e.g. no module listed). A category name without namespace, or nil&lt;br /&gt;
-- to disable categorization (not recommended).&lt;br /&gt;
cfg[&#039;error_category&#039;] = &#039;Lua templates with errors&#039;&lt;br /&gt;
&lt;br /&gt;
-- Wish category: this category is added if no module is listed, and wishes are&lt;br /&gt;
-- allowed. (Not used if wishes are not allowed.) A category name without&lt;br /&gt;
-- namespace, or nil to disable categorization.&lt;br /&gt;
cfg[&#039;wish_category&#039;] = &#039;Lua-candidates&#039;&lt;br /&gt;
&lt;br /&gt;
-- Default category: this category is added if none of the below module_categories&lt;br /&gt;
-- matches the first module listed. A category name without namespace, or nil&lt;br /&gt;
-- to disable categorization.&lt;br /&gt;
cfg[&#039;default_category&#039;] = &#039;Lua-based templates&#039;&lt;br /&gt;
&lt;br /&gt;
-- Module categories: one of these categories is added if the first listed module&lt;br /&gt;
-- is the listed module (e.g. {{Lua|Module:String}} adds&lt;br /&gt;
-- [[Category:Lua String-based templates]].) Format:&lt;br /&gt;
--   [&#039;&amp;lt;module name&amp;gt;&#039;] = &#039;&amp;lt;category name&amp;gt;&#039;&lt;br /&gt;
-- where neither &amp;lt;module name&amp;gt; nor &amp;lt;category name&amp;gt; contains namespace. An empty&lt;br /&gt;
-- table (i.e. no module-based categorization) will suffice on smaller wikis.&lt;br /&gt;
cfg[&#039;module_categories&#039;] = {&lt;br /&gt;
	[&#039;String&#039;] = &#039;Lua String-based templates&#039;,&lt;br /&gt;
	[&#039;Iteration&#039;] = &#039;Lua-based iteration templates&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don’t touch this line.&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Lua_banner&amp;diff=560</id>
		<title>Module:Lua banner</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Lua_banner&amp;diff=560"/>
		<updated>2025-08-26T15:53:46Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements the {{lua}} template.&lt;br /&gt;
&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
local mList = require(&#039;Module:List&#039;)&lt;br /&gt;
local mTableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
local mMessageBox = require(&#039;Module:Message box&#039;)&lt;br /&gt;
local TNT = require(&#039;Module:TNT&#039;)&lt;br /&gt;
local lang = mw.getCurrentFrame():preprocess(&#039;{{int:lang}}&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function format(msg)&lt;br /&gt;
	return TNT.formatInLanguage(lang, &#039;I18n/Lua banner&#039;, msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getConfig()&lt;br /&gt;
	return mw.loadData(&#039;Module:Lua banner/config&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local origArgs = frame:getParent().args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		v = v:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if v ~= &#039;&#039; then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, cfg)&lt;br /&gt;
	local modules = mTableTools.compressSparseArray(args)&lt;br /&gt;
	local box = p.renderBox(modules, cfg)&lt;br /&gt;
	local trackingCategories = p.renderTrackingCategories(args, modules, nil, cfg)&lt;br /&gt;
	return box .. trackingCategories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderBox(modules, cfg)&lt;br /&gt;
	local boxArgs = {}&lt;br /&gt;
	if #modules &amp;lt; 1 then&lt;br /&gt;
		cfg = cfg or getConfig()&lt;br /&gt;
		if cfg[&#039;allow_wishes&#039;] then&lt;br /&gt;
			boxArgs.text = format(&#039;wishtext&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			boxArgs.text = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, format(&#039;error_emptylist&#039;))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local moduleLinks = {}&lt;br /&gt;
		for i, module in ipairs(modules) do&lt;br /&gt;
			moduleLinks[i] = string.format(&#039;[[:%s]]&#039;, module)&lt;br /&gt;
		end&lt;br /&gt;
		local moduleList = mList.makeList(&#039;bulleted&#039;, moduleLinks)&lt;br /&gt;
		boxArgs.text = format(&#039;header&#039;) .. &#039;\n&#039; .. moduleList&lt;br /&gt;
	end&lt;br /&gt;
	boxArgs.type = &#039;notice&#039;&lt;br /&gt;
	boxArgs.small = true&lt;br /&gt;
	boxArgs.image = string.format(&lt;br /&gt;
		&#039;[[File:Lua-logo-nolabel.svg|30px|alt=%s|link=%s]]&#039;,&lt;br /&gt;
		format(&#039;logo_alt&#039;),&lt;br /&gt;
		format(&#039;logo_link&#039;)&lt;br /&gt;
	)&lt;br /&gt;
	return mMessageBox.main(&#039;mbox&#039;, boxArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderTrackingCategories(args, modules, titleObj, cfg)&lt;br /&gt;
	if yesno(args.nocat) then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	cfg = cfg or getConfig()&lt;br /&gt;
	&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Error category&lt;br /&gt;
	if #modules &amp;lt; 1 and not cfg[&#039;allow_wishes&#039;] and cfg[&#039;error_category&#039;] then&lt;br /&gt;
		cats[#cats + 1] = cfg[&#039;error_category&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Lua templates category&lt;br /&gt;
	titleObj = titleObj or mw.title.getCurrentTitle()&lt;br /&gt;
	if titleObj.namespace == 10 &lt;br /&gt;
		and not cfg[&#039;subpage_blacklist&#039;][titleObj.subpageText]&lt;br /&gt;
	then&lt;br /&gt;
		local category = args.category&lt;br /&gt;
		if not category then&lt;br /&gt;
			local pagename = modules[1] and mw.title.new(modules[1])&lt;br /&gt;
			category = pagename and cfg[&#039;module_categories&#039;][pagename.text]&lt;br /&gt;
			if not category then&lt;br /&gt;
				if cfg[&#039;allow_wishes&#039;] and #modules &amp;lt; 1 then&lt;br /&gt;
					category = cfg[&#039;wish_category&#039;]&lt;br /&gt;
				else&lt;br /&gt;
					category = cfg[&#039;default_category&#039;]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if category then&lt;br /&gt;
			cats[#cats + 1] = category&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i, cat in ipairs(cats) do&lt;br /&gt;
		cats[i] = string.format(&#039;[[Category:%s]]&#039;, cat)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(cats)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Lua&amp;diff=558</id>
		<title>Modèle:Lua</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Lua&amp;diff=558"/>
		<updated>2025-08-26T15:53:45Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Lua banner|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Lua|Module:Lua banner}}&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Namespace_detect/data&amp;diff=556</id>
		<title>Module:Namespace detect/data</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Namespace_detect/data&amp;diff=556"/>
		<updated>2025-08-26T15:53:45Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                          Namespace detect data                             --&lt;br /&gt;
-- This module holds data for [[Module:Namespace detect]] to be loaded per    --&lt;br /&gt;
-- page, rather than per #invoke, for performance reasons.                    --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = require(&#039;Module:Namespace detect/config&#039;)&lt;br /&gt;
&lt;br /&gt;
local function addKey(t, key, defaultKey)&lt;br /&gt;
	if key ~= defaultKey then&lt;br /&gt;
		t[#t + 1] = key&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get a table of parameters to query for each default parameter name.&lt;br /&gt;
-- This allows wikis to customise parameter names in the cfg table while&lt;br /&gt;
-- ensuring that default parameter names will always work. The cfg table&lt;br /&gt;
-- values can be added as a string, or as an array of strings.&lt;br /&gt;
&lt;br /&gt;
local defaultKeys = {&lt;br /&gt;
	&#039;main&#039;,&lt;br /&gt;
	&#039;talk&#039;,&lt;br /&gt;
	&#039;other&#039;,&lt;br /&gt;
	&#039;subjectns&#039;,&lt;br /&gt;
	&#039;demospace&#039;,&lt;br /&gt;
	&#039;demopage&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local argKeys = {}&lt;br /&gt;
for i, defaultKey in ipairs(defaultKeys) do&lt;br /&gt;
	argKeys[defaultKey] = {defaultKey}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for defaultKey, t in pairs(argKeys) do&lt;br /&gt;
	local cfgValue = cfg[defaultKey]&lt;br /&gt;
	local cfgValueType = type(cfgValue)&lt;br /&gt;
	if cfgValueType == &#039;string&#039; then&lt;br /&gt;
		addKey(t, cfgValue, defaultKey)&lt;br /&gt;
	elseif cfgValueType == &#039;table&#039; then&lt;br /&gt;
		for i, key in ipairs(cfgValue) do&lt;br /&gt;
			addKey(t, key, defaultKey)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	cfg[defaultKey] = nil -- Free the cfg value as we don&#039;t need it any more.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getParamMappings()&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Returns a table of how parameter names map to namespace names. The keys&lt;br /&gt;
	-- are the actual namespace names, in lower case, and the values are the&lt;br /&gt;
	-- possible parameter names for that namespace, also in lower case. The&lt;br /&gt;
	-- table entries are structured like this:&lt;br /&gt;
	-- {&lt;br /&gt;
	--   [&#039;&#039;] = {&#039;main&#039;},&lt;br /&gt;
	--   [&#039;wikipedia&#039;] = {&#039;wikipedia&#039;, &#039;project&#039;, &#039;wp&#039;},&lt;br /&gt;
	--   ...&lt;br /&gt;
	-- }&lt;br /&gt;
	--]]&lt;br /&gt;
	local mappings = {}&lt;br /&gt;
	local mainNsName = mw.site.subjectNamespaces[0].name&lt;br /&gt;
	mainNsName = mw.ustring.lower(mainNsName)&lt;br /&gt;
	mappings[mainNsName] = mw.clone(argKeys.main)&lt;br /&gt;
	mappings[&#039;talk&#039;] = mw.clone(argKeys.talk)&lt;br /&gt;
	for nsid, ns in pairs(mw.site.subjectNamespaces) do&lt;br /&gt;
		if nsid ~= 0 then -- Exclude main namespace.&lt;br /&gt;
			local nsname = mw.ustring.lower(ns.name)&lt;br /&gt;
			local canonicalName = mw.ustring.lower(ns.canonicalName)&lt;br /&gt;
			mappings[nsname] = {nsname}&lt;br /&gt;
			if canonicalName ~= nsname then&lt;br /&gt;
				table.insert(mappings[nsname], canonicalName)&lt;br /&gt;
			end&lt;br /&gt;
			for _, alias in ipairs(ns.aliases) do&lt;br /&gt;
				table.insert(mappings[nsname], mw.ustring.lower(alias))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mappings&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	argKeys = argKeys,&lt;br /&gt;
	cfg = cfg,&lt;br /&gt;
	mappings = getParamMappings()&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Namespace_detect/config&amp;diff=554</id>
		<title>Module:Namespace detect/config</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Namespace_detect/config&amp;diff=554"/>
		<updated>2025-08-26T15:53:45Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                    Namespace detect configuration data                     --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module stores configuration data for Module:Namespace detect. Here    --&lt;br /&gt;
-- you can localise the module to your wiki&#039;s language.                       --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To activate a configuration item, you need to uncomment it. This means     --&lt;br /&gt;
-- that you need to remove the text &amp;quot;-- &amp;quot; at the start of the line.           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Don&#039;t edit this line.&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                              Parameter names                               --&lt;br /&gt;
-- These configuration items specify custom parameter names. Values added     --&lt;br /&gt;
-- here will work in addition to the default English parameter names.         --&lt;br /&gt;
-- To add one extra name, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = &#039;parameter name&#039;                                                 --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To add multiple names, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = {&#039;parameter name 1&#039;, &#039;parameter name 2&#039;, &#039;parameter name 3&#039;}     --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays content for the main namespace:&lt;br /&gt;
-- cfg.main = &#039;main&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays in talk namespaces:&lt;br /&gt;
-- cfg.talk = &#039;talk&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays content for &amp;quot;other&amp;quot; namespaces (namespaces for which&lt;br /&gt;
---- parameters have not been specified):&lt;br /&gt;
-- cfg.other = &#039;other&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter makes talk pages behave as though they are the corresponding&lt;br /&gt;
---- subject namespace. Note that this parameter is used with [[Module:Yesno]].&lt;br /&gt;
---- Edit that module to change the default values of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc.&lt;br /&gt;
-- cfg.subjectns = &#039;subjectns&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a demonstration namespace:&lt;br /&gt;
-- cfg.demospace = &#039;demospace&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a specific page to compare:&lt;br /&gt;
cfg.demopage = &#039;page&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                           Table configuration                              --&lt;br /&gt;
-- These configuration items allow customisation of the &amp;quot;table&amp;quot; function,     --&lt;br /&gt;
-- used to generate a table of possible parameters in the module              --&lt;br /&gt;
-- documentation.                                                             --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
---- The header for the namespace column in the wikitable containing the list of&lt;br /&gt;
---- possible subject-space parameters.&lt;br /&gt;
-- cfg.wikitableNamespaceHeader = &#039;Namespace&#039;&lt;br /&gt;
&lt;br /&gt;
---- The header for the wikitable containing the list of possible subject-space&lt;br /&gt;
---- parameters.&lt;br /&gt;
-- cfg.wikitableAliasesHeader = &#039;Aliases&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                        End of configuration data                           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don&#039;t edit this line.&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Category_handler/shared&amp;diff=552</id>
		<title>Module:Category handler/shared</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Category_handler/shared&amp;diff=552"/>
		<updated>2025-08-26T15:53:45Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module contains shared functions used by [[Module:Category handler]]&lt;br /&gt;
-- and its submodules.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.matchesBlacklist(page, blacklist)&lt;br /&gt;
	for i, pattern in ipairs(blacklist) do&lt;br /&gt;
		local match = mw.ustring.match(page, pattern)&lt;br /&gt;
		if match then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getParamMappings(useLoadData)&lt;br /&gt;
	local dataPage = &#039;Module:Namespace detect/data&#039;&lt;br /&gt;
	if useLoadData then&lt;br /&gt;
		return mw.loadData(dataPage).mappings&lt;br /&gt;
	else&lt;br /&gt;
		return require(dataPage).mappings&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getNamespaceParameters(titleObj, mappings)&lt;br /&gt;
	-- We don&#039;t use title.nsText for the namespace name because it adds&lt;br /&gt;
	-- underscores.&lt;br /&gt;
	local mappingsKey&lt;br /&gt;
	if titleObj.isTalkPage then&lt;br /&gt;
		mappingsKey = &#039;talk&#039;&lt;br /&gt;
	else&lt;br /&gt;
		mappingsKey = mw.site.namespaces[titleObj.namespace].name&lt;br /&gt;
	end&lt;br /&gt;
	mappingsKey = mw.ustring.lower(mappingsKey)&lt;br /&gt;
	return mappings[mappingsKey] or {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Category_handler/data&amp;diff=550</id>
		<title>Module:Category handler/data</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Category_handler/data&amp;diff=550"/>
		<updated>2025-08-26T15:53:45Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module assembles data to be passed to [[Module:Category handler]] using&lt;br /&gt;
-- mw.loadData. This includes the configuration data and whether the current&lt;br /&gt;
-- page matches the title blacklist.&lt;br /&gt;
&lt;br /&gt;
local data = require(&#039;Module:Category handler/config&#039;)&lt;br /&gt;
local mShared = require(&#039;Module:Category handler/shared&#039;)&lt;br /&gt;
local blacklist = require(&#039;Module:Category handler/blacklist&#039;)&lt;br /&gt;
local title = mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
data.currentTitleMatchesBlacklist = mShared.matchesBlacklist(&lt;br /&gt;
	title.prefixedText,&lt;br /&gt;
	blacklist&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
data.currentTitleNamespaceParameters = mShared.getNamespaceParameters(&lt;br /&gt;
	title,&lt;br /&gt;
	mShared.getParamMappings()&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
return data&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Category_handler/config&amp;diff=548</id>
		<title>Module:Category handler/config</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Category_handler/config&amp;diff=548"/>
		<updated>2025-08-26T15:53:45Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--            [[Module:Category handler]] configuration data                  --&lt;br /&gt;
--       Language-specific parameter names and values can be set here.        --&lt;br /&gt;
--       For blacklist config, see [[Module:Category handler/blacklist]].     --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Don&#039;t edit this line.&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                       Start configuration data                             --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                              Parameter names                               --&lt;br /&gt;
-- These configuration items specify custom parameter names.                  --&lt;br /&gt;
-- To add one extra name, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- foo = &#039;parameter name&#039;,                                                    --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To add multiple names, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- foo = {&#039;parameter name 1&#039;, &#039;parameter name 2&#039;, &#039;parameter name 3&#039;},        --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cfg.parameters = {&lt;br /&gt;
	&lt;br /&gt;
	-- The nocat and categories parameter suppress&lt;br /&gt;
	-- categorisation. They are used with Module:Yesno, and work as follows:&lt;br /&gt;
	--&lt;br /&gt;
	-- cfg.nocat:&lt;br /&gt;
	-- Result of yesno()                        Effect&lt;br /&gt;
	-- true                                     Categorisation is suppressed&lt;br /&gt;
	-- false                                    Categorisation is allowed, and&lt;br /&gt;
	--                                          the blacklist check is skipped&lt;br /&gt;
	-- nil                                      Categorisation is allowed&lt;br /&gt;
	--&lt;br /&gt;
	-- cfg.categories:&lt;br /&gt;
	-- Result of yesno()                        Effect&lt;br /&gt;
	-- true                                     Categorisation is allowed, and&lt;br /&gt;
	--                                          the blacklist check is skipped&lt;br /&gt;
	-- false                                    Categorisation is suppressed&lt;br /&gt;
	-- nil                                      Categorisation is allowed&lt;br /&gt;
	nocat = &#039;nocat&#039;,&lt;br /&gt;
	categories = &#039;categories&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- The parameter name for the legacy &amp;quot;category2&amp;quot; parameter. This skips the&lt;br /&gt;
	-- blacklist if set to the cfg.category2Yes value, and suppresses&lt;br /&gt;
	-- categorisation if present but equal to anything other than&lt;br /&gt;
	-- cfg.category2Yes or cfg.category2Negative.&lt;br /&gt;
	category2 = &#039;category2&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- cfg.subpage is the parameter name to specify how to behave on subpages.&lt;br /&gt;
	subpage = &#039;subpage&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- The parameter for data to return in all namespaces.&lt;br /&gt;
	all = &#039;all&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- The parameter name for data to return if no data is specified for the&lt;br /&gt;
	-- namespace that is detected.&lt;br /&gt;
	other = &#039;other&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- The parameter name used to specify a page other than the current page;&lt;br /&gt;
	-- used for testing and demonstration.&lt;br /&gt;
	demopage = &#039;page&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                              Parameter values                              --&lt;br /&gt;
-- These are set values that can be used with certain parameters. Only one    --&lt;br /&gt;
-- value can be specified, like this:                                         --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = &#039;value name&#039;                                                     --                                               --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- The following settings are used with the cfg.category2 parameter. Setting&lt;br /&gt;
-- cfg.category2 to cfg.category2Yes skips the blacklist, and if cfg.category2&lt;br /&gt;
-- is present but equal to anything other than cfg.category2Yes or&lt;br /&gt;
-- cfg.category2Negative then it supresses cateogrisation.&lt;br /&gt;
cfg.category2Yes = &#039;yes&#039;&lt;br /&gt;
cfg.category2Negative = &#039;¬&#039;&lt;br /&gt;
&lt;br /&gt;
-- The following settings are used with the cfg.subpage parameter.&lt;br /&gt;
-- cfg.subpageNo is the value to specify to not categorise on subpages;&lt;br /&gt;
-- cfg.subpageOnly is the value to specify to only categorise on subpages.&lt;br /&gt;
cfg.subpageNo = &#039;no&#039;&lt;br /&gt;
cfg.subpageOnly = &#039;only&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                           Default namespaces                               --&lt;br /&gt;
-- This is a table of namespaces to categorise by default. The keys are the   --&lt;br /&gt;
-- namespace numbers.                                                         --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cfg.defaultNamespaces = {&lt;br /&gt;
	[  0] = true, -- main&lt;br /&gt;
	[  6] = true, -- file&lt;br /&gt;
	[ 12] = true, -- help&lt;br /&gt;
	[ 14] = true, -- category&lt;br /&gt;
	[100] = true, -- portal&lt;br /&gt;
	[108] = true, -- book&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                                Wrappers                                    --&lt;br /&gt;
-- This is a wrapper template or a list of wrapper templates to be passed to  --&lt;br /&gt;
-- [[Module:Arguments]].                                                      --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cfg.wrappers = &#039;Template:Category handler&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                           End configuration data                           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don&#039;t edit this line.&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:Category_handler/blacklist&amp;diff=546</id>
		<title>Module:Category handler/blacklist</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:Category_handler/blacklist&amp;diff=546"/>
		<updated>2025-08-26T15:53:45Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module contains the blacklist used by [[Module:Category handler]].&lt;br /&gt;
-- Pages that match Lua patterns in this list will not be categorised unless&lt;br /&gt;
-- categorisation is explicitly requested.&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
    &#039;^Main Page$&#039;, -- don&#039;t categorise the main page.&lt;br /&gt;
 &lt;br /&gt;
    -- Don&#039;t categorise the following pages or their subpages.&lt;br /&gt;
    -- &amp;quot;%f[/\0]&amp;quot; matches if the next character is &amp;quot;/&amp;quot; or the end of the string.&lt;br /&gt;
    &#039;^Wikipedia:Cascade%-protected items%f[/\0]&#039;,&lt;br /&gt;
    &#039;^User:UBX%f[/\0]&#039;, -- The userbox &amp;quot;template&amp;quot; space.&lt;br /&gt;
    &#039;^User talk:UBX%f[/\0]&#039;,&lt;br /&gt;
 &lt;br /&gt;
    -- Don&#039;t categorise subpages of these pages, but allow&lt;br /&gt;
    -- categorisation of the base page.&lt;br /&gt;
    &#039;^Wikipedia:Template messages/.*$&#039;,&lt;br /&gt;
 &lt;br /&gt;
    &#039;/[aA]rchive&#039; -- Don&#039;t categorise archives.&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Para&amp;diff=542</id>
		<title>Modèle:Para</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Para&amp;diff=542"/>
		<updated>2025-08-26T15:53:44Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code class=&amp;quot;tpl-para&amp;quot; style=&amp;quot;word-break:break-word;{{SAFESUBST:&amp;lt;noinclude /&amp;gt;#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:&amp;lt;noinclude /&amp;gt;#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:&amp;lt;noinclude /&amp;gt;#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:&amp;lt;noinclude /&amp;gt;#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:&amp;lt;noinclude /&amp;gt;#if:{{{style|}}}|{{{style}}}}}&amp;quot;&amp;gt;&amp;amp;#124;{{SAFESUBST:&amp;lt;noinclude /&amp;gt;#if:{{{1|}}}|{{{1}}}&amp;amp;#61;}}{{{2|}}}&amp;lt;/code&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!--Categories and interwikis go near the bottom of the /doc subpage.--&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Warning&amp;diff=540</id>
		<title>Modèle:Warning</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Warning&amp;diff=540"/>
		<updated>2025-08-26T15:53:43Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;messagebox standard-talk&amp;quot; style=&amp;quot;direction:{{#dir:{{{lang|}}}}}; border: 1px solid var(--border-color-error--hover,#CC9999); background-color: var(--background-color-error-subtle,#FFCCCC);color: inherit;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; width=&amp;quot;9%&amp;quot;|[[File:Dialog-stop-hand.svg|50px|link=|Warning]]&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;100%&amp;quot;|{{#if:{{{title|}}}|&amp;lt;big&amp;gt;&#039;&#039;&#039;{{{title|}}}&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;hr /&amp;gt;|}} {{{2|{{{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>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Heavily_used_template/layout&amp;diff=538</id>
		<title>Modèle:Heavily used template/layout</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Heavily_used_template/layout&amp;diff=538"/>
		<updated>2025-08-26T15:53:41Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Mbox&lt;br /&gt;
 |type = query&lt;br /&gt;
 |image = {{NoImageNotes|[[File:OOjs UI icon alert-yellow.svg|class=noviewer|alt=⚠|40px]]}}&lt;br /&gt;
 |text = {{{text|empty}}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
{{{small|}}}&lt;br /&gt;
{{#switch:{{PROTECTIONLEVEL:edit}}&lt;br /&gt;
|autoconfirmed={{{autoconfirmed|}}}&lt;br /&gt;
|templateeditor={{{templateeditor|{{{temp|}}}}}}&lt;br /&gt;
|sysop={{{sysop|}}}&lt;br /&gt;
}}&amp;lt;/div&amp;gt;&lt;br /&gt;
 |width = 80%&lt;br /&gt;
 |style = padding:3px; border-color: var(--border-color-content-removed, #fc3); text-align:start&lt;br /&gt;
 |lang = {{{lang|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Layout templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Heavily_used_template/en&amp;diff=536</id>
		<title>Modèle:Heavily used template/en</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Heavily_used_template/en&amp;diff=536"/>
		<updated>2025-08-26T15:53:40Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Heavily used template/layout&lt;br /&gt;
|text=&#039;&#039;&#039;Note:&#039;&#039;&#039; This {{lc:{{NAMESPACE}}}} is used on a {{#if:{{{very|}}}|&#039;&#039;&#039;great&#039;&#039;&#039;&amp;amp;nbsp;}}lot of pages. In order not to put too much load on the servers, edits should be kept to a bare minimum. Please &#039;&#039;&#039;discuss proposed changes on [[{{TALKPAGENAME}}|the talk page]]&#039;&#039;&#039; first.&lt;br /&gt;
{{#ifexist:{{{2|}}}/sandbox|Afterwards, changes can &#039;&#039;&#039;initially&#039;&#039;&#039; be done at and tested with [[{{{2|}}}/sandbox]]{{{edit|}}}.}}&lt;br /&gt;
|small=&lt;br /&gt;
* Editing a {{lc:{{NAMESPACE}}}} causes &#039;&#039;&#039;all pages that use the {{lc:{{NAMESPACE}}}} to be re-rendered&#039;&#039;&#039;. If the {{lc:{{NAMESPACE}}}} is used often, this can put a lot of load on the servers since it fills up the [[mw:Manual:Job queue|job queue]].&lt;br /&gt;
* Keep in mind that templates that are used on file description pages also &#039;&#039;&#039;show up on other wikis&#039;&#039;&#039;.&lt;br /&gt;
|autoconfirmed = * This page is semi-protected from editing to prevent vandalism. Only established users can edit it.&amp;lt;div class=&amp;quot;topicon&amp;quot; id=&amp;quot;protected-icon&amp;quot; style=&amp;quot;display:none; right:10px;&amp;quot;&amp;gt;[[File:Padlock-silver-medium.svg|20px|link=Commons:Page protection|This page is semi-protected against editing.]]&amp;lt;/div&amp;gt;&lt;br /&gt;
|templateeditor = * This page is template-protected from editing to prevent vandalism. Only template editors and administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.&amp;lt;div class=&amp;quot;topicon&amp;quot; id=&amp;quot;protected-icon&amp;quot; style=&amp;quot;display:none; right:10px;&amp;quot;&amp;gt;[[File:Padlock-darkred.svg|20px|link=Commons:Page protection|This page is template-protected against editing.]]&amp;lt;/div&amp;gt;&lt;br /&gt;
|sysop = * This page has been protected from editing to prevent vandalism. Only administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.&amp;lt;div class=&amp;quot;topicon&amp;quot; id=&amp;quot;protected-icon&amp;quot; style=&amp;quot;display:none; right:10px;&amp;quot;&amp;gt;[[File:Padlock.svg|20px|link=Commons:Page protection|This page is protected against editing.]]&amp;lt;/div&amp;gt;&lt;br /&gt;
|lang=en&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Translated tag|marker}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Heavily_used_template&amp;diff=534</id>
		<title>Modèle:Heavily used template</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Heavily_used_template&amp;diff=534"/>
		<updated>2025-08-26T15:53:40Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq:{{NAMESPACE}}|Module&amp;lt;!--&lt;br /&gt;
--&amp;gt;|{{error|This template is being used in the wrong namespace. Use {{tl|Heavily used module}} instead!}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;|&amp;lt;!--&lt;br /&gt;
    --&amp;gt;{{#invoke:Autotranslate|autotranslate&amp;lt;!--&lt;br /&gt;
    --&amp;gt;|1 = {{{1|Template talk:{{#titleparts:{{PAGENAME}}|1|1}}}}}&amp;lt;!--&lt;br /&gt;
    --&amp;gt;|2 = {{#if:{{{2|}}}|{{{2|}}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}&amp;lt;!--&lt;br /&gt;
    --&amp;gt;|edit=&amp;lt;!--&lt;br /&gt;
        --&amp;gt;{{#if:{{{edit|}}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;|&amp;amp;#58;&amp;amp;#32;[&#039;&#039;{{Edit-int|{{{2|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}}/sandbox}}&#039;&#039;]&amp;lt;!--&lt;br /&gt;
        --&amp;gt;}}&amp;lt;!--&lt;br /&gt;
    --&amp;gt;|very={{{3|}}}&amp;lt;!--&lt;br /&gt;
    --&amp;gt;|base=Heavily used template&amp;lt;!--&lt;br /&gt;
    --&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;includeonly&amp;gt;{{#ifeq:{{SUBJECTPAGENAME}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}&amp;lt;!-- &lt;br /&gt;
--&amp;gt;|{{#if:{{{3|}}}|[[Category:Very heavily used templates| ]]|[[Category:Heavily used templates]]}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:JSON&amp;diff=532</id>
		<title>Module:JSON</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:JSON&amp;diff=532"/>
		<updated>2025-08-26T15:53:40Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- -*- coding: utf-8 -*-&lt;br /&gt;
--&lt;br /&gt;
-- Copyright 2010-2012 Jeffrey Friedl&lt;br /&gt;
-- http://regex.info/blog/&lt;br /&gt;
--&lt;br /&gt;
local VERSION = 20111207.5  -- version history at end of file&lt;br /&gt;
local OBJDEF = { VERSION = VERSION }&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Simple JSON encoding and decoding in pure Lua.&lt;br /&gt;
-- http://www.json.org/&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--   JSON = (loadfile &amp;quot;JSON.lua&amp;quot;)() -- one-time load of the routines&lt;br /&gt;
--&lt;br /&gt;
--   local lua_value = JSON:decode(raw_json_text)&lt;br /&gt;
--&lt;br /&gt;
--   local raw_json_text    = JSON:encode(lua_table_or_value)&lt;br /&gt;
--   local pretty_json_text = JSON:encode_pretty(lua_table_or_value) -- &amp;quot;pretty printed&amp;quot; version for human readability&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
-- DECODING&lt;br /&gt;
--&lt;br /&gt;
--   JSON = (loadfile &amp;quot;JSON.lua&amp;quot;)() -- one-time load of the routines&lt;br /&gt;
--&lt;br /&gt;
--   local lua_value = JSON:decode(raw_json_text)&lt;br /&gt;
--&lt;br /&gt;
--   If the JSON text is for an object or an array, e.g.&lt;br /&gt;
--     { &amp;quot;what&amp;quot;: &amp;quot;books&amp;quot;, &amp;quot;count&amp;quot;: 3 }&lt;br /&gt;
--   or&lt;br /&gt;
--     [ &amp;quot;Larry&amp;quot;, &amp;quot;Curly&amp;quot;, &amp;quot;Moe&amp;quot; ]&lt;br /&gt;
--&lt;br /&gt;
--   the result is a Lua table, e.g.&lt;br /&gt;
--     { what = &amp;quot;books&amp;quot;, count = 3 }&lt;br /&gt;
--   or&lt;br /&gt;
--     { &amp;quot;Larry&amp;quot;, &amp;quot;Curly&amp;quot;, &amp;quot;Moe&amp;quot; }&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--   The encode and decode routines accept an optional second argument, &amp;quot;etc&amp;quot;, which is not used&lt;br /&gt;
--   during encoding or decoding, but upon error is passed along to error handlers. It can be of any&lt;br /&gt;
--   type (including nil).&lt;br /&gt;
--&lt;br /&gt;
--   With most errors during decoding, this code calls&lt;br /&gt;
--&lt;br /&gt;
--      JSON:onDecodeError(message, text, location, etc)&lt;br /&gt;
--&lt;br /&gt;
--   with a message about the error, and if known, the JSON text being parsed and the byte count&lt;br /&gt;
--   where the problem was discovered. You can replace the default JSON:onDecodeError() with your&lt;br /&gt;
--   own function.&lt;br /&gt;
--&lt;br /&gt;
--   The default onDecodeError() merely augments the message with data about the text and the&lt;br /&gt;
--   location if known (and if a second &#039;etc&#039; argument had been provided to decode(), its value is&lt;br /&gt;
--   tacked onto the message as well), and then calls JSON.assert(), which itself defaults to Lua&#039;s&lt;br /&gt;
--   built-in assert(), and can also be overridden.&lt;br /&gt;
--&lt;br /&gt;
--   For example, in an Adobe Lightroom plugin, you might use something like&lt;br /&gt;
--&lt;br /&gt;
--          function JSON:onDecodeError(message, text, location, etc)&lt;br /&gt;
--             LrErrors.throwUserError(&amp;quot;Internal Error: invalid JSON data&amp;quot;)&lt;br /&gt;
--          end&lt;br /&gt;
--&lt;br /&gt;
--   or even just&lt;br /&gt;
--&lt;br /&gt;
--          function JSON.assert(message)&lt;br /&gt;
--             LrErrors.throwUserError(&amp;quot;Internal Error: &amp;quot; .. message)&lt;br /&gt;
--          end&lt;br /&gt;
--&lt;br /&gt;
--   If JSON:decode() is passed a nil, this is called instead:&lt;br /&gt;
--&lt;br /&gt;
--      JSON:onDecodeOfNilError(message, nil, nil, etc)&lt;br /&gt;
--&lt;br /&gt;
--   and if JSON:decode() is passed HTML instead of JSON, this is called:&lt;br /&gt;
--&lt;br /&gt;
--      JSON:onDecodeOfHTMLError(message, text, nil, etc)&lt;br /&gt;
--&lt;br /&gt;
--   The use of the fourth &#039;etc&#039; argument allows stronger coordination between decoding and error&lt;br /&gt;
--   reporting, especially when you provide your own error-handling routines. Continuing with the&lt;br /&gt;
--   the Adobe Lightroom plugin example:&lt;br /&gt;
--&lt;br /&gt;
--          function JSON:onDecodeError(message, text, location, etc)&lt;br /&gt;
--             local note = &amp;quot;Internal Error: invalid JSON data&amp;quot;&lt;br /&gt;
--             if type(etc) = &#039;table&#039; and etc.photo then&lt;br /&gt;
--                note = note .. &amp;quot; while processing for &amp;quot; .. etc.photo:getFormattedMetadata(&#039;fileName&#039;)&lt;br /&gt;
--             end&lt;br /&gt;
--             LrErrors.throwUserError(note)&lt;br /&gt;
--          end&lt;br /&gt;
--&lt;br /&gt;
--            :&lt;br /&gt;
--            :&lt;br /&gt;
--&lt;br /&gt;
--          for i, photo in ipairs(photosToProcess) do&lt;br /&gt;
--               :             &lt;br /&gt;
--               :             &lt;br /&gt;
--               local data = JSON:decode(someJsonText, { photo = photo })&lt;br /&gt;
--               :             &lt;br /&gt;
--               :             &lt;br /&gt;
--          end&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
-- DECODING AND STRICT TYPES&lt;br /&gt;
--&lt;br /&gt;
--   Because both JSON objects and JSON arrays are converted to Lua tables, it&#039;s not normally&lt;br /&gt;
--   possible to tell which a Lua table came from, or guarantee decode-encode round-trip&lt;br /&gt;
--   equivalency.&lt;br /&gt;
--&lt;br /&gt;
--   However, if you enable strictTypes, e.g.&lt;br /&gt;
--&lt;br /&gt;
--      JSON = (loadfile &amp;quot;JSON.lua&amp;quot;)() --load the routines&lt;br /&gt;
--      JSON.strictTypes = true&lt;br /&gt;
--&lt;br /&gt;
--   then the Lua table resulting from the decoding of a JSON object or JSON array is marked via Lua&lt;br /&gt;
--   metatable, so that when re-encoded with JSON:encode() it ends up as the appropriate JSON type.&lt;br /&gt;
--&lt;br /&gt;
--   (This is not the default because other routines may not work well with tables that have a&lt;br /&gt;
--   metatable set, for example, Lightroom API calls.)&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
-- ENCODING&lt;br /&gt;
--&lt;br /&gt;
--   JSON = (loadfile &amp;quot;JSON.lua&amp;quot;)() -- one-time load of the routines&lt;br /&gt;
--&lt;br /&gt;
--   local raw_json_text    = JSON:encode(lua_table_or_value)&lt;br /&gt;
--   local pretty_json_text = JSON:encode_pretty(lua_table_or_value) -- &amp;quot;pretty printed&amp;quot; version for human readability&lt;br /&gt;
&lt;br /&gt;
--   On error during encoding, this code calls:&lt;br /&gt;
--&lt;br /&gt;
--    JSON:onEncodeError(message, etc)&lt;br /&gt;
--&lt;br /&gt;
--   which you can override in your local JSON object.&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
-- SUMMARY OF METHODS YOU CAN OVERRIDE IN YOUR LOCAL LUA JSON OBJECT&lt;br /&gt;
--&lt;br /&gt;
--    assert&lt;br /&gt;
--    onDecodeError&lt;br /&gt;
--    onDecodeOfNilError&lt;br /&gt;
--    onDecodeOfHTMLError&lt;br /&gt;
--    onEncodeError&lt;br /&gt;
--&lt;br /&gt;
--  If you want to create a separate Lua JSON object with its own error handlers,&lt;br /&gt;
--  you can reload JSON.lua or use the :new() method.&lt;br /&gt;
--&lt;br /&gt;
---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local author = &amp;quot;-[ JSON.lua package by Jeffrey Friedl (http://regex.info/blog/lua/json), version &amp;quot; .. tostring(VERSION) .. &amp;quot; ]-&amp;quot;&lt;br /&gt;
local isArray  = { __tostring = function() return &amp;quot;JSON array&amp;quot;  end }    isArray.__index  = isArray&lt;br /&gt;
local isObject = { __tostring = function() return &amp;quot;JSON object&amp;quot; end }    isObject.__index = isObject&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function OBJDEF:newArray(tbl)&lt;br /&gt;
   return setmetatable(tbl or {}, isArray)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OBJDEF:newObject(tbl)&lt;br /&gt;
   return setmetatable(tbl or {}, isObject)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function unicode_codepoint_as_utf8(codepoint)&lt;br /&gt;
   --&lt;br /&gt;
   -- codepoint is a number&lt;br /&gt;
   --&lt;br /&gt;
   if codepoint &amp;lt;= 127 then&lt;br /&gt;
      return string.char(codepoint)&lt;br /&gt;
&lt;br /&gt;
   elseif codepoint &amp;lt;= 2047 then&lt;br /&gt;
      --&lt;br /&gt;
      -- 110yyyxx 10xxxxxx         &amp;lt;-- useful notation from http://en.wikipedia.org/wiki/Utf8&lt;br /&gt;
      --&lt;br /&gt;
      local highpart = math.floor(codepoint / 0x40)&lt;br /&gt;
      local lowpart  = codepoint - (0x40 * highpart)&lt;br /&gt;
      return string.char(0xC0 + highpart,&lt;br /&gt;
                         0x80 + lowpart)&lt;br /&gt;
&lt;br /&gt;
   elseif codepoint &amp;lt;= 65535 then&lt;br /&gt;
      --&lt;br /&gt;
      -- 1110yyyy 10yyyyxx 10xxxxxx&lt;br /&gt;
      --&lt;br /&gt;
      local highpart  = math.floor(codepoint / 0x1000)&lt;br /&gt;
      local remainder = codepoint - 0x1000 * highpart&lt;br /&gt;
      local midpart   = math.floor(remainder / 0x40)&lt;br /&gt;
      local lowpart   = remainder - 0x40 * midpart&lt;br /&gt;
&lt;br /&gt;
      highpart = 0xE0 + highpart&lt;br /&gt;
      midpart  = 0x80 + midpart&lt;br /&gt;
      lowpart  = 0x80 + lowpart&lt;br /&gt;
&lt;br /&gt;
      --&lt;br /&gt;
      -- Check for an invalid character (thanks Andy R. at Adobe).&lt;br /&gt;
      -- See table 3.7, page 93, in http://www.unicode.org/versions/Unicode5.2.0/ch03.pdf#G28070&lt;br /&gt;
      --&lt;br /&gt;
      if ( highpart == 0xE0 and midpart &amp;lt; 0xA0 ) or&lt;br /&gt;
         ( highpart == 0xED and midpart &amp;gt; 0x9F ) or&lt;br /&gt;
         ( highpart == 0xF0 and midpart &amp;lt; 0x90 ) or&lt;br /&gt;
         ( highpart == 0xF4 and midpart &amp;gt; 0x8F )&lt;br /&gt;
      then&lt;br /&gt;
         return &amp;quot;?&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
         return string.char(highpart,&lt;br /&gt;
                            midpart,&lt;br /&gt;
                            lowpart)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
   else&lt;br /&gt;
      --&lt;br /&gt;
      -- 11110zzz 10zzyyyy 10yyyyxx 10xxxxxx&lt;br /&gt;
      --&lt;br /&gt;
      local highpart  = math.floor(codepoint / 0x40000)&lt;br /&gt;
      local remainder = codepoint - 0x40000 * highpart&lt;br /&gt;
      local midA      = math.floor(remainder / 0x1000)&lt;br /&gt;
      remainder       = remainder - 0x1000 * midA&lt;br /&gt;
      local midB      = math.floor(remainder / 0x40)&lt;br /&gt;
      local lowpart   = remainder - 0x40 * midB&lt;br /&gt;
&lt;br /&gt;
      return string.char(0xF0 + highpart,&lt;br /&gt;
                         0x80 + midA,&lt;br /&gt;
                         0x80 + midB,&lt;br /&gt;
                         0x80 + lowpart)&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OBJDEF:onDecodeError(message, text, location, etc)&lt;br /&gt;
   if text then&lt;br /&gt;
      if location then&lt;br /&gt;
         message = string.format(&amp;quot;%s at char %d of: %s&amp;quot;, message, location, text)&lt;br /&gt;
      else&lt;br /&gt;
         message = string.format(&amp;quot;%s: %s&amp;quot;, message, text)&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
   if etc ~= nil then&lt;br /&gt;
      message = message .. &amp;quot; (&amp;quot; .. OBJDEF:encode(etc) .. &amp;quot;)&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if self.assert then&lt;br /&gt;
      self.assert(false, message)&lt;br /&gt;
   else&lt;br /&gt;
      assert(false, message)&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
OBJDEF.onDecodeOfNilError  = OBJDEF.onDecodeError&lt;br /&gt;
OBJDEF.onDecodeOfHTMLError = OBJDEF.onDecodeError&lt;br /&gt;
&lt;br /&gt;
function OBJDEF:onEncodeError(message, etc)&lt;br /&gt;
   if etc ~= nil then&lt;br /&gt;
      message = message .. &amp;quot; (&amp;quot; .. OBJDEF:encode(etc) .. &amp;quot;)&amp;quot;&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if self.assert then&lt;br /&gt;
      self.assert(false, message)&lt;br /&gt;
   else&lt;br /&gt;
      assert(false, message)&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function grok_number(self, text, start, etc)&lt;br /&gt;
   --&lt;br /&gt;
   -- Grab the integer part&lt;br /&gt;
   --&lt;br /&gt;
   local integer_part = text:match(&#039;^-?[1-9]%d*&#039;, start)&lt;br /&gt;
                     or text:match(&amp;quot;^-?0&amp;quot;,        start)&lt;br /&gt;
&lt;br /&gt;
   if not integer_part then&lt;br /&gt;
      self:onDecodeError(&amp;quot;expected number&amp;quot;, text, start, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   local i = start + integer_part:len()&lt;br /&gt;
&lt;br /&gt;
   --&lt;br /&gt;
   -- Grab an optional decimal part&lt;br /&gt;
   --&lt;br /&gt;
   local decimal_part = text:match(&#039;^%.%d+&#039;, i) or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   i = i + decimal_part:len()&lt;br /&gt;
&lt;br /&gt;
   --&lt;br /&gt;
   -- Grab an optional exponential part&lt;br /&gt;
   --&lt;br /&gt;
   local exponent_part = text:match(&#039;^[eE][-+]?%d+&#039;, i) or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   i = i + exponent_part:len()&lt;br /&gt;
&lt;br /&gt;
   local full_number_text = integer_part .. decimal_part .. exponent_part&lt;br /&gt;
   local as_number = tonumber(full_number_text)&lt;br /&gt;
&lt;br /&gt;
   if not as_number then&lt;br /&gt;
      self:onDecodeError(&amp;quot;bad number&amp;quot;, text, start, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   return as_number, i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function grok_string(self, text, start, etc)&lt;br /&gt;
&lt;br /&gt;
   if text:sub(start,start) ~= &#039;&amp;quot;&#039; then&lt;br /&gt;
      self:onDecodeError(&amp;quot;expected string&#039;s opening quote&amp;quot;, text, start, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   local i = start + 1 -- +1 to bypass the initial quote&lt;br /&gt;
   local text_len = text:len()&lt;br /&gt;
   local VALUE = &amp;quot;&amp;quot;&lt;br /&gt;
   while i &amp;lt;= text_len do&lt;br /&gt;
      local c = text:sub(i,i)&lt;br /&gt;
      if c == &#039;&amp;quot;&#039; then&lt;br /&gt;
         return VALUE, i + 1&lt;br /&gt;
      end&lt;br /&gt;
      if c ~= &#039;\\&#039; then&lt;br /&gt;
         VALUE = VALUE .. c&lt;br /&gt;
         i = i + 1&lt;br /&gt;
      elseif text:match(&#039;^\\b&#039;, i) then&lt;br /&gt;
         VALUE = VALUE .. &amp;quot;\b&amp;quot;&lt;br /&gt;
         i = i + 2&lt;br /&gt;
      elseif text:match(&#039;^\\f&#039;, i) then&lt;br /&gt;
         VALUE = VALUE .. &amp;quot;\f&amp;quot;&lt;br /&gt;
         i = i + 2&lt;br /&gt;
      elseif text:match(&#039;^\\n&#039;, i) then&lt;br /&gt;
         VALUE = VALUE .. &amp;quot;\n&amp;quot;&lt;br /&gt;
         i = i + 2&lt;br /&gt;
      elseif text:match(&#039;^\\r&#039;, i) then&lt;br /&gt;
         VALUE = VALUE .. &amp;quot;\r&amp;quot;&lt;br /&gt;
         i = i + 2&lt;br /&gt;
      elseif text:match(&#039;^\\t&#039;, i) then&lt;br /&gt;
         VALUE = VALUE .. &amp;quot;\t&amp;quot;&lt;br /&gt;
         i = i + 2&lt;br /&gt;
      else&lt;br /&gt;
         local hex = text:match(&#039;^\\u([0123456789aAbBcCdDeEfF][0123456789aAbBcCdDeEfF][0123456789aAbBcCdDeEfF][0123456789aAbBcCdDeEfF])&#039;, i)&lt;br /&gt;
         if hex then&lt;br /&gt;
            i = i + 6 -- bypass what we just read&lt;br /&gt;
&lt;br /&gt;
            -- We have a Unicode codepoint. It could be standalone, or if in the proper range and&lt;br /&gt;
            -- followed by another in a specific range, it&#039;ll be a two-code surrogate pair.&lt;br /&gt;
            local codepoint = tonumber(hex, 16)&lt;br /&gt;
            if codepoint &amp;gt;= 0xD800 and codepoint &amp;lt;= 0xDBFF then&lt;br /&gt;
               -- it&#039;s a hi surrogate... see whether we have a following low&lt;br /&gt;
               local lo_surrogate = text:match(&#039;^\\u([dD][cdefCDEF][0123456789aAbBcCdDeEfF][0123456789aAbBcCdDeEfF])&#039;, i)&lt;br /&gt;
               if lo_surrogate then&lt;br /&gt;
                  i = i + 6 -- bypass the low surrogate we just read&lt;br /&gt;
                  codepoint = 0x2400 + (codepoint - 0xD800) * 0x400 + tonumber(lo_surrogate, 16)&lt;br /&gt;
               else&lt;br /&gt;
                  -- not a proper low, so we&#039;ll just leave the first codepoint as is and spit it out.&lt;br /&gt;
               end&lt;br /&gt;
            end&lt;br /&gt;
            VALUE = VALUE .. unicode_codepoint_as_utf8(codepoint)&lt;br /&gt;
&lt;br /&gt;
         else&lt;br /&gt;
&lt;br /&gt;
            -- just pass through what&#039;s escaped&lt;br /&gt;
            VALUE = VALUE .. text:match(&#039;^\\(.)&#039;, i)&lt;br /&gt;
            i = i + 2&lt;br /&gt;
         end&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   self:onDecodeError(&amp;quot;unclosed string&amp;quot;, text, start, etc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function skip_whitespace(text, start)&lt;br /&gt;
&lt;br /&gt;
   local match_start, match_end = text:find(&amp;quot;^[ \n\r\t]+&amp;quot;, start) -- [http://www.ietf.org/rfc/rfc4627.txt] Section 2&lt;br /&gt;
   if match_end then&lt;br /&gt;
      return match_end + 1&lt;br /&gt;
   else&lt;br /&gt;
      return start&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local grok_one -- assigned later&lt;br /&gt;
&lt;br /&gt;
local function grok_object(self, text, start, etc)&lt;br /&gt;
   if not text:sub(start,start) == &#039;{&#039; then&lt;br /&gt;
      self:onDecodeError(&amp;quot;expected &#039;{&#039;&amp;quot;, text, start, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   local i = skip_whitespace(text, start + 1) -- +1 to skip the &#039;{&#039;&lt;br /&gt;
&lt;br /&gt;
   local VALUE = self.strictTypes and self:newObject { } or { }&lt;br /&gt;
&lt;br /&gt;
   if text:sub(i,i) == &#039;}&#039; then&lt;br /&gt;
      return VALUE, i + 1&lt;br /&gt;
   end&lt;br /&gt;
   local text_len = text:len()&lt;br /&gt;
   while i &amp;lt;= text_len do&lt;br /&gt;
      local key, new_i = grok_string(self, text, i, etc)&lt;br /&gt;
&lt;br /&gt;
      i = skip_whitespace(text, new_i)&lt;br /&gt;
&lt;br /&gt;
      if text:sub(i, i) ~= &#039;:&#039; then&lt;br /&gt;
         self:onDecodeError(&amp;quot;expected colon&amp;quot;, text, i, etc)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      i = skip_whitespace(text, i + 1)&lt;br /&gt;
&lt;br /&gt;
      local val, new_i = grok_one(self, text, i)&lt;br /&gt;
&lt;br /&gt;
      VALUE[key] = val&lt;br /&gt;
&lt;br /&gt;
      --&lt;br /&gt;
      -- Expect now either &#039;}&#039; to end things, or a &#039;,&#039; to allow us to continue.&lt;br /&gt;
      --&lt;br /&gt;
      i = skip_whitespace(text, new_i)&lt;br /&gt;
&lt;br /&gt;
      local c = text:sub(i,i)&lt;br /&gt;
&lt;br /&gt;
      if c == &#039;}&#039; then&lt;br /&gt;
         return VALUE, i + 1&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      if text:sub(i, i) ~= &#039;,&#039; then&lt;br /&gt;
         self:onDecodeError(&amp;quot;expected comma or &#039;}&#039;&amp;quot;, text, i, etc)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      i = skip_whitespace(text, i + 1)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   self:onDecodeError(&amp;quot;unclosed &#039;{&#039;&amp;quot;, text, start, etc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function grok_array(self, text, start, etc)&lt;br /&gt;
   if not text:sub(start,start) == &#039;[&#039; then&lt;br /&gt;
      self:onDecodeError(&amp;quot;expected &#039;[&#039;&amp;quot;, text, start, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   local i = skip_whitespace(text, start + 1) -- +1 to skip the &#039;[&#039;&lt;br /&gt;
   local VALUE = self.strictTypes and self:newArray { } or { }&lt;br /&gt;
   if text:sub(i,i) == &#039;]&#039; then&lt;br /&gt;
      return VALUE, i + 1&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   local text_len = text:len()&lt;br /&gt;
   while i &amp;lt;= text_len do&lt;br /&gt;
      local val, new_i = grok_one(self, text, i)&lt;br /&gt;
&lt;br /&gt;
      table.insert(VALUE, val)&lt;br /&gt;
&lt;br /&gt;
      i = skip_whitespace(text, new_i)&lt;br /&gt;
&lt;br /&gt;
      --&lt;br /&gt;
      -- Expect now either &#039;]&#039; to end things, or a &#039;,&#039; to allow us to continue.&lt;br /&gt;
      --&lt;br /&gt;
      local c = text:sub(i,i)&lt;br /&gt;
      if c == &#039;]&#039; then&lt;br /&gt;
         return VALUE, i + 1&lt;br /&gt;
      end&lt;br /&gt;
      if text:sub(i, i) ~= &#039;,&#039; then&lt;br /&gt;
         self:onDecodeError(&amp;quot;expected comma or &#039;[&#039;&amp;quot;, text, i, etc)&lt;br /&gt;
      end&lt;br /&gt;
      i = skip_whitespace(text, i + 1)&lt;br /&gt;
   end&lt;br /&gt;
   self:onDecodeError(&amp;quot;unclosed &#039;[&#039;&amp;quot;, text, start, etc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
grok_one = function(self, text, start, etc)&lt;br /&gt;
   -- Skip any whitespace&lt;br /&gt;
   start = skip_whitespace(text, start)&lt;br /&gt;
&lt;br /&gt;
   if start &amp;gt; text:len() then&lt;br /&gt;
      self:onDecodeError(&amp;quot;unexpected end of string&amp;quot;, text, nil, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if text:find(&#039;^&amp;quot;&#039;, start) then&lt;br /&gt;
      return grok_string(self, text, start, etc)&lt;br /&gt;
&lt;br /&gt;
   elseif text:find(&#039;^[-0123456789 ]&#039;, start) then&lt;br /&gt;
      return grok_number(self, text, start, etc)&lt;br /&gt;
&lt;br /&gt;
   elseif text:find(&#039;^%{&#039;, start) then&lt;br /&gt;
      return grok_object(self, text, start, etc)&lt;br /&gt;
&lt;br /&gt;
   elseif text:find(&#039;^%[&#039;, start) then&lt;br /&gt;
      return grok_array(self, text, start, etc)&lt;br /&gt;
&lt;br /&gt;
   elseif text:find(&#039;^true&#039;, start) then&lt;br /&gt;
      return true, start + 4&lt;br /&gt;
&lt;br /&gt;
   elseif text:find(&#039;^false&#039;, start) then&lt;br /&gt;
      return false, start + 5&lt;br /&gt;
&lt;br /&gt;
   elseif text:find(&#039;^null&#039;, start) then&lt;br /&gt;
      return nil, start + 4&lt;br /&gt;
&lt;br /&gt;
   else&lt;br /&gt;
      self:onDecodeError(&amp;quot;can&#039;t parse JSON&amp;quot;, text, start, etc)&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OBJDEF:decode(text, etc)&lt;br /&gt;
   if type(self) ~= &#039;table&#039; or self.__index ~= OBJDEF then&lt;br /&gt;
      OBJDEF:onDecodeError(&amp;quot;JSON:decode must be called in method format&amp;quot;, nil, nil, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if text == nil then&lt;br /&gt;
      self:onDecodeOfNilError(string.format(&amp;quot;nil passed to JSON:decode()&amp;quot;), nil, nil, etc)&lt;br /&gt;
   elseif type(text) ~= &#039;string&#039; then&lt;br /&gt;
      self:onDecodeError(string.format(&amp;quot;expected string argument to JSON:decode(), got %s&amp;quot;, type(text)), nil, nil, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if text:match(&#039;^%s*$&#039;) then&lt;br /&gt;
      return nil&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if text:match(&#039;^%s*&amp;lt;&#039;) then&lt;br /&gt;
      -- Can&#039;t be JSON... we&#039;ll assume it&#039;s HTML&lt;br /&gt;
      self:onDecodeOfHTMLError(string.format(&amp;quot;html passed to JSON:decode()&amp;quot;), text, nil, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   --&lt;br /&gt;
   -- Ensure that it&#039;s not UTF-32 or UTF-16.&lt;br /&gt;
   -- Those are perfectly valid encodings for JSON (as per RFC 4627 section 3),&lt;br /&gt;
   -- but this package can&#039;t handle them.&lt;br /&gt;
   --&lt;br /&gt;
   if text:sub(1,1):byte() == 0 or (text:len() &amp;gt;= 2 and text:sub(2,2):byte() == 0) then&lt;br /&gt;
      self:onDecodeError(&amp;quot;JSON package groks only UTF-8, sorry&amp;quot;, text, nil, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   local success, value = pcall(grok_one, self, text, 1, etc)&lt;br /&gt;
   if success then&lt;br /&gt;
      return value&lt;br /&gt;
   else&lt;br /&gt;
      -- should never get here... JSON parse errors should have been caught earlier&lt;br /&gt;
      assert(false, value)&lt;br /&gt;
      return nil&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function backslash_replacement_function(c)&lt;br /&gt;
   if c == &amp;quot;\n&amp;quot; then&lt;br /&gt;
      return &amp;quot;\\n&amp;quot;&lt;br /&gt;
   elseif c == &amp;quot;\r&amp;quot; then&lt;br /&gt;
      return &amp;quot;\\r&amp;quot;&lt;br /&gt;
   elseif c == &amp;quot;\t&amp;quot; then&lt;br /&gt;
      return &amp;quot;\\t&amp;quot;&lt;br /&gt;
   elseif c == &amp;quot;\b&amp;quot; then&lt;br /&gt;
      return &amp;quot;\\b&amp;quot;&lt;br /&gt;
   elseif c == &amp;quot;\f&amp;quot; then&lt;br /&gt;
      return &amp;quot;\\f&amp;quot;&lt;br /&gt;
   elseif c == &#039;&amp;quot;&#039; then&lt;br /&gt;
      return &#039;\\&amp;quot;&#039;&lt;br /&gt;
   elseif c == &#039;\\&#039; then&lt;br /&gt;
      return &#039;\\\\&#039;&lt;br /&gt;
   else&lt;br /&gt;
      return string.format(&amp;quot;\\u%04x&amp;quot;, c:byte())&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local chars_to_be_escaped_in_JSON_string&lt;br /&gt;
   = &#039;[&#039;&lt;br /&gt;
   ..    &#039;&amp;quot;&#039;    -- class sub-pattern to match a double quote&lt;br /&gt;
   ..    &#039;%\\&#039;  -- class sub-pattern to match a backslash&lt;br /&gt;
   ..    &#039;%z&#039;   -- class sub-pattern to match a null&lt;br /&gt;
   ..    &#039;\001&#039; .. &#039;-&#039; .. &#039;\031&#039; -- class sub-pattern to match control characters&lt;br /&gt;
   .. &#039;]&#039;&lt;br /&gt;
&lt;br /&gt;
local function json_string_literal(value)&lt;br /&gt;
   local newval = value:gsub(chars_to_be_escaped_in_JSON_string, backslash_replacement_function)&lt;br /&gt;
   return &#039;&amp;quot;&#039; .. newval .. &#039;&amp;quot;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function object_or_array(self, T, etc)&lt;br /&gt;
   --&lt;br /&gt;
   -- We need to inspect all the keys... if there are any strings, we&#039;ll convert to a JSON&lt;br /&gt;
   -- object. If there are only numbers, it&#039;s a JSON array.&lt;br /&gt;
   --&lt;br /&gt;
   -- If we&#039;ll be converting to a JSON object, we&#039;ll want to sort the keys so that the&lt;br /&gt;
   -- end result is deterministic.&lt;br /&gt;
   --&lt;br /&gt;
   local string_keys = { }&lt;br /&gt;
   local seen_number_key = false&lt;br /&gt;
   local maximum_number_key&lt;br /&gt;
&lt;br /&gt;
   for key in pairs(T) do&lt;br /&gt;
      if type(key) == &#039;number&#039; then&lt;br /&gt;
         seen_number_key = true&lt;br /&gt;
         if not maximum_number_key or maximum_number_key &amp;lt; key then&lt;br /&gt;
            maximum_number_key = key&lt;br /&gt;
         end&lt;br /&gt;
      elseif type(key) == &#039;string&#039; then&lt;br /&gt;
         table.insert(string_keys, key)&lt;br /&gt;
      else&lt;br /&gt;
         self:onEncodeError(&amp;quot;can&#039;t encode table with a key of type &amp;quot; .. type(key), etc)&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if seen_number_key and #string_keys &amp;gt; 0 then&lt;br /&gt;
      --&lt;br /&gt;
      -- Mixed key types... don&#039;t know what to do, so bail&lt;br /&gt;
      --&lt;br /&gt;
      self:onEncodeError(&amp;quot;a table with both numeric and string keys could be an object or array; aborting&amp;quot;, etc)&lt;br /&gt;
&lt;br /&gt;
   elseif #string_keys == 0  then&lt;br /&gt;
      --&lt;br /&gt;
      -- An array&lt;br /&gt;
      --&lt;br /&gt;
      if seen_number_key then&lt;br /&gt;
         return nil, maximum_number_key -- an array&lt;br /&gt;
      else&lt;br /&gt;
         --&lt;br /&gt;
         -- An empty table...&lt;br /&gt;
         --&lt;br /&gt;
         if tostring(T) == &amp;quot;JSON array&amp;quot; then&lt;br /&gt;
            return nil&lt;br /&gt;
         elseif tostring(T) == &amp;quot;JSON object&amp;quot; then&lt;br /&gt;
            return { }&lt;br /&gt;
         else&lt;br /&gt;
            -- have to guess, so we&#039;ll pick array, since empty arrays are likely more common than empty objects&lt;br /&gt;
            return nil&lt;br /&gt;
         end&lt;br /&gt;
      end&lt;br /&gt;
   else&lt;br /&gt;
      --&lt;br /&gt;
      -- An object, so return a list of keys&lt;br /&gt;
      --&lt;br /&gt;
      table.sort(string_keys)&lt;br /&gt;
      return string_keys&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Encode&lt;br /&gt;
--&lt;br /&gt;
local encode_value -- must predeclare because it calls itself&lt;br /&gt;
function encode_value(self, value, parents, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   if value == nil then&lt;br /&gt;
      return &#039;null&#039;&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   if type(value) == &#039;string&#039; then&lt;br /&gt;
      return json_string_literal(value)&lt;br /&gt;
   elseif type(value) == &#039;number&#039; then&lt;br /&gt;
      if value ~= value then&lt;br /&gt;
         --&lt;br /&gt;
         -- NaN (Not a Number).&lt;br /&gt;
         -- JSON has no NaN, so we have to fudge the best we can. This should really be a package option.&lt;br /&gt;
         --&lt;br /&gt;
         return &amp;quot;null&amp;quot;&lt;br /&gt;
      elseif value &amp;gt;= math.huge then&lt;br /&gt;
         --&lt;br /&gt;
         -- Positive infinity. JSON has no INF, so we have to fudge the best we can. This should&lt;br /&gt;
         -- really be a package option. Note: at least with some implementations, positive infinity&lt;br /&gt;
         -- is both &amp;quot;&amp;gt;= math.huge&amp;quot; and &amp;quot;&amp;lt;= -math.huge&amp;quot;, which makes no sense but that&#039;s how it is.&lt;br /&gt;
         -- Negative infinity is properly &amp;quot;&amp;lt;= -math.huge&amp;quot;. So, we must be sure to check the &amp;quot;&amp;gt;=&amp;quot;&lt;br /&gt;
         -- case first.&lt;br /&gt;
         --&lt;br /&gt;
         return &amp;quot;1e+9999&amp;quot;&lt;br /&gt;
      elseif value &amp;lt;= -math.huge then&lt;br /&gt;
         --&lt;br /&gt;
         -- Negative infinity.&lt;br /&gt;
         -- JSON has no INF, so we have to fudge the best we can. This should really be a package option.&lt;br /&gt;
         --&lt;br /&gt;
         return &amp;quot;-1e+9999&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
         return tostring(value)&lt;br /&gt;
      end&lt;br /&gt;
   elseif type(value) == &#039;boolean&#039; then&lt;br /&gt;
      return tostring(value)&lt;br /&gt;
&lt;br /&gt;
   elseif type(value) ~= &#039;table&#039; then&lt;br /&gt;
      self:onEncodeError(&amp;quot;can&#039;t convert &amp;quot; .. type(value) .. &amp;quot; to JSON&amp;quot;, etc)&lt;br /&gt;
&lt;br /&gt;
   else&lt;br /&gt;
      --&lt;br /&gt;
      -- A table to be converted to either a JSON object or array.&lt;br /&gt;
      --&lt;br /&gt;
      local T = value&lt;br /&gt;
&lt;br /&gt;
      if parents[T] then&lt;br /&gt;
         self:onEncodeError(&amp;quot;table &amp;quot; .. tostring(T) .. &amp;quot; is a child of itself&amp;quot;, etc)&lt;br /&gt;
      else&lt;br /&gt;
         parents[T] = true&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      local result_value&lt;br /&gt;
&lt;br /&gt;
      local object_keys, maximum_number_key = object_or_array(self, T, etc)&lt;br /&gt;
      if maximum_number_key then&lt;br /&gt;
         --&lt;br /&gt;
         -- An array...&lt;br /&gt;
         --&lt;br /&gt;
         local ITEMS = { }&lt;br /&gt;
         for i = 1, maximum_number_key do&lt;br /&gt;
            table.insert(ITEMS, encode_value(self, T[i], parents, etc))&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
         result_value = &amp;quot;[&amp;quot; .. table.concat(ITEMS, &amp;quot;,&amp;quot;) .. &amp;quot;]&amp;quot;&lt;br /&gt;
      elseif object_keys then&lt;br /&gt;
         --&lt;br /&gt;
         -- An object&lt;br /&gt;
         --&lt;br /&gt;
&lt;br /&gt;
         --&lt;br /&gt;
         -- We&#039;ll always sort the keys, so that comparisons can be made on&lt;br /&gt;
         -- the results, etc. The actual order is not particularly&lt;br /&gt;
         -- important (e.g. it doesn&#039;t matter what character set we sort&lt;br /&gt;
         -- as); it&#039;s only important that it be deterministic... the same&lt;br /&gt;
         -- every time.&lt;br /&gt;
         --&lt;br /&gt;
         local PARTS = { }&lt;br /&gt;
         for _, key in ipairs(object_keys) do&lt;br /&gt;
            local encoded_key = encode_value(self, tostring(key), parents, etc)&lt;br /&gt;
            local encoded_val = encode_value(self, T[key],        parents, etc)&lt;br /&gt;
            table.insert(PARTS, string.format(&amp;quot;%s:%s&amp;quot;, encoded_key, encoded_val))&lt;br /&gt;
         end&lt;br /&gt;
         result_value = &amp;quot;{&amp;quot; .. table.concat(PARTS, &amp;quot;,&amp;quot;) .. &amp;quot;}&amp;quot;&lt;br /&gt;
      else&lt;br /&gt;
         --&lt;br /&gt;
         -- An empty array/object... we&#039;ll treat it as an array, though it should really be an option&lt;br /&gt;
         --&lt;br /&gt;
         result_value = &amp;quot;[]&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      parents[T] = false&lt;br /&gt;
      return result_value&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local encode_pretty_value -- must predeclare because it calls itself&lt;br /&gt;
function encode_pretty_value(self, value, parents, indent, etc)&lt;br /&gt;
&lt;br /&gt;
   if type(value) == &#039;string&#039; then&lt;br /&gt;
      return json_string_literal(value)&lt;br /&gt;
&lt;br /&gt;
   elseif type(value) == &#039;number&#039; then&lt;br /&gt;
      return tostring(value)&lt;br /&gt;
&lt;br /&gt;
   elseif type(value) == &#039;boolean&#039; then&lt;br /&gt;
      return tostring(value)&lt;br /&gt;
&lt;br /&gt;
   elseif type(value) == &#039;nil&#039; then&lt;br /&gt;
      return &#039;null&#039;&lt;br /&gt;
&lt;br /&gt;
   elseif type(value) ~= &#039;table&#039; then&lt;br /&gt;
      self:onEncodeError(&amp;quot;can&#039;t convert &amp;quot; .. type(value) .. &amp;quot; to JSON&amp;quot;, etc)&lt;br /&gt;
&lt;br /&gt;
   else&lt;br /&gt;
      --&lt;br /&gt;
      -- A table to be converted to either a JSON object or array.&lt;br /&gt;
      --&lt;br /&gt;
      local T = value&lt;br /&gt;
&lt;br /&gt;
      if parents[T] then&lt;br /&gt;
         self:onEncodeError(&amp;quot;table &amp;quot; .. tostring(T) .. &amp;quot; is a child of itself&amp;quot;, etc)&lt;br /&gt;
      end&lt;br /&gt;
      parents[T] = true&lt;br /&gt;
&lt;br /&gt;
      local result_value&lt;br /&gt;
&lt;br /&gt;
      local object_keys = object_or_array(self, T, etc)&lt;br /&gt;
      if not object_keys then&lt;br /&gt;
         --&lt;br /&gt;
         -- An array...&lt;br /&gt;
         --&lt;br /&gt;
         local ITEMS = { }&lt;br /&gt;
         for i = 1, #T do&lt;br /&gt;
            table.insert(ITEMS, encode_pretty_value(self, T[i], parents, indent, etc))&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
         result_value = &amp;quot;[ &amp;quot; .. table.concat(ITEMS, &amp;quot;, &amp;quot;) .. &amp;quot; ]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      else&lt;br /&gt;
&lt;br /&gt;
         --&lt;br /&gt;
         -- An object -- can keys be numbers?&lt;br /&gt;
         --&lt;br /&gt;
&lt;br /&gt;
         local KEYS = { }&lt;br /&gt;
         local max_key_length = 0&lt;br /&gt;
         for _, key in ipairs(object_keys) do&lt;br /&gt;
            local encoded = encode_pretty_value(self, tostring(key), parents, &amp;quot;&amp;quot;, etc)&lt;br /&gt;
            max_key_length = math.max(max_key_length, #encoded)&lt;br /&gt;
            table.insert(KEYS, encoded)&lt;br /&gt;
         end&lt;br /&gt;
         local key_indent = indent .. &amp;quot;    &amp;quot;&lt;br /&gt;
         local subtable_indent = indent .. string.rep(&amp;quot; &amp;quot;, max_key_length + 2 + 4)&lt;br /&gt;
         local FORMAT = &amp;quot;%s%&amp;quot; .. tostring(max_key_length) .. &amp;quot;s: %s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         local COMBINED_PARTS = { }&lt;br /&gt;
         for i, key in ipairs(object_keys) do&lt;br /&gt;
            local encoded_val = encode_pretty_value(self, T[key], parents, subtable_indent, etc)&lt;br /&gt;
            table.insert(COMBINED_PARTS, string.format(FORMAT, key_indent, KEYS[i], encoded_val))&lt;br /&gt;
         end&lt;br /&gt;
         result_value = &amp;quot;{\n&amp;quot; .. table.concat(COMBINED_PARTS, &amp;quot;,\n&amp;quot;) .. &amp;quot;\n&amp;quot; .. indent .. &amp;quot;}&amp;quot;&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      parents[T] = false&lt;br /&gt;
      return result_value&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OBJDEF:encode(value, etc)&lt;br /&gt;
   if type(self) ~= &#039;table&#039; or self.__index ~= OBJDEF then&lt;br /&gt;
      OBJDEF:onEncodeError(&amp;quot;JSON:encode must be called in method format&amp;quot;, etc)&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   local parents = {}&lt;br /&gt;
   return encode_value(self, value, parents, etc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OBJDEF:encode_pretty(value, etc)&lt;br /&gt;
   local parents = {}&lt;br /&gt;
   local subtable_indent = &amp;quot;&amp;quot;&lt;br /&gt;
   return encode_pretty_value(self, value, parents, subtable_indent, etc)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OBJDEF.__tostring()&lt;br /&gt;
   return &amp;quot;JSON encode/decode package&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
OBJDEF.__index = OBJDEF&lt;br /&gt;
&lt;br /&gt;
function OBJDEF:new(args)&lt;br /&gt;
   local new = { }&lt;br /&gt;
&lt;br /&gt;
   if args then&lt;br /&gt;
      for key, val in pairs(args) do&lt;br /&gt;
         new[key] = val&lt;br /&gt;
      end&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   return setmetatable(new, OBJDEF)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return OBJDEF:new()&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Version history:&lt;br /&gt;
--&lt;br /&gt;
--   20111207.5    Added support for the &#039;etc&#039; arguments, for better error reporting.&lt;br /&gt;
--&lt;br /&gt;
--   20110731.4    More feedback from David Kolf on how to make the tests for Nan/Infinity system independent.&lt;br /&gt;
--&lt;br /&gt;
--   20110730.3    Incorporated feedback from David Kolf at http://lua-users.org/wiki/JsonModules:&lt;br /&gt;
--&lt;br /&gt;
--                   * When encoding lua for JSON, Sparse numeric arrays are now handled by&lt;br /&gt;
--                     spitting out full arrays, such that&lt;br /&gt;
--                        JSON:encode({&amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, [10] = &amp;quot;ten&amp;quot;})&lt;br /&gt;
--                     returns&lt;br /&gt;
--                        [&amp;quot;one&amp;quot;,&amp;quot;two&amp;quot;,null,null,null,null,null,null,null,&amp;quot;ten&amp;quot;]&lt;br /&gt;
--&lt;br /&gt;
--                     In 20100810.2 and earlier, only up to the first non-null value would have been retained.&lt;br /&gt;
--&lt;br /&gt;
--                   * When encoding lua for JSON, numeric value NaN gets spit out as null, and infinity as &amp;quot;1+e9999&amp;quot;.&lt;br /&gt;
--                     Version 20100810.2 and earlier created invalid JSON in both cases.&lt;br /&gt;
--&lt;br /&gt;
--                   * Unicode surrogate pairs are now detected when decoding JSON.&lt;br /&gt;
--&lt;br /&gt;
--   20100810.2    added some checking to ensure that an invalid Unicode character couldn&#039;t leak in to the UTF-8 encoding&lt;br /&gt;
--&lt;br /&gt;
--   20100731.1    initial public release&lt;br /&gt;
--&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TSwitch&amp;diff=530</id>
		<title>Modèle:TSwitch</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TSwitch&amp;diff=530"/>
		<updated>2025-08-26T15:53:40Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{{1}}}/{{#ifexist:Template:{{{1}}}/{{int:lang}}|{{int:lang}}|{{CONTENTLANG}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
[[Category:Internationalization templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Protected/text/en&amp;diff=528</id>
		<title>Modèle:Protected/text/en</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Protected/text/en&amp;diff=528"/>
		<updated>2025-08-26T15:53:40Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages /&amp;gt;&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{#switch:{{{1}}}&lt;br /&gt;
|text1=This {{namespace}} has been protected&lt;br /&gt;
|default-reason=from editing to prevent vandalism.&lt;br /&gt;
|reason=because {{{reason}}}.&lt;br /&gt;
|text2=Please discuss changes on the [[{{TALKPAGENAME}}|talk page]] or [[COM:AN/P|request unprotection]].&lt;br /&gt;
|img-text1=This page is protected against editing.&lt;br /&gt;
|img-text2=This page is semi-protected against editing.&lt;br /&gt;
|img-text3=This page is protected against reuploading.&lt;br /&gt;
|img-text4=This page is semi-protected against reuploading.&lt;br /&gt;
|img-text5=This page is template protected against editing.&lt;br /&gt;
|error-text=Error: This page is not currently protected. Please [[COM:AN/P|request protection]] or remove the protection template.&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{translated tag|protection}}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Protected&amp;diff=526</id>
		<title>Modèle:Protected</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Protected&amp;diff=526"/>
		<updated>2025-08-26T15:53:40Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:{{{demo-edit|{{PROTECTIONLEVEL:edit}}}}}&lt;br /&gt;
&lt;br /&gt;
| sysop=&lt;br /&gt;
  {{#ifeq:{{{icon}}}|no||&amp;lt;indicator name=&amp;quot;protected&amp;quot;&amp;gt;[[File:Full-protection-shackle-block.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]&amp;lt;/indicator&amp;gt;}}&lt;br /&gt;
  &amp;lt;table class=&amp;quot;protected&amp;quot; style=&amp;quot;direction: {{#dir:{{int:Lang}}}}; background:var(--background-color-base,#fff); border:1px solid var(--border-color-base, #aaa); color: inherit; padding:.2em; margin:.5em auto;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;padding-right:4px; padding-left:4px;&amp;quot;&amp;gt;[[File:Full-protection-shackle-block.svg|40px|link=COM:P|Protected]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&#039;&#039;&#039;{{{{tSwitch|protected/text}}|text1}} {{#if:{{{1|}}}|{{{{tSwitch|protected/text}}|reason|reason={{{1}}}}}|{{{{tSwitch|protected/text}}|default-reason}}}}&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size:90%;&amp;quot;&amp;gt;{{{note|{{{{tSwitch|protected/text}}|text2}} }}}&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;/table&amp;gt;{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|{{#switch:{{NAMESPACE}}|{{ns:6}}=[[Category:Protected files]]|{{ns:2}}|{{ns:3}}|{{ns:10}}=|[[Category:Protected pages]]}} }}} }}&lt;br /&gt;
&lt;br /&gt;
| templateeditor=&lt;br /&gt;
 &amp;lt;indicator name=&amp;quot;protected&amp;quot;&amp;gt;[[File:Template-protection-shackle-brackets 2.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]&amp;lt;/indicator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| editautopatrolprotected =&lt;br /&gt;
  &amp;lt;indicator name=&amp;quot;protected&amp;quot;&amp;gt;[[File:Extended-protection-shackle-account-pro-plus.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]&amp;lt;/indicator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| autoconfirmed=&lt;br /&gt;
  &amp;lt;indicator name=&amp;quot;protected&amp;quot;&amp;gt;[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text2}}]]&amp;lt;/indicator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#ifeq:{{NAMESPACE}}|{{{demo-ns|{{ns:6}}}}}&lt;br /&gt;
  | {{#switch:{{{demo-upload|{{PROTECTIONLEVEL:upload}}}}}&lt;br /&gt;
&lt;br /&gt;
    | sysop=&lt;br /&gt;
      &amp;lt;indicator name=&amp;quot;protected&amp;quot;&amp;gt;[[File:Upload-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text3}}]]&amp;lt;/indicator&amp;gt;{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Upload protected files]]}}} }}&lt;br /&gt;
&lt;br /&gt;
    | autoconfirmed=&lt;br /&gt;
      &amp;lt;indicator name=&amp;quot;protected&amp;quot;&amp;gt;[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text4}}]]&amp;lt;/indicator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    | #default={{ifsandbox|1=|2=&lt;br /&gt;
      &amp;lt;div class=&amp;quot;error&amp;quot;&amp;gt;{{{{tSwitch|protected/text}}|error-text}}&amp;lt;/div&amp;gt;{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}}&lt;br /&gt;
    }}&lt;br /&gt;
  |{{ifsandbox|1=|2=&amp;lt;div class=&amp;quot;error&amp;quot;&amp;gt;{{{{tSwitch|protected/text}}|error-text}}&amp;lt;/div&amp;gt;{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}}&lt;br /&gt;
  }}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:TemplateBox&amp;diff=522</id>
		<title>Module:TemplateBox</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:TemplateBox&amp;diff=522"/>
		<updated>2025-08-26T15:53:40Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
    @exports&lt;br /&gt;
        usagesample( frame )&lt;br /&gt;
        argcount( frame )&lt;br /&gt;
        args2table( args, onGetKey, forCustom )&lt;br /&gt;
        paramtable( frame )&lt;br /&gt;
        description( frame )&lt;br /&gt;
        templatedata( frame )&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Helper function, not exposed&lt;br /&gt;
local function tobool(st)&lt;br /&gt;
    if type( st ) == &#039;string&#039; then&lt;br /&gt;
        return st == &#039;true&#039;&lt;br /&gt;
    else&lt;br /&gt;
        return not not st&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Required to determine in which languages the interface texts without langcode are&lt;br /&gt;
local contentLangcode = mw.language.getContentLanguage():getCode()&lt;br /&gt;
-- Forward declaration&lt;br /&gt;
local msg, langIsInit, userLang&lt;br /&gt;
local messagePrefix = &amp;quot;templatedata-doc-&amp;quot;&lt;br /&gt;
local i18n = {}&lt;br /&gt;
i18n[&#039;params&#039;] = &amp;quot;Template parameters&amp;quot;&lt;br /&gt;
i18n[&#039;param-name&#039;] = &amp;quot;Parameter&amp;quot;&lt;br /&gt;
i18n[&#039;param-desc&#039;] = &amp;quot;Description&amp;quot;&lt;br /&gt;
i18n[&#039;param-type&#039;] = &amp;quot;Type&amp;quot;&lt;br /&gt;
i18n[&#039;param-default&#039;] = &amp;quot;Default&amp;quot;&lt;br /&gt;
i18n[&#039;param-status&#039;] = &amp;quot;Status&amp;quot;&lt;br /&gt;
i18n[&#039;param-status-optional&#039;] = &amp;quot;optional&amp;quot;&lt;br /&gt;
i18n[&#039;param-status-required&#039;] = &amp;quot;required&amp;quot;&lt;br /&gt;
i18n[&#039;param-status-suggested&#039;] = &amp;quot;suggested&amp;quot;&lt;br /&gt;
i18n[&#039;param-status-deprecated&#039;] = &amp;quot;deprecated&amp;quot;&lt;br /&gt;
i18n[&#039;param-default-empty&#039;] = &amp;quot;empty&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local function initLangModule(frame)&lt;br /&gt;
    if langIsInit then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    userLang = frame:preprocess( &#039;{{int:lang}}&#039; )&lt;br /&gt;
&lt;br /&gt;
    --! From [[:de:Modul:Expr]]; by [[:de:User:PerfektesChaos]]; &lt;br /&gt;
    --! Derivative work: Rillke&lt;br /&gt;
    msg = function( key )&lt;br /&gt;
        -- Retrieve localized message string in content language&lt;br /&gt;
        -- Precondition:&lt;br /&gt;
        --     key  -- string; message ID&lt;br /&gt;
        -- Postcondition:&lt;br /&gt;
        --     Return some message string&lt;br /&gt;
        -- Uses:&lt;br /&gt;
        --     &amp;gt;  messagePrefix&lt;br /&gt;
        --     &amp;gt;  i18n&lt;br /&gt;
        --     &amp;gt;  userLang&lt;br /&gt;
        --     mw.message.new()&lt;br /&gt;
        local m = mw.message.new( messagePrefix .. key )&lt;br /&gt;
        local r = false&lt;br /&gt;
        if m:isBlank() then&lt;br /&gt;
            r = i18n[ key ]&lt;br /&gt;
        else&lt;br /&gt;
            m:inLanguage( userLang )&lt;br /&gt;
            r = m:plain()&lt;br /&gt;
        end&lt;br /&gt;
        if not r then&lt;br /&gt;
            r = &#039;(((&#039;.. key .. &#039;)))&#039;&lt;br /&gt;
        end&lt;br /&gt;
        return r&lt;br /&gt;
    end -- msg()&lt;br /&gt;
    &lt;br /&gt;
    langIsInit = true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- A &amp;quot;hash&amp;quot; / table of everything TemplateData takes&lt;br /&gt;
-- to ease maintenance.&lt;br /&gt;
&lt;br /&gt;
-- The type is automatically determined if t is omitted.&lt;br /&gt;
-- If the type does not match or can&#039;t be converted, an error will be thrown!&lt;br /&gt;
-- Available types (LUA-Types with exceptions): &lt;br /&gt;
--      InterfaceText, boolean, number, selection, table, string&lt;br /&gt;
-- selection*: - requires a selection-string of pipe-separated possibilities to be supplied&lt;br /&gt;
-- InterfaceText*: A free-form string (no wikitext) in the content-language of the wiki, or, &lt;br /&gt;
-- an object containing those strings keyed by language code.&lt;br /&gt;
local paraminfoTemplate = {&lt;br /&gt;
    description = {&lt;br /&gt;
        default = &#039;&#039;,&lt;br /&gt;
        t = &#039;InterfaceText&#039;,&lt;br /&gt;
        alias = &#039;desc&#039;&lt;br /&gt;
    },&lt;br /&gt;
    format = {&lt;br /&gt;
		default = &#039;inline&#039;,&lt;br /&gt;
		t = &#039;selection&#039;,&lt;br /&gt;
		selection = &#039;inline|block&#039;,&lt;br /&gt;
		alias = &#039;print&#039;,&lt;br /&gt;
		extract = function(pargs, number, paramVal)&lt;br /&gt;
			local m = { multi = &#039;block&#039;, one = &#039;inline&#039;, infobox = &#039;block&#039; }&lt;br /&gt;
            return m[paramVal] or &#039;inline&#039;&lt;br /&gt;
        end&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
local paraminfoTLParams = {&lt;br /&gt;
    label = {&lt;br /&gt;
        default = &#039;&#039;,&lt;br /&gt;
        t = &#039;InterfaceText&#039;&lt;br /&gt;
    },&lt;br /&gt;
    required = {&lt;br /&gt;
        default = false,&lt;br /&gt;
        extract = function(pargs, number, paramVal)&lt;br /&gt;
            local req = (pargs[number .. &#039;stat&#039;] == &#039;required&#039;)&lt;br /&gt;
            return tobool( paramVal or req )&lt;br /&gt;
        end&lt;br /&gt;
    },&lt;br /&gt;
    suggested = {&lt;br /&gt;
        default = false,&lt;br /&gt;
        extract = function(pargs, number, paramVal)&lt;br /&gt;
            local sugg = (pargs[number .. &#039;stat&#039;] == &#039;suggested&#039;)&lt;br /&gt;
            return tobool( paramVal or sugg )&lt;br /&gt;
        end&lt;br /&gt;
    },&lt;br /&gt;
    description = {&lt;br /&gt;
        default = &#039;&#039;,&lt;br /&gt;
        t = &#039;InterfaceText&#039;,&lt;br /&gt;
        alias = &#039;d&#039;&lt;br /&gt;
    },&lt;br /&gt;
    deprecated = {&lt;br /&gt;
        default = false,&lt;br /&gt;
        extract = function(pargs, number, paramVal)&lt;br /&gt;
            local depr = (pargs[number .. &#039;stat&#039;] == &#039;deprecated&#039;)&lt;br /&gt;
            return tobool( paramVal or depr )&lt;br /&gt;
        end&lt;br /&gt;
    },&lt;br /&gt;
    aliases = {&lt;br /&gt;
        default = &#039;&#039;,&lt;br /&gt;
        t = &#039;table&#039;,&lt;br /&gt;
        extract = function(pargs, number, paramVal)&lt;br /&gt;
            local key = number .. &#039;aliases&#039;&lt;br /&gt;
            local tdkey = key .. &#039;-td&#039;&lt;br /&gt;
            local aliases = pargs[tdkey] or pargs[key]&lt;br /&gt;
            if aliases and mw.text.trim( aliases ) ~= &#039;&#039; then&lt;br /&gt;
                local cleaned = {}&lt;br /&gt;
                for m in mw.text.gsplit( aliases, &#039;/&#039;, true ) do&lt;br /&gt;
                    cleaned[#cleaned+1] = mw.text.trim(m)&lt;br /&gt;
                end&lt;br /&gt;
                return cleaned&lt;br /&gt;
            else&lt;br /&gt;
                return nil&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    },&lt;br /&gt;
    default = {&lt;br /&gt;
        default = &#039;&#039;,&lt;br /&gt;
        t = &#039;string&#039;,&lt;br /&gt;
        alias = &#039;def&#039;&lt;br /&gt;
    },&lt;br /&gt;
    type = {&lt;br /&gt;
        default = &#039;unknown&#039;,&lt;br /&gt;
        t = &#039;selection&#039;,&lt;br /&gt;
        selection = &#039;unknown|number|string|string/wiki-user-name|string/wiki-page-name|string/line|line|wiki-page-name|wiki-file-name|wiki-user-name|wiki-template-name|content|unbalanced-wikitext|date|url|boolean&#039;&lt;br /&gt;
    },&lt;br /&gt;
    inherits = {&lt;br /&gt;
        default = nil,&lt;br /&gt;
        t = &#039;string&#039;&lt;br /&gt;
    },&lt;br /&gt;
    autovalue = {&lt;br /&gt;
        default = &#039;&#039;,&lt;br /&gt;
        t = &#039;string&#039;,&lt;br /&gt;
        alias = &#039;av&#039;,&lt;br /&gt;
    },&lt;br /&gt;
    suggestedvalues = {&lt;br /&gt;
        default = &#039;&#039;,&lt;br /&gt;
        t = &#039;table&#039;,&lt;br /&gt;
        alias = &#039;sv&#039;,&lt;br /&gt;
        extract = function(pargs, number, paramVal)&lt;br /&gt;
            if paramVal == nil then&lt;br /&gt;
                return nil&lt;br /&gt;
            end&lt;br /&gt;
            local cleaned = {}&lt;br /&gt;
            for m in mw.text.gsplit( paramVal, &#039;/&#039;, true ) do&lt;br /&gt;
                cleaned[#cleaned+1] = mw.text.trim(m)&lt;br /&gt;
            end&lt;br /&gt;
            return cleaned&lt;br /&gt;
        end,&lt;br /&gt;
    },&lt;br /&gt;
    -- sets will be treated differently because we can only have a plain structure in wikitext&lt;br /&gt;
}&lt;br /&gt;
local tableLayout = {&lt;br /&gt;
    {&lt;br /&gt;
        col = &#039;param-name&#039;,&lt;br /&gt;
        width = &#039;15%&#039;,&lt;br /&gt;
        extract = function(item, renderCell, monolingual)&lt;br /&gt;
            local alias, param = &#039;&#039;, item.key&lt;br /&gt;
            local aliasTT = &#039;&amp;lt;span style=&amp;quot;font-family: monospace; color:#777; border:1px solid #6A6A6A&amp;quot;&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
            param = &#039;&amp;lt;code&amp;gt;&#039; .. param .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
            if item.aliases then&lt;br /&gt;
                alias = aliasTT .. table.concat(item.aliases, &#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&#039; .. aliasTT) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
                param = table.concat({param, &#039;&amp;lt;br /&amp;gt;&amp;lt;div&amp;gt;&#039;, alias, &#039;&amp;lt;/div&amp;gt;&#039;})&lt;br /&gt;
            end&lt;br /&gt;
            renderCell(param)&lt;br /&gt;
        end&lt;br /&gt;
    },  {&lt;br /&gt;
        col = &#039;param-desc&#039;,&lt;br /&gt;
        cols = 2,&lt;br /&gt;
        width = &#039;65%&#039;,&lt;br /&gt;
        extract = function(item, renderCell, monolingual)&lt;br /&gt;
            local label = item.label or &#039;&#039;&lt;br /&gt;
            label = monolingual(label)&lt;br /&gt;
            local labelLen = #label&lt;br /&gt;
            local colspan = 2 - labelLen&lt;br /&gt;
        &lt;br /&gt;
            if labelLen &amp;gt; 0 then&lt;br /&gt;
                renderCell(label)&lt;br /&gt;
            end&lt;br /&gt;
        &lt;br /&gt;
            renderCell(monolingual(item.description), colspan)&lt;br /&gt;
        end&lt;br /&gt;
    },  {&lt;br /&gt;
        col = &#039;param-default&#039;,&lt;br /&gt;
        width = &#039;10%&#039;,&lt;br /&gt;
        extract = function(item, renderCell, monolingual)&lt;br /&gt;
            local def = monolingual(item.default) or &#039;&#039;&lt;br /&gt;
            if #def == 0 then&lt;br /&gt;
                def = &#039;&amp;lt;span class=&amp;quot;mw-templatedata-doc-muted&amp;quot; style=&amp;quot;color:#777; font-variant:small-caps&amp;quot;&amp;gt;&#039; .. msg(&#039;param-default-empty&#039;) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
            end&lt;br /&gt;
            renderCell(def)&lt;br /&gt;
        end&lt;br /&gt;
    },  {&lt;br /&gt;
        col = &#039;param-status&#039;,&lt;br /&gt;
        width = &#039;10%&#039;,&lt;br /&gt;
        extract = function(item, renderCell, monolingual)&lt;br /&gt;
            local stat = msg(&#039;param-status-optional&#039;)&lt;br /&gt;
            if item.required then&lt;br /&gt;
                stat = &#039;&amp;lt;b&amp;gt;&#039; .. msg(&#039;param-status-required&#039;) .. &#039;&amp;lt;/b&amp;gt;&#039;&lt;br /&gt;
            elseif item.deprecated then&lt;br /&gt;
                stat = msg(&#039;param-status-deprecated&#039;)&lt;br /&gt;
            elseif item.suggested then&lt;br /&gt;
                stat = msg(&#039;param-status-suggested&#039;)&lt;br /&gt;
            end&lt;br /&gt;
            renderCell(stat)&lt;br /&gt;
        end&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Initialize param info&lt;br /&gt;
-- Avoids having to add redundant information to the preceding tables&lt;br /&gt;
local function init( which )&lt;br /&gt;
    local setDefault = function(v)&lt;br /&gt;
        if v.t == nil and v.default ~= nil then&lt;br /&gt;
            v.t = type( v.default )&lt;br /&gt;
        end&lt;br /&gt;
        if v.selection then&lt;br /&gt;
        	local selection = mw.text.split(v.selection, &#039;|&#039;, true)&lt;br /&gt;
        	v.selection = {}&lt;br /&gt;
        	for _, sel in ipairs(selection) do&lt;br /&gt;
        		v.selection[sel] = true&lt;br /&gt;
        	end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    for a, v in pairs( which ) do&lt;br /&gt;
        setDefault(v)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
local function initParamTables()&lt;br /&gt;
    init( paraminfoTemplate )&lt;br /&gt;
    init( paraminfoTLParams )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
-------------------- USAGE PART ----------------------&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
function p.argcount( frame )&lt;br /&gt;
    local pargs = ( frame:getParent() or {} ).args or {}&lt;br /&gt;
    local ac = 0&lt;br /&gt;
    for i, arg in pairs( pargs ) do&lt;br /&gt;
        if (&#039;number&#039; == type(i)) then&lt;br /&gt;
            ac = ac + 1&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ac&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.usagesample( frame )&lt;br /&gt;
    local pargs = ( frame:getParent() or {} ).args or {}&lt;br /&gt;
    local multiline = (pargs.lines == &#039;multi&#039; or pargs.print == &#039;multi&#039; or pargs.print == &#039;infobox&#039;)&lt;br /&gt;
    local align = pargs.print == &#039;infobox&#039;&lt;br /&gt;
    if not pargs.lines and not pargs.print and pargs.type == &#039;infobox&#039; then&lt;br /&gt;
        multiline = true&lt;br /&gt;
        align = true&lt;br /&gt;
    end&lt;br /&gt;
    local sepStart = &#039; |&#039;&lt;br /&gt;
    local sepEnd = multiline  and &#039;\n&#039; or &#039;&#039;&lt;br /&gt;
    local sep = sepEnd&lt;br /&gt;
    local subst = #(pargs.mustbesubst or &#039;&#039;) &amp;gt; 0 and &#039;subst:&#039; or &#039;&#039;&lt;br /&gt;
    local beforeEqual = multiline  and &#039; &#039; or &#039;&#039;&lt;br /&gt;
    local equal = beforeEqual .. &#039;= &#039;&lt;br /&gt;
    local templateTitle = pargs.name or &#039;&#039;&lt;br /&gt;
    local args, argName, result = {}&lt;br /&gt;
    local maxArgLen, eachArg = 0&lt;br /&gt;
    sep = sep .. sepStart&lt;br /&gt;
    &lt;br /&gt;
    local sparseIpairs = require(&#039;Module:TableTools&#039;).sparseIpairs&lt;br /&gt;
    local comapareLegacyVal = function(val)&lt;br /&gt;
        return val == &#039;optional-&#039; or val == &#039;deprecated&#039;&lt;br /&gt;
    end&lt;br /&gt;
    local shouldShow = function(i)&lt;br /&gt;
        if comapareLegacyVal(pargs[i .. &#039;stat&#039;]) or&lt;br /&gt;
            comapareLegacyVal(pargs[i .. &#039;stat-td&#039;]) or&lt;br /&gt;
            pargs[i .. &#039;deprecated&#039;] == true then &lt;br /&gt;
                return false&lt;br /&gt;
            end&lt;br /&gt;
        return true&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    eachArg = function(cb)&lt;br /&gt;
        for i, arg in sparseIpairs( pargs ) do&lt;br /&gt;
            if (&#039;number&#039; == type(i)) then&lt;br /&gt;
                argName = mw.text.trim( arg or &#039;&#039; )&lt;br /&gt;
                if #argName == 0 then&lt;br /&gt;
                    argName = tostring(i)&lt;br /&gt;
                end&lt;br /&gt;
                &lt;br /&gt;
                if shouldShow(i) then&lt;br /&gt;
                    cb(argName)&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if align then&lt;br /&gt;
        eachArg(function( arg )&lt;br /&gt;
            local argL = #arg&lt;br /&gt;
            maxArgLen = argL &amp;gt; maxArgLen and argL or maxArgLen&lt;br /&gt;
        end)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    eachArg(function( arg )&lt;br /&gt;
        local space = &#039;&#039;&lt;br /&gt;
        if align then&lt;br /&gt;
            space = (&#039;&amp;amp;nbsp;&#039;):rep(maxArgLen - #arg)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert( args, argName .. space .. equal )&lt;br /&gt;
    end)&lt;br /&gt;
    &lt;br /&gt;
    if #args == 0 then&lt;br /&gt;
        sep = &#039;&#039;&lt;br /&gt;
        sepEnd = &#039;&#039;&lt;br /&gt;
        sepStart = &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    if #templateTitle == 0 then&lt;br /&gt;
        templateTitle = mw.title.getCurrentTitle().text&lt;br /&gt;
    end&lt;br /&gt;
    result = table.concat( args, sep )&lt;br /&gt;
    result = table.concat({ mw.text.nowiki(&#039;{{&#039;), subst, templateTitle, sep, result, sepEnd, &#039;}}&#039; })&lt;br /&gt;
    if multiline then&lt;br /&gt;
        -- Preserve whitespace in front of new lines&lt;br /&gt;
        result = frame:callParserFunction{ name = &#039;#tag&#039;, args = { &#039;poem&#039;, result } }&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
------------------- GENERAL PART ---------------------&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
function p.args2table(args, onGetKey, consumer)&lt;br /&gt;
    initParamTables()&lt;br /&gt;
    &lt;br /&gt;
    local sets, asParamArray, laxtype, processParams, processDesc, unstrip&lt;br /&gt;
    if &#039;paramtable&#039; == consumer then&lt;br /&gt;
        asParamArray = true&lt;br /&gt;
        processParams = true&lt;br /&gt;
        laxtype = true&lt;br /&gt;
    elseif &#039;templatedata&#039; == consumer then&lt;br /&gt;
        sets = true&lt;br /&gt;
        processParams = true&lt;br /&gt;
        processDesc = true&lt;br /&gt;
        unstrip = true&lt;br /&gt;
    elseif &#039;description&#039; == consumer then&lt;br /&gt;
        processDesc = true&lt;br /&gt;
        laxtype = true&lt;br /&gt;
    end&lt;br /&gt;
    -- All kind of strange stuff with the arguments is done, so play safe and make a copy&lt;br /&gt;
    local pargs = mw.clone( args )&lt;br /&gt;
    -- Array-like table containing all parameter-numbers that were passed&lt;br /&gt;
    local templateArgs = {}&lt;br /&gt;
    -- Arguments that are localized (i.e. the user passed  1desc-en=English description of parameter one)&lt;br /&gt;
    local i18nTemplateArgs = {}&lt;br /&gt;
    -- Ensure that tables end up as array/object (esp. when they are empty)&lt;br /&gt;
    local tdata = {description=&amp;quot;&amp;quot;, params={}, sets={}}&lt;br /&gt;
    local isObject = { __tostring = function() return &amp;quot;JSON object&amp;quot; end }    isObject.__index = isObject&lt;br /&gt;
    local isArray  = { __tostring = function() return &amp;quot;JSON array&amp;quot;  end }    isArray.__index  = isArray&lt;br /&gt;
    setmetatable(tdata.params, isObject)&lt;br /&gt;
    setmetatable(tdata.sets, isArray)&lt;br /&gt;
    onGetKey = onGetKey or function( prefix, alias, param )&lt;br /&gt;
        local key, key2, tdkey, tdkey2&lt;br /&gt;
        key = prefix .. (alias or param)&lt;br /&gt;
        key2 = prefix .. param&lt;br /&gt;
        tdkey = key .. &#039;-td&#039;&lt;br /&gt;
        tdkey2 = key2 .. &#039;-td&#039;&lt;br /&gt;
        return tdkey, tdkey2, key, key2&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local extractData = function( pi, number )&lt;br /&gt;
        local prefix = number or &#039;&#039;&lt;br /&gt;
        local ppv, paramVal&lt;br /&gt;
        local key1, key2, key3, key4&lt;br /&gt;
        local paramKey, paramTable, processKey&lt;br /&gt;
        if number then&lt;br /&gt;
            paramKey = mw.text.trim( pargs[number] )&lt;br /&gt;
            if &#039;&#039; == paramKey then&lt;br /&gt;
                paramKey = tostring( number )&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            paramTable = {}&lt;br /&gt;
            if asParamArray then&lt;br /&gt;
                paramTable.key = paramKey&lt;br /&gt;
                table.insert(tdata.params, paramTable)&lt;br /&gt;
            else&lt;br /&gt;
                tdata.params[paramKey] = paramTable&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        for p, info in pairs( pi ) do&lt;br /&gt;
            key1, key2, key3, key4 = onGetKey(prefix, info.alias, p)&lt;br /&gt;
            paramVal = nil&lt;br /&gt;
            &lt;br /&gt;
            processKey = function(key)&lt;br /&gt;
                if paramVal ~= nil then return end&lt;br /&gt;
                local plain, multilingual = pargs[key], i18nTemplateArgs[key]&lt;br /&gt;
                paramVal = multilingual or plain&lt;br /&gt;
            end&lt;br /&gt;
            processKey( key1 )&lt;br /&gt;
            processKey( key2 )&lt;br /&gt;
            processKey( key3 )&lt;br /&gt;
            processKey( key4 )&lt;br /&gt;
            &lt;br /&gt;
            -- Ensure presence of entry in content language&lt;br /&gt;
            ppv = pargs[key1] or pargs[key2] or pargs[key3] or pargs[key4] or info.default&lt;br /&gt;
            if &#039;table&#039; == type( paramVal ) then&lt;br /&gt;
                if (nil == paramVal[contentLangcode]) then&lt;br /&gt;
                    paramVal[contentLangcode] = ppv&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                paramVal = ppv&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            if &#039;function&#039; == type( info.extract ) then&lt;br /&gt;
                if &#039;string&#039; == type( paramVal ) then&lt;br /&gt;
                    paramVal = mw.text.trim( paramVal )&lt;br /&gt;
                    if &#039;&#039; == paramVal then&lt;br /&gt;
                        paramVal = nil&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                paramVal = info.extract( pargs, number, paramVal )&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            local insertValue = function()&lt;br /&gt;
                if number then&lt;br /&gt;
                    paramTable[p] = paramVal&lt;br /&gt;
                else&lt;br /&gt;
                    tdata[p] = paramVal&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            if info.selection then&lt;br /&gt;
                if info.selection[paramVal] then&lt;br /&gt;
                    insertValue()&lt;br /&gt;
                end&lt;br /&gt;
            elseif &#039;InterfaceText&#039; == info.t then&lt;br /&gt;
                if ({ table=1, string=1 })[type( paramVal )] then&lt;br /&gt;
                    insertValue()&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                local paramType = type( paramVal )&lt;br /&gt;
                if &#039;string&#039; == info.t and &#039;string&#039; == paramType then&lt;br /&gt;
                    paramVal = mw.text.trim( paramVal )&lt;br /&gt;
                    if &#039;&#039; ~= paramVal then&lt;br /&gt;
                        insertValue()&lt;br /&gt;
                    end&lt;br /&gt;
                elseif &#039;boolean&#039; == info.t then&lt;br /&gt;
                    paramVal = tobool(paramVal)&lt;br /&gt;
                    insertValue()&lt;br /&gt;
                elseif &#039;number&#039; == info.t then&lt;br /&gt;
                    paramVal = tonumber(paramVal)&lt;br /&gt;
                    insertValue()&lt;br /&gt;
                elseif paramType == info.t then&lt;br /&gt;
                    insertValue()&lt;br /&gt;
                elseif paramType == &#039;nil&#039; then&lt;br /&gt;
                    -- Do nothing&lt;br /&gt;
                elseif not laxtype and &#039;string&#039; == info.t and &#039;table&#039; == paramType then&lt;br /&gt;
                    -- Convert multilingual object into content language string&lt;br /&gt;
                    paramVal = paramVal[contentLangcode]&lt;br /&gt;
                    insertValue()&lt;br /&gt;
                else&lt;br /&gt;
                    if laxtype then&lt;br /&gt;
                        insertValue()&lt;br /&gt;
                    else&lt;br /&gt;
                        error( p .. &#039;: Is of type &#039; ..  paramType .. &#039; but should be of type &#039; .. (info.t or &#039;unknown&#039;), 1 )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        -- Now, treat sets&lt;br /&gt;
        if sets then&lt;br /&gt;
            key1 = prefix .. &#039;set-td&#039;&lt;br /&gt;
            key2 = prefix .. &#039;set&#039;&lt;br /&gt;
            paramVal = pargs[key1] or pargs[key2]&lt;br /&gt;
            if paramVal then&lt;br /&gt;
                local found = false&lt;br /&gt;
                for i, s in ipairs( tdata.sets ) do&lt;br /&gt;
                    if s.label == paramVal then&lt;br /&gt;
                        table.insert( s.params, p )&lt;br /&gt;
                        found = true&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                if not found then&lt;br /&gt;
                    table.insert( tdata.sets, {&lt;br /&gt;
                        label = paramVal, &lt;br /&gt;
                        params = { p }&lt;br /&gt;
                    } )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- First, analyse the structure of the provided arguments&lt;br /&gt;
    for a, v in pairs( pargs ) do&lt;br /&gt;
        if unstrip then&lt;br /&gt;
            v = mw.text.unstrip( v )&lt;br /&gt;
            pargs[a] = v&lt;br /&gt;
        end&lt;br /&gt;
        if type( a ) == &#039;number&#039; then&lt;br /&gt;
            table.insert( templateArgs, a )&lt;br /&gt;
        else&lt;br /&gt;
            local argSplit = mw.text.split( a, &#039;-&#039;, true )&lt;br /&gt;
            local argUnitl = {}&lt;br /&gt;
            local argAfter = {}&lt;br /&gt;
            local isTDArg = false&lt;br /&gt;
            local containsTD = a:find( &#039;-td&#039;, 1, true )&lt;br /&gt;
            for i, part in ipairs( argSplit ) do&lt;br /&gt;
                if isTDArg or (containsTD == nil and i &amp;gt; 1) then&lt;br /&gt;
                    -- This is likely a language version&lt;br /&gt;
                    table.insert( argAfter, part )&lt;br /&gt;
                else&lt;br /&gt;
                    table.insert( argUnitl, part )&lt;br /&gt;
                end&lt;br /&gt;
                if part == &#039;td&#039; then&lt;br /&gt;
                    isTDArg = true&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if #argAfter &amp;gt; 0 then&lt;br /&gt;
                argUnitl = table.concat( argUnitl, &#039;-&#039; )&lt;br /&gt;
                argAfter = table.concat( argAfter, &#039;-&#039; )&lt;br /&gt;
                i18nTemplateArgs[argUnitl] = i18nTemplateArgs[argUnitl] or {}&lt;br /&gt;
                i18nTemplateArgs[argUnitl][argAfter] = v&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- Then, start building the actual template&lt;br /&gt;
    if processDesc then&lt;br /&gt;
        extractData( paraminfoTemplate )&lt;br /&gt;
    end&lt;br /&gt;
    if processParams then&lt;br /&gt;
        -- Ensure that `templateArgs` contains indicies in ascending order&lt;br /&gt;
        table.sort( templateArgs )&lt;br /&gt;
        for i, number in pairs( templateArgs ) do&lt;br /&gt;
            extractData( paraminfoTLParams, number )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return tdata, #templateArgs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
------------ CUSTOM PARAMETER TABLE PART -------------&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- A custom key-pref-function&lt;br /&gt;
local customOnGetKey = function( prefix, alias, param )&lt;br /&gt;
    local key, key2, tdkey, tdkey2&lt;br /&gt;
    key = prefix .. (alias or param)&lt;br /&gt;
    key2 = prefix .. param&lt;br /&gt;
    tdkey = key .. &#039;-td&#039;&lt;br /&gt;
    tdkey2 = key2 .. &#039;-td&#039;&lt;br /&gt;
    return key2, key, tdkey2, tdkey&lt;br /&gt;
end&lt;br /&gt;
local toUserLanguage = function(input)&lt;br /&gt;
    if type(input) == &#039;table&#039; then&lt;br /&gt;
        input = require( &#039;Module:LangSwitch&#039; )._langSwitch( input, userLang ) or &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return input&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.description(frame)&lt;br /&gt;
    local pargs = ( frame:getParent() or {} ).args or {}&lt;br /&gt;
&lt;br /&gt;
    -- Initialize the language-related stuff&lt;br /&gt;
    initLangModule(frame)&lt;br /&gt;
&lt;br /&gt;
    local tdata, paramLen&lt;br /&gt;
    tdata, paramLen = p.args2table(pargs, customOnGetKey, &#039;description&#039;)&lt;br /&gt;
    return toUserLanguage(tdata.description)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.paramtable(frame)&lt;br /&gt;
    local pargs = ( frame:getParent() or {} ).args or {}&lt;br /&gt;
    local tdata, paramLen&lt;br /&gt;
    &lt;br /&gt;
    if &#039;only&#039; == pargs.useTemplateData then&lt;br /&gt;
        return &#039;param table - output suppressed&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Initialize the language-related stuff&lt;br /&gt;
    initLangModule(frame)&lt;br /&gt;
&lt;br /&gt;
    tdata, paramLen = p.args2table(pargs, customOnGetKey, &#039;paramtable&#039;)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    if 0 == paramLen then&lt;br /&gt;
        return &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local row, rows = &#039;&#039;, {}&lt;br /&gt;
    local renderCell = function(wikitext, colspan)&lt;br /&gt;
        local colspan, oTd = colspan or 1, &#039;&amp;lt;td&amp;gt;&#039;&lt;br /&gt;
        if colspan &amp;gt; 1 then&lt;br /&gt;
            oTd = &#039;&amp;lt;td colspan=&amp;quot;&#039; .. colspan .. &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        end&lt;br /&gt;
        row = table.concat({ row, oTd, wikitext, &#039;&amp;lt;/td&amp;gt;&#039; })&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Create the header&lt;br /&gt;
    for i, field in ipairs( tableLayout ) do&lt;br /&gt;
        local style = &#039; style=&amp;quot;width:&#039; .. field.width .. &#039;&amp;quot;&#039;&lt;br /&gt;
        local colspan = &#039;&#039;&lt;br /&gt;
        if field.cols then&lt;br /&gt;
            colspan = &#039; colspan=&amp;quot;&#039; .. field.cols .. &#039;&amp;quot;&#039;&lt;br /&gt;
        end&lt;br /&gt;
        local th = &#039;&amp;lt;th&#039; .. style .. colspan .. &#039;&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
        row = row .. th .. msg(field.col) .. &#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(rows, row)&lt;br /&gt;
    &lt;br /&gt;
    -- Now transform the Lua-table into an HTML-table&lt;br /&gt;
    for i, item in ipairs( tdata.params ) do&lt;br /&gt;
        row = &#039;&#039;&lt;br /&gt;
        for i2, field in ipairs( tableLayout ) do&lt;br /&gt;
            field.extract(item, renderCell, toUserLanguage)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(rows, row)&lt;br /&gt;
    end&lt;br /&gt;
    return &#039;&amp;lt;table class=&amp;quot;wikitable templatebox-table&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&#039; .. table.concat(rows, &#039;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&#039;) .. &#039;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
----------------- TEMPLATEDATA PART ------------------&lt;br /&gt;
------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- A real parser/transformer would look differently but it would likely be much more complex&lt;br /&gt;
-- The TemplateData-portion for [[Template:TemplateBox]]&lt;br /&gt;
function p.templatedata(frame)&lt;br /&gt;
    local tdata&lt;br /&gt;
    local args = frame.args or {}&lt;br /&gt;
    local formatting = args.formatting&lt;br /&gt;
    local pargs = ( frame:getParent() or {} ).args or {}&lt;br /&gt;
    local useTemplateData = pargs.useTemplateData&lt;br /&gt;
&lt;br /&gt;
    if  (formatting == &#039;pretty&#039; and useTemplateData ~= &#039;export&#039;) or&lt;br /&gt;
        (not useTemplateData) or&lt;br /&gt;
        (useTemplateData == &#039;export&#039; and formatting ~= &#039;pretty&#039;) then&lt;br /&gt;
            local warning = &amp;quot;Warning: Module:TemplateBox - templatedata invoked but not requested by user (setting useTemplateData=1).&amp;quot;&lt;br /&gt;
            mw.log(warning)&lt;br /&gt;
            tdata = &#039;{&amp;quot;description&amp;quot;:&amp;quot;&#039; .. warning .. &#039;&amp;quot;,&amp;quot;params&amp;quot;:{},&amp;quot;sets&amp;quot;:[]}&#039;&lt;br /&gt;
            return tdata&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Load the JSON-Module which will convert LUA tables into valid JSON&lt;br /&gt;
    local JSON = require(&#039;Module:JSON&#039;)&lt;br /&gt;
    JSON.strictTypes = true&lt;br /&gt;
    -- Obtain the object containing info&lt;br /&gt;
    tdata = p.args2table(pargs, nil, &#039;templatedata&#039;)&lt;br /&gt;
    -- And finally return the result&lt;br /&gt;
    if formatting == &#039;pretty&#039; then&lt;br /&gt;
        return JSON:encode_pretty(tdata)&lt;br /&gt;
    else&lt;br /&gt;
        return JSON:encode(tdata)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:TNT&amp;diff=520</id>
		<title>Module:TNT</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:TNT&amp;diff=520"/>
		<updated>2025-08-26T15:53:40Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- INTRO:   (!!! DO NOT RENAME THIS PAGE !!!)&lt;br /&gt;
--    This module allows any template or module to be copy/pasted between&lt;br /&gt;
--    wikis without any translation changes. All translation text is stored&lt;br /&gt;
--    in the global  Data:*.tab  pages on Commons, and used everywhere.&lt;br /&gt;
--&lt;br /&gt;
-- SEE:   https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules&lt;br /&gt;
--&lt;br /&gt;
-- ATTENTION:&lt;br /&gt;
--    Please do NOT rename this module - it has to be identical on all wikis.&lt;br /&gt;
--    This code is maintained at https://www.mediawiki.org/wiki/Module:TNT&lt;br /&gt;
--    Please do not modify it anywhere else, as it may get copied and override your changes.&lt;br /&gt;
--    Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT&lt;br /&gt;
--&lt;br /&gt;
-- DESCRIPTION:&lt;br /&gt;
--    The &amp;quot;msg&amp;quot; function uses a Commons dataset to translate a message&lt;br /&gt;
--    with a given key (e.g. source-table), plus optional arguments&lt;br /&gt;
--    to the wiki markup in the current content language.&lt;br /&gt;
--    Use lang=xx to set language.  Example:&lt;br /&gt;
--&lt;br /&gt;
--    {{#invoke:TNT | msg&lt;br /&gt;
--     | I18n/Template:Graphs.tab  &amp;lt;!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab --&amp;gt;&lt;br /&gt;
--     | source-table              &amp;lt;!-- uses a translation message with id = &amp;quot;source-table&amp;quot; --&amp;gt;&lt;br /&gt;
--     | param1 }}                 &amp;lt;!-- optional parameter --&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--    The &amp;quot;doc&amp;quot; function will generate the &amp;lt;templatedata&amp;gt; parameter documentation for templates.&lt;br /&gt;
--    This way all template parameters can be stored and localized in a single Commons dataset.&lt;br /&gt;
--    NOTE: &amp;quot;doc&amp;quot; assumes that all documentation is located in Data:Templatedata/* on Commons.&lt;br /&gt;
--&lt;br /&gt;
--    {{#invoke:TNT | doc | Graph:Lines }}&lt;br /&gt;
--        uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab&lt;br /&gt;
--        if the current page is Template:Graph:Lines/doc&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local i18nDataset = &#039;I18n/Module:TNT.tab&#039;&lt;br /&gt;
&lt;br /&gt;
-- Forward declaration of the local functions&lt;br /&gt;
local sanitizeDataset, loadData, link, formatMessage&lt;br /&gt;
&lt;br /&gt;
function p.msg(frame)&lt;br /&gt;
	local dataset, id&lt;br /&gt;
	local params = {}&lt;br /&gt;
	local lang = nil&lt;br /&gt;
	for k, v in pairs(frame.args) do&lt;br /&gt;
		if k == 1 then&lt;br /&gt;
			dataset = mw.text.trim(v)&lt;br /&gt;
		elseif k == 2 then&lt;br /&gt;
			id = mw.text.trim(v)&lt;br /&gt;
		elseif type(k) == &#039;number&#039; then&lt;br /&gt;
			params[k - 2] = mw.text.trim(v)&lt;br /&gt;
		elseif k == &#039;lang&#039; and v ~= &#039;_&#039; then&lt;br /&gt;
			lang = mw.text.trim(v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return formatMessage(dataset, id, params, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Identical to p.msg() above, but used from other lua modules&lt;br /&gt;
-- Parameters:  name of dataset, message key, optional arguments&lt;br /&gt;
-- Example with 2 params:  format(&#039;I18n/Module:TNT&#039;, &#039;error_bad_msgkey&#039;, &#039;my-key&#039;, &#039;my-dataset&#039;)&lt;br /&gt;
function p.format(dataset, key, ...)&lt;br /&gt;
	local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
	checkType(&#039;format&#039;, 1, dataset, &#039;string&#039;)&lt;br /&gt;
	checkType(&#039;format&#039;, 2, key, &#039;string&#039;)&lt;br /&gt;
	return formatMessage(dataset, key, {...})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Identical to p.msg() above, but used from other lua modules with the language param&lt;br /&gt;
-- Parameters:  language code, name of dataset, message key, optional arguments&lt;br /&gt;
-- Example with 2 params:  formatInLanguage(&#039;es&#039;, I18n/Module:TNT&#039;, &#039;error_bad_msgkey&#039;, &#039;my-key&#039;, &#039;my-dataset&#039;)&lt;br /&gt;
function p.formatInLanguage(lang, dataset, key, ...)&lt;br /&gt;
	local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
	checkType(&#039;formatInLanguage&#039;, 1, lang, &#039;string&#039;)&lt;br /&gt;
	checkType(&#039;formatInLanguage&#039;, 2, dataset, &#039;string&#039;)&lt;br /&gt;
	checkType(&#039;formatInLanguage&#039;, 3, key, &#039;string&#039;)&lt;br /&gt;
	return formatMessage(dataset, key, {...}, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Obsolete function that adds a &#039;c:&#039; prefix to the first param.&lt;br /&gt;
-- &amp;quot;Sandbox/Sample.tab&amp;quot; -&amp;gt; &#039;c:Data:Sandbox/Sample.tab&#039;&lt;br /&gt;
function p.link(frame)&lt;br /&gt;
	return link(frame.args[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.doc(frame)&lt;br /&gt;
	local dataset = &#039;Templatedata/&#039; .. sanitizeDataset(frame.args[1])&lt;br /&gt;
	return frame:extensionTag(&#039;templatedata&#039;, p.getTemplateData(dataset)) ..&lt;br /&gt;
		   formatMessage(i18nDataset, &#039;edit_doc&#039;, {link(dataset)})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTemplateData(dataset)&lt;br /&gt;
	-- TODO: add &#039;_&#039; parameter once lua starts reindexing properly for &amp;quot;all&amp;quot; languages&lt;br /&gt;
	local data = loadData(dataset)&lt;br /&gt;
	local names = {}&lt;br /&gt;
	for _, field in ipairs(data.schema.fields) do&lt;br /&gt;
		table.insert(names, field.name)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local numOnly = true&lt;br /&gt;
	local params = {}&lt;br /&gt;
	local paramOrder = {}&lt;br /&gt;
	for _, row in ipairs(data.data) do&lt;br /&gt;
		local newVal = {}&lt;br /&gt;
		local name = nil&lt;br /&gt;
		for pos, columnName in ipairs(names) do&lt;br /&gt;
			if columnName == &#039;name&#039; then&lt;br /&gt;
				name = row[pos]&lt;br /&gt;
			else&lt;br /&gt;
				newVal[columnName] = row[pos]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if name then&lt;br /&gt;
			if (&lt;br /&gt;
				(type(name) ~= &amp;quot;number&amp;quot;)&lt;br /&gt;
				and (&lt;br /&gt;
					(type(name) ~= &amp;quot;string&amp;quot;)&lt;br /&gt;
					or not string.match(name, &amp;quot;^%d+$&amp;quot;)&lt;br /&gt;
				)&lt;br /&gt;
			) then&lt;br /&gt;
				numOnly = false&lt;br /&gt;
			end&lt;br /&gt;
			params[name] = newVal&lt;br /&gt;
			table.insert(paramOrder, name)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Work around json encoding treating {&amp;quot;1&amp;quot;:{...}} as an [{...}]&lt;br /&gt;
	if numOnly then&lt;br /&gt;
		params[&#039;zzz123&#039;]=&#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local json = mw.text.jsonEncode({&lt;br /&gt;
		params=params,&lt;br /&gt;
		paramOrder=paramOrder,&lt;br /&gt;
		description=data.description,&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	if numOnly then&lt;br /&gt;
		json = string.gsub(json,&#039;&amp;quot;zzz123&amp;quot;:&amp;quot;&amp;quot;,?&#039;, &amp;quot;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return json&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Local functions&lt;br /&gt;
&lt;br /&gt;
sanitizeDataset = function(dataset)&lt;br /&gt;
	if not dataset then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	dataset = mw.text.trim(dataset)&lt;br /&gt;
	if dataset == &#039;&#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif string.sub(dataset,-4) ~= &#039;.tab&#039; then&lt;br /&gt;
		return dataset .. &#039;.tab&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return dataset&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
loadData = function(dataset, lang)&lt;br /&gt;
	dataset = sanitizeDataset(dataset)&lt;br /&gt;
	if not dataset then&lt;br /&gt;
		error(formatMessage(i18nDataset, &#039;error_no_dataset&#039;, {}))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Give helpful error to thirdparties who try and copy this module.&lt;br /&gt;
	if not mw.ext or not mw.ext.data or not mw.ext.data.get then&lt;br /&gt;
		error(string.format([[&#039;&#039;&#039;Missing JsonConfig extension, or not properly configured;&lt;br /&gt;
Cannot load https://commons.wikimedia.org/wiki/Data:%s.&lt;br /&gt;
See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates&#039;&#039;&#039;]], dataset))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local data = mw.ext.data.get(dataset, lang)&lt;br /&gt;
&lt;br /&gt;
	if data == false then&lt;br /&gt;
		if dataset == i18nDataset then&lt;br /&gt;
			-- Prevent cyclical calls&lt;br /&gt;
			error(&#039;Missing Commons dataset &#039; .. i18nDataset)&lt;br /&gt;
		else&lt;br /&gt;
			error(formatMessage(i18nDataset, &#039;error_bad_dataset&#039;, {link(dataset)}))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Given a dataset name, convert it to a title with the &#039;commons:data:&#039; prefix&lt;br /&gt;
link = function(dataset)&lt;br /&gt;
	return &#039;c:Data:&#039; .. mw.text.trim(dataset or &#039;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
formatMessage = function(dataset, key, params, lang)&lt;br /&gt;
	for _, row in pairs(loadData(dataset, lang).data) do&lt;br /&gt;
		local id, msg = unpack(row)&lt;br /&gt;
		if id == key then&lt;br /&gt;
			local result = mw.message.newRawMessage(msg, unpack(params or {}))&lt;br /&gt;
			return result:plain()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if dataset == i18nDataset then&lt;br /&gt;
		-- Prevent cyclical calls&lt;br /&gt;
		error(&#039;Invalid message key &amp;quot;&#039; .. key .. &#039;&amp;quot;&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		error(formatMessage(i18nDataset, &#039;error_bad_msgkey&#039;, {key, link(dataset)}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Module:TNTFallback&amp;diff=518</id>
		<title>Module:TNTFallback</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Module:TNTFallback&amp;diff=518"/>
		<updated>2025-08-26T15:53:40Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
-- This module implements a wrapper for [[Module:TNT]] that allows returning&lt;br /&gt;
-- a fallback message; used by {{Documentation}}.&lt;br /&gt;
--&lt;br /&gt;
-- @module TNTFallback&lt;br /&gt;
-- @alias  p&lt;br /&gt;
-- @author [[User:ExE Boss]]&lt;br /&gt;
-- @require [[Module:TNT]]&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
require(&amp;quot;strict&amp;quot;);&lt;br /&gt;
local TNT = require(&amp;quot;Module:TNT&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
local p = {};&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Based on [[Module:TNT]]&#039;s `msg` function,&lt;br /&gt;
-- but takes an optional `fallback` parameter.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.msg(frame)&lt;br /&gt;
	local dataset, key;&lt;br /&gt;
	local params = { n = 0 };&lt;br /&gt;
	local lang = nil;&lt;br /&gt;
	local fallback = nil;&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(frame.args) do&lt;br /&gt;
		if (k == 1) then&lt;br /&gt;
			dataset = v;&lt;br /&gt;
		elseif (k == 2) then&lt;br /&gt;
			key = v;&lt;br /&gt;
		elseif (type(k) == &amp;quot;number&amp;quot; and k &amp;gt; 2) then&lt;br /&gt;
			local i = k - 2;&lt;br /&gt;
			params[i] = v;&lt;br /&gt;
			params.n = math.max(params.n, i);&lt;br /&gt;
		elseif ((k == &amp;quot;lang&amp;quot;) and (v ~= &amp;quot;_&amp;quot;)) then&lt;br /&gt;
			lang = v;&lt;br /&gt;
		elseif ((k == &amp;quot;fallback&amp;quot;) and (v ~= &amp;quot;&amp;quot;)) then&lt;br /&gt;
			fallback = v;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result;&lt;br /&gt;
	if (lang) then&lt;br /&gt;
		result = TNT.formatInLanguage(lang, dataset, key, unpack(params, 1, params.n));&lt;br /&gt;
	else&lt;br /&gt;
		result = TNT.format(dataset, key, unpack(params, 1, params.n));&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (fallback and (&lt;br /&gt;
		-- not translated&lt;br /&gt;
		(result and result == TNT.formatInLanguage(&amp;quot;en&amp;quot;, dataset, key, unpack(params, 1, params.n)))&lt;br /&gt;
		-- no message&lt;br /&gt;
		or (not result)&lt;br /&gt;
	)) then&lt;br /&gt;
		if (not lang) then&lt;br /&gt;
			if (frame:callParserFunction(&amp;quot;int:lang&amp;quot;) ~= &amp;quot;en&amp;quot;) then&lt;br /&gt;
				return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain();&lt;br /&gt;
			end&lt;br /&gt;
		elseif (lang ~= &amp;quot;en&amp;quot;) then&lt;br /&gt;
			return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain();&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Property&amp;diff=516</id>
		<title>Modèle:Property</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Property&amp;diff=516"/>
		<updated>2025-08-26T15:53:39Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;[[Category:Wikidata templates]]{{documentation}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#ifeq: {{str left|{{{1|}}}|1}} | P  &lt;br /&gt;
 | {{#if:{{{anchor|}}}|{{anchor|Property:{{{1|}}}}}}}[[d:Special:EntityPage/{{{1|}}}|{{label|{{{1|}}}|link=-}}{{#ifeq:{{{show_p|}}}|no||&amp;amp;#32;&amp;lt;small&amp;gt;({{{1|}}})&amp;lt;/small&amp;gt;}}]]&lt;br /&gt;
 | {{#if:{{{anchor|}}}|{{anchor|Property:P{{{1|}}}}}}}[[d:Special:EntityPage/P{{{1|}}}|{{label|P{{{1|}}}|link=-}}{{#ifeq:{{{show_p|}}}|no||&amp;amp;#32;&amp;lt;small&amp;gt;(P{{{1|}}})&amp;lt;/small&amp;gt;}}]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:P&amp;diff=514</id>
		<title>Modèle:P</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:P&amp;diff=514"/>
		<updated>2025-08-26T15:53:39Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT[[Template:Property]]&lt;br /&gt;
[[Category:One-letter templates| ]]&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Documentation_subpage&amp;diff=512</id>
		<title>Modèle:Documentation subpage</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Documentation_subpage&amp;diff=512"/>
		<updated>2025-08-26T15:53:39Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}}&lt;br /&gt;
     | &amp;lt;!--(this template has been transcluded on a /doc or /{{{override}}} page)--&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{#ifeq:{{{doc-notice|show}}} |show&lt;br /&gt;
          | {{Mbox&lt;br /&gt;
             | type = notice&lt;br /&gt;
             | style = margin-bottom:1.0em;&lt;br /&gt;
             | image = [[File:Edit-copy green.svg|40px|alt=|link=]]&lt;br /&gt;
             | text =&lt;br /&gt;
{{strong|This is a [[Wikipedia:Template documentation|documentation]] [[Wikipedia:Subpages|subpage]]}} for {{terminate sentence|{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}}}&amp;lt;br /&amp;gt;It may contain usage information, [[Wikipedia:Categorization|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} |{{#ifeq:{{SUBJECTSPACE}} |{{ns:User}} |{{lc:{{SUBJECTSPACE}}}} template page |{{#if:{{SUBJECTSPACE}} |{{lc:{{SUBJECTSPACE}}}} page|article}}}}}}}}. &lt;br /&gt;
            }}&lt;br /&gt;
         }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{#if:{{{inhibit|}}} |&amp;lt;!--(don&#039;t categorize)--&amp;gt;&lt;br /&gt;
          |   &amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
               --&amp;gt;{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}&lt;br /&gt;
                   | [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]]&lt;br /&gt;
                   | [[Category:Documentation subpages without corresponding pages]]&lt;br /&gt;
                  }}&amp;lt;!--&lt;br /&gt;
           --&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
         }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
(completing initial #ifeq: at start of template:)&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
     | &amp;lt;!--(this template has not been transcluded on a /doc or /{{{override}}} page)--&amp;gt;&lt;br /&gt;
    }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TemplateBox/styles.css&amp;diff=510</id>
		<title>Modèle:TemplateBox/styles.css</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TemplateBox/styles.css&amp;diff=510"/>
		<updated>2025-08-26T15:53:39Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.templatebox-desc {&lt;br /&gt;
	font-size: 1.2em;&lt;br /&gt;
	font-weight: bolder;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
.templatebox-usagesample {&lt;br /&gt;
	font-family: Consolas, Menlo, Monaco, &#039;Lucida Console&#039;, &#039;Liberation Mono&#039;,&lt;br /&gt;
		&#039;DejaVu Sans Mono&#039;, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, monospace;&lt;br /&gt;
}&lt;br /&gt;
.templatebox-languagedependant {&lt;br /&gt;
	background: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
.templatebox-example {&lt;br /&gt;
	border:1px solid var(--border-color-base,#a2a9b1);&lt;br /&gt;
	width: 90%;&lt;br /&gt;
	padding: 1.5em;&lt;br /&gt;
}&lt;br /&gt;
.templatebox-example:after {&lt;br /&gt;
	display: block;&lt;br /&gt;
	content: &amp;quot;&amp;quot;;&lt;br /&gt;
	clear: both;&lt;br /&gt;
}&lt;br /&gt;
hr.templatebox-examples-separator {&lt;br /&gt;
	margin: 1em 0;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TemplateBox/layout&amp;diff=508</id>
		<title>Modèle:TemplateBox/layout</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TemplateBox/layout&amp;diff=508"/>
		<updated>2025-08-26T15:53:39Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;TemplateBox/styles.css&amp;quot; /&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
{{#ifeq:{{{useTemplateData|}}}|export&lt;br /&gt;
|== {{{msg-export|Export code}}} ==&lt;br /&gt;
{{#tag:pre|{{msgnw:Template:{{{name|}}}}}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;templatedata&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{{JSONFM}}}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
|{{Documentation subpage|{{#if: {{{docsub-override|}}} | override | }}|page={{{docsub-page|}}}}}&lt;br /&gt;
{{{mbox|}}}&lt;br /&gt;
{{#if: {{{desc|}}} | {{{msg-languagedependant|}}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatebox-desc&amp;quot;&amp;gt;&lt;br /&gt;
{{{desc}}}&lt;br /&gt;
&amp;lt;/div&amp;gt; | {{{msg-nodesc|}}} }}{{#if: {{{setscats|}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{msg-setscats}}}&lt;br /&gt;
{{{setscats|}}}&lt;br /&gt;
}}&lt;br /&gt;
== {{{msg-usage|}}} ==&lt;br /&gt;
{{#ifeq:{{#titleparts:{{FULLPAGENAME}}|1|-1}}|doc||{{#if:{{{mustbesubst|}}}|{{Must be substituted|page={{{name|}}}}}}}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatebox-usagesample&amp;quot;&amp;gt;&lt;br /&gt;
{{{usageSample|}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;{{#if: {{{shorthand|}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{msg-shorthand|}}}&amp;lt;div style=&amp;quot;font-family: monospace, monospace;&amp;quot;&amp;gt;{{#ifexist: Template:{{{shorthand|}}} | &amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{{shorthand}}}{{#ifeq:{{{argCount|}}}|0|&amp;lt;!-- nothing --&amp;gt;| {{!}}{{{msg-shorthand-params-possible|… parameters as described …}}}}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt; | {{{shorthand|}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}{{#if: {{{usage-notes|}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{msg-languagedependant|}}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatebox-languagedependant&amp;quot;&amp;gt;&lt;br /&gt;
{{{usage-notes}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}{{#ifexpr:&lt;br /&gt;
    {{#ifeq:{{{useTemplateData|}}}|TNT|1|0}}&lt;br /&gt;
    or{{#ifeq:{{str left|{{{useTemplateData|}}}|4}}|TNT:|1|0}}&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;{{int:templatedata-doc-params}}&amp;lt;/h3&amp;gt;&lt;br /&gt;
{{{templateDataInfo}}}&lt;br /&gt;
&amp;lt;!-- TemplateData is handled by [[Module:TNT]] --&amp;gt;&lt;br /&gt;
{{#invoke:TNT|doc&lt;br /&gt;
	|1={{#ifeq:{{{useTemplateData}}}|TNT&lt;br /&gt;
		| {{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}&lt;br /&gt;
		| {{str right|{{{useTemplateData}}}|4}}&lt;br /&gt;
	}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;nowiki/&amp;gt;|&amp;lt;!-- else --&amp;gt;&lt;br /&gt;
{{#if: {{{paramTable|}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
=== {{int:templatedata-doc-params}} ===&lt;br /&gt;
{{#ifeq:{{{useTemplateData|}}}|only||{{{paramTable}}}}}&lt;br /&gt;
|&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{msg-param-none|}}} }}&lt;br /&gt;
{{#if:{{{useTemplateData|}}}&lt;br /&gt;
  |{{#ifeq:{{{useTemplateData|}}}|only||{{Collapse top|[[:mw:Special:MyLanguage/Extension:TemplateData|{{{msg-templatedata|Template data}}}]]}}}}&lt;br /&gt;
{{{templateDataInfo}}}&lt;br /&gt;
{{#tag: templatedata&lt;br /&gt;
 | {{{templateData|}}}&lt;br /&gt;
}}&lt;br /&gt;
{{#ifeq:{{{useTemplateData|}}}|only||&lt;br /&gt;
&amp;lt;!--else--&amp;gt;&lt;br /&gt;
{{#ifeq:{{{useTemplateData|}}}|debug|&lt;br /&gt;
	{{Collapse top|{{{msg-templatedata-raw|Raw template data}}}}}&lt;br /&gt;
	{{#tag:syntaxhighlight&lt;br /&gt;
		| {{{JSONFM}}}&lt;br /&gt;
		| lang=&amp;quot;json&amp;quot;&lt;br /&gt;
	}}&lt;br /&gt;
	{{Collapse bottom}}&lt;br /&gt;
}}&lt;br /&gt;
{{Collapse bottom}}}}&lt;br /&gt;
}}}}&lt;br /&gt;
=== {{{msg-moreinfo|}}} ===&lt;br /&gt;
{{{msg-intendednamespaces|}}}&lt;br /&gt;
{{#switch: {{{namespace|}}}&lt;br /&gt;
|={{{msg-intendednamespaces-default|}}}&lt;br /&gt;
|all={{{msg-intendednamespaces-all|}}}&lt;br /&gt;
|talks={{{msg-intendednamespaces-talks|}}}&lt;br /&gt;
|contents={{{msg-intendednamespaces-contents|}}}&lt;br /&gt;
|0|Main|Gallery|main|gallery={{{msg-intendednamespaces-0|}}}&lt;br /&gt;
|1|Talk|talk={{{msg-intendednamespaces-1|}}}&lt;br /&gt;
|2|User|user={{{msg-intendednamespaces-2|}}}&lt;br /&gt;
|3|User talk|user talk={{{msg-intendednamespaces-3|}}}&lt;br /&gt;
|4|Commons|commons={{{msg-intendednamespaces-4|}}}&lt;br /&gt;
|5|Commons talk|commons talk={{{msg-intendednamespaces-5|}}}&lt;br /&gt;
|6|File|file={{{msg-intendednamespaces-6|}}}&lt;br /&gt;
|7|File talk|file talk={{{msg-intendednamespaces-7|}}}&lt;br /&gt;
|8|MediaWiki|mediaWiki={{{msg-intendednamespaces-8|}}}&lt;br /&gt;
|9|MediaWiki talk|mediaWiki talk={{{msg-intendednamespaces-9|}}}&lt;br /&gt;
|10|Template|template={{{msg-intendednamespaces-10|}}}&lt;br /&gt;
|11|Template talk|template talk={{{msg-intendednamespaces-11|}}}&lt;br /&gt;
|12|Help|help={{{msg-intendednamespaces-12|}}}&lt;br /&gt;
|13|Help talk|help talk={{{msg-intendednamespaces-13|}}}&lt;br /&gt;
|14|Category|category={{{msg-intendednamespaces-14|}}}&lt;br /&gt;
|15|Category talk|category talk={{{msg-intendednamespaces-15|}}}&lt;br /&gt;
|16|Creator|creator={{{msg-intendednamespaces-16|}}}&lt;br /&gt;
|17|Creator talk|creator talk={{{msg-intendednamespaces-17|}}}&lt;br /&gt;
|18|Special|special={{{msg-intendednamespaces-18|}}}&lt;br /&gt;
|#default={{{msg-intendednamespaces-unknown|}}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{{msg-intendedusergroups|}}}&amp;lt;!-- usergroup is always lower case transformation on [[Template:TemplateBox]] --&amp;gt;&lt;br /&gt;
{{#switch: {{{usergroup|}}}&lt;br /&gt;
|all={{{msg-intendedusergroups-all|}}}&lt;br /&gt;
|bot=[[Special:MyLanguage/{{mediawiki:Grouppage-bot}}|{{int:Group-bot}}]]&lt;br /&gt;
|administrator|admin|sysop=[[Special:MyLanguage/{{mediawiki:Grouppage-sysop}}|{{int:Group-sysop}}]]&lt;br /&gt;
|bureaucrat|crat=[[Special:MyLanguage/{{mediawiki:Grouppage-bureaucrat}}|{{int:Group-bureaucrat}}]]&lt;br /&gt;
|checkuser=[[Special:MyLanguage/{{mediawiki:Grouppage-checkuser}}|{{int:Group-checkuser}}]]&lt;br /&gt;
|licensereviewer|imagereviewer|image-reviewer|license-reviewer=[[Special:MyLanguage/{{mediawiki:Grouppage-Image-reviewer}}|{{int:Group-Image-reviewer}}]]&lt;br /&gt;
|vrt|vrt-agent|otrs|otrs-agent|otrs-member=[[Special:MyLanguage/{{mediawiki:Grouppage-vrt-permissions}}|{{int:group-vrt-permissions}}]]&lt;br /&gt;
|autoconfirmed=[[Special:MyLanguage/{{mediawiki:Grouppage-autoconfirmed}}|{{int:Group-autoconfirmed}}]]&lt;br /&gt;
|autopatrolled=[[Special:MyLanguage/{{mediawiki:Grouppage-autopatrolled}}|{{int:Group-autopatrolled}}]]&lt;br /&gt;
|filemover=[[Special:MyLanguage/{{mediawiki:Grouppage-filemover}}|{{int:Group-filemover}}]]&lt;br /&gt;
|oversight=[[Special:MyLanguage/{{mediawiki:Grouppage-oversight}}|{{int:Group-oversight}}]]&lt;br /&gt;
|patroller=[[Special:MyLanguage/{{mediawiki:Grouppage-patroller}}|{{int:Group-patroller}}]]&lt;br /&gt;
|rollbacker=[[Special:MyLanguage/{{mediawiki:Grouppage-rollbacker}}|{{int:Group-rollbacker}}]]&lt;br /&gt;
|steward=[[m:Special:MyLanguage/Stewards|{{int:Group-steward}}]]&lt;br /&gt;
|templateeditor|template editor=[[Special:MyLanguage/{{mediawiki:Grouppage-templateeditor}}|{{int:Group-templateeditor}}]]&lt;br /&gt;
|upwizcampeditors=[[Special:MyLanguage/{{mediawiki:Grouppage-upwizcampeditors}}|{{int:Group-upwizcampeditors}}]]&lt;br /&gt;
|translationadmin|translateadmin=[[Special:MyLanguage/{{mediawiki:Grouppage-translationadmin}}|{{int:Group-translationadmin}}]]&lt;br /&gt;
|#default={{{msg-intendedusergroups-unspecified|}}}&lt;br /&gt;
}}{{#if: {{{placement|}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{msg-placement|}}}&lt;br /&gt;
{{#switch: {{{placement|}}}&lt;br /&gt;
|top={{{msg-placement-top|}}}&lt;br /&gt;
|bottom={{{msg-placement-bottom|}}}&lt;br /&gt;
|license|licence={{{msg-placement-licence|}}}&lt;br /&gt;
|source={{{msg-placement-source|}}}&lt;br /&gt;
|#default={{{msg-languagedependant|}}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatebox-languagedependant&amp;quot;&amp;gt;&lt;br /&gt;
{{{placement}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}{{#if: {{{relieson|}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{msg-relieson|}}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{{relieson|}}}&lt;br /&gt;
}}{{suppress categories|{{#if:&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{{example |}}}{{{example-source |}}}{{{example-value |}}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{{example2|}}}{{{example2-source|}}}{{{example2-value|}}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{{example3|}}}{{{example3-source|}}}{{{example3-value|}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;|&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-examples}}} ==&lt;br /&gt;
&amp;lt;nowiki/&amp;gt;}}{{#if: {{{example-source|{{{example|}}}}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 {{{example-source|&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example}}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;}}}&lt;br /&gt;
&lt;br /&gt;
{{{msg-example-renders-as}}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatebox-example&amp;quot;&amp;gt;&lt;br /&gt;
{{#if:{{{example-source|}}}{{{example-value|}}}|{{{example-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example|}}}|category=}}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}{{#if: {{{example2-source|{{{example2|}}}}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{#if: {{{example-source|{{{example|}}}}}}&lt;br /&gt;
|&amp;lt;hr style=&amp;quot;margin:1em 0&amp;quot;/&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
 {{{example2-source|&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example2}}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;}}}&lt;br /&gt;
&lt;br /&gt;
{{{msg-example-renders-as}}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatebox-example&amp;quot;&amp;gt;&lt;br /&gt;
{{#if:{{{example2-source|}}}{{{example2-value|}}}|{{{example2-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example2|}}}|category=}}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}{{#if: {{{example3-source|{{{example3|}}}}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{#if: {{{example-source|{{{example|}}}}}}{{{example2-source|{{{example2|}}}}}}&lt;br /&gt;
|&amp;lt;hr style=&amp;quot;margin:1em 0&amp;quot;/&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
 {{{example3-source|&amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example3}}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;}}}&lt;br /&gt;
&lt;br /&gt;
{{{msg-example-renders-as}}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatebox-example&amp;quot;&amp;gt;&lt;br /&gt;
{{#if:{{{example3-source|{{{example3-value|}}}}}}|{{{example3-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example3|}}}|category=}}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}}}{{#if: {{{seealso|}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-seealso|}}} ==&lt;br /&gt;
{{{msg-languagedependant|}}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatebox-languagedependant&amp;quot;&amp;gt;&lt;br /&gt;
{{{seealso}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}{{#switch: {{lc:{{{i18n-method|}}}}}&lt;br /&gt;
|-=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-localization|}}} ==&lt;br /&gt;
&lt;br /&gt;
{{{msg-localization-instruct-none|}}}&lt;br /&gt;
|autotranslate=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-localization|}}} ==&lt;br /&gt;
&lt;br /&gt;
{{lang links|Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|suppressaddlink=true}}&lt;br /&gt;
&lt;br /&gt;
{{{msg-localization-instruct-autotranslate}}}&lt;br /&gt;
{{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout|&lt;br /&gt;
{{tmpl|0=&lt;br /&gt;
{{{msg-localization-template-layout}}}&lt;br /&gt;
|1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]]&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{{msg-localization-instruct-autotranslate-new}}}&lt;br /&gt;
&lt;br /&gt;
{{#tag:inputbox|&lt;br /&gt;
type=create&lt;br /&gt;
preload=Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/en&lt;br /&gt;
default=Template:{{#if: {{{name|}}} | {{{name|}}} | {{PAGENAME}} }}/{{#ifexist: Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/{{int:Lang}} | LANGCODE | {{int:Lang}} }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|ext.translate=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-localization|}}} ==&lt;br /&gt;
&lt;br /&gt;
{{lang links|suppressaddlink=true|1={{{i18n-subpage}}}}}&lt;br /&gt;
&lt;br /&gt;
{{{msg-localization-ext-translate}}}&lt;br /&gt;
{{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout|&lt;br /&gt;
{{tmpl|0=&lt;br /&gt;
{{{msg-localization-template-layout}}}&lt;br /&gt;
|1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]]&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;{{Clickable button|target={{TranslateLink|{{{i18n-subpage}}}}}|text=[[File:Icono de traducción.svg|48px|link=]]&#039;&#039;&#039;{{{msg-localization-instruct-ext-translate}}}&#039;&#039;&#039;|class=ui-button-blue ui-button-large|external=true}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center&amp;quot;&amp;gt;{{Clickable button|target={{fullurl:{{{i18n-subpage}}}|action=edit}}|text=&#039;&#039;&#039;{{{msg-localization-instruct-ext-translate-admin}}}&#039;&#039;&#039;|class=ui-button-red ui-button-large|iconPrimary=ui-icon-wrench|external=true}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|switch=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-localization|}}} ==&lt;br /&gt;
&lt;br /&gt;
{{{msg-localization-instruct-switch|}}}&lt;br /&gt;
|mediawiki-msg=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-localization|}}} ==&lt;br /&gt;
&lt;br /&gt;
{{{msg-localization-instruct-mediawiki-msg|}}}&lt;br /&gt;
|custommediawiki-msg=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-localization|}}} ==&lt;br /&gt;
&lt;br /&gt;
{{{msg-localization-instruct-custommediawiki-msg|}}}&lt;br /&gt;
|tnt=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;{{{msg-localization}}}&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{msg-localization-tnt}}}&lt;br /&gt;
{{tmpl|0=&lt;br /&gt;
{{{msg-localization-instruct-tnt}}}&lt;br /&gt;
|1=[[Data:{{#if:{{{i18n-data-file|}}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|{{#invoke:TNTTools|TNTTabFull|{{{i18n-data-file}}}}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|I18n/{{#if:{{{name|}}}|{{{name}}}|{{ROOTPAGENAME}}}}.tab&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}]]&lt;br /&gt;
}}&lt;br /&gt;
|wikidata=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-localization|}}} ==&lt;br /&gt;
&lt;br /&gt;
{{{msg-localization-instruct-wikidata|}}}&lt;br /&gt;
|#default=&lt;br /&gt;
{{#if: {{{i18n-desc|}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
== {{{msg-localization|}}} ==&lt;br /&gt;
}}&lt;br /&gt;
}}{{#if: {{{i18n-desc|}}} |&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{{msg-languagedependant|}}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatebox-languagedependant&amp;quot;&amp;gt;&lt;br /&gt;
{{{i18n-desc}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}}}&amp;lt;noinclude&amp;gt;[[Category:Layout templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TemplateBox/i18n/en&amp;diff=506</id>
		<title>Modèle:TemplateBox/i18n/en</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TemplateBox/i18n/en&amp;diff=506"/>
		<updated>2025-08-26T15:53:39Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{#invoke:Transclude|TemplateBox/layout&lt;br /&gt;
&amp;lt;!-- [[Module:Transclude]] parameters --&amp;gt;&lt;br /&gt;
| #ignoredPrefix = msg-&lt;br /&gt;
&amp;lt;!-- Language information --&amp;gt;&lt;br /&gt;
| lang = en&lt;br /&gt;
&amp;lt;!-- Messages --&amp;gt;&lt;br /&gt;
|msg-setscats=The template automatically sets the following categories:&lt;br /&gt;
|msg-nodesc=No description yet available.&lt;br /&gt;
|msg-languagedependant=&amp;lt;nowiki /&amp;gt;&amp;lt;small&amp;gt;&amp;lt;!-- Remove this comment and insert the translation of &amp;quot;This part of the documentation is only available in a limited number of languages.&amp;quot; --&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
|msg-usage=Usage&lt;br /&gt;
|msg-examples={{PLURAL:{{#expr:{{#if:{{{example|}}}|1|0}}+{{#if:{{{example2|}}}|1|0}}}}|Example|Examples}}&lt;br /&gt;
|msg-example-renders-as=renders as:&lt;br /&gt;
|msg-shorthand=Or use the shorthand &amp;lt;nowiki /&amp;gt;&amp;lt;!--&lt;br /&gt;
             Some translations removed from translation (T8-T18)&lt;br /&gt;
             If you want to re-install them (because there is something wrong with the MediaWiki-messages&lt;br /&gt;
             that are used and provided by TemplateData, here they are:&lt;br /&gt;
             https://commons.wikimedia.org/w/index.php?title=Template:TemplateBox/i18n&amp;amp;oldid=102987719&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|msg-shorthand-params-possible=… parameters as described …&lt;br /&gt;
|msg-param-none=The template takes no parameters.&lt;br /&gt;
|msg-moreinfo=Additional information&lt;br /&gt;
&lt;br /&gt;
|msg-localization=Localization&lt;br /&gt;
|msg-localization-instruct-switch=To add your language to the list of languages supported by this template, please edit the template and add a row to the &amp;quot;{{Tlf|LangSwitch| }}&amp;quot; construct. It takes the form &amp;quot;&amp;lt;code&amp;gt;{{!}}xx= Your translation &amp;lt;/code&amp;gt;&amp;quot; (&amp;lt;code&amp;gt;xx&amp;lt;/code&amp;gt; being the {{W|List of ISO 639-1 codes|code}} of your language)&lt;br /&gt;
|msg-localization-instruct-autotranslate=This template is localized through {{tl|Autotranslate}}.&lt;br /&gt;
&amp;lt;!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} --&amp;gt;&lt;br /&gt;
|msg-localization-template-layout=The layout of the template can be found under $1.&lt;br /&gt;
|msg-localization-instruct-autotranslate-new=To add your language to the list of languages supported by this template, please copy the code of [[Template:{{{name|{{PAGENAME}}}}}/en]] (or any other language version you prefer to translate) and replace the text strings in there (the form below can be used to create a translation, the English version is preloaded in the edit box). Please change the parameter &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;en&amp;lt;/code&amp;gt; (or whatever language you are translating) to the [[:en:ISO 639-1|language code]] of your language.&lt;br /&gt;
&lt;br /&gt;
|msg-localization-instruct-none=This template is not intended to be localized.&lt;br /&gt;
|msg-localization-instruct-custommediawiki-msg=This template is localized by utilizing custom MediaWiki namespace messages.&lt;br /&gt;
|msg-localization-instruct-wikidata=This template is localized by utilizing Wikidata, via {{tl|Label}} template or similar approach.&lt;br /&gt;
&lt;br /&gt;
|msg-localization-instruct-mediawiki-msg=This template is localized by utilizing MediaWiki namespace messages. These can be [[translatewiki:{{#if:{{{i18n-mediawiki-msg|}}}|MediaWiki:{{{i18n-mediawiki-msg|}}}|Special:Translate/ext-wikimediamessages}}|translated at translatewiki.net]] ([[:translatewiki:Special:Translations/MediaWiki:{{#if:{{{i18n-mediawiki-msg|}}}|{{{i18n-mediawiki-msg|}}}|Wm-license-{{lc:{{BASEPAGENAME}}}}-text}}|current translations]]).&lt;br /&gt;
&lt;br /&gt;
|msg-localization-ext-translate=This template makes use of {{tl|Autotranslate}} and [[:mw:Special:MyLanguage/Help:Extension:Translate|the translate extension]].&lt;br /&gt;
|msg-localization-instruct-ext-translate=Translate this template now!&lt;br /&gt;
|msg-localization-instruct-ext-translate-admin=Administrate translations.&lt;br /&gt;
&lt;br /&gt;
| msg-localization-tnt = This template is localized using [[Module:TNT]].&lt;br /&gt;
&amp;lt;!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} --&amp;gt;&lt;br /&gt;
| msg-localization-instruct-tnt = These translations are stored in $1.&lt;br /&gt;
&lt;br /&gt;
|msg-seealso={{int:Seealso}}&lt;br /&gt;
|msg-relieson=Relies on:&lt;br /&gt;
&lt;br /&gt;
|msg-intendedusergroups=The template is intended to be used by the following user groups:&lt;br /&gt;
|msg-intendedusergroups-all=[[Special:MyLanguage/Commons:Users|all users]]&lt;br /&gt;
|msg-intendedusergroups-unspecified=no user group specified&lt;br /&gt;
&lt;br /&gt;
|msg-intendednamespaces=The template is intended to be used in the following namespaces:&lt;br /&gt;
|msg-intendednamespaces-unknown=unknown&lt;br /&gt;
|msg-intendednamespaces-all=all namespaces&lt;br /&gt;
|msg-intendednamespaces-talks=all talk namespaces and noticeboards&lt;br /&gt;
|msg-intendednamespaces-contents=all content namespaces&lt;br /&gt;
|msg-intendednamespaces-0=the main or gallery namespace (unprefixed)&lt;br /&gt;
|msg-intendednamespaces-1=the Talk namespace for the main namespace&lt;br /&gt;
|msg-intendednamespaces-2=the User namespace&lt;br /&gt;
|msg-intendednamespaces-3=the User talk namespace&lt;br /&gt;
|msg-intendednamespaces-4=the Commons namespace&lt;br /&gt;
|msg-intendednamespaces-5=the Commons talk namespace&lt;br /&gt;
|msg-intendednamespaces-6=the File namespace&lt;br /&gt;
|msg-intendednamespaces-7=the File talk namespace&lt;br /&gt;
|msg-intendednamespaces-8=the MediaWiki namespace&lt;br /&gt;
|msg-intendednamespaces-9=the MediaWiki talk namespace&lt;br /&gt;
|msg-intendednamespaces-10=the Template namespace&lt;br /&gt;
|msg-intendednamespaces-11=the Template talk namespace&lt;br /&gt;
|msg-intendednamespaces-12=the Help namespace&lt;br /&gt;
|msg-intendednamespaces-13=the Help talk namespace&lt;br /&gt;
|msg-intendednamespaces-14=the Category namespace&lt;br /&gt;
|msg-intendednamespaces-15=the Category talk namespace&lt;br /&gt;
|msg-intendednamespaces-16=the Creator namespace&lt;br /&gt;
|msg-intendednamespaces-17=the Creator talk namespace&lt;br /&gt;
|msg-intendednamespaces-18=the Special namespace&lt;br /&gt;
|msg-intendednamespaces-default=no namespace specified&lt;br /&gt;
&lt;br /&gt;
|msg-placement=Placement:&lt;br /&gt;
|msg-placement-top=At the top of the page&lt;br /&gt;
|msg-placement-bottom=At the bottom of the page&lt;br /&gt;
|msg-placement-licence=In the &amp;quot;{{int:wm-license-information-permission}}&amp;quot; parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or in the &amp;quot;{{int:license-header}}&amp;quot; section&lt;br /&gt;
|msg-placement-source=In the &amp;quot;{{int:wm-license-information-source}}&amp;quot; parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or just below this template&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{translated tag|documentation}}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Tag&amp;diff=504</id>
		<title>Modèle:Tag</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:Tag&amp;diff=504"/>
		<updated>2025-08-26T15:53:39Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:{{{plain|}}}|&lt;br /&gt;
 |&amp;lt;code class=&amp;quot;mw-highlight&amp;quot; style=&amp;quot;{{#if:{{{wrap|}}}||white-space:nowrap}}&amp;quot;&amp;gt;&lt;br /&gt;
}}{{#switch:{{{2|pair}}}&lt;br /&gt;
 |c|close  = &amp;lt;!--nothing--&amp;gt;&lt;br /&gt;
 |s|single&lt;br /&gt;
 |o|open&lt;br /&gt;
 |p|pair   = {{#tag:span|&amp;amp;lrm;&amp;amp;lt;|class=&amp;quot;p&amp;quot;}}{{#tag:span|{{{1|tag}}}|class=&amp;quot;nt&amp;quot;}}{{#if:{{{params|}}}|&amp;amp;#32;{{{params}}}}}&lt;br /&gt;
}}{{#switch:{{{2|pair}}}&lt;br /&gt;
 |c|close  = {{{content|}}}&lt;br /&gt;
 |s|single = &amp;amp;#32;{{#tag:span|&amp;amp;#47;&amp;amp;gt;|class=&amp;quot;p&amp;quot;}}&lt;br /&gt;
 |o|open   = {{#tag:span|&amp;amp;gt;|class=&amp;quot;p&amp;quot;}}{{{content|}}}&lt;br /&gt;
 |p|pair   = {{#tag:span|&amp;amp;gt;|class=&amp;quot;p&amp;quot;}}{{{content|...}}}&lt;br /&gt;
}}{{#switch:{{{2|pair}}}&lt;br /&gt;
 |s|single&lt;br /&gt;
 |o|open   = &amp;lt;!--nothing--&amp;gt;&lt;br /&gt;
 |c|close&lt;br /&gt;
 |p|pair   = {{#tag:span|&amp;amp;lrm;&amp;amp;lt;&amp;amp;#47;|class=&amp;quot;p&amp;quot;}}{{#tag:span|{{{1|tag}}}|class=&amp;quot;nt&amp;quot;}}{{#tag:span|&amp;amp;gt;|class=&amp;quot;p&amp;quot;}}&lt;br /&gt;
}}{{#if:{{{plain|}}}|&lt;br /&gt;
 |&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
	<entry>
		<id>https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TemplateDataInfo/styles.css&amp;diff=502</id>
		<title>Modèle:TemplateDataInfo/styles.css</title>
		<link rel="alternate" type="text/html" href="https://voute.proletaire.net/index.php?title=Mod%C3%A8le:TemplateDataInfo/styles.css&amp;diff=502"/>
		<updated>2025-08-26T15:53:39Z</updated>

		<summary type="html">&lt;p&gt;LeProletaire : 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.commons-template-TemplateDataInfo {&lt;br /&gt;
	background: var(--background-color-warning-subtle, #fdf2d5);&lt;br /&gt;
	border: 1px solid var(--border-color-warning, #ab7f2a);&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	padding: 0 .5em;&lt;br /&gt;
	margin: .5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.commons-template-TemplateDataInfo .header {&lt;br /&gt;
	font-size: 120%;&lt;br /&gt;
	font-family: monospace, monospace;&lt;br /&gt;
}&lt;br /&gt;
.commons-template-TemplateDataInfo[dir=&amp;quot;ltr&amp;quot;] .header {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: right;&lt;br /&gt;
}&lt;br /&gt;
.commons-template-TemplateDataInfo[dir=&amp;quot;rtl&amp;quot;] .header {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>LeProletaire</name></author>
	</entry>
</feed>