<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.baw.de/vv-wsv1102/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ArxioWikiSysop</id>
	<title>VV-WSV 1102 - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.baw.de/vv-wsv1102/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ArxioWikiSysop"/>
	<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Spezial:Beitr%C3%A4ge/ArxioWikiSysop"/>
	<updated>2026-05-06T20:08:43Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Hauptseite&amp;diff=9600</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Hauptseite&amp;diff=9600"/>
		<updated>2025-06-10T13:02:23Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Wiki enthält die Begriffsbestimmungen der VV-WSV 1102, Teil 2.&lt;br /&gt;
&lt;br /&gt;
Die VV-WSV 1102 ist eine Verwaltungsvorschrift des Bundesministeriums für Verkehr für den Geschäftsbereich der WSV. Die im Objektkatalog definierten Begriffe werden insbesondere bei der Identifikation der baulichen und sonstigen technischen Anlagen an den Bundeswasserstraßen verwendet. Der Teil 2 der Vorschrift enthält das für den Verwaltungsgebrauch bestimmte Begriffsglossar.&lt;br /&gt;
&lt;br /&gt;
* [[:Kategorie:Begriff|Begriffe]]&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Impressum&amp;diff=9599</id>
		<title>VV-WSV 1102:Impressum</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Impressum&amp;diff=9599"/>
		<updated>2024-10-01T07:48:01Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: Jan Kayser&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Impressum==&lt;br /&gt;
&lt;br /&gt;
Das Internetangebot wird herausgegeben von:&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Bundesanstalt für Wasserbau&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kußmaulstraße 17 &amp;lt;br /&amp;gt;&lt;br /&gt;
76187 Karlsruhe &amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Postanschrift: &amp;lt;br /&amp;gt;&lt;br /&gt;
Postfach 21 03 53 &amp;lt;br /&amp;gt;&lt;br /&gt;
76152 Karlsruhe &amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Telefon: 07 21/97 26-0 &amp;lt;br /&amp;gt;&lt;br /&gt;
Fax: 07 21/97 26-4540 &amp;lt;br /&amp;gt;&lt;br /&gt;
E-Mail: [mailto:info@baw.de info@baw.de] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vertretungsbefugte Person&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Dr.-Ing. Jan Kayser  &amp;lt;br /&amp;gt;&lt;br /&gt;
Telefon: +49 (721) 9726-3000 &amp;lt;br /&amp;gt;&lt;br /&gt;
[mailto:jan.kayser@baw.de jan.kayser@baw.de] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Verantwortlich&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Peter Weinmann &amp;lt;br /&amp;gt;&lt;br /&gt;
[mailto:peter.weinmann@baw.de peter.weinmann@baw.de] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Redaktionelle Leitung&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Jennifer Pfrommer &amp;lt;br /&amp;gt;&lt;br /&gt;
[mailto:jennifer.pfrommer@baw.de jennifer.pfrommer@baw.de] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestaltung, Realisierung&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
arxio GmbH (Programmierung, Umsetzung) &amp;lt;br /&amp;gt;&lt;br /&gt;
http://www.arxio.de &amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Hinweis===&lt;br /&gt;
&lt;br /&gt;
Für Vollständigkeit, Fehler redaktioneller und technischer Art, Auslassungen usw. sowie die Richtigkeit der Eintragungen kann keine Haftung übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere kann keine Gewähr für die Vollständigkeit und Richtigkeit von Informationen übernommen werden, die über weiterführende Links erreicht werden. Anbieter sind für die eigenen Inhalte, die sie zur Nutzung bereithalten, nach den allgemeinen Gesetzen verantwortlich. Von diesen eigenen Inhalten sind Querverweise auf die von anderen Anbietern bereitgehaltenen Inhalte zu unterscheiden.&lt;br /&gt;
&lt;br /&gt;
Die Verweise durch Hyperlinks auf Inhalte fremder Webseiten dienen lediglich der Information.&lt;br /&gt;
Die Verantwortlichkeit für diese fremden Inhalte liegt alleine bei dem Anbieter, der die Inhalte bereithält. Vor dem Einrichten des entsprechenden Verweises sind die Web-Seiten der anderen Anbieter mit großer Sorgfalt und nach bestem Wissen und Gewissen überprüft worden. Es kann jedoch keine Gewähr für die Vollständigkeit und Richtigkeit von Informationen übernommen werden, die über weiterführende Hyperlinks erreicht werden. Der Inhalt der anderen Web-Seiten kann jederzeit ohne Wissen der Bundesanstalt für Wasserbau geändert werden. Für sämtliche Links auf diesen Seiten gilt: Wir betonen, dass wir keinen Einfluss auf die Gestaltung und die Inhalte der durch Link von unserer Homepage aus erreichbaren Seiten anderer Anbieter haben und uns deren Inhalt nicht zu eigen machen. Diese Erklärung gilt für alle Seiten dieser Homepage und die dort angebrachten Links.&lt;br /&gt;
&lt;br /&gt;
Falls die Bundesanstalt für Wasserbau auf Seiten verweist, deren Inhalt Anlass zur Beanstandung gibt, bitten wir um Mitteilung.&lt;br /&gt;
Die Bundesanstalt für Wasserbau behält sich das Recht vor, ohne vorherige Ankündigung die bereitgestellten Informationen zu ändern, zu ergänzen oder zu entfernen.&lt;br /&gt;
===Urheberrecht===&lt;br /&gt;
&lt;br /&gt;
Das Copyright für Texte liegt, soweit nicht anders vermerkt, bei der Bundesanstalt für Wasserbau.&lt;br /&gt;
&lt;br /&gt;
Das Copyright für Bilder liegt, soweit nicht anders vermerkt, bei der Bundesanstalt für Wasserbau oder bei der Wasser- und Schifffahrtsverwaltung des Bundes.&lt;br /&gt;
&lt;br /&gt;
Auf diesen Webseiten zur Verfügung gestellte Texte, Textteile, Grafiken, Tabellen oder Bildmaterialien dürfen ohne vorherige Zustimmung der Bundesanstalt für Wasserbau nicht vervielfältigt, nicht verbreitet und nicht ausgestellt werden.&lt;br /&gt;
&lt;br /&gt;
===Nutzungsbedingungen für Bilder===&lt;br /&gt;
&lt;br /&gt;
# Die Bundesansalt für Wasserbau hat alle Nutzungsrechte von den Urhebern der digitalen Bilder erworben, soweit nichts Gegenteiliges, z.B. in den begleitenden Bildinformationen, angegeben ist.&lt;br /&gt;
# Die Bildinformationen und die darin enthaltenen Nutzungs- und Verwendungsbeschränkungen sind zu beachten. Für die aus der Nichtbeachtung resultierenden Schäden haftet der Nutzer. Er hat die Bundesanstalt für Wasserbau insoweit von Ansprüchen Dritter freizustellen. Für die Nutzung des Bildmaterials im historischen Bildarchiv der Bundeswasserstraßen gelten gesonderte Nutzungsbedingungen.&lt;br /&gt;
# Die Bilder können grundsätzlich kostenfrei heruntergeladen und im Rahmen der Berichterstattung für folgende Zwecke genutzt werden: &lt;br /&gt;
#* Presseveröffentlichungen&lt;br /&gt;
#* Veröffentlichungen durch Film und Fernsehen&lt;br /&gt;
#:Eine darüber hinausgehende Nutzung für kommerzielle Zwecke, insbesondere für Werbezwecke, ist nicht zulässig.&lt;br /&gt;
# Jegliche Bearbeitung, Umgestaltung oder Manipulation der digitalen Bilder, die über Farbkorrekturen, Ausschnitte und Verkleinerungen hinausgehen, ist unzulässig und nur mit vorheriger schriftlicher Zustimmung seitens der Bundesanstalt für Wasserbau erlaubt. Ebenso darf das digitale Bild nicht in einem sinnentstellten Zusammenhang wiedergegeben werden.&lt;br /&gt;
# Eine Entstellung des urheberrechtlichen geschützten Werks in Bild, Wort bzw. jeglicher anderen Form, z.B. durch Nachfotografieren, zeichnerische Verfälschung, Fotocomposing oder elektronische Hilfsmittel ist nicht zulässig. Der Nutzer trägt die Verantwortung für die Betextung.&lt;br /&gt;
# Die Presse ist insbesondere zur Beachtung der publizistischen Grundsätze des Deutschen Presserates (Pressecodex) verpflichtet. Die Zustimmung zur Nutzung des Bildmaterials umfasst nicht die Zusicherung, dass die abgebildeten Personen, die Inhaber der Rechte an abgebildeten Werken oder die Inhaber von Marken- und sonstigen Schutzrechten die Einwilligung zu einer öffentlichen Wiedergabe erteilt haben. Die Einholung der im Einzelfall notwendigen Einwilligungen Dritter obliegt dem Nutzer. Er hat die Persönlichkeits-, Urheber-, Marken- und sonstigen Schutzrechte von abgebildeten Personen, Werken, Gegenständen oder Zeichen selbst zu beachten. Bei Missachtung solcher Rechte ist allein der Nutzer etwaigen Dritten gegenüber schadenersatzpflichtig.&lt;br /&gt;
# Die Bundesanstalt für Wasserbau behält sich vor, dem Verdacht einer missbräuchlichen Nutzung oder einer wesentlichen Nutzungsverletzung nachzugehen.&lt;br /&gt;
# Bei Verwendung des digitalen Bildes ist die Quelle &amp;quot;Vor- und Nachname des Fotografen/BAW&amp;quot; anzugeben. Dies gilt auch für elektronische Publikationen (z.B. Webseiten). Von jeder Veröffentlichung im Druck ist der Bundesanstalt für Wasserbau ein Belegexemplar unaufgefordert und kostenfrei zuzusenden.&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9598</id>
		<title>VV-WSV 1102:Datenschutz</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9598"/>
		<updated>2024-05-28T14:47:12Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Datenschutzerklärung==&lt;br /&gt;
&lt;br /&gt;
Die Bundesanstalt für Wasserbau nimmt den Schutz Ihrer personenbezogenen Daten sehr ernst. Wir möchten, dass Sie wissen, wann wir welche Daten erheben und wie wir sie verwenden. Wir haben technische und organisatorische Maßnahmen getroffen, die sicherstellen, dass die Vorschriften über den Datenschutz sowohl von uns als auch von externen Dienstleistern beachtet werden. &lt;br /&gt;
&lt;br /&gt;
Für die Nutzung des Webangebots der Bundesanstalt für Wasserbau müssen grundsätzlich keine personenbezogenen Daten angegeben werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf das Internetangebot ===&lt;br /&gt;
Beim Besuch unserer Webseite zu Informationszwecken speichern unsere in Deutschland liegenden Server nur die personenbeziehbaren Daten, die ihr Browser an unsere Server übermittelt. In der Protokolldatei werden folgende Daten maximal 90 Tage gespeichert:&lt;br /&gt;
&lt;br /&gt;
* IP-Adresse des Clients&lt;br /&gt;
* Identität des Client-PCs&lt;br /&gt;
* Zeitpunkt des Requests&lt;br /&gt;
* URL&lt;br /&gt;
* HTTP-Status-Code &lt;br /&gt;
* Größe des angefragten Objektes&lt;br /&gt;
*  Referer&lt;br /&gt;
*  Browsertyp und Version&lt;br /&gt;
Die gespeicherten Daten werden nur zur Optimierung des Internetangebotes ausgewertet.&lt;br /&gt;
&lt;br /&gt;
=== Informationsmaterial, Newsletter, Kontaktformular ===&lt;br /&gt;
Wenn Sie Informationsmaterial oder Newsletter bestellen, fragen wir Sie nach Ihrem Namen und nach anderen persönlichen Informationen. Es unterliegt Ihrer freien Entscheidung, ob Sie diese Daten eingeben. Ihre Angaben speichern wir auf besonders geschützten Servern in Deutschland. Der Zugriff darauf ist nur wenigen besonders befugten Personen möglich, die mit der technischen oder redaktionellen Betreuung der Server befasst sind.&lt;br /&gt;
Über die auf unserer Webseite bereitgestellten Kontaktformulare können Sie direkt mit uns in Verbindung zu treten. Wir erheben, verarbeiten und nutzen die von Ihnen über ein Formular mitgeteilten Informationen ausschließlich für die Bearbeitung Ihres konkreten Anliegens und nur mit Ihrer Einwilligung.&lt;br /&gt;
&lt;br /&gt;
=== Weitergabe personenbezogener Daten an Dritte ===&lt;br /&gt;
Wir verwenden Ihre personenbezogenen Informationen im Falle von Infobestellungen nur innerhalb der Bundesanstalt für Wasserbau und der mit dem Versand von Informationsmaterial beauftragten Unternehmen. Wir geben sie nicht ohne Ihre ausdrückliche Einwilligung an Dritte weiter. Soweit wir gesetzlich oder per Gerichtsbeschluss dazu verpflichtet sind, werden wir Ihre Daten an auskunftsberechtigte Stellen übermitteln.&lt;br /&gt;
&lt;br /&gt;
=== Einsatz von Cookies ===&lt;br /&gt;
Bei einem Besuch unserer Website werden Informationen in Form eines Cookies auf Ihrem Rechner abgelegt. Cookies helfen unter vielen Aspekten, Ihren Besuch auf unserer Webseite einfacher, angenehmer und sinnvoller zu gestalten. Cookies sind Textdateien, die Ihr Webbrowser automatisch auf der Festplatte Ihres Computers speichert, wenn Sie unsere Internetseite besuchen.&lt;br /&gt;
&lt;br /&gt;
Sie können Ihren Browser jederzeit mittels entsprechender Einstellung so konfigurieren, dass keine Cookies auf Ihrem Computer gespeichert werden und dadurch der Setzung von Cookies widersprechen.  Zudem können Sie bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme löschen. Dies ist in allen gängigen Internetbrowsern möglich. Sofern Sie die Setzung von Cookies in dem genutzten Internetbrowser deaktivieren, sind unter Umständen nicht alle Funktionen unserer Internetseite nutzbar.&lt;br /&gt;
&lt;br /&gt;
Wir nutzen nur technisch notwendige Cookies.&lt;br /&gt;
&lt;br /&gt;
=== Statistik ===&lt;br /&gt;
Zur Optimierung unseres Angebots werten wir die Zugriffe auf unsere Seiten statistisch aus. Wir setzen dafür die Open-Source-Anwendung &amp;quot;AWStats&amp;quot; ein. AWStats nutzt für die Auswertung die Protokolldatei unseres Webservers. Die Informationen über Ihre Benutzung dieser Webseite werden nicht an Dritte weitergegeben. &lt;br /&gt;
Mit &amp;quot;AWStats&amp;quot; werden keine Daten an Server übermittelt, die außerhalb der Kontrolle der Bundesanstalt für Wasserbau liegen.&lt;br /&gt;
Aus den Daten erstellen wir keine Nutzerprofile und nutzen sie auch nicht für andere Zwecke.&lt;br /&gt;
&lt;br /&gt;
===Links ===&lt;br /&gt;
Diese Datenschutzerklärung erstreckt sich nicht auf von unserer Webseite aus verlinkte Webseiten Dritter. &lt;br /&gt;
Für den Inhalt der verlinkten Seiten sind ausschließlich deren Anbieter verantwortlich. Offensichtlich rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung unter Anwendung eines zumutbaren Prüfungsmaßstabs nicht erkennbar. Bei Kenntnis von Rechtsverletzungen werden derartige Links unverzüglich entfernt.&lt;br /&gt;
&lt;br /&gt;
=== Minderjährigenschutz ===&lt;br /&gt;
Personen unter 18 Jahren sollten ohne Zustimmung der Eltern oder Erziehungsberechtigten keine personenbezogenen Daten an uns übermitteln. Wir fordern keine personenbezogenen Daten von Kindern und Jugendlichen an. Wissentlich sammeln wir solche Daten nicht und geben sie auch nicht an Dritte weiter.&lt;br /&gt;
&lt;br /&gt;
=== Auskunftsrecht, Berichtigung, Löschung ===&lt;br /&gt;
Sie haben jederzeit das Recht auf &lt;br /&gt;
* Auskunft, &lt;br /&gt;
* Berichtigung, &lt;br /&gt;
* Löschung, &lt;br /&gt;
* Einschränkung der Verarbeitung, &lt;br /&gt;
* Widerspruch gegen die Verarbeitung &lt;br /&gt;
* Datenübertragbarkeit &lt;br /&gt;
hinsichtlich der bezüglich Ihrer Person gespeicherten Daten, deren Herkunft und Empfänger sowie den Zweck der Speicherung, sofern nicht folgendes gilt: &lt;br /&gt;
&lt;br /&gt;
Die Aufbewahrung von Bürgeranfragen in elektronischer Form erfolgt - wie auch in Papierform - gemäß den für die Aufbewahrung von Schriftgut geltenden Fristen der Registraturrichtlinie, welche die Gemeinsame Geschäftsordnung der Bundesministerien (GGO) ergänzt.&lt;br /&gt;
&lt;br /&gt;
Sie können sich mit Fragen und Beschwerden an den Datenschutzbeauftragten der Bundesanstalt für Wasserbau wenden.&lt;br /&gt;
&lt;br /&gt;
=== Behördlicher Datenschutzbeauftragter ===&lt;br /&gt;
Sigfrid Knapp&amp;lt;br/&amp;gt;&lt;br /&gt;
Telefon: +49 (0) 721 9726-4550&amp;lt;br/&amp;gt;&lt;br /&gt;
E-Mail: datenschutz@baw.de&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Test123&amp;diff=9597</id>
		<title>Test123</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Test123&amp;diff=9597"/>
		<updated>2023-12-15T09:30:48Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Spielwiese ==&lt;br /&gt;
&#039;&#039;&#039;A&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt; / 0,5 A&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
{{#expr: 1 + 1 }}&lt;br /&gt;
[[Datei:Sed.png|mini|alternativtext=??|Titelbild FOX]]&lt;br /&gt;
== Test Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Math ===&lt;br /&gt;
&amp;lt;math&amp;gt;E=mc^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&amp;lt;\frac{2+dc}{9}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ReplaceText ===&lt;br /&gt;
Bernhardstraße&lt;br /&gt;
&lt;br /&gt;
=== ImageMap ===&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
Datei:Sed.png|150px|alternativtext=Fluss mit Schiff&lt;br /&gt;
default [[Hauptseite|zur Hauptseite]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PdfHandler ===&lt;br /&gt;
[[Datei:Testdatei.pdf|page=2|600px]]&lt;br /&gt;
&lt;br /&gt;
=== LinkTitles ===&lt;br /&gt;
[[Absperrdamm]]&lt;br /&gt;
&lt;br /&gt;
=== Cite ===&lt;br /&gt;
Siehe &amp;lt;ref&amp;gt;Müller-Hagedorn&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Hauptseite&amp;diff=9596</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Hauptseite&amp;diff=9596"/>
		<updated>2023-12-15T09:30:28Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Wiki enthält die Begriffsbestimmungen der VV-WSV 1102, Teil 2.&lt;br /&gt;
&lt;br /&gt;
Die VV-WSV 1102 ist eine Verwaltungsvorschrift des Bundesministerium für Verkehr und digitale Infrastruktur für den Geschäftsbereich der WSV. Die im Objektkatalog definierten Begriffe werden insbesondere bei der Identifikation der baulichen und sonstigen technischen Anlagen an den Bundeswasserstraßen verwendet. Der Teil 2 der Vorschrift enthält das für den Verwaltungsgebrauch bestimmte Begriffsglossar.&lt;br /&gt;
&lt;br /&gt;
* [[:Kategorie:Begriff|Begriffe]]&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Test123&amp;diff=9595</id>
		<title>Test123</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Test123&amp;diff=9595"/>
		<updated>2023-12-15T09:30:06Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Spielwiese ==&lt;br /&gt;
&#039;&#039;&#039;A&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt; / 0,5 A&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
{{#expr: 1 + 1 }}&lt;br /&gt;
[[Datei:Sed.png|mini|alternativtext=??|Titelbild FOX]]&lt;br /&gt;
== Test Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Math ===&lt;br /&gt;
&amp;lt;math&amp;gt;E=mc^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&amp;lt;\frac{2+dc}{9}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ReplaceText ===&lt;br /&gt;
Bernhardstraße&lt;br /&gt;
&lt;br /&gt;
=== ImageMap ===&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
Datei:Sed.png|150px|alternativtext=Fluss mit Schiff&lt;br /&gt;
default [[Hauptseite|zur Hauptseite]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PdfHandler ===&lt;br /&gt;
[[Datei:Testdatei.pdf|page=2|600px]]&lt;br /&gt;
&lt;br /&gt;
=== LinkTitles ===&lt;br /&gt;
[[Aalleiter]]&lt;br /&gt;
&lt;br /&gt;
=== Cite ===&lt;br /&gt;
Siehe &amp;lt;ref&amp;gt;Müller-Hagedorn&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Datei:Testdatei.pdf&amp;diff=9594</id>
		<title>Datei:Testdatei.pdf</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Datei:Testdatei.pdf&amp;diff=9594"/>
		<updated>2023-12-15T09:28:35Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Test123&amp;diff=9593</id>
		<title>Test123</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Test123&amp;diff=9593"/>
		<updated>2023-12-15T09:27:34Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: Die Seite wurde neu angelegt: „== Spielwiese == &amp;#039;&amp;#039;&amp;#039;A&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt; / 0,5 A&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039;&amp;#039; {{#expr: 1 + 1 }} Titelbild FOX == Test Extensions ==  === Math === &amp;lt;math&amp;gt;E=mc^2&amp;lt;/math&amp;gt;   &amp;lt;math&amp;gt;&amp;lt;\frac{2+dc}{9}&amp;lt;/math&amp;gt;  === ReplaceText === Bernhardstraße  === ImageMap === &amp;lt;imagemap&amp;gt; Datei:069 2023 Noss Titelbild.png|150px|alternativtext=Fluss mit Schiff default zur Hauptseite &amp;lt;/imagemap&amp;gt;  === PdfHandler ===…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Spielwiese ==&lt;br /&gt;
&#039;&#039;&#039;A&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt; / 0,5 A&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
{{#expr: 1 + 1 }}&lt;br /&gt;
[[Datei:069 2023 Noss Titelbild.png|mini|alternativtext=Fluss mit Schiff|Titelbild FOX]]&lt;br /&gt;
== Test Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Math ===&lt;br /&gt;
&amp;lt;math&amp;gt;E=mc^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&amp;lt;\frac{2+dc}{9}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ReplaceText ===&lt;br /&gt;
Bernhardstraße&lt;br /&gt;
&lt;br /&gt;
=== ImageMap ===&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
Datei:069 2023 Noss Titelbild.png|150px|alternativtext=Fluss mit Schiff&lt;br /&gt;
default [[Hauptseite|zur Hauptseite]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PdfHandler ===&lt;br /&gt;
[[Datei:Testdatei.pdf|page=2|600px]]&lt;br /&gt;
&lt;br /&gt;
=== LinkTitles ===&lt;br /&gt;
[[Aalleiter]]&lt;br /&gt;
&lt;br /&gt;
=== Cite ===&lt;br /&gt;
Siehe &amp;lt;ref&amp;gt;Müller-Hagedorn&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Hauptseite&amp;diff=9592</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Hauptseite&amp;diff=9592"/>
		<updated>2023-12-15T09:27:07Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Wiki enthält die Begriffsbestimmungen der VV-WSV 1102, Teil 2.&lt;br /&gt;
&lt;br /&gt;
Die VV-WSV 1102 ist eine Verwaltungsvorschrift des Bundesministerium für Verkehr und digitale Infrastruktur für den Geschäftsbereich der WSV. Die im Objektkatalog definierten Begriffe werden insbesondere bei der Identifikation der baulichen und sonstigen technischen Anlagen an den Bundeswasserstraßen verwendet. Der Teil 2 der Vorschrift enthält das für den Verwaltungsgebrauch bestimmte Begriffsglossar.&lt;br /&gt;
&lt;br /&gt;
[[test123]]&lt;br /&gt;
&lt;br /&gt;
* [[:Kategorie:Begriff|Begriffe]]&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Impressum&amp;diff=9591</id>
		<title>VV-WSV 1102:Impressum</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Impressum&amp;diff=9591"/>
		<updated>2022-04-04T06:35:22Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Impressum==&lt;br /&gt;
&lt;br /&gt;
Das Internetangebot wird herausgegeben von:&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Bundesanstalt für Wasserbau&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
Kußmaulstraße 17 &amp;lt;br /&amp;gt;&lt;br /&gt;
76187 Karlsruhe &amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Postanschrift: &amp;lt;br /&amp;gt;&lt;br /&gt;
Postfach 21 03 53 &amp;lt;br /&amp;gt;&lt;br /&gt;
76152 Karlsruhe &amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Telefon: 07 21/97 26-0 &amp;lt;br /&amp;gt;&lt;br /&gt;
Fax: 07 21/97 26-4540 &amp;lt;br /&amp;gt;&lt;br /&gt;
E-Mail: [mailto:info@baw.de info@baw.de] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Verantwortlich&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Peter Weinmann &amp;lt;br /&amp;gt;&lt;br /&gt;
[mailto:peter.weinmann@baw.de peter.weinmann@baw.de] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Redaktionelle Leitung&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
Jennifer Pfrommer &amp;lt;br /&amp;gt;&lt;br /&gt;
[mailto:jennifer.pfrommer@baw.de jennifer.pfrommer@baw.de] &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestaltung, Realisierung&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
arxio GmbH (Programmierung, Umsetzung) &amp;lt;br /&amp;gt;&lt;br /&gt;
http://www.arxio.de &amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Hinweis===&lt;br /&gt;
&lt;br /&gt;
Für Vollständigkeit, Fehler redaktioneller und technischer Art, Auslassungen usw. sowie die Richtigkeit der Eintragungen kann keine Haftung übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Insbesondere kann keine Gewähr für die Vollständigkeit und Richtigkeit von Informationen übernommen werden, die über weiterführende Links erreicht werden. Anbieter sind für die eigenen Inhalte, die sie zur Nutzung bereithalten, nach den allgemeinen Gesetzen verantwortlich. Von diesen eigenen Inhalten sind Querverweise auf die von anderen Anbietern bereitgehaltenen Inhalte zu unterscheiden.&lt;br /&gt;
&lt;br /&gt;
Die Verweise durch Hyperlinks auf Inhalte fremder Webseiten dienen lediglich der Information.&lt;br /&gt;
Die Verantwortlichkeit für diese fremden Inhalte liegt alleine bei dem Anbieter, der die Inhalte bereithält. Vor dem Einrichten des entsprechenden Verweises sind die Web-Seiten der anderen Anbieter mit großer Sorgfalt und nach bestem Wissen und Gewissen überprüft worden. Es kann jedoch keine Gewähr für die Vollständigkeit und Richtigkeit von Informationen übernommen werden, die über weiterführende Hyperlinks erreicht werden. Der Inhalt der anderen Web-Seiten kann jederzeit ohne Wissen der Bundesanstalt für Wasserbau geändert werden. Für sämtliche Links auf diesen Seiten gilt: Wir betonen, dass wir keinen Einfluss auf die Gestaltung und die Inhalte der durch Link von unserer Homepage aus erreichbaren Seiten anderer Anbieter haben und uns deren Inhalt nicht zu eigen machen. Diese Erklärung gilt für alle Seiten dieser Homepage und die dort angebrachten Links.&lt;br /&gt;
&lt;br /&gt;
Falls die Bundesanstalt für Wasserbau auf Seiten verweist, deren Inhalt Anlass zur Beanstandung gibt, bitten wir um Mitteilung.&lt;br /&gt;
Die Bundesanstalt für Wasserbau behält sich das Recht vor, ohne vorherige Ankündigung die bereitgestellten Informationen zu ändern, zu ergänzen oder zu entfernen.&lt;br /&gt;
===Urheberrecht===&lt;br /&gt;
&lt;br /&gt;
Das Copyright für Texte liegt, soweit nicht anders vermerkt, bei der Bundesanstalt für Wasserbau.&lt;br /&gt;
&lt;br /&gt;
Das Copyright für Bilder liegt, soweit nicht anders vermerkt, bei der Bundesanstalt für Wasserbau oder bei der Wasser- und Schifffahrtsverwaltung des Bundes.&lt;br /&gt;
&lt;br /&gt;
Auf diesen Webseiten zur Verfügung gestellte Texte, Textteile, Grafiken, Tabellen oder Bildmaterialien dürfen ohne vorherige Zustimmung der Bundesanstalt für Wasserbau nicht vervielfältigt, nicht verbreitet und nicht ausgestellt werden.&lt;br /&gt;
&lt;br /&gt;
===Nutzungsbedingungen für Bilder===&lt;br /&gt;
&lt;br /&gt;
# Die Bundesansalt für Wasserbau hat alle Nutzungsrechte von den Urhebern der digitalen Bilder erworben, soweit nichts Gegenteiliges, z.B. in den begleitenden Bildinformationen, angegeben ist.&lt;br /&gt;
# Die Bildinformationen und die darin enthaltenen Nutzungs- und Verwendungsbeschränkungen sind zu beachten. Für die aus der Nichtbeachtung resultierenden Schäden haftet der Nutzer. Er hat die Bundesanstalt für Wasserbau insoweit von Ansprüchen Dritter freizustellen. Für die Nutzung des Bildmaterials im historischen Bildarchiv der Bundeswasserstraßen gelten gesonderte Nutzungsbedingungen.&lt;br /&gt;
# Die Bilder können grundsätzlich kostenfrei heruntergeladen und im Rahmen der Berichterstattung für folgende Zwecke genutzt werden: &lt;br /&gt;
#* Presseveröffentlichungen&lt;br /&gt;
#* Veröffentlichungen durch Film und Fernsehen&lt;br /&gt;
#:Eine darüber hinausgehende Nutzung für kommerzielle Zwecke, insbesondere für Werbezwecke, ist nicht zulässig.&lt;br /&gt;
# Jegliche Bearbeitung, Umgestaltung oder Manipulation der digitalen Bilder, die über Farbkorrekturen, Ausschnitte und Verkleinerungen hinausgehen, ist unzulässig und nur mit vorheriger schriftlicher Zustimmung seitens der Bundesanstalt für Wasserbau erlaubt. Ebenso darf das digitale Bild nicht in einem sinnentstellten Zusammenhang wiedergegeben werden.&lt;br /&gt;
# Eine Entstellung des urheberrechtlichen geschützten Werks in Bild, Wort bzw. jeglicher anderen Form, z.B. durch Nachfotografieren, zeichnerische Verfälschung, Fotocomposing oder elektronische Hilfsmittel ist nicht zulässig. Der Nutzer trägt die Verantwortung für die Betextung.&lt;br /&gt;
# Die Presse ist insbesondere zur Beachtung der publizistischen Grundsätze des Deutschen Presserates (Pressecodex) verpflichtet. Die Zustimmung zur Nutzung des Bildmaterials umfasst nicht die Zusicherung, dass die abgebildeten Personen, die Inhaber der Rechte an abgebildeten Werken oder die Inhaber von Marken- und sonstigen Schutzrechten die Einwilligung zu einer öffentlichen Wiedergabe erteilt haben. Die Einholung der im Einzelfall notwendigen Einwilligungen Dritter obliegt dem Nutzer. Er hat die Persönlichkeits-, Urheber-, Marken- und sonstigen Schutzrechte von abgebildeten Personen, Werken, Gegenständen oder Zeichen selbst zu beachten. Bei Missachtung solcher Rechte ist allein der Nutzer etwaigen Dritten gegenüber schadenersatzpflichtig.&lt;br /&gt;
# Die Bundesanstalt für Wasserbau behält sich vor, dem Verdacht einer missbräuchlichen Nutzung oder einer wesentlichen Nutzungsverletzung nachzugehen.&lt;br /&gt;
# Bei Verwendung des digitalen Bildes ist die Quelle &amp;quot;Vor- und Nachname des Fotografen/BAW&amp;quot; anzugeben. Dies gilt auch für elektronische Publikationen (z.B. Webseiten). Von jeder Veröffentlichung im Druck ist der Bundesanstalt für Wasserbau ein Belegexemplar unaufgefordert und kostenfrei zuzusenden.&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9590</id>
		<title>VV-WSV 1102:Datenschutz</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9590"/>
		<updated>2020-12-01T11:17:28Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Datenschutzerklärung==&lt;br /&gt;
&lt;br /&gt;
Die Bundesanstalt für Wasserbau nimmt den Schutz Ihrer personenbezogenen Daten sehr ernst. Wir möchten, dass Sie wissen, wann wir welche Daten erheben und wie wir sie verwenden. Wir haben technische und organisatorische Maßnahmen getroffen, die sicherstellen, dass die Vorschriften über den Datenschutz sowohl von uns als auch von externen Dienstleistern beachtet werden. &lt;br /&gt;
&lt;br /&gt;
Für die Nutzung des Webangebots der Bundesanstalt für Wasserbau müssen grundsätzlich keine personenbezogenen Daten angegeben werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf das Internetangebot ===&lt;br /&gt;
Beim Besuch unserer Webseite zu Informationszwecken speichern unsere in Deutschland liegenden Server nur die personenbeziehbaren Daten, die ihr Browser an unsere Server übermittelt. In der Protokolldatei werden folgende Daten maximal 30 Tage gespeichert:&lt;br /&gt;
&lt;br /&gt;
* IP-Adresse des Clients&lt;br /&gt;
* Identität des Client-PCs&lt;br /&gt;
* Zeitpunkt des Requests&lt;br /&gt;
* URL&lt;br /&gt;
* HTTP-Status-Code &lt;br /&gt;
* Größe des angefragten Objektes&lt;br /&gt;
*  Referer&lt;br /&gt;
*  Browsertyp und Version&lt;br /&gt;
Die gespeicherten Daten werden nur zur Optimierung des Internetangebotes ausgewertet.&lt;br /&gt;
&lt;br /&gt;
=== Informationsmaterial, Newsletter, Kontaktformular ===&lt;br /&gt;
Wenn Sie Informationsmaterial oder Newsletter bestellen, fragen wir Sie nach Ihrem Namen und nach anderen persönlichen Informationen. Es unterliegt Ihrer freien Entscheidung, ob Sie diese Daten eingeben. Ihre Angaben speichern wir auf besonders geschützten Servern in Deutschland. Der Zugriff darauf ist nur wenigen besonders befugten Personen möglich, die mit der technischen oder redaktionellen Betreuung der Server befasst sind.&lt;br /&gt;
Über die auf unserer Webseite bereitgestellten Kontaktformulare können Sie direkt mit uns in Verbindung zu treten. Wir erheben, verarbeiten und nutzen die von Ihnen über ein Formular mitgeteilten Informationen ausschließlich für die Bearbeitung Ihres konkreten Anliegens und nur mit Ihrer Einwilligung.&lt;br /&gt;
&lt;br /&gt;
=== Weitergabe personenbezogener Daten an Dritte ===&lt;br /&gt;
Wir verwenden Ihre personenbezogenen Informationen im Falle von Infobestellungen nur innerhalb der Bundesanstalt für Wasserbau und der mit dem Versand von Informationsmaterial beauftragten Unternehmen. Wir geben sie nicht ohne Ihre ausdrückliche Einwilligung an Dritte weiter. Soweit wir gesetzlich oder per Gerichtsbeschluss dazu verpflichtet sind, werden wir Ihre Daten an auskunftsberechtigte Stellen übermitteln.&lt;br /&gt;
&lt;br /&gt;
=== Einsatz von Cookies ===&lt;br /&gt;
Bei einem Besuch unserer Website werden Informationen in Form eines Cookies auf Ihrem Rechner abgelegt. Cookies helfen unter vielen Aspekten, Ihren Besuch auf unserer Webseite einfacher, angenehmer und sinnvoller zu gestalten. Cookies sind Textdateien, die Ihr Webbrowser automatisch auf der Festplatte Ihres Computers speichert, wenn Sie unsere Internetseite besuchen.&lt;br /&gt;
&lt;br /&gt;
Sie können Ihren Browser jederzeit mittels entsprechender Einstellung so konfigurieren, dass keine Cookies auf Ihrem Computer gespeichert werden und dadurch der Setzung von Cookies widersprechen.  Zudem können Sie bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme löschen. Dies ist in allen gängigen Internetbrowsern möglich. Sofern Sie die Setzung von Cookies in dem genutzten Internetbrowser deaktivieren, sind unter Umständen nicht alle Funktionen unserer Internetseite nutzbar.&lt;br /&gt;
&lt;br /&gt;
Wir nutzen nur technisch notwendige Cookies.&lt;br /&gt;
&lt;br /&gt;
=== Statistik ===&lt;br /&gt;
Zur Optimierung unseres Angebots werten wir die Zugriffe auf unsere Seiten statistisch aus. Wir setzen dafür die Open-Source-Anwendung &amp;quot;AWStats&amp;quot; ein. AWStats nutzt für die Auswertung die Protokolldatei unseres Webservers. Die Informationen über Ihre Benutzung dieser Webseite werden nicht an Dritte weitergegeben. &lt;br /&gt;
Mit &amp;quot;AWStats&amp;quot; werden keine Daten an Server übermittelt, die außerhalb der Kontrolle der Bundesanstalt für Wasserbau liegen.&lt;br /&gt;
Aus den Daten erstellen wir keine Nutzerprofile und nutzen sie auch nicht für andere Zwecke.&lt;br /&gt;
&lt;br /&gt;
===Links ===&lt;br /&gt;
Diese Datenschutzerklärung erstreckt sich nicht auf von unserer Webseite aus verlinkte Webseiten Dritter. &lt;br /&gt;
Für den Inhalt der verlinkten Seiten sind ausschließlich deren Anbieter verantwortlich. Offensichtlich rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung unter Anwendung eines zumutbaren Prüfungsmaßstabs nicht erkennbar. Bei Kenntnis von Rechtsverletzungen werden derartige Links unverzüglich entfernt.&lt;br /&gt;
&lt;br /&gt;
=== Minderjährigenschutz ===&lt;br /&gt;
Personen unter 18 Jahren sollten ohne Zustimmung der Eltern oder Erziehungsberechtigten keine personenbezogenen Daten an uns übermitteln. Wir fordern keine personenbezogenen Daten von Kindern und Jugendlichen an. Wissentlich sammeln wir solche Daten nicht und geben sie auch nicht an Dritte weiter.&lt;br /&gt;
&lt;br /&gt;
=== Auskunftsrecht, Berichtigung, Löschung ===&lt;br /&gt;
Sie haben jederzeit das Recht auf &lt;br /&gt;
* Auskunft, &lt;br /&gt;
* Berichtigung, &lt;br /&gt;
* Löschung, &lt;br /&gt;
* Einschränkung der Verarbeitung, &lt;br /&gt;
* Widerspruch gegen die Verarbeitung &lt;br /&gt;
* Datenübertragbarkeit &lt;br /&gt;
hinsichtlich der bezüglich Ihrer Person gespeicherten Daten, deren Herkunft und Empfänger sowie den Zweck der Speicherung, sofern nicht folgendes gilt: &lt;br /&gt;
&lt;br /&gt;
Die Aufbewahrung von Bürgeranfragen in elektronischer Form erfolgt - wie auch in Papierform - gemäß den für die Aufbewahrung von Schriftgut geltenden Fristen der Registraturrichtlinie, welche die Gemeinsame Geschäftsordnung der Bundesministerien (GGO) ergänzt.&lt;br /&gt;
&lt;br /&gt;
Sie können sich mit Fragen und Beschwerden an den Datenschutzbeauftragten der Bundesanstalt für Wasserbau wenden.&lt;br /&gt;
&lt;br /&gt;
=== Behördlicher Datenschutzbeauftragter ===&lt;br /&gt;
Sigfrid Knapp&amp;lt;br/&amp;gt;&lt;br /&gt;
Telefon: +49 (0) 721 9726-4550&amp;lt;br/&amp;gt;&lt;br /&gt;
E-Mail: datenschutz@baw.de&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Kategorie:Begriff&amp;diff=9589</id>
		<title>Kategorie:Begriff</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Kategorie:Begriff&amp;diff=9589"/>
		<updated>2020-10-21T14:31:14Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC Kategorie|ZEICHEN=A}}&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:Vorlage:Dokumentation&amp;diff=9588</id>
		<title>Modul:Vorlage:Dokumentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:Vorlage:Dokumentation&amp;diff=9588"/>
		<updated>2020-10-21T14:30:24Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[=[ 2019-07-29&lt;br /&gt;
{{Dokumentation}}&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local Current = mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fake( frame, access )&lt;br /&gt;
    local s = string.format( &amp;quot;[%s/%s %s]&amp;quot;,&lt;br /&gt;
                             &amp;quot;https://de.wikipedia.org/wiki&amp;quot;,&lt;br /&gt;
                             mw.uri.encode( access, &amp;quot;WIKI&amp;quot; ),&lt;br /&gt;
                             &amp;quot;Doku in der echten deWP&amp;quot; )&lt;br /&gt;
    local e = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
    e:css( &amp;quot;border&amp;quot;,  &amp;quot;#A000A0 2px solid&amp;quot; )&lt;br /&gt;
     :css( &amp;quot;padding&amp;quot;, &amp;quot;1em&amp;quot; )&lt;br /&gt;
     :wikitext( &amp;quot;[[Datei:Redirectltr.png|#REDIRECT|link=]]&amp;quot; )&lt;br /&gt;
     :node( mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                   :addClass( &amp;quot;redirectText&amp;quot; )&lt;br /&gt;
                   :wikitext( s ) )&lt;br /&gt;
    return tostring( e )&lt;br /&gt;
end -- fake()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fatal( amend )&lt;br /&gt;
    local s = &amp;quot;Wikipedia:Vorlagenfehler/Vorlage:Dokumentation&amp;quot;&lt;br /&gt;
    if amend then&lt;br /&gt;
        s = string.format( &amp;quot;%s/%s&amp;quot;, s, amend )&lt;br /&gt;
    end&lt;br /&gt;
    return string.format( &amp;quot;[[Kategorie:%s]]&amp;quot;, s )&lt;br /&gt;
end -- fatal()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function findeSchalter( area )&lt;br /&gt;
    local i = area:find( &amp;quot;__&amp;quot;, 1, true )&lt;br /&gt;
    local r&lt;br /&gt;
    if i then&lt;br /&gt;
        r = area:find( &amp;quot;__TOC__&amp;quot;, i, true )   or&lt;br /&gt;
            area:find( &amp;quot;__NOTOC__&amp;quot;, i, true )   or&lt;br /&gt;
            area:find( &amp;quot;__INHALTSVERZEICHNIS__&amp;quot;, i, true )   or&lt;br /&gt;
            area:find( &amp;quot;__KEIN_INHALTSVERZEICHNIS__&amp;quot;, i, true )   or&lt;br /&gt;
            area:find( &amp;quot;__KEININHALTSVERZEICHNIS__&amp;quot;, i, true )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- findeSchalter()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function findeTemplateDataTOC( area )&lt;br /&gt;
    local i = area:find( &amp;quot;emplateData&amp;quot;, 3, true )&lt;br /&gt;
    local r&lt;br /&gt;
    if i then&lt;br /&gt;
        if area:find( &amp;quot;TOC&amp;quot;,  i + 11,  true ) then&lt;br /&gt;
            local k&lt;br /&gt;
            if i &amp;gt; 100 then&lt;br /&gt;
                i = i - 100&lt;br /&gt;
            else&lt;br /&gt;
                i = 1&lt;br /&gt;
            end&lt;br /&gt;
            i, k = area:find( &amp;quot;%{%{%s*[tT]emplateData%s*|&amp;quot;, i )&lt;br /&gt;
            if i then&lt;br /&gt;
                r = area:find( &amp;quot;|%s*TOC%s*=%s*1%s*[|}]&amp;quot;,  k - 1 )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- findeTemplateDataTOC()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function furnish( area, frame )&lt;br /&gt;
    local i = area:find( &amp;quot;==&amp;quot;, 1, true )&lt;br /&gt;
    local r&lt;br /&gt;
    if i then&lt;br /&gt;
        local seek = &amp;quot;==[^\n]+==\n&amp;quot;&lt;br /&gt;
        local init, k, n&lt;br /&gt;
        if i == 1 then&lt;br /&gt;
            i, k = area:find( seek, 1 )&lt;br /&gt;
            if i == 1 then&lt;br /&gt;
                n = 1&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        seek = &amp;quot;\n&amp;quot; .. seek&lt;br /&gt;
        if i and not n then&lt;br /&gt;
            i, k = area:find( seek,  i - 1 )&lt;br /&gt;
        end&lt;br /&gt;
        if i then&lt;br /&gt;
            n = 1&lt;br /&gt;
            init = i&lt;br /&gt;
            i, k = area:find( seek,  k - 1 )&lt;br /&gt;
            if i then&lt;br /&gt;
                n = 2&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if n == 1 then&lt;br /&gt;
            r = &amp;quot;__NOTOC__\n&amp;quot; .. area&lt;br /&gt;
        elseif n == 2 then&lt;br /&gt;
            local src    = &amp;quot;TOC nonum/styles.css&amp;quot;&lt;br /&gt;
            local toc    = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                                  :newline()&lt;br /&gt;
                                  :addClass( &amp;quot;nonumtoc&amp;quot; )&lt;br /&gt;
                                  :wikitext( &amp;quot;__TOC__&amp;quot; )&lt;br /&gt;
                                  :newline()&lt;br /&gt;
            local styles = frame:extensionTag( &amp;quot;templatestyles&amp;quot;,&lt;br /&gt;
                                               nil,&lt;br /&gt;
                                               { src = src } )&lt;br /&gt;
            toc = styles .. tostring( toc )&lt;br /&gt;
            if init == 1 then&lt;br /&gt;
                r = toc .. area&lt;br /&gt;
            else&lt;br /&gt;
                r = string.format( &amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
                                   area:sub( 1,  init - 1 ),&lt;br /&gt;
                                   toc,&lt;br /&gt;
                                   area:sub( init ) )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r or area&lt;br /&gt;
end -- furnish()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function f( frame )&lt;br /&gt;
    local bottom  = { }&lt;br /&gt;
    local doku    = mw.title.makeTitle( Current.namespace,&lt;br /&gt;
                                        Current.text .. &amp;quot;/Doku&amp;quot; )&lt;br /&gt;
    local sub     = Current.prefixedText .. &amp;quot;/Doku&amp;quot;&lt;br /&gt;
    local r&lt;br /&gt;
    if doku.exists then&lt;br /&gt;
        r = frame:expandTemplate{ title = sub }&lt;br /&gt;
        if not findeSchalter( r ) then&lt;br /&gt;
            if not findeTemplateDataTOC( r ) then&lt;br /&gt;
                r = furnish( r, frame )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        bottom.lonely = &amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        local create = { action  = &amp;quot;edit&amp;quot;,&lt;br /&gt;
                         preload = &amp;quot;Vorlage:Dokumentation/preload-doku&amp;quot;,&lt;br /&gt;
                         summary = &amp;quot;Neu angelegt&amp;quot;,&lt;br /&gt;
                         redlink = &amp;quot;1&amp;quot; }&lt;br /&gt;
        local path   = { sub,  mw.uri.buildQueryString( create ) }&lt;br /&gt;
        local setup  = frame:callParserFunction( &amp;quot;fullurl&amp;quot;, path )&lt;br /&gt;
        local button = { Typ      = &amp;quot;progressive&amp;quot;,&lt;br /&gt;
                         [&amp;quot;Groß&amp;quot;] = &amp;quot;1&amp;quot;,&lt;br /&gt;
                         Link     = setup,&lt;br /&gt;
                         Text     = &amp;quot;Neue Doku-Unterseite anlegen&amp;quot; }&lt;br /&gt;
        r = frame:expandTemplate{ title = &amp;quot;MediaWiki-Button&amp;quot;,&lt;br /&gt;
                                  args  = button }&lt;br /&gt;
        if mw.site.server:match( &amp;quot;%.beta%.wmflabs%.org$&amp;quot; ) then&lt;br /&gt;
            r = r .. fake( frame, sub )&lt;br /&gt;
        elseif Current.namespace == 10 then&lt;br /&gt;
            r = string.format( &amp;quot;%s[[Kategorie:%s]]&amp;quot;,&lt;br /&gt;
                               r,&lt;br /&gt;
                               &amp;quot;Vorlage:nicht dokumentiert&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    r = r .. frame:expandTemplate{ title = &amp;quot;Dokumentation/footer&amp;quot;,&lt;br /&gt;
                                   args  = bottom }&lt;br /&gt;
    return r&lt;br /&gt;
end -- f()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.hastemplate( frame )&lt;br /&gt;
    -- OBSOLETING&lt;br /&gt;
    local r = Current.text:gsub( &amp;quot;/Doku$&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
                          :gsub( &amp;quot; &amp;quot;, &amp;quot;_&amp;quot; )&lt;br /&gt;
                          :gsub( &amp;quot;\&amp;quot;&amp;quot;, &amp;quot;&amp;amp;#34;&amp;quot; )&lt;br /&gt;
    if Current.namespace ~= 10 then&lt;br /&gt;
        r = string.format( &amp;quot;%s:%s&amp;quot;,&lt;br /&gt;
                           mw.site.namespaces[ Current.namespace ].name,&lt;br /&gt;
                           r )&lt;br /&gt;
    end&lt;br /&gt;
    return string.format( &amp;quot;hastemplate:%s+&amp;quot;, r )&lt;br /&gt;
end -- p.hastemplate()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.transcludes()&lt;br /&gt;
    local s = Current.text:gsub( &amp;quot;/Doku$&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
                          :gsub( &amp;quot; &amp;quot;, &amp;quot;_&amp;quot; )&lt;br /&gt;
                          :gsub( &amp;quot;\&amp;quot;&amp;quot;, &amp;quot;&amp;amp;#34;&amp;quot; )&lt;br /&gt;
    local t = mw.title.new( &amp;quot;Suche&amp;quot;, -1 )&lt;br /&gt;
    if Current.namespace ~= 10 then&lt;br /&gt;
        s = string.format( &amp;quot;%s:%s&amp;quot;,&lt;br /&gt;
                           mw.site.namespaces[ Current.namespace ].name,&lt;br /&gt;
                           s )&lt;br /&gt;
    end&lt;br /&gt;
    s = string.format( &amp;quot;hastemplate:%s &amp;quot;, s )&lt;br /&gt;
    return t:fullUrl( { search = s } )&lt;br /&gt;
end -- p.transcludes()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.f( frame )&lt;br /&gt;
    local lucky, r = pcall( f, frame )&lt;br /&gt;
    if not lucky then&lt;br /&gt;
        local e = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                         :attr( &amp;quot;class&amp;quot;, &amp;quot;error&amp;quot; )&lt;br /&gt;
                         :wikitext( r )&lt;br /&gt;
        r = tostring( e ) .. fatal( &amp;quot;Intern&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.f()&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:Text&amp;diff=9586</id>
		<title>Modul:Text</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:Text&amp;diff=9586"/>
		<updated>2020-10-21T14:30:23Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Text = { serial = &amp;quot;2019-11-12&amp;quot;,&lt;br /&gt;
               suite  = &amp;quot;Text&amp;quot;,&lt;br /&gt;
               item   = 29387871 }&lt;br /&gt;
--[=[&lt;br /&gt;
Text utilities&lt;br /&gt;
]=]&lt;br /&gt;
local Failsafe  = Text&lt;br /&gt;
local GlobalMod = Text&lt;br /&gt;
&lt;br /&gt;
-- local globals&lt;br /&gt;
local PatternCJK        = false&lt;br /&gt;
local PatternCombined   = false&lt;br /&gt;
local PatternLatin      = false&lt;br /&gt;
local PatternTerminated = false&lt;br /&gt;
local RangesLatin       = false&lt;br /&gt;
local SeekQuote         = false&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local foreignModule = function ( access, advanced, append, alt, alert )&lt;br /&gt;
    -- Fetch global module&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     access    -- string, with name of base module&lt;br /&gt;
    --     advanced  -- true, for require(); else mw.loadData()&lt;br /&gt;
    --     append    -- string, with subpage part, if any; or false&lt;br /&gt;
    --     alt       -- number, of wikidata item of root; or false&lt;br /&gt;
    --     alert     -- true, for throwing error on data problem&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns whatever, probably table&lt;br /&gt;
    -- 2019-10-29&lt;br /&gt;
    local storage = access&lt;br /&gt;
    local finer = function ()&lt;br /&gt;
                      if append then&lt;br /&gt;
                          storage = string.format( &amp;quot;%s/%s&amp;quot;,&lt;br /&gt;
                                                   storage,&lt;br /&gt;
                                                   append )&lt;br /&gt;
                      end&lt;br /&gt;
                  end&lt;br /&gt;
    local fun, lucky, r, suited&lt;br /&gt;
    if advanced then&lt;br /&gt;
        fun = require&lt;br /&gt;
    else&lt;br /&gt;
        fun = mw.loadData&lt;br /&gt;
    end&lt;br /&gt;
    GlobalMod.globalModules = GlobalMod.globalModules or { }&lt;br /&gt;
    suited = GlobalMod.globalModules[ access ]&lt;br /&gt;
    if not suited then&lt;br /&gt;
        finer()&lt;br /&gt;
        lucky, r = pcall( fun,  &amp;quot;Module:&amp;quot; .. storage )&lt;br /&gt;
    end&lt;br /&gt;
    if not lucky then&lt;br /&gt;
        if not suited  and&lt;br /&gt;
           type( alt ) == &amp;quot;number&amp;quot;  and&lt;br /&gt;
           alt &amp;gt; 0 then&lt;br /&gt;
            suited = string.format( &amp;quot;Q%d&amp;quot;, alt )&lt;br /&gt;
            suited = mw.wikibase.getSitelink( suited )&lt;br /&gt;
            GlobalMod.globalModules[ access ] = suited or true&lt;br /&gt;
        end&lt;br /&gt;
        if type( suited ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            storage = suited&lt;br /&gt;
            finer()&lt;br /&gt;
            lucky, r = pcall( fun, storage )&lt;br /&gt;
        end&lt;br /&gt;
        if not lucky and alert then&lt;br /&gt;
            error( &amp;quot;Missing or invalid page: &amp;quot; .. storage, 0 )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- foreignModule()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function factoryQuote()&lt;br /&gt;
    -- Create quote definitions&lt;br /&gt;
    if not Text.quoteLang then&lt;br /&gt;
        local quoting = foreignModule( &amp;quot;Text&amp;quot;,&lt;br /&gt;
                                       false,&lt;br /&gt;
                                       &amp;quot;quoting&amp;quot;,&lt;br /&gt;
                                       Text.item )&lt;br /&gt;
        if type( quoting ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            Text.quoteLang = quoting.langs&lt;br /&gt;
            Text.quoteType = quoting.types&lt;br /&gt;
        end&lt;br /&gt;
        if type( Text.quoteLang ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
            Text.quoteLang = { }&lt;br /&gt;
        end&lt;br /&gt;
        if type( Text.quoteType ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
            Text.quoteType = { }&lt;br /&gt;
        end&lt;br /&gt;
        if type( Text.quoteLang.en ) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
            Text.quoteLang.en = &amp;quot;ld&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if type( Text.quoteType[ Text.quoteLang.en ] ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
            Text.quoteType[ Text.quoteLang.en ] = { { 8220, 8221 },&lt;br /&gt;
                                                    { 8216, 8217 } }&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end -- factoryQuote()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fiatQuote( apply, alien, advance )&lt;br /&gt;
    -- Quote text&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     apply    -- string, with text&lt;br /&gt;
    --     alien    -- string, with language code&lt;br /&gt;
    --     advance  -- number, with level 1 or 2&lt;br /&gt;
    local r = apply&lt;br /&gt;
    local suite&lt;br /&gt;
    factoryQuote()&lt;br /&gt;
    suite = Text.quoteLang[ alien ]&lt;br /&gt;
    if not suite then&lt;br /&gt;
        local slang = alien:match( &amp;quot;^(%l+)-&amp;quot; )&lt;br /&gt;
        if slang then&lt;br /&gt;
            suite = Text.quoteLang[ slang ]&lt;br /&gt;
        end&lt;br /&gt;
        if not suite then&lt;br /&gt;
            suite = Text.quoteLang.en&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if suite then&lt;br /&gt;
        local quotes = Text.quoteType[ suite ]&lt;br /&gt;
        if quotes then&lt;br /&gt;
            local space&lt;br /&gt;
            if quotes[ 3 ] then&lt;br /&gt;
                space = &amp;quot;&amp;amp;#160;&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                space = &amp;quot;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            quotes = quotes[ advance ]&lt;br /&gt;
            if quotes then&lt;br /&gt;
                r = mw.ustring.format( &amp;quot;%s%s%s%s%s&amp;quot;,&lt;br /&gt;
                                       mw.ustring.char( quotes[ 1 ] ),&lt;br /&gt;
                                       space,&lt;br /&gt;
                                       apply,&lt;br /&gt;
                                       space,&lt;br /&gt;
                                       mw.ustring.char( quotes[ 2 ] ) )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            mw.log( &amp;quot;fiatQuote() &amp;quot; .. suite )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fiatQuote()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.char = function ( apply, again, accept )&lt;br /&gt;
    -- Create string from codepoints&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     apply   -- table (sequence) with numerical codepoints, or nil&lt;br /&gt;
    --     again   -- number of repetitions, or nil&lt;br /&gt;
    --     accept  -- true, if no error messages to be appended&lt;br /&gt;
    -- Returns: string&lt;br /&gt;
    local r&lt;br /&gt;
    if type( apply ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local bad   = { }&lt;br /&gt;
        local codes = { }&lt;br /&gt;
        local s&lt;br /&gt;
        for k, v in pairs( apply ) do&lt;br /&gt;
            s = type( v )&lt;br /&gt;
            if s == &amp;quot;number&amp;quot; then&lt;br /&gt;
                if v &amp;lt; 32  and  v ~= 9  and  v ~= 10 then&lt;br /&gt;
                    v = tostring( v )&lt;br /&gt;
                else&lt;br /&gt;
                    v = math.floor( v )&lt;br /&gt;
                    s = false&lt;br /&gt;
                end&lt;br /&gt;
            elseif s ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
                v = tostring( v )&lt;br /&gt;
            end&lt;br /&gt;
            if s then&lt;br /&gt;
                table.insert( bad, v )&lt;br /&gt;
            else&lt;br /&gt;
                table.insert( codes, v )&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        if #bad == 0 then&lt;br /&gt;
            if #codes &amp;gt; 0 then&lt;br /&gt;
                r = mw.ustring.char( unpack( codes ) )&lt;br /&gt;
                if again then&lt;br /&gt;
                    if type( again ) == &amp;quot;number&amp;quot; then&lt;br /&gt;
                        local n = math.floor( again )&lt;br /&gt;
                        if n &amp;gt; 1 then&lt;br /&gt;
                            r = r:rep( n )&lt;br /&gt;
                        elseif n &amp;lt; 1 then&lt;br /&gt;
                            r = &amp;quot;&amp;quot;&lt;br /&gt;
                        end&lt;br /&gt;
                    else&lt;br /&gt;
                        s = &amp;quot;bad repetitions: &amp;quot; .. tostring( again )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            s = &amp;quot;bad codepoints: &amp;quot; .. table.concat( bad, &amp;quot; &amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
        if s  and  not accept then&lt;br /&gt;
            r = tostring(  mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                                  :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                                  :wikitext( s ) )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- Text.char()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.concatParams = function ( args, apply, adapt )&lt;br /&gt;
    -- Concat list items into one string&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     args   -- table (sequence) with numKey=string&lt;br /&gt;
    --     apply  -- string (optional); separator (default: &amp;quot;|&amp;quot;)&lt;br /&gt;
    --     adapt  -- string (optional); format including &amp;quot;%s&amp;quot;&lt;br /&gt;
    -- Returns: string&lt;br /&gt;
    local collect = { }&lt;br /&gt;
    for k, v in pairs( args ) do&lt;br /&gt;
        if type( k ) == &amp;quot;number&amp;quot; then&lt;br /&gt;
            v = mw.text.trim( v )&lt;br /&gt;
            if v ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                if adapt then&lt;br /&gt;
                    v = mw.ustring.format( adapt, v )&lt;br /&gt;
                end&lt;br /&gt;
                table.insert( collect, v )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    return table.concat( collect,  apply or &amp;quot;|&amp;quot; )&lt;br /&gt;
end -- Text.concatParams()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.containsCJK = function ( analyse )&lt;br /&gt;
    -- Is any CJK code within?&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     analyse  -- string&lt;br /&gt;
    -- Returns: true, if CJK detected&lt;br /&gt;
    local r&lt;br /&gt;
    if not PatternCJK then&lt;br /&gt;
        PatternCJK = mw.ustring.char( 91,&lt;br /&gt;
                                       13312, 45,  40959,&lt;br /&gt;
                                      131072, 45, 178207,&lt;br /&gt;
                                      93 )&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.find( analyse, PatternCJK ) then&lt;br /&gt;
        r = true&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Text.containsCJK()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.getPlain = function ( adjust )&lt;br /&gt;
    -- Remove wikisyntax from string, except templates&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     adjust  -- string&lt;br /&gt;
    -- Returns: string&lt;br /&gt;
    local i = adjust:find( &amp;quot;&amp;lt;!--&amp;quot;, 1, true )&lt;br /&gt;
    local r = adjust&lt;br /&gt;
    local j&lt;br /&gt;
    while i do&lt;br /&gt;
        j = r:find( &amp;quot;--&amp;gt;&amp;quot;,  i + 3,  true )&lt;br /&gt;
        if j then&lt;br /&gt;
            r = r:sub( 1, i ) .. r:sub( j + 3 )&lt;br /&gt;
        else&lt;br /&gt;
            r = r:sub( 1, i )&lt;br /&gt;
        end&lt;br /&gt;
        i = r:find( &amp;quot;&amp;lt;!--&amp;quot;, i, true )&lt;br /&gt;
    end    -- &amp;quot;&amp;lt;!--&amp;quot;&lt;br /&gt;
    r = r:gsub( &amp;quot;(&amp;lt;/?%l[^&amp;gt;]*&amp;gt;)&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
         :gsub( &amp;quot;&#039;&#039;&#039;(.+)&#039;&#039;&#039;&amp;quot;, &amp;quot;%1&amp;quot; )&lt;br /&gt;
         :gsub( &amp;quot;&#039;&#039;(.+)&#039;&#039;&amp;quot;, &amp;quot;%1&amp;quot; )&lt;br /&gt;
         :gsub( &amp;quot;&amp;amp;nbsp;&amp;quot;, &amp;quot; &amp;quot; )&lt;br /&gt;
    return mw.text.unstrip( r )&lt;br /&gt;
end -- Text.getPlain()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.isLatinRange = function ( adjust )&lt;br /&gt;
    -- Are characters expected to be latin or symbols within latin texts?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     adjust  -- string, or nil for initialization&lt;br /&gt;
    -- Returns: true, if valid for latin only&lt;br /&gt;
    local r&lt;br /&gt;
    if not RangesLatin then&lt;br /&gt;
        RangesLatin = { {    7,  687 },&lt;br /&gt;
                        { 7531, 7578 },&lt;br /&gt;
                        { 7680, 7935 },&lt;br /&gt;
                        { 8194, 8250 } }&lt;br /&gt;
    end&lt;br /&gt;
    if not PatternLatin then&lt;br /&gt;
        local range&lt;br /&gt;
        PatternLatin = &amp;quot;^[&amp;quot;&lt;br /&gt;
        for i = 1, #RangesLatin do&lt;br /&gt;
            range = RangesLatin[ i ]&lt;br /&gt;
            PatternLatin = PatternLatin ..&lt;br /&gt;
                           mw.ustring.char( range[ 1 ], 45, range[ 2 ] )&lt;br /&gt;
        end    -- for i&lt;br /&gt;
        PatternLatin = PatternLatin .. &amp;quot;]*$&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if adjust then&lt;br /&gt;
        if mw.ustring.match( adjust, PatternLatin ) then&lt;br /&gt;
            r = true&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Text.isLatinRange()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.isQuote = function ( ask )&lt;br /&gt;
    -- Is this character any quotation mark?&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     ask  -- string, with single character&lt;br /&gt;
    -- Returns: true, if ask is quotation mark&lt;br /&gt;
    local r&lt;br /&gt;
    if not SeekQuote then&lt;br /&gt;
        SeekQuote = mw.ustring.char(   34,       -- &amp;quot;&lt;br /&gt;
                                       39,       -- &#039;&lt;br /&gt;
                                      171,       -- laquo&lt;br /&gt;
                                      187,       -- raquo&lt;br /&gt;
                                     8216,       -- lsquo&lt;br /&gt;
                                     8217,       -- rsquo&lt;br /&gt;
                                     8218,       -- sbquo&lt;br /&gt;
                                     8220,       -- ldquo&lt;br /&gt;
                                     8221,       -- rdquo&lt;br /&gt;
                                     8222,       -- bdquo&lt;br /&gt;
                                     8249,       -- lsaquo&lt;br /&gt;
                                     8250,       -- rsaquo&lt;br /&gt;
                                     0x300C,     -- CJK&lt;br /&gt;
                                     0x300D,     -- CJK&lt;br /&gt;
                                     0x300E,     -- CJK&lt;br /&gt;
                                     0x300F )    -- CJK&lt;br /&gt;
    end&lt;br /&gt;
    if ask == &amp;quot;&amp;quot; then&lt;br /&gt;
        r = false&lt;br /&gt;
    elseif mw.ustring.find( SeekQuote, ask, 1, true ) then&lt;br /&gt;
        r = true&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Text.isQuote()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.listToText = function ( args, adapt )&lt;br /&gt;
    -- Format list items similar to mw.text.listToText()&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     args   -- table (sequence) with numKey=string&lt;br /&gt;
    --     adapt  -- string (optional); format including &amp;quot;%s&amp;quot;&lt;br /&gt;
    -- Returns: string&lt;br /&gt;
    local collect = { }&lt;br /&gt;
    for k, v in pairs( args ) do&lt;br /&gt;
        if type( k ) == &amp;quot;number&amp;quot; then&lt;br /&gt;
            v = mw.text.trim( v )&lt;br /&gt;
            if v ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                if adapt then&lt;br /&gt;
                    v = mw.ustring.format( adapt, v )&lt;br /&gt;
                end&lt;br /&gt;
                table.insert( collect, v )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    return mw.text.listToText( collect )&lt;br /&gt;
end -- Text.listToText()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.quote = function ( apply, alien, advance )&lt;br /&gt;
    -- Quote text&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     apply    -- string, with text&lt;br /&gt;
    --     alien    -- string, with language code, or nil&lt;br /&gt;
    --     advance  -- number, with level 1 or 2, or nil&lt;br /&gt;
    -- Returns: quoted string&lt;br /&gt;
    local mode, slang&lt;br /&gt;
    if type( alien ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        slang = mw.text.trim( alien ):lower()&lt;br /&gt;
    else&lt;br /&gt;
        slang = mw.title.getCurrentTitle().pageLanguage&lt;br /&gt;
        if not slang then&lt;br /&gt;
            -- TODO FIXME: Introduction expected 2017-04&lt;br /&gt;
            slang = mw.language.getContentLanguage():getCode()&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if advance == 2 then&lt;br /&gt;
        mode = 2&lt;br /&gt;
    else&lt;br /&gt;
        mode = 1&lt;br /&gt;
    end&lt;br /&gt;
    return fiatQuote( mw.text.trim( apply ), slang, mode )&lt;br /&gt;
end -- Text.quote()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.quoteUnquoted = function ( apply, alien, advance )&lt;br /&gt;
    -- Quote text, if not yet quoted and not empty&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     apply    -- string, with text&lt;br /&gt;
    --     alien    -- string, with language code, or nil&lt;br /&gt;
    --     advance  -- number, with level 1 or 2, or nil&lt;br /&gt;
    -- Returns: string; possibly quoted&lt;br /&gt;
    local r = mw.text.trim( apply )&lt;br /&gt;
    local s = mw.ustring.sub( r, 1, 1 )&lt;br /&gt;
    if s ~= &amp;quot;&amp;quot;  and  not Text.isQuote( s, advance ) then&lt;br /&gt;
        s = mw.ustring.sub( r, -1, 1 )&lt;br /&gt;
        if not Text.isQuote( s ) then&lt;br /&gt;
            r = Text.quote( r, alien, advance )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Text.quoteUnquoted()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.removeDiacritics = function ( adjust )&lt;br /&gt;
    -- Remove all diacritics&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     adjust  -- string&lt;br /&gt;
    -- Returns: string; all latin letters should be ASCII&lt;br /&gt;
    --                  or basic greek or cyrillic or symbols etc.&lt;br /&gt;
    local cleanup, decomposed&lt;br /&gt;
    if not PatternCombined then&lt;br /&gt;
        PatternCombined = mw.ustring.char( 91,&lt;br /&gt;
                                            0x0300, 45, 0x036F,&lt;br /&gt;
                                            0x1AB0, 45, 0x1AFF,&lt;br /&gt;
                                            0x1DC0, 45, 0x1DFF,&lt;br /&gt;
                                            0xFE20, 45, 0xFE2F,&lt;br /&gt;
                                           93 )&lt;br /&gt;
    end&lt;br /&gt;
    decomposed = mw.ustring.toNFD( adjust )&lt;br /&gt;
    cleanup    = mw.ustring.gsub( decomposed, PatternCombined, &amp;quot;&amp;quot; )&lt;br /&gt;
    return mw.ustring.toNFC( cleanup )&lt;br /&gt;
end -- Text.removeDiacritics()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.sentenceTerminated = function ( analyse )&lt;br /&gt;
    -- Is string terminated by dot, question or exclamation mark?&lt;br /&gt;
    --     Quotation, link termination and so on granted&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     analyse  -- string&lt;br /&gt;
    -- Returns: true, if sentence terminated&lt;br /&gt;
    local r = mw.text.trim( analyse )&lt;br /&gt;
    if not PatternTerminated then&lt;br /&gt;
        PatternTerminated = mw.ustring.char( 91,&lt;br /&gt;
                                             12290,&lt;br /&gt;
                                             65281,&lt;br /&gt;
                                             65294,&lt;br /&gt;
                                             65311 )&lt;br /&gt;
                            .. &amp;quot;!%.%?…][\&amp;quot;&#039;%]‹›«»‘’“”]*$&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.find( r, PatternTerminated ) then&lt;br /&gt;
        r = true&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Text.sentenceTerminated()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.ucfirstAll = function ( adjust )&lt;br /&gt;
    -- Capitalize all words&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     adjust  -- string&lt;br /&gt;
    -- Returns: string with all first letters in upper case&lt;br /&gt;
    local r = &amp;quot; &amp;quot; .. adjust&lt;br /&gt;
    local i = 1&lt;br /&gt;
    local c, j, m&lt;br /&gt;
    if adjust:find( &amp;quot;&amp;amp;&amp;quot; ) then&lt;br /&gt;
        r = r:gsub( &amp;quot;&amp;amp;amp;&amp;quot;,      &amp;quot;&amp;amp;#38;&amp;quot; )&lt;br /&gt;
             :gsub( &amp;quot;&amp;amp;lt;&amp;quot;,       &amp;quot;&amp;amp;#60;&amp;quot; )&lt;br /&gt;
             :gsub( &amp;quot;&amp;amp;gt;&amp;quot;,       &amp;quot;&amp;amp;#62;&amp;quot; )&lt;br /&gt;
             :gsub( &amp;quot;&amp;amp;nbsp;&amp;quot;,    &amp;quot;&amp;amp;#160;&amp;quot; )&lt;br /&gt;
             :gsub( &amp;quot;&amp;amp;thinsp;&amp;quot;, &amp;quot;&amp;amp;#8201;&amp;quot; )&lt;br /&gt;
             :gsub( &amp;quot;&amp;amp;zwnj;&amp;quot;,   &amp;quot;&amp;amp;#8204;&amp;quot; )&lt;br /&gt;
             :gsub( &amp;quot;&amp;amp;zwj;&amp;quot;,    &amp;quot;&amp;amp;#8205;&amp;quot; )&lt;br /&gt;
             :gsub( &amp;quot;&amp;amp;lrm;&amp;quot;,    &amp;quot;&amp;amp;#8206;&amp;quot; )&lt;br /&gt;
             :gsub( &amp;quot;&amp;amp;rlm;&amp;quot;,    &amp;quot;&amp;amp;#8207;&amp;quot; )&lt;br /&gt;
        m = true&lt;br /&gt;
    end&lt;br /&gt;
    while i do&lt;br /&gt;
        i = mw.ustring.find( r, &amp;quot;%W%l&amp;quot;, i )&lt;br /&gt;
        if i then&lt;br /&gt;
            j = i + 1&lt;br /&gt;
            c = mw.ustring.upper( mw.ustring.sub( r, j, j ) )&lt;br /&gt;
            r = string.format( &amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
                               mw.ustring.sub( r, 1, i ),&lt;br /&gt;
                               c,&lt;br /&gt;
                               mw.ustring.sub( r, i + 2 ) )&lt;br /&gt;
            i = j&lt;br /&gt;
        end&lt;br /&gt;
    end -- while i&lt;br /&gt;
    r = r:sub( 2 )&lt;br /&gt;
    if m then&lt;br /&gt;
        r = r:gsub(     &amp;quot;&amp;amp;#38;&amp;quot;, &amp;quot;&amp;amp;amp;&amp;quot; )&lt;br /&gt;
             :gsub(     &amp;quot;&amp;amp;#60;&amp;quot;, &amp;quot;&amp;amp;lt;&amp;quot; )&lt;br /&gt;
             :gsub(     &amp;quot;&amp;amp;#62;&amp;quot;, &amp;quot;&amp;amp;gt;&amp;quot; )&lt;br /&gt;
             :gsub(    &amp;quot;&amp;amp;#160;&amp;quot;, &amp;quot;&amp;amp;nbsp;&amp;quot; )&lt;br /&gt;
             :gsub(   &amp;quot;&amp;amp;#8201;&amp;quot;, &amp;quot;&amp;amp;thinsp;&amp;quot; )&lt;br /&gt;
             :gsub(   &amp;quot;&amp;amp;#8204;&amp;quot;, &amp;quot;&amp;amp;zwnj;&amp;quot; )&lt;br /&gt;
             :gsub(   &amp;quot;&amp;amp;#8205;&amp;quot;, &amp;quot;&amp;amp;zwj;&amp;quot; )&lt;br /&gt;
             :gsub(   &amp;quot;&amp;amp;#8206;&amp;quot;, &amp;quot;&amp;amp;lrm;&amp;quot; )&lt;br /&gt;
             :gsub(   &amp;quot;&amp;amp;#8207;&amp;quot;, &amp;quot;&amp;amp;rlm;&amp;quot; )&lt;br /&gt;
             :gsub( &amp;quot;&amp;amp;#X(%x+);&amp;quot;, &amp;quot;&amp;amp;#x%1;&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Text.ucfirstAll()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.uprightNonlatin = function ( adjust )&lt;br /&gt;
    -- Ensure non-italics for non-latin text parts&lt;br /&gt;
    --     One single greek letter might be granted&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     adjust  -- string&lt;br /&gt;
    -- Returns: string with non-latin parts enclosed in &amp;lt;span&amp;gt;&lt;br /&gt;
    local r&lt;br /&gt;
    Text.isLatinRange()&lt;br /&gt;
    if mw.ustring.match( adjust, PatternLatin ) then&lt;br /&gt;
        -- latin only, horizontal dashes, quotes&lt;br /&gt;
        r = adjust&lt;br /&gt;
    else&lt;br /&gt;
        local c&lt;br /&gt;
        local j    = false&lt;br /&gt;
        local k    = 1&lt;br /&gt;
        local m    = false&lt;br /&gt;
        local n    = mw.ustring.len( adjust )&lt;br /&gt;
        local span = &amp;quot;%s%s&amp;lt;span dir=&#039;auto&#039; style=&#039;font-style:normal&#039;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
        local flat = function ( a )&lt;br /&gt;
                  -- isLatin&lt;br /&gt;
                  local range&lt;br /&gt;
                  for i = 1, #RangesLatin do&lt;br /&gt;
                      range = RangesLatin[ i ]&lt;br /&gt;
                      if a &amp;gt;= range[ 1 ]  and  a &amp;lt;= range[ 2 ] then&lt;br /&gt;
                          return true&lt;br /&gt;
                      end&lt;br /&gt;
                  end    -- for i&lt;br /&gt;
              end -- flat()&lt;br /&gt;
        local focus = function ( a )&lt;br /&gt;
                  -- char is not ambivalent&lt;br /&gt;
                  local r = ( a &amp;gt; 64 )&lt;br /&gt;
                  if r then&lt;br /&gt;
                      r = ( a &amp;lt; 8192  or  a &amp;gt; 8212 )&lt;br /&gt;
                  else&lt;br /&gt;
                      r = ( a == 38  or  a == 60 )    -- &#039;&amp;amp;&#039; &#039;&amp;lt;&#039;&lt;br /&gt;
                  end&lt;br /&gt;
                  return r&lt;br /&gt;
              end -- focus()&lt;br /&gt;
        local form = function ( a )&lt;br /&gt;
                return string.format( span,&lt;br /&gt;
                                      r,&lt;br /&gt;
                                      mw.ustring.sub( adjust, k, j - 1 ),&lt;br /&gt;
                                      mw.ustring.sub( adjust, j, a ) )&lt;br /&gt;
              end -- form()&lt;br /&gt;
        r = &amp;quot;&amp;quot;&lt;br /&gt;
        for i = 1, n do&lt;br /&gt;
            c = mw.ustring.codepoint( adjust, i, i )&lt;br /&gt;
            if focus( c ) then&lt;br /&gt;
                if flat( c ) then&lt;br /&gt;
                    if j then&lt;br /&gt;
                        if m then&lt;br /&gt;
                            if i == m then&lt;br /&gt;
                                -- single greek letter.&lt;br /&gt;
                                j = false&lt;br /&gt;
                            end&lt;br /&gt;
                            m = false&lt;br /&gt;
                        end&lt;br /&gt;
                        if j then&lt;br /&gt;
                            local nx = i - 1&lt;br /&gt;
                            local s  = &amp;quot;&amp;quot;&lt;br /&gt;
                            for ix = nx, 1, -1 do&lt;br /&gt;
                                c = mw.ustring.sub( adjust, ix, ix )&lt;br /&gt;
                                if c == &amp;quot; &amp;quot;  or  c == &amp;quot;(&amp;quot; then&lt;br /&gt;
                                    nx = nx - 1&lt;br /&gt;
                                    s  = c .. s&lt;br /&gt;
                                else&lt;br /&gt;
                                    break -- for ix&lt;br /&gt;
                                end&lt;br /&gt;
                            end -- for ix&lt;br /&gt;
                            r = form( nx ) .. s&lt;br /&gt;
                            j = false&lt;br /&gt;
                            k = i&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                elseif not j then&lt;br /&gt;
                    j = i&lt;br /&gt;
                    if c &amp;gt;= 880  and  c &amp;lt;= 1023 then&lt;br /&gt;
                        -- single greek letter?&lt;br /&gt;
                        m = i + 1&lt;br /&gt;
                    else&lt;br /&gt;
                        m = false&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            elseif m then&lt;br /&gt;
                m = m + 1&lt;br /&gt;
            end&lt;br /&gt;
        end    -- for i&lt;br /&gt;
        if j  and  ( not m  or  m &amp;lt; n ) then&lt;br /&gt;
            r = form( n )&lt;br /&gt;
        else&lt;br /&gt;
            r = r .. mw.ustring.sub( adjust, k )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Text.uprightNonlatin()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failsafe.failsafe = function ( atleast )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     atleast  -- string, with required version or &amp;quot;wikidata&amp;quot; or &amp;quot;~&amp;quot;&lt;br /&gt;
    --                 or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string  -- with queried version, also if problem&lt;br /&gt;
    --              false   -- if appropriate&lt;br /&gt;
    -- 2019-10-15&lt;br /&gt;
    local last  = ( atleast == &amp;quot;~&amp;quot; )&lt;br /&gt;
    local since = atleast&lt;br /&gt;
    local r&lt;br /&gt;
    if last  or  since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = Failsafe.item&lt;br /&gt;
        since = false&lt;br /&gt;
        if type( item ) == &amp;quot;number&amp;quot;  and  item &amp;gt; 0 then&lt;br /&gt;
            local entity = mw.wikibase.getEntity( string.format( &amp;quot;Q%d&amp;quot;,&lt;br /&gt;
                                                                 item ) )&lt;br /&gt;
            if type( entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                local seek = Failsafe.serialProperty or &amp;quot;P348&amp;quot;&lt;br /&gt;
                local vsn  = entity:formatPropertyValues( seek )&lt;br /&gt;
                if type( vsn ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                   type( vsn.value ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
                   vsn.value ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    if last  and  vsn.value == Failsafe.serial then&lt;br /&gt;
                        r = false&lt;br /&gt;
                    else&lt;br /&gt;
                        r = vsn.value&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( r ) == &amp;quot;nil&amp;quot; then&lt;br /&gt;
        if not since  or  since &amp;lt;= Failsafe.serial then&lt;br /&gt;
            r = Failsafe.serial&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Failsafe.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Text.test = function ( about )&lt;br /&gt;
    local r&lt;br /&gt;
    if about == &amp;quot;quote&amp;quot; then&lt;br /&gt;
        factoryQuote()&lt;br /&gt;
        r = { QuoteLang = Text.quoteLang,&lt;br /&gt;
              QuoteType = Text.quoteType }&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Text.test()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
function p.char( frame )&lt;br /&gt;
    local params = frame:getParent().args&lt;br /&gt;
    local story = params[ 1 ]&lt;br /&gt;
    local codes, lenient, multiple&lt;br /&gt;
    if not story then&lt;br /&gt;
        params = frame.args&lt;br /&gt;
        story  = params[ 1 ]&lt;br /&gt;
    end&lt;br /&gt;
    if story then&lt;br /&gt;
        local items = mw.text.split( story, &amp;quot;%s+&amp;quot; )&lt;br /&gt;
        if #items &amp;gt; 0 then&lt;br /&gt;
            local j&lt;br /&gt;
            lenient  = ( params.errors == &amp;quot;0&amp;quot; )&lt;br /&gt;
            codes    = { }&lt;br /&gt;
            multiple = tonumber( params[ &amp;quot;*&amp;quot; ] )&lt;br /&gt;
            for k, v in pairs( items ) do&lt;br /&gt;
                if v:sub( 1, 1 ) == &amp;quot;x&amp;quot; then&lt;br /&gt;
                    j = tonumber( &amp;quot;0&amp;quot; .. v )&lt;br /&gt;
                elseif v == &amp;quot;&amp;quot; then&lt;br /&gt;
                    v = false&lt;br /&gt;
                else&lt;br /&gt;
                    j = tonumber( v )&lt;br /&gt;
                end&lt;br /&gt;
                if v then&lt;br /&gt;
                    table.insert( codes,  j or v )&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Text.char( codes, multiple, lenient )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.concatParams( frame )&lt;br /&gt;
    local args&lt;br /&gt;
    local template = frame.args.template&lt;br /&gt;
    if type( template ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        template = mw.text.trim( template )&lt;br /&gt;
        template = ( template == &amp;quot;1&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    if template then&lt;br /&gt;
        args = frame:getParent().args&lt;br /&gt;
    else&lt;br /&gt;
        args = frame.args&lt;br /&gt;
    end&lt;br /&gt;
    return Text.concatParams( args,&lt;br /&gt;
                              frame.args.separator,&lt;br /&gt;
                              frame.args.format )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.containsCJK( frame )&lt;br /&gt;
    return Text.containsCJK( frame.args[ 1 ] or &amp;quot;&amp;quot; ) and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getPlain( frame )&lt;br /&gt;
    return Text.getPlain( frame.args[ 1 ] or &amp;quot;&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isLatinRange( frame )&lt;br /&gt;
    return Text.isLatinRange( frame.args[ 1 ] or &amp;quot;&amp;quot; ) and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isQuote( frame )&lt;br /&gt;
    return Text.isQuote( frame.args[ 1 ] or &amp;quot;&amp;quot; ) and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.listToFormat(frame)&lt;br /&gt;
    local lists = {}&lt;br /&gt;
    local pformat = frame.args[&amp;quot;format&amp;quot;]&lt;br /&gt;
    local sep = frame.args[&amp;quot;sep&amp;quot;] or &amp;quot;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- Parameter parsen: Listen&lt;br /&gt;
    for k, v in pairs(frame.args) do&lt;br /&gt;
        local knum = tonumber(k)&lt;br /&gt;
        if knum then lists[knum] = v end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Listen splitten&lt;br /&gt;
    local maxListLen = 0&lt;br /&gt;
    for i = 1, #lists do&lt;br /&gt;
        lists[i] = mw.text.split(lists[i], sep)&lt;br /&gt;
        if #lists[i] &amp;gt; maxListLen then maxListLen = #lists[i] end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Ergebnisstring generieren&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    local result_line = &amp;quot;&amp;quot;&lt;br /&gt;
    for i = 1, maxListLen do&lt;br /&gt;
        result_line = pformat&lt;br /&gt;
        for j = 1, #lists do&lt;br /&gt;
            result_line = mw.ustring.gsub(result_line, &amp;quot;%%s&amp;quot;, lists[j][i], 1)&lt;br /&gt;
        end&lt;br /&gt;
        result = result .. result_line&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.listToText( frame )&lt;br /&gt;
    local args&lt;br /&gt;
    local template = frame.args.template&lt;br /&gt;
    if type( template ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        template = mw.text.trim( template )&lt;br /&gt;
        template = ( template == &amp;quot;1&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    if template then&lt;br /&gt;
        args = frame:getParent().args&lt;br /&gt;
    else&lt;br /&gt;
        args = frame.args&lt;br /&gt;
    end&lt;br /&gt;
    return Text.listToText( args, frame.args.format )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.quote( frame )&lt;br /&gt;
    local slang = frame.args[2]&lt;br /&gt;
    if type( slang ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        slang = mw.text.trim( slang )&lt;br /&gt;
        if slang == &amp;quot;&amp;quot; then&lt;br /&gt;
            slang = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Text.quote( frame.args[ 1 ] or &amp;quot;&amp;quot;,&lt;br /&gt;
                       slang,&lt;br /&gt;
                       tonumber( frame.args[3] ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.quoteUnquoted( frame )&lt;br /&gt;
    local slang = frame.args[2]&lt;br /&gt;
    if type( slang ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        slang = mw.text.trim( slang )&lt;br /&gt;
        if slang == &amp;quot;&amp;quot; then&lt;br /&gt;
            slang = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Text.quoteUnquoted( frame.args[ 1 ] or &amp;quot;&amp;quot;,&lt;br /&gt;
                               slang,&lt;br /&gt;
                               tonumber( frame.args[3] ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.removeDiacritics( frame )&lt;br /&gt;
    return Text.removeDiacritics( frame.args[ 1 ] or &amp;quot;&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sentenceTerminated( frame )&lt;br /&gt;
    return Text.sentenceTerminated( frame.args[ 1 ] or &amp;quot;&amp;quot; ) and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ucfirstAll( frame )&lt;br /&gt;
    return Text.ucfirstAll( frame.args[ 1 ] or &amp;quot;&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.unstrip( frame )&lt;br /&gt;
    return mw.text.trim( mw.text.unstrip( frame.args[ 1 ] or &amp;quot;&amp;quot; ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.uprightNonlatin( frame )&lt;br /&gt;
    return Text.uprightNonlatin( frame.args[ 1 ] or &amp;quot;&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.zip(frame)&lt;br /&gt;
    local lists = {}&lt;br /&gt;
    local seps = {}&lt;br /&gt;
    local defaultsep = frame.args[&amp;quot;sep&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
    local innersep = frame.args[&amp;quot;isep&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
    local outersep = frame.args[&amp;quot;osep&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- Parameter parsen&lt;br /&gt;
    for k, v in pairs(frame.args) do&lt;br /&gt;
        local knum = tonumber(k)&lt;br /&gt;
        if knum then lists[knum] = v else&lt;br /&gt;
            if string.sub(k, 1, 3) == &amp;quot;sep&amp;quot; then&lt;br /&gt;
                local sepnum = tonumber(string.sub(k, 4))&lt;br /&gt;
                if sepnum then seps[sepnum] = v end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- sofern keine expliziten Separatoren angegeben sind, den Standardseparator verwenden&lt;br /&gt;
    for i = 1, math.max(#seps, #lists) do&lt;br /&gt;
        if not seps[i] then seps[i] = defaultsep end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Listen splitten&lt;br /&gt;
    local maxListLen = 0&lt;br /&gt;
    for i = 1, #lists do&lt;br /&gt;
        lists[i] = mw.text.split(lists[i], seps[i])&lt;br /&gt;
        if #lists[i] &amp;gt; maxListLen then maxListLen = #lists[i] end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local result = &amp;quot;&amp;quot;&lt;br /&gt;
    for i = 1, maxListLen do&lt;br /&gt;
        if i ~= 1 then result = result .. outersep end&lt;br /&gt;
        for j = 1, #lists do&lt;br /&gt;
            if j ~= 1 then result = result .. innersep end&lt;br /&gt;
            result = result .. (lists[j][i] or &amp;quot;&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.failsafe = function ( frame )&lt;br /&gt;
    -- Versioning interface&lt;br /&gt;
    local s = type( frame )&lt;br /&gt;
    local since&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        since = frame.args[ 1 ]&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        since = frame&lt;br /&gt;
    end&lt;br /&gt;
    if since then&lt;br /&gt;
        since = mw.text.trim( since )&lt;br /&gt;
        if since == &amp;quot;&amp;quot; then&lt;br /&gt;
            since = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Failsafe.failsafe( since )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.Text = function ()&lt;br /&gt;
    return Text&lt;br /&gt;
end -- p.Text&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:TemplateData/config&amp;diff=9584</id>
		<title>Modul:TemplateData/config</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:TemplateData/config&amp;diff=9584"/>
		<updated>2020-10-21T14:30:23Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local Serial = &amp;quot;2018-09-10&amp;quot;&lt;br /&gt;
--[=[&lt;br /&gt;
dewiki-Konfiguration {{TemplateData}}&lt;br /&gt;
mw.loadData()&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return { catProblem    = &amp;quot;Wikipedia:Vorlagenfehler/Vorlage:TemplateData&amp;quot;,&lt;br /&gt;
         classNoNumTOC = &amp;quot;nonumtoc&amp;quot;,&lt;br /&gt;
         cssParWrap    = { [&amp;quot;margin-left&amp;quot;]  = &amp;quot;-1em&amp;quot;,&lt;br /&gt;
                           [&amp;quot;margin-right&amp;quot;] = &amp;quot;-1em&amp;quot; },&lt;br /&gt;
         cssParams     = { [&amp;quot;border&amp;quot;]       = &amp;quot;#B3B7FF 1px solid&amp;quot;,&lt;br /&gt;
                           [&amp;quot;margin-left&amp;quot;]  = &amp;quot;auto&amp;quot;,&lt;br /&gt;
                           [&amp;quot;margin-right&amp;quot;] = &amp;quot;auto&amp;quot; },&lt;br /&gt;
         docpageCreate = &amp;quot;%s/Doku&amp;quot;,&lt;br /&gt;
         docpageDetect = &amp;quot;/Doku$&amp;quot;,&lt;br /&gt;
         helpBoolean   = &amp;quot;Hilfe:TemplateData/Anwendung‎#boolean&amp;quot;,&lt;br /&gt;
         helpContent   = &amp;quot;Hilfe:TemplateData/Anwendung‎#wikitext&amp;quot;,&lt;br /&gt;
         helpDate      = &amp;quot;Hilfe:TemplateData/Anwendung‎#date&amp;quot;,&lt;br /&gt;
         helpFile      = &amp;quot;Hilfe:TemplateData/Anwendung‎#file&amp;quot;,&lt;br /&gt;
         helpFormat    = &amp;quot;Hilfe:TemplateData/Anwendung‎#layout&amp;quot;,&lt;br /&gt;
         helpLine      = &amp;quot;Hilfe:TemplateData/Anwendung‎#line&amp;quot;,&lt;br /&gt;
         helpNumber    = &amp;quot;Hilfe:TemplateData/Anwendung‎#number&amp;quot;,&lt;br /&gt;
         helpPage      = &amp;quot;Hilfe:TemplateData/Anwendung‎#page&amp;quot;,&lt;br /&gt;
         helpString    = &amp;quot;Hilfe:TemplateData/Anwendung‎#string&amp;quot;,&lt;br /&gt;
         helpTemplate  = &amp;quot;Hilfe:TemplateData/Anwendung‎#template&amp;quot;,&lt;br /&gt;
         helpURL       = &amp;quot;Hilfe:TemplateData/Anwendung‎#url&amp;quot;,&lt;br /&gt;
         helpUser      = &amp;quot;Hilfe:TemplateData/Anwendung‎#user&amp;quot;,&lt;br /&gt;
         msgDescMiss   = &amp;quot;Beschreibung fehlt&amp;quot;,&lt;br /&gt;
         permit        = {  },&lt;br /&gt;
         tStylesTOCnum = &amp;quot;TOC nonum&amp;quot;, &lt;br /&gt;
         serial        = Serial }&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:TemplateData&amp;diff=9582</id>
		<title>Modul:TemplateData</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:TemplateData&amp;diff=9582"/>
		<updated>2020-10-21T14:30:23Z</updated>

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

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local PageUtil = { suite  = &amp;quot;PageUtil&amp;quot;,&lt;br /&gt;
                   serial = &amp;quot;2018-10-19&amp;quot;,&lt;br /&gt;
                   item   = 0 }&lt;br /&gt;
--[=[&lt;br /&gt;
PageUtil&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PageUtil.maxPages = 200&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fault( alert, frame )&lt;br /&gt;
    -- Format message with class=&amp;quot;error&amp;quot;&lt;br /&gt;
    --     alert  -- string, with message&lt;br /&gt;
    --     frame  -- object, if known&lt;br /&gt;
    -- Returns message with markup&lt;br /&gt;
    local scream = alert&lt;br /&gt;
    if frame then&lt;br /&gt;
        scream = string.format( &amp;quot;%s * %s&amp;quot;, frame:getTitle(), scream )&lt;br /&gt;
    end&lt;br /&gt;
    return tostring( mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                            :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                            :wikitext( scream ) )&lt;br /&gt;
end -- fault()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function flat( adjust, assembly )&lt;br /&gt;
    -- Replace links to pages by inner links&lt;br /&gt;
    --     adjust    -- string, with text&lt;br /&gt;
    --     assembly  -- table, with page infos&lt;br /&gt;
    -- Returns adjusted string&lt;br /&gt;
    local r = adjust&lt;br /&gt;
    local seek, shift, source, subst&lt;br /&gt;
    for k, v in pairs( assembly ) do&lt;br /&gt;
        source = v[ 1 ]&lt;br /&gt;
        shift  = v[ 2 ]&lt;br /&gt;
        source = &amp;quot;:?&amp;quot; .. source:gsub( &amp;quot; &amp;quot;, &amp;quot;[_ ]+&amp;quot; )&lt;br /&gt;
                               :gsub( &amp;quot;[%.%(%)%*%?%+%-]&amp;quot;, &amp;quot;%1&amp;quot; )&lt;br /&gt;
                      .. &amp;quot;%s*&amp;quot;&lt;br /&gt;
        seek   = &amp;quot;%[%[%s*&amp;quot; .. source .. &amp;quot;(#[^%]]*%]%])&amp;quot;&lt;br /&gt;
        subst  = &amp;quot;[[%1&amp;quot;&lt;br /&gt;
        r = r:gsub( seek, subst )&lt;br /&gt;
        seek  = &amp;quot;%[%[%s*&amp;quot; .. source .. &amp;quot;(%|[^%]]*%]%])&amp;quot;&lt;br /&gt;
        subst = &amp;quot;[[#&amp;quot; .. shift .. &amp;quot;%1&amp;quot;&lt;br /&gt;
        r = r:gsub( seek, subst )&lt;br /&gt;
        seek  = &amp;quot;%[%[%s*(&amp;quot; .. source .. &amp;quot;%]%])&amp;quot;&lt;br /&gt;
        subst = &amp;quot;[[#&amp;quot; .. shift .. &amp;quot;|%1&amp;quot;&lt;br /&gt;
        r = r:gsub( seek, subst )&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    return r&lt;br /&gt;
end -- flat()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fraction( access, frame )&lt;br /&gt;
    -- Retrieve text from section&lt;br /&gt;
    --     access  -- string, with request&lt;br /&gt;
    --     frame   -- object&lt;br /&gt;
    -- Returns content, or false&lt;br /&gt;
    -- Uses:&lt;br /&gt;
    --     mw.title.new() .exists&lt;br /&gt;
    local r&lt;br /&gt;
    local seek = &amp;quot;^(#lstx?):%s*%[%[([^%[|%]\n]+)%]%]%s*(%S.*)%s*$&amp;quot;&lt;br /&gt;
    local scope, source, section = access:match( seek )&lt;br /&gt;
    if source then&lt;br /&gt;
        local page = mw.title.new( source )&lt;br /&gt;
        source = page.prefixedText&lt;br /&gt;
        if page.exists then&lt;br /&gt;
            section = mw.text.trim( section )&lt;br /&gt;
            if section ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                r = frame:callParserFunction{ name = scope,&lt;br /&gt;
                                              args = { source,&lt;br /&gt;
                                                       section } }&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r = tostring( mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                                 :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                                 :wikitext( source ) )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fraction()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function full( access, frame, alias, assembly )&lt;br /&gt;
    -- Retrieve text from page&lt;br /&gt;
    --     access    -- string, with page name&lt;br /&gt;
    --     frame     -- object&lt;br /&gt;
    --     alias     -- number, unique&lt;br /&gt;
    --     assembly  -- table, with page infos&lt;br /&gt;
    -- Returns string with content, or nil&lt;br /&gt;
    -- Uses:&lt;br /&gt;
    --     mw.title.new() .exists&lt;br /&gt;
    local page = mw.title.new( access )&lt;br /&gt;
    local r&lt;br /&gt;
    if page then&lt;br /&gt;
        if page.exists then&lt;br /&gt;
            local source  = page.prefixedText&lt;br /&gt;
            local segment = string.format( &amp;quot;PageUtilMerge-%d&amp;quot;, alias )&lt;br /&gt;
            local seed&lt;br /&gt;
            if page.namespace == 0 then&lt;br /&gt;
                seed = &amp;quot;:&amp;quot; .. source&lt;br /&gt;
            else&lt;br /&gt;
                seed = source&lt;br /&gt;
            end&lt;br /&gt;
            r = string.format( &amp;quot;%s\n%s&amp;quot;,&lt;br /&gt;
                               tostring( mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                                                :attr( &amp;quot;id&amp;quot;, segment ) ),&lt;br /&gt;
                               frame:expandTemplate( { title = seed } ) )&lt;br /&gt;
            table.insert( assembly,  { source, segment } )&lt;br /&gt;
        else&lt;br /&gt;
            r = tostring( mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                                 :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                                 :wikitext( page.prefixedText ) )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = string.format( &amp;quot;%s &#039;%s&#039;&amp;quot;, &amp;quot;Unknown page&amp;quot;, access )&lt;br /&gt;
        r = tostring( mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                             :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                             :wikitext( r ) )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- full()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PageUtil.failsafe = function ( assert )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     assert  -- string, with required version or &amp;quot;wikidata&amp;quot;,&lt;br /&gt;
    --                or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string with appropriate version, or false&lt;br /&gt;
    local since = assert&lt;br /&gt;
    local r&lt;br /&gt;
    if since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = PageUtil.item&lt;br /&gt;
        since = false&lt;br /&gt;
        if type( item ) == &amp;quot;number&amp;quot;  and  item &amp;gt; 0 then&lt;br /&gt;
            local ent = mw.wikibase.getEntity( string.format( &amp;quot;Q%d&amp;quot;,&lt;br /&gt;
                                                              item ) )&lt;br /&gt;
            if type( ent ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                local vsn = ent:formatPropertyValues( &amp;quot;P348&amp;quot; )&lt;br /&gt;
                if type( vsn ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                   type( vsn.value ) == &amp;quot;string&amp;quot; and&lt;br /&gt;
                   vsn.value ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = vsn.value&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not r then&lt;br /&gt;
        if not since  or  since &amp;lt;= PageUtil.serial then&lt;br /&gt;
            r = PageUtil.serial&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- PageUtil.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PageUtil.getProtection = function ( access, action )&lt;br /&gt;
    -- Retrieve protection&lt;br /&gt;
    --     access  -- string or title or nil, with page, default: current&lt;br /&gt;
    --     action  -- string or nil, with action, default: edit&lt;br /&gt;
    -- Returns number: One of: 0, 0.5, 0.75, 1&lt;br /&gt;
    local t = type( access )&lt;br /&gt;
    local r = 0&lt;br /&gt;
    local p&lt;br /&gt;
    if t == &amp;quot;string&amp;quot; then&lt;br /&gt;
        t = mw.title.new( access )&lt;br /&gt;
    elseif t == &amp;quot;table&amp;quot; then&lt;br /&gt;
        t = access&lt;br /&gt;
    else&lt;br /&gt;
        t = mw.title.getCurrentTitle()&lt;br /&gt;
    end&lt;br /&gt;
    p = t.protectionLevels&lt;br /&gt;
    if type( p ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local s&lt;br /&gt;
        if type( action ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            s = mw.text.trim( action )&lt;br /&gt;
            if s == &amp;quot;&amp;quot; then&lt;br /&gt;
                s = false&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        p = p[ s or &amp;quot;edit&amp;quot; ]&lt;br /&gt;
        if type( p ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for k, v in pairs( p ) do&lt;br /&gt;
                if v == &amp;quot;autoconfirmed&amp;quot; then&lt;br /&gt;
                    r = 0.5&lt;br /&gt;
                elseif v == &amp;quot;editeditorprotected&amp;quot; then&lt;br /&gt;
                    r = 0.75&lt;br /&gt;
                elseif v == &amp;quot;sysop&amp;quot; then&lt;br /&gt;
                    r = 1&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- PageUtil.getProtection()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PageUtil.merge = function ( args, frame )&lt;br /&gt;
    -- Retrieve text&lt;br /&gt;
    --     args   -- table, with request&lt;br /&gt;
    --     frame  -- object, if available&lt;br /&gt;
    -- Returns string, with content&lt;br /&gt;
    local max = 0&lt;br /&gt;
    local r   = &amp;quot;&amp;quot;&lt;br /&gt;
    for k, v in pairs( args ) do&lt;br /&gt;
        if type( k ) == &amp;quot;number&amp;quot;  and&lt;br /&gt;
           k &amp;gt; max then&lt;br /&gt;
            max = k&lt;br /&gt;
        end&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    if max &amp;gt; 0 then&lt;br /&gt;
        local n     = 0&lt;br /&gt;
        local pages = {  { mw.title.getCurrentTitle().prefixedText,&lt;br /&gt;
                           &amp;quot;&amp;quot; }  }&lt;br /&gt;
        local mode, s, section, swallow&lt;br /&gt;
        if not frame then&lt;br /&gt;
            frame = mw.getCurrentFrame()&lt;br /&gt;
        end&lt;br /&gt;
        for i = 1, max do&lt;br /&gt;
            s = args[ i ]&lt;br /&gt;
            if s then&lt;br /&gt;
                swallow = s:match( &amp;quot;^%s*(#lstx?:[^\n]*%S)%s*$&amp;quot; )&lt;br /&gt;
                if swallow then&lt;br /&gt;
                    s = fraction( swallow, frame )&lt;br /&gt;
                    n = n + 1&lt;br /&gt;
                else&lt;br /&gt;
                    swallow = s:match( &amp;quot;^%s*%[%[([^%[|%]\n]+)%]%]%s*$&amp;quot; )&lt;br /&gt;
                    if swallow then&lt;br /&gt;
                        s = full( swallow, frame, i, pages )&lt;br /&gt;
                        n = n + 1&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                if s then&lt;br /&gt;
                    r = r .. mw.text.trim( s )&lt;br /&gt;
                end&lt;br /&gt;
                if n &amp;gt; PageUtil.maxPages then&lt;br /&gt;
                    s = string.format( &amp;quot;&#039;&#039;&#039;Too many pages (max. %d)&#039;&#039;&#039;&amp;quot;,&lt;br /&gt;
                                       PageUtil.maxPages )&lt;br /&gt;
                    r = string.format( &amp;quot;%s\n\n%s&amp;quot;,&lt;br /&gt;
                                       r,&lt;br /&gt;
                                       fault( s, frame ) )&lt;br /&gt;
                    break -- for i&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end -- for i&lt;br /&gt;
        r = flat( r, pages )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- .merge()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
p.getProtection = function ( frame )&lt;br /&gt;
    local n = PageUtil.getProtection( frame.args[ 1 ], frame.args[ 2 ] )&lt;br /&gt;
    local t = { [ 0 ]    = &amp;quot;&amp;quot;,&lt;br /&gt;
                [ 0.5 ]  = mw.ustring.char( 189 ),&lt;br /&gt;
                [ 0.75 ] = mw.ustring.char( 190 ),&lt;br /&gt;
                [ 1 ]    = &amp;quot;1&amp;quot; }&lt;br /&gt;
    return t[ n ]&lt;br /&gt;
end -- p.getProtection&lt;br /&gt;
&lt;br /&gt;
function p.isRedirect()&lt;br /&gt;
    return mw.title.getCurrentTitle().isRedirect and &amp;quot;1&amp;quot;  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.isRedirect&lt;br /&gt;
&lt;br /&gt;
p.merge = function ( frame )&lt;br /&gt;
    local lucky, r = pcall( PageUtil.merge, frame.args, frame )&lt;br /&gt;
    if not lucky then&lt;br /&gt;
        r = fault( r, frame )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.merge&lt;br /&gt;
&lt;br /&gt;
p.failsafe = function ( frame )&lt;br /&gt;
    -- Versioning interface&lt;br /&gt;
    local s = type( frame )&lt;br /&gt;
    local since&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        since = frame.args[ 1 ]&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        since = frame&lt;br /&gt;
    end&lt;br /&gt;
    if since then&lt;br /&gt;
        since = mw.text.trim( since )&lt;br /&gt;
        if since == &amp;quot;&amp;quot; then&lt;br /&gt;
            since = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return PageUtil.failsafe( since )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
function p.PageUtil()&lt;br /&gt;
    return PageUtil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:Multilingual&amp;diff=9578</id>
		<title>Modul:Multilingual</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Modul:Multilingual&amp;diff=9578"/>
		<updated>2020-10-21T14:30:22Z</updated>

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

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local JSONutil = { suite  = &amp;quot;JSONutil&amp;quot;,&lt;br /&gt;
                   serial = &amp;quot;2019-07-18&amp;quot;,&lt;br /&gt;
                   item   = 63869449 }&lt;br /&gt;
--[=[&lt;br /&gt;
preprocess JSON data&lt;br /&gt;
]=]&lt;br /&gt;
local Failsafe = JSONutil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSONutil.more = 50    -- length of trailing context&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local Fallback = function ()&lt;br /&gt;
    -- Retrieve current default language code&lt;br /&gt;
    --     Returns  string&lt;br /&gt;
    return mw.language.getContentLanguage():getCode()&lt;br /&gt;
                                           :lower()&lt;br /&gt;
end -- Fallback()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSONutil.fair = function ( apply )&lt;br /&gt;
    -- Reduce enhanced JSON data to strict JSON&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     apply  -- string, with enhanced JSON&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     1    -- string|nil|false, with error keyword&lt;br /&gt;
    --     2    -- string, with JSON or context&lt;br /&gt;
    local m   = 0&lt;br /&gt;
    local n   = 0&lt;br /&gt;
    local s   = mw.text.trim( apply )&lt;br /&gt;
    local sep = string.char( 10 )&lt;br /&gt;
    local i, j, last, r, scan, sep0, sep1, stab, start, stub, suffix&lt;br /&gt;
    local framework = function ( a )&lt;br /&gt;
                              -- syntax analysis outside strings&lt;br /&gt;
                              local k = 1&lt;br /&gt;
                              local c&lt;br /&gt;
                              while k do&lt;br /&gt;
                                  k = a:find( &amp;quot;[{%[%]}]&amp;quot;, k )&lt;br /&gt;
                                  if k then&lt;br /&gt;
                                      c = a:byte( k, k )&lt;br /&gt;
                                      if c == 0x7B then    -- {&lt;br /&gt;
                                          m = m + 1&lt;br /&gt;
                                      elseif c == 0x7D then    -- }&lt;br /&gt;
                                          m = m - 1&lt;br /&gt;
                                      elseif c == 0x5B then    -- [&lt;br /&gt;
                                          n = n + 1&lt;br /&gt;
                                      else    -- ]&lt;br /&gt;
                                          n = n - 1&lt;br /&gt;
                                      end&lt;br /&gt;
                                      k = k + 1&lt;br /&gt;
                                  end&lt;br /&gt;
                              end   -- while k&lt;br /&gt;
                      end    -- framework()&lt;br /&gt;
    local free = function ( a, at, f )&lt;br /&gt;
                     -- Throws: error if /* is not matched by */&lt;br /&gt;
                     local s = a&lt;br /&gt;
                     local i = s:find( &amp;quot;//&amp;quot;, at, true )&lt;br /&gt;
                     local k = s:find( &amp;quot;/*&amp;quot;, at, true )&lt;br /&gt;
                     if i or k then&lt;br /&gt;
                         local m = s:find( sep0, at )&lt;br /&gt;
                         if i   and   ( not m  or  i &amp;lt; m ) then&lt;br /&gt;
                             k = s:find( &amp;quot;\n&amp;quot;,  i + 2,  true )&lt;br /&gt;
                             if k then&lt;br /&gt;
                                 if i == 1 then&lt;br /&gt;
                                     s = s:sub( k + 1 )&lt;br /&gt;
                                 else&lt;br /&gt;
                                     s = s:sub( 1,  i - 1 )   ..&lt;br /&gt;
                                         s:sub( k + 1 )&lt;br /&gt;
                                 end&lt;br /&gt;
                             elseif i &amp;gt; 1 then&lt;br /&gt;
                                 s = s:sub( 1,  i - 1 )&lt;br /&gt;
                             else&lt;br /&gt;
                                 s = &amp;quot;&amp;quot;&lt;br /&gt;
                             end&lt;br /&gt;
                         elseif k   and   ( not m  or  k &amp;lt; m ) then&lt;br /&gt;
                             i = s:find( &amp;quot;*/&amp;quot;,  k + 2,  true )&lt;br /&gt;
                             if i then&lt;br /&gt;
                                 if k == 1 then&lt;br /&gt;
                                     s = s:sub( i + 2 )&lt;br /&gt;
                                 else&lt;br /&gt;
                                     s = s:sub( 1,  k - 1 )   ..&lt;br /&gt;
                                         s:sub( i + 2 )&lt;br /&gt;
                                 end&lt;br /&gt;
                             else&lt;br /&gt;
                                 error( s:sub( k + 2 ), 0 )&lt;br /&gt;
                             end&lt;br /&gt;
                             i = k&lt;br /&gt;
                         else&lt;br /&gt;
                             i = false&lt;br /&gt;
                         end&lt;br /&gt;
                         if i then&lt;br /&gt;
                             s = mw.text.trim( s )&lt;br /&gt;
                             if s:find( &amp;quot;/&amp;quot;, 1, true ) then&lt;br /&gt;
                                 s = f( s, i, f )&lt;br /&gt;
                             end&lt;br /&gt;
                         end&lt;br /&gt;
                     end&lt;br /&gt;
                     return s&lt;br /&gt;
                 end    -- free()&lt;br /&gt;
    if s:sub( 1, 1 ) == &#039;{&#039; then&lt;br /&gt;
        stab = string.char( 9 )&lt;br /&gt;
        s    = s:gsub( string.char( 13, 10 ),  sep )&lt;br /&gt;
                :gsub( string.char( 13 ),  sep )&lt;br /&gt;
        stub = s:gsub( sep, &amp;quot;&amp;quot; ):gsub( stab, &amp;quot;&amp;quot; )&lt;br /&gt;
        scan = string.char( 0x5B, 0x01, 0x2D, 0x1F, 0x5D )    -- [ \-\ ]&lt;br /&gt;
        j    = stub:find( scan )&lt;br /&gt;
        if j then&lt;br /&gt;
            r = &amp;quot;ControlChar&amp;quot;&lt;br /&gt;
            s = mw.text.trim( s:sub( j + 1 ) )&lt;br /&gt;
            s = mw.ustring.sub( s, 1, JSONutil.more )&lt;br /&gt;
        else&lt;br /&gt;
            i    = true&lt;br /&gt;
            j    = 1&lt;br /&gt;
            last = ( stub:sub( -1 ) == &amp;quot;}&amp;quot; )&lt;br /&gt;
            sep0 = string.char( 0x5B, 0x22, 0x27, 0x5D )    -- [ &amp;quot; &#039; ]&lt;br /&gt;
            sep1 = string.char( 0x5B, 0x5C, 0x22, 0x5D )    -- [ \ &amp;quot; ]&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = &amp;quot;Bracket0&amp;quot;&lt;br /&gt;
        s = mw.ustring.sub( s, 1, JSONutil.more )&lt;br /&gt;
    end&lt;br /&gt;
    while i do&lt;br /&gt;
        i, s = pcall( free, s, j, free )&lt;br /&gt;
        if i then&lt;br /&gt;
            i = s:find( sep0, j )&lt;br /&gt;
        else&lt;br /&gt;
            r = &amp;quot;CommentEnd&amp;quot;&lt;br /&gt;
            s = mw.text.trim( s )&lt;br /&gt;
            s = mw.ustring.sub( s, 1, JSONutil.more )&lt;br /&gt;
        end&lt;br /&gt;
        if i then&lt;br /&gt;
            if j == 1 then&lt;br /&gt;
                framework( s:sub( 1, i - 1 ) )&lt;br /&gt;
            end&lt;br /&gt;
            if s:sub( i, i ) == &#039;&amp;quot;&#039; then&lt;br /&gt;
                stub = s:sub( j,  i - 1 )&lt;br /&gt;
                if stub:find( &#039;[^&amp;quot;]*,%s*[%]}]&#039; ) then&lt;br /&gt;
                    r = &amp;quot;CommaEnd&amp;quot;&lt;br /&gt;
                    s = mw.text.trim( stub )&lt;br /&gt;
                    s = mw.ustring.sub( s, 1, JSONutil.more )&lt;br /&gt;
                    i = false&lt;br /&gt;
                    j = false&lt;br /&gt;
                else&lt;br /&gt;
                    if j &amp;gt; 1 then&lt;br /&gt;
                        framework( stub )&lt;br /&gt;
                    end&lt;br /&gt;
                    i = i + 1&lt;br /&gt;
                    j = i&lt;br /&gt;
                end&lt;br /&gt;
                while j do&lt;br /&gt;
                    j = s:find( sep1, j )&lt;br /&gt;
                    if j then&lt;br /&gt;
                        if s:sub( j, j ) == &#039;&amp;quot;&#039; then&lt;br /&gt;
                            start  = s:sub( 1,  i - 1 )&lt;br /&gt;
                            suffix = s:sub( j )&lt;br /&gt;
                            if j &amp;gt; i then&lt;br /&gt;
                                stub = s:sub( i,  j - 1 )&lt;br /&gt;
                                        :gsub( sep,  &amp;quot;\\n&amp;quot; )&lt;br /&gt;
                                        :gsub( stab, &amp;quot;\\t&amp;quot; )&lt;br /&gt;
                                j = i + stub:len()&lt;br /&gt;
                                s = string.format( &amp;quot;%s%s%s&amp;quot;,&lt;br /&gt;
                                                   start, stub, suffix )&lt;br /&gt;
                            else&lt;br /&gt;
                                s = start .. suffix&lt;br /&gt;
                            end&lt;br /&gt;
                            j = j + 1&lt;br /&gt;
                            break   -- while j&lt;br /&gt;
                        else&lt;br /&gt;
                            j = j + 2&lt;br /&gt;
                        end&lt;br /&gt;
                    else&lt;br /&gt;
                        r = &amp;quot;QouteEnd&amp;quot;&lt;br /&gt;
                        s = mw.text.trim( s:sub( i ) )&lt;br /&gt;
                        s = mw.ustring.sub( s, 1, JSONutil.more )&lt;br /&gt;
                        i = false&lt;br /&gt;
                    end&lt;br /&gt;
                end   -- while j&lt;br /&gt;
            else&lt;br /&gt;
                r = &amp;quot;Qoute&amp;quot;&lt;br /&gt;
                s = mw.text.trim( s:sub( i ) )&lt;br /&gt;
                s = mw.ustring.sub( s, 1, JSONutil.more )&lt;br /&gt;
                i = false&lt;br /&gt;
            end&lt;br /&gt;
        elseif not r then&lt;br /&gt;
            stub = s:sub( j )&lt;br /&gt;
            if stub:find( &#039;[^&amp;quot;]*,%s*[%]}]&#039; ) then&lt;br /&gt;
                r = &amp;quot;CommaEnd&amp;quot;&lt;br /&gt;
                s = mw.text.trim( stub )&lt;br /&gt;
                s = mw.ustring.sub( s, 1, JSONutil.more )&lt;br /&gt;
            else&lt;br /&gt;
                framework( stub )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end   -- while i&lt;br /&gt;
    if not r   and   ( m ~= 0  or  n ~= 0 ) then&lt;br /&gt;
        if m ~= 0 then&lt;br /&gt;
            s = &amp;quot;}&amp;quot;&lt;br /&gt;
            if m &amp;gt; 0 then&lt;br /&gt;
                r = &amp;quot;BracketCloseLack&amp;quot;&lt;br /&gt;
                j = m&lt;br /&gt;
            elseif m &amp;lt; 0 then&lt;br /&gt;
                r = &amp;quot;BracketClosePlus&amp;quot;&lt;br /&gt;
                j = -m&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            s = &amp;quot;]&amp;quot;&lt;br /&gt;
            if n &amp;gt; 0 then&lt;br /&gt;
                r = &amp;quot;BracketCloseLack&amp;quot;&lt;br /&gt;
                j = n&lt;br /&gt;
            else&lt;br /&gt;
                r = &amp;quot;BracketClosePlus&amp;quot;&lt;br /&gt;
                j = -n&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if j &amp;gt; 1 then&lt;br /&gt;
            s =  string.format( &amp;quot;%d %s&amp;quot;, j, s )&lt;br /&gt;
        end&lt;br /&gt;
    elseif not ( r or last ) then&lt;br /&gt;
        stub = suffix or apply or &amp;quot;&amp;quot;&lt;br /&gt;
        j    = stub:find( &amp;quot;/&amp;quot;, 1, true )&lt;br /&gt;
        if j then&lt;br /&gt;
            i, stub = pcall( free, stub, j, free )&lt;br /&gt;
        else&lt;br /&gt;
            i = true&lt;br /&gt;
        end&lt;br /&gt;
        stub = mw.text.trim( stub )&lt;br /&gt;
        if i then&lt;br /&gt;
            if stub:sub( - 1 ) ~= &amp;quot;}&amp;quot; then&lt;br /&gt;
                r = &amp;quot;Trailing&amp;quot;&lt;br /&gt;
                s = stub:match( &amp;quot;%}%s*(%S[^%}]*)$&amp;quot; )&lt;br /&gt;
                if s then&lt;br /&gt;
                    s = mw.ustring.sub( s, 1, JSONutil.more )&lt;br /&gt;
                else&lt;br /&gt;
                    s = mw.ustring.sub( stub,  - JSONutil.more )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r = &amp;quot;CommentEnd&amp;quot;&lt;br /&gt;
            s = mw.ustring.sub( stub, 1, JSONutil.more )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if r and s then&lt;br /&gt;
        s = mw.text.encode( s:gsub( sep,  &amp;quot; &amp;quot; ) ):gsub( &amp;quot;|&amp;quot;, &amp;quot;&amp;amp;#124;&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r, s&lt;br /&gt;
end -- JSONutil.fair()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSONutil.fault = function ( alert, add, adapt )&lt;br /&gt;
    -- Retrieve formatted message&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     alert  -- string, with error keyword, or other text&lt;br /&gt;
    --     add    -- string|nil|false, with context&lt;br /&gt;
    --     adapt  -- function|string|table|nil|false, for I18N&lt;br /&gt;
    -- Returns string, with HTML span&lt;br /&gt;
    local e = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                     :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
    local s = alert&lt;br /&gt;
    if type( s ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        s = mw.text.trim( s )&lt;br /&gt;
        if s == &amp;quot;&amp;quot; then&lt;br /&gt;
            s = &amp;quot;EMPTY JSONutil.fault key&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if not s:find( &amp;quot; &amp;quot;, 1, true ) then&lt;br /&gt;
            local storage = string.format( &amp;quot;I18n/Module:%s.tab&amp;quot;,&lt;br /&gt;
                                           JSONutil.suite )&lt;br /&gt;
            local lucky, t = pcall( mw.ext.data.get, storage, &amp;quot;_&amp;quot; )&lt;br /&gt;
            if type( t ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                t = t.data&lt;br /&gt;
                if type( t ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    local e&lt;br /&gt;
                    s = &amp;quot;err_&amp;quot; .. s&lt;br /&gt;
                    for i = 1, #t do&lt;br /&gt;
                        e = t[ i ]&lt;br /&gt;
                        if type( e ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                            if e[ 1 ] == s then&lt;br /&gt;
                                e = e[ 2 ]&lt;br /&gt;
                                if type( e ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                                    local q = type( adapt )&lt;br /&gt;
                                    if q == &amp;quot;function&amp;quot; then&lt;br /&gt;
                                        s = adapt( e, s )&lt;br /&gt;
                                        t = false&lt;br /&gt;
                                    elseif q == &amp;quot;string&amp;quot; then&lt;br /&gt;
                                        t = mw.text.split( adapt, &amp;quot;%s+&amp;quot; )&lt;br /&gt;
                                    elseif q == &amp;quot;table&amp;quot; then&lt;br /&gt;
                                        t = adapt&lt;br /&gt;
                                    else&lt;br /&gt;
                                        t = { }&lt;br /&gt;
                                    end&lt;br /&gt;
                                    if t then&lt;br /&gt;
                                        table.insert( t, Fallback() )&lt;br /&gt;
                                        table.insert( t, &amp;quot;en&amp;quot; )&lt;br /&gt;
                                        for k = 1, #t do&lt;br /&gt;
                                            q = e[ t[ k ] ]&lt;br /&gt;
                                            if type( q ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                                                s = q&lt;br /&gt;
                                                break   -- for k&lt;br /&gt;
                                            end&lt;br /&gt;
                                        end   -- for k&lt;br /&gt;
                                    end&lt;br /&gt;
                                else&lt;br /&gt;
                                    s = &amp;quot;JSONutil.fault I18N bad #&amp;quot; ..&lt;br /&gt;
                                        tostring( i )&lt;br /&gt;
                                end&lt;br /&gt;
                                break   -- for i&lt;br /&gt;
                            end&lt;br /&gt;
                        else&lt;br /&gt;
                            break   -- for i&lt;br /&gt;
                        end&lt;br /&gt;
                    end   -- for i&lt;br /&gt;
                else&lt;br /&gt;
                    s = &amp;quot;INVALID JSONutil.fault I18N corrupted&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                s = &amp;quot;INVALID JSONutil.fault commons:Data: &amp;quot; .. type( t )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        s = &amp;quot;INVALID JSONutil.fault key: &amp;quot; .. tostring( s )&lt;br /&gt;
    end&lt;br /&gt;
    if type( add ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        s = string.format( &amp;quot;%s &amp;amp;#8211; %s&amp;quot;, s, add )&lt;br /&gt;
    end&lt;br /&gt;
    e:wikitext( s )&lt;br /&gt;
    return tostring( e )&lt;br /&gt;
end -- JSONutil.fault()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSONutil.fetch = function ( apply, always, adapt )&lt;br /&gt;
    -- Retrieve JSON data, or error message&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     apply   -- string, with presumable JSON text&lt;br /&gt;
    --     always  -- true, if apply is expected to need preprocessing&lt;br /&gt;
    --     adapt   -- function|string|table|nil|false, for I18N&lt;br /&gt;
    -- Returns table, with data, or string, with error as HTML span&lt;br /&gt;
    local lucky, r&lt;br /&gt;
    if not always then&lt;br /&gt;
        lucky, r = pcall( mw.text.jsonDecode, apply )&lt;br /&gt;
    end&lt;br /&gt;
    if not lucky then&lt;br /&gt;
        lucky, r = JSONutil.fair( apply )&lt;br /&gt;
        if lucky then&lt;br /&gt;
            r = JSONutil.fault( lucky, r, adapt )&lt;br /&gt;
        else&lt;br /&gt;
            lucky, r = pcall( mw.text.jsonDecode, r )&lt;br /&gt;
            if not lucky then&lt;br /&gt;
                r = JSONutil.fault( r, false, adapt )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- JSONutil.fetch()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failsafe.failsafe = function ( atleast )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     atleast  -- string, with required version or &amp;quot;wikidata&amp;quot; or &amp;quot;~&amp;quot;&lt;br /&gt;
    --                 or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string  -- with queried version, also if problem&lt;br /&gt;
    --              false   -- if appropriate&lt;br /&gt;
    local last  = ( atleast == &amp;quot;~&amp;quot; )&lt;br /&gt;
    local since = atleast&lt;br /&gt;
    local r&lt;br /&gt;
    if last  or  since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = Failsafe.item&lt;br /&gt;
        since = false&lt;br /&gt;
        if type( item ) == &amp;quot;number&amp;quot;  and  item &amp;gt; 0 then&lt;br /&gt;
            local entity = mw.wikibase.getEntity( string.format( &amp;quot;Q%d&amp;quot;,&lt;br /&gt;
                                                                 item ) )&lt;br /&gt;
            if type( entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                local vsn = entity:formatPropertyValues( &amp;quot;P348&amp;quot; )&lt;br /&gt;
                if type( vsn ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                   type( vsn.value ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
                   vsn.value ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    if last  and  vsn.value == Failsafe.serial then&lt;br /&gt;
                        r = false&lt;br /&gt;
                    else&lt;br /&gt;
                        r = vsn.value&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( r ) == &amp;quot;nil&amp;quot; then&lt;br /&gt;
        if not since  or  since &amp;lt;= Failsafe.serial then&lt;br /&gt;
            r = Failsafe.serial&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Failsafe.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
p.failsafe = function ( frame )&lt;br /&gt;
    -- Versioning interface&lt;br /&gt;
    local s = type( frame )&lt;br /&gt;
    local since&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        since = frame.args[ 1 ]&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        since = frame&lt;br /&gt;
    end&lt;br /&gt;
    if since then&lt;br /&gt;
        since = mw.text.trim( since )&lt;br /&gt;
        if since == &amp;quot;&amp;quot; then&lt;br /&gt;
            since = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Failsafe.failsafe( since )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
p.JSONutil = function ()&lt;br /&gt;
    -- Module interface&lt;br /&gt;
    return JSONutil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:TemplateData&amp;diff=9574</id>
		<title>Vorlage:TemplateData</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:TemplateData&amp;diff=9574"/>
		<updated>2020-10-21T14:30:22Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;div class=&amp;quot;Vorlage_TemplateData&amp;quot; {{#ifeq:{{NAMESPACENUMBER}}|10|id=&amp;quot;TemplateData&amp;quot;}} style=&amp;quot;border:2px solid #B3B7FF; margin:1em 0; padding:.5em 1em 0; position:relative;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;hintergrundfarbe2&amp;quot; style=&amp;quot;left:2em; line-height:1; padding:0 .5em; position:absolute; top:-.6em;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;[[Hilfe:TemplateData|TemplateData]]&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#invoke:TemplateData|f}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;(Generierte Dokumentation)&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{NAMESPACENUMBER}}|10|{{#if:&lt;br /&gt;
{{#ifeq:{{{meta|}}}|1|1}}&lt;br /&gt;
{{#ifeq:{{#titleparts:{{PAGENAME}}|1|-1}}|Doku|1}}&lt;br /&gt;
| | [[Kategorie:Vorlage:mit TemplateData|{{#if:{{{sort|}}}|{{{sort}}}|{{PAGENAME}}}}]]&lt;br /&gt;
}} }}&amp;lt;/includeonly&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Dokumentation}}&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:TOC_nonum/styles.css&amp;diff=9572</id>
		<title>Vorlage:TOC nonum/styles.css</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:TOC_nonum/styles.css&amp;diff=9572"/>
		<updated>2020-10-21T14:30:22Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.nonumtoc .tocnumber {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:TOC_Kategorie/Doku&amp;diff=9570</id>
		<title>Vorlage:TOC Kategorie/Doku</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:TOC_Kategorie/Doku&amp;diff=9570"/>
		<updated>2020-10-21T14:26:54Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{Dokumentation/Dokuseite}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{TemplateData|JSON=&lt;br /&gt;
{ &amp;quot;description&amp;quot;: &amp;quot;Inhaltsverzeichnis für Kategorien zeigen&amp;quot;,&lt;br /&gt;
  &amp;quot;params&amp;quot;: {&lt;br /&gt;
     &amp;quot;ZEICHEN&amp;quot;:&lt;br /&gt;
        { &amp;quot;label&amp;quot;:       &amp;quot;Zeichen&amp;quot;,&lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Zeichenform (Ziffern, Groß-, Kleinbuchstaben)&amp;lt;noexport&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; – Ziffern 0–9&lt;br /&gt;
* &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; – Zeichen a–z&lt;br /&gt;
* &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; – Zeichen A–Z&lt;br /&gt;
Mehrfachangaben möglich.&amp;lt;/noexport&amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;type&amp;quot;:        &amp;quot;line&amp;quot;,&lt;br /&gt;
          &amp;quot;suggested&amp;quot;:   true,&lt;br /&gt;
          &amp;quot;default&amp;quot;:     &amp;quot;#A&amp;quot;,&lt;br /&gt;
          &amp;quot;example&amp;quot;:     &amp;quot;a&amp;quot;,&lt;br /&gt;
          &amp;quot;aliases&amp;quot;:     [ &amp;quot;Zeichen&amp;quot; ] },&lt;br /&gt;
     &amp;quot;TYP&amp;quot;:&lt;br /&gt;
        { &amp;quot;label&amp;quot;:       &amp;quot;Typ&amp;quot;,&lt;br /&gt;
          &amp;quot;description&amp;quot;: &amp;quot;Inhaltsverzeichnis für Kategorien, die viele Unterkategorien enthalten, wenn &amp;lt;code&amp;gt;TYP=Kategorien&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
          &amp;quot;type&amp;quot;:        &amp;quot;line&amp;quot;,&lt;br /&gt;
          &amp;quot;required&amp;quot;:    false }&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
|TOC=1}}&lt;br /&gt;
&lt;br /&gt;
Die Zeichen können gemischt werden, beispielsweise &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{TOC Kategorie|ZEICHEN=#a}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; für die Ausgabe von:&lt;br /&gt;
{{TOC Kategorie|ZEICHEN=#a}}&lt;br /&gt;
&lt;br /&gt;
Standardmäßig wird ein Inhaltsverzeichnis für Kategorien erzeugt, die viele Seiten enthalten. Soll ein Inhaltsverzeichnis für Kategorien erzeugt werden, die viele Unterkategorien enthalten, kann der Parameter &amp;lt;code&amp;gt;TYP=Kategorien&amp;lt;/code&amp;gt; verwendet werden, beispielsweise &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{TOC Kategorie|ZEICHEN=#a|TYP=Kategorien}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; für die Ausgabe von:&lt;br /&gt;
{{TOC Kategorie|ZEICHEN=#a|TYP=Kategorien}}&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[commons:Template:CategoryTOC]]&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Kategorie:Vorlage:TOC| TOC Kategorie]]&lt;br /&gt;
[[Kategorie:Vorlage:für Kategorien| ]]&lt;br /&gt;
[[Kategorie:Vorlage:vom Druck ausgeschlossen]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:Dokumentation/style&amp;diff=9568</id>
		<title>Vorlage:Dokumentation/style</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:Dokumentation/style&amp;diff=9568"/>
		<updated>2020-10-21T14:26:54Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Dokumentation/Unterseite}}&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{#switch: {{{1}}}&lt;br /&gt;
|icon=Curly Brackets.svg&lt;br /&gt;
|iconInfo=Information icon.svg&lt;br /&gt;
|iconTemplateInfo=Test Template Info-Icon.svg&lt;br /&gt;
|iconTemplateTools=Templatetools.svg&lt;br /&gt;
|linec=B3B7FF&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Farb- und Designschema für die Dokumentation von Vorlagen.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
; 1&lt;br /&gt;
: &amp;lt;code&amp;gt;icon&amp;lt;/code&amp;gt; – Icon mit Vorlagen-Symbol, &amp;lt;code&amp;gt;{{Dokumentation/style|icon}}&amp;lt;/code&amp;gt; – [[Datei:{{Dokumentation/style|icon}}|16px]]&lt;br /&gt;
: &amp;lt;code&amp;gt;iconInfo&amp;lt;/code&amp;gt; – Icon mit Informationssymbol, &amp;lt;code&amp;gt;{{Dokumentation/style|iconInfo}}&amp;lt;/code&amp;gt; – [[Datei:{{Dokumentation/style|iconInfo}}|16px]]&lt;br /&gt;
: &amp;lt;code&amp;gt;iconTemplateInfo&amp;lt;/code&amp;gt; – Icon mit Vorlagen- und Informationssymbol, &amp;lt;code&amp;gt;{{Dokumentation/style|iconTemplateInfo}}&amp;lt;/code&amp;gt; – [[Datei:{{Dokumentation/style|iconTemplateInfo}}|24px]]&lt;br /&gt;
: &amp;lt;code&amp;gt;iconTemplateTools&amp;lt;/code&amp;gt; – Icon mit Vorlagen- und Werkzeugsymbol, &amp;lt;code&amp;gt;{{Dokumentation/style|iconTemplateTools}}&amp;lt;/code&amp;gt; – [[Datei:{{Dokumentation/style|iconTemplateTools}}|24px]]&lt;br /&gt;
: &amp;lt;code&amp;gt;linec&amp;lt;/code&amp;gt; – Rahmenfarbe, &amp;lt;code&amp;gt;{{Dokumentation/style|linec}}&amp;lt;/code&amp;gt; – &amp;lt;span style=&amp;quot;background-color:#{{Dokumentation/style|linec}}&amp;quot;&amp;gt;____&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Vorlage:Vorlagendokumentation|!style]]&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:Dokumentation/header&amp;diff=9566</id>
		<title>Vorlage:Dokumentation/header</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:Dokumentation/header&amp;diff=9566"/>
		<updated>2020-10-21T14:26:54Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Dokumentation/Hinweis Demo}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{#ifeq: {{{TOC|0}}} | 1 | &amp;lt;templatestyles src=&amp;quot;TOC nonum/styles.css&amp;quot; /&amp;gt;&amp;lt;div class=&amp;quot;nonumtoc&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt; }}&amp;lt;div style=&amp;quot;border: #{{Dokumentation/style|linec}} 3px solid; clear: both; margin-bottom: 2rem; margin-left: 0; margin-right: 0; margin-top: 1rem; padding-left: 0.4rem;&amp;quot; id=&amp;quot;Vorlagendokumentation&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; font-size: 0.8rem; line-height: 1; margin-right: 0.4rem; margin-top: 1.46rem; white-space: nowrap;&amp;quot;&amp;gt;{{#ifeq: {{{footer|1}}} | 1 | &amp;amp;#91;[[#Dokumentation.Info|Werkzeuge]]&amp;amp;#93;}}{{#ifeq: {{{edit|0}}} | 1 | &amp;lt;span style=&amp;quot;padding-left:1em&amp;quot;&amp;gt;&amp;amp;#91;[{{fullurl:{{SUBJECTPAGENAME}}/Doku|action=edit}} {{int:Editsection}}]&amp;amp;#93;&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h&amp;lt;!-- linter --&amp;gt;1 style=&amp;quot;border-bottom: none; font-size: 1.66rem; line-height: 1; margin-bottom: 1rem; margin-top: 1rem;&amp;quot; dir=&amp;quot;ltr&amp;quot; title=&amp;quot;Dokumentation zur Benutzung dieser Vorlage&amp;quot; lang=&amp;quot;{{#switch:{{int:lang}}|de-at|de-ch|de-formal|de=de&amp;quot;&amp;gt;&#039;&#039;&#039;Dokumentation&#039;&#039;&#039; | en&amp;quot;&amp;gt;&#039;&#039;&#039;Documentation&#039;&#039;&#039; }}&amp;lt;/h&amp;lt;!-- linter --&amp;gt;1&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;{{#ifexist: {{SUBJECTPAGENAME}}/Meta |&lt;br /&gt;
&amp;lt;div class=&amp;quot;error&amp;quot; style=&amp;quot;background:#FFFF00; border: #FF0000 2px solid; padding: 0.1rem 0.2rem;&amp;quot;&amp;gt;&lt;br /&gt;
Unterseite &amp;lt;code&amp;gt;[[{{SUBJECTPAGENAME}}/Meta|/Meta]]&amp;lt;/code&amp;gt; nicht mehr unterstützt!&lt;br /&gt;
&amp;lt;/div&amp;gt;}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:3px solid #009900; border-spacing:2px; padding:1em;&amp;quot;&amp;gt;&lt;br /&gt;
Einheitliche &#039;&#039;&#039;Überschrift&#039;&#039;&#039; für &#039;&#039;&#039;Vorlagen-Dokumentationen&#039;&#039;&#039; oberhalb des Dokumentationsbereichs:&lt;br /&gt;
* Einzel-/Doku mittels [[Vorlage:Dokumentation]],&lt;br /&gt;
* generierte Dokumentationen in [[:Kategorie:Vorlage:Metadokumentation]].&lt;br /&gt;
&lt;br /&gt;
Es wird insbesondere beim Gestalten einer Metadokumentation erwartet, dass am Fußende mit {{Vorlage|Dokumentation/footer}} eine korrespondierende Box angezeigt wird, auf die auch verlinkt wird. In der standardmäßigen {{Vorlage|Dokumentation}} ist das genauso realisiert.&lt;br /&gt;
&lt;br /&gt;
In einem Inhaltsverzeichnis wird die H1-Überschrift in Fettschrift angezeigt und trennt dadurch möglicherweise durch die demonstrierte Einbindung erzeugte Überschriften ab.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
; edit&lt;br /&gt;
: Bearbeiten-Link für Doku-Unterseite anzeigen&lt;br /&gt;
:* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; – nein (Vorgabe; für Metadoku)&lt;br /&gt;
:* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; – ja ([[Vorlage:Dokumentation]])&lt;br /&gt;
; footer&lt;br /&gt;
: Bearbeiten-Link anzeigen&lt;br /&gt;
:* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; – ja (Vorgabe)&lt;br /&gt;
:* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; – nein (etwa substituierende)&lt;br /&gt;
; TOC&lt;br /&gt;
: Inhaltsverzeichnis schon oberhalb des Überschriftenblocks anzeigen&lt;br /&gt;
:* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; – nein (Vorgabe)&lt;br /&gt;
:* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; – ja (für längere Darstellung rechtsbündiger Blöcke der Vorlage)&lt;br /&gt;
&lt;br /&gt;
== Abhängigkeiten ==&lt;br /&gt;
* [[Vorlage:TOC nonum/styles]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Vorlage:Vorlagendokumentation|!header]]&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:Dokumentation/footer&amp;diff=9564</id>
		<title>Vorlage:Dokumentation/footer</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:Dokumentation/footer&amp;diff=9564"/>
		<updated>2020-10-21T14:26:54Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Dokumentation/Hinweis Demo}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&amp;lt;!-- Zeilenumbruch: Vorangehende Listen beenden (* #) --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;&lt;br /&gt;
== Werkzeuge ==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: #{{Dokumentation/style|linec}} 3px solid; clear: both; margin-left: 0; margin-right: 0; padding: 0.4rem;&amp;quot; id=&amp;quot;Dokumentation.Info&amp;quot;&amp;gt;&lt;br /&gt;
Bei technischen Fragen zu dieser [[Hilfe:Vorlagen|Vorlage]] kannst du dich auch an die [[Wikipedia:WikiProjekt Vorlagen/Werkstatt|Vorlagenwerkstatt]] wenden. Inhaltliche Fragen und Vorschläge gehören zunächst auf die [[{{TALKPAGENAME}}|Diskussionsseite]]. Sie können ggf. auch an eine passende Redaktion, Portal usw. gerichtet werden.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[{{canonicalurl:Spezial:Linkliste/{{FULLPAGENAME}}|hideredirs=1&amp;amp;hidelinks=1}} Verwendungen] dieser Vorlage&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[{{#invoke:Vorlage:Dokumentation|transcludes}} Cirrus-Suche] zu Einbindungen dieser Vorlage (zunächst nur ANR) mit [[Hilfe:Suche/Cirrus|weiteren Möglichkeiten]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://templatecount.toolforge.org/?lang=de&amp;amp;namespace={{NAMESPACENUMBER}}&amp;amp;name={{PAGENAMEE}} Anzahl der Einbindungen]&amp;lt;/li&amp;gt;&lt;br /&gt;
{{#ifeq: {{{subpages|1}}} | 1 |&lt;br /&gt;
&amp;lt;li&amp;gt;[[Spezial:Präfixindex/{{SUBJECTPAGENAME}}/|Liste der Unterseiten]].&amp;lt;/li&amp;gt;&lt;br /&gt;
{{#ifeq: {{{lonely|0}}} | 1 |&lt;br /&gt;
&amp;lt;li&amp;gt;Diese Dokumentation befindet sich [[{{SUBJECTPAGENAME}}/Doku|auf einer eingebundenen Unterseite]] &amp;lt;span style=&amp;quot;font-size:85%; margin-left:1em;&amp;quot;&amp;gt;&amp;amp;#91;[{{canonicalurl:{{SUBJECTPAGENAME}}/Doku|action=edit}} Bearbeiten]&amp;amp;#93;&amp;lt;/span&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
{{#ifexist:{{SUBJECTPAGENAME}}/Test&lt;br /&gt;
 | &amp;lt;li&amp;gt;Anwendungsbeispiele und Funktionalitätsprüfungen befinden sich auf der [[{{SUBJECTPAGENAME}}/Test|Testseite]] &amp;lt;span style=&amp;quot;font-size:85%; margin-left:1em;&amp;quot;&amp;gt;&amp;amp;#91;[{{canonicalurl:{{SUBJECTPAGENAME}}/Test|action=edit}} Bearbeiten]&amp;amp;#93;&amp;lt;/span&amp;gt;.{{#ifeq: {{FULLPAGENAME}} | {{SUBJECTPAGENAME}} | {{#invoke:TemplUtl|fake|{{SUBJECTPAGENAME}}/Test}}&amp;lt;div style=&amp;quot;display:none&amp;quot;&amp;gt;&amp;lt;references /&amp;gt;&amp;lt;/div&amp;gt;}}&amp;lt;/li&amp;gt;&lt;br /&gt;
 | &amp;lt;li&amp;gt;[{{canonicalurl:{{SUBJECTPAGENAME}}/Test|action=edit&amp;amp;preload=Vorlage:Dokumentation/preload-test}} Test-/Beispielseite erstellen].&amp;lt;/li&amp;gt;&lt;br /&gt;
}}{{#ifexist:{{SUBJECTPAGENAME}}/Wartung&lt;br /&gt;
 | &amp;lt;li&amp;gt;Für diese Vorlage existiert eine [[{{SUBJECTPAGENAME}}/Wartung|Wartungsseite]] &amp;lt;span style=&amp;quot;font-size:85%;&amp;quot;&amp;gt;&amp;amp;#91;[{{canonicalurl:{{SUBJECTPAGENAME}}/Wartung|action=edit}} Bearbeiten]&amp;amp;#93;&amp;lt;/span&amp;gt; zum Auffinden fehlerhafter Verwendungen.{{#ifeq: {{FULLPAGENAME}} | {{SUBJECTPAGENAME}} | {{#invoke:TemplUtl|fake|{{SUBJECTPAGENAME}}/Wartung}}}}&amp;lt;/li&amp;gt;&lt;br /&gt;
}}{{#ifexist:{{SUBJECTPAGENAME}}/XML&lt;br /&gt;
 | &amp;lt;li&amp;gt;Für diese Vorlage existiert eine [[{{SUBJECTPAGENAME}}/XML|XML-Beschreibung]] &amp;lt;span style=&amp;quot;font-size:85%;&amp;quot;&amp;gt;&amp;amp;#91;[{{canonicalurl:{{SUBJECTPAGENAME}}/XML|action=edit}} Bearbeiten]&amp;amp;#93;&amp;lt;/span&amp;gt; für den [[Wikipedia:Technik/Skin/Gadgets/Vorlagenmeister|Vorlagenmeister]].{{#ifeq: {{FULLPAGENAME}} | {{SUBJECTPAGENAME}} | {{#invoke:TemplUtl|fake|{{SUBJECTPAGENAME}}/XML}} }}&amp;lt;/li&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
}}{{#ifexist:{{SUBJECTPAGENAME}}/styles&lt;br /&gt;
 | &amp;lt;li&amp;gt;Es existiert eine [[Hilfe:CSS/TemplateStyles|TemplateStyles]]-[[{{SUBJECTPAGENAME}}/styles|Definition]] &amp;lt;span style=&amp;quot;font-size:85%;&amp;quot;&amp;gt;&amp;amp;#91;[{{canonicalurl:{{SUBJECTPAGENAME}}/styles|action=edit}} Bearbeiten]&amp;amp;#93;&amp;lt;/span&amp;gt;, die CSS-Deklarationen wirksam werden lässt, wenn diese Vorlage eingebunden wird.&amp;lt;/li&amp;gt;{{#invoke:TemplUtl|fake|{{SUBJECTPAGENAME}}/styles}}&lt;br /&gt;
}}{{#if: {{#invoke:PageUtil|getProtection|{{FULLPAGENAME}}|edit}}&lt;br /&gt;
 | &amp;lt;li&amp;gt;Die Programmierung ist gegen Bearbeitung geschützt&lt;br /&gt;
({{#switch: {{#invoke:PageUtil|getProtection|{{FULLPAGENAME}}|edit}}&lt;br /&gt;
|½=Halb&lt;br /&gt;
|¾=(Sichter) Dreiviertel&lt;br /&gt;
|1=Voll}}schutz).&amp;lt;/li&amp;gt;&lt;br /&gt;
}}{{#ifexist:{{SUBJECTPAGENAME}}/Editnotice&lt;br /&gt;
 | &amp;lt;li&amp;gt;Es existiert ein [[{{SUBJECTPAGENAME}}/Editnotice|Bearbeitungshinweis]] &amp;lt;span style=&amp;quot;font-size:85%;&amp;quot;&amp;gt;&amp;amp;#91;[{{canonicalurl:{{SUBJECTPAGENAME}}/Editnotice|action=edit}} Bearbeiten]&amp;amp;#93;&amp;lt;/span&amp;gt;, der beim Bearbeiten der Vorlage angezeigt wird.&amp;lt;/li&amp;gt;{{#invoke:TemplUtl|fake|{{SUBJECTPAGENAME}}/Editnotice}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;li class=&amp;quot;plainlinks&amp;quot;&amp;gt;[[Wikipedia:Technik/Cloud/giftbot/vorlagenparser|giftbot/vorlagenparser]]: [https://giftbot.toolforge.org/vorlagenparser.fcgi?template={{PAGENAMEE}} CSV herunterladen (ANR)].&amp;lt;/li&amp;gt;&lt;br /&gt;
{{#ifexist:{{SUBJECTPAGENAME}}/Preload | {{#invoke:TemplUtl|fake|{{SUBJECTPAGENAME}}/Preload}} &lt;br /&gt;
}}{{#ifexist:{{SUBJECTPAGENAME}}/preload | {{#invoke:TemplUtl|fake|{{SUBJECTPAGENAME}}/preload}} &lt;br /&gt;
}}&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:3px solid #009900; border-spacing:2px; margin-top:2em; padding:1em;&amp;quot;&amp;gt;&lt;br /&gt;
Einheitliche &#039;&#039;&#039;Service&#039;&#039;&#039;-Links für &#039;&#039;&#039;Vorlagen-Dokumentationen&#039;&#039;&#039; unterhalb des Dokumentationsbereichs:&lt;br /&gt;
* Einzel-&amp;lt;code&amp;gt;/Doku&amp;lt;/code&amp;gt; mittels [[Vorlage:Dokumentation]],&lt;br /&gt;
* generierte Dokumentationen in [[:Kategorie:Vorlage:Metadokumentation]].&lt;br /&gt;
Im Benutzernamensraum ist eine Erprobung von Entwürfen für Vorlagenprogrammierungen möglich.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
; lonely&lt;br /&gt;
: Einzel-Doku-Unterseite&lt;br /&gt;
:* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; – nein (Vorgabe; für Metadoku)&lt;br /&gt;
:* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; – ja ([[Vorlage:Dokumentation]])&lt;br /&gt;
; subpages&lt;br /&gt;
: Kann Unterseiten haben&lt;br /&gt;
:* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; – nein (typisch bei Metadokus)&lt;br /&gt;
:* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; – ja (Vorgabe)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#invoke:TemplUtl|fakes|prefix=Dokumentation/preload-&lt;br /&gt;
|doku&lt;br /&gt;
|editnotice&lt;br /&gt;
|preload&lt;br /&gt;
|test&lt;br /&gt;
|wartung&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Vorlage:Vorlagendokumentation|!footer]]&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:Dokumentation&amp;diff=9562</id>
		<title>Vorlage:Dokumentation</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:Dokumentation&amp;diff=9562"/>
		<updated>2020-10-21T14:26:54Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#ifeq:{{NAMESPACENUMBER}}|0|&lt;br /&gt;
&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Achtung: Die [[Vorlage:Dokumentation]] wird im Artikelnamensraum verwendet. Wahrscheinlich fehlt &amp;lt;code&amp;gt;&amp;amp;lt;onlyinclude&amp;amp;gt;&amp;lt;/code&amp;gt; in einer eingebundenen Vorlage oder die Kapselung ist fehlerhaft. Bitte {{Bearbeiten|text=entferne diesen Fehler}}.&amp;lt;/span&amp;gt; [[Kategorie:Wikipedia:Vorlagenfehler/Vorlage:Dokumentation/Namensraum]]&lt;br /&gt;
|&lt;br /&gt;
{{Dokumentation/header|edit=1|TOC={{{TOC|0}}}}}&lt;br /&gt;
{{#invoke:Vorlage:Dokumentation|f}}&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:TOC_Kategorie&amp;diff=9560</id>
		<title>Vorlage:TOC Kategorie</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Vorlage:TOC_Kategorie&amp;diff=9560"/>
		<updated>2020-10-21T14:26:54Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: 1 Version importiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- --&amp;gt;__NOTOC__&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:block; margin:0 1em; text-align:center;&amp;quot; id=&amp;quot;kat_toc&amp;quot; class=&amp;quot;toc plainlinks noprint&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;Inhaltsverzeichnis:&amp;lt;/h2&amp;gt; &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}}} *] {{#switch: {{{ZEICHEN|{{{Zeichen|#}}}}}}|#|#A|#a|#aA|#Aa|A#|a#|aA#|Aa#=&lt;br /&gt;
   [{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=0}} 0] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=1}} 1] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=2}} 2] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=3}} 3] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=4}} 4] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=5}} 5] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=6}} 6] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=7}} 7] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=8}} 8] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=9}} 9] }} {{#switch: {{{ZEICHEN|{{{Zeichen|A}}}}}}|A|aA|Aa|#A|#aA|#Aa|A#|aA#|#Aa=&lt;br /&gt;
   [{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=A}} A] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=B}} B] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=C}} C] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=D}} D] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=E}} E] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=F}} F] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=G}} G] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=H}} H] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=I}} I] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=J}} J] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=K}} K] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=L}} L] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=M}} M] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=N}} N] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=O}} O] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=P}} P] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=Q}} Q] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=R}} R] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=S}} S] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=Sch}} Sch] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=T}} T] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=U}} U] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=V}} V] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=W}} W] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=X}} X] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=Y}} Y] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=Z}} Z] }}{{#switch: {{{ZEICHEN|{{{Zeichen|}}}}}}|a|aA|Aa|#a|#aA|#Aa|a#|aA#|Aa#=&lt;br /&gt;
   [{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=a}} a] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=b}} b] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=c}} c] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=d}} d] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=e}} e] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=f}} f] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=g}} g] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=h}} h] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=i}} i] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=j}} j] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=k}} k] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=l}} l] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=m}} m] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=n}} n] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=o}} o] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=p}} p] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=q}} q] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=r}} r] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=s}} s] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=t}} t] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=u}} u] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=v}} v] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=w}} w] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=x}} x] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=y}} y] &amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{FULLPAGENAME}}|{{#ifeq: {{{TYP|}}} | Kategorien | subcatfrom | pagefrom}}=z}} z]}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{Dokumentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9558</id>
		<title>VV-WSV 1102:Datenschutz</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9558"/>
		<updated>2020-10-19T06:23:23Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: /* Einsatz von Cookies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Datenschutzerklärung==&lt;br /&gt;
&lt;br /&gt;
Die Bundesanstalt für Wasserbau nimmt den Schutz Ihrer personenbezogenen Daten sehr ernst. Wir möchten, dass Sie wissen, wann wir welche Daten erheben und wie wir sie verwenden. Wir haben technische und organisatorische Maßnahmen getroffen, die sicherstellen, dass die Vorschriften über den Datenschutz sowohl von uns als auch von externen Dienstleistern beachtet werden. &lt;br /&gt;
&lt;br /&gt;
Für die Nutzung des Webangebots der Bundesanstalt für Wasserbau müssen grundsätzlich keine personenbezogenen Daten angegeben werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf das Internetangebot ===&lt;br /&gt;
Beim Besuch unserer Webseite zu Informationszwecken speichern unsere in Deutschland liegenden Server nur die personenbeziehbaren Daten, die ihr Browser an unsere Server übermittelt. In der Protokolldatei werden folgende Daten maximal 30 Tage gespeichert:&lt;br /&gt;
&lt;br /&gt;
* IP-Adresse des Clients&lt;br /&gt;
* Identität des Client-PCs&lt;br /&gt;
* Zeitpunkt des Requests&lt;br /&gt;
* URL&lt;br /&gt;
* HTTP-Status-Code &lt;br /&gt;
* Größe des angefragten Objektes&lt;br /&gt;
*  Referer&lt;br /&gt;
*  Browsertyp und Version&lt;br /&gt;
Die gespeicherten Daten werden nur zur Optimierung des Internetangebotes ausgewertet.&lt;br /&gt;
&lt;br /&gt;
=== Informationsmaterial, Newsletter, Kontaktformular ===&lt;br /&gt;
Wenn Sie Informationsmaterial oder Newsletter bestellen, fragen wir Sie nach Ihrem Namen und nach anderen persönlichen Informationen. Es unterliegt Ihrer freien Entscheidung, ob Sie diese Daten eingeben. Ihre Angaben speichern wir auf besonders geschützten Servern in Deutschland. Der Zugriff darauf ist nur wenigen besonders befugten Personen möglich, die mit der technischen oder redaktionellen Betreuung der Server befasst sind.&lt;br /&gt;
Über die auf unserer Webseite bereitgestellten Kontaktformulare können Sie direkt mit uns in Verbindung zu treten. Wir erheben, verarbeiten und nutzen die von Ihnen über ein Formular mitgeteilten Informationen ausschließlich für die Bearbeitung Ihres konkreten Anliegens und nur mit Ihrer Einwilligung.&lt;br /&gt;
&lt;br /&gt;
=== Weitergabe personenbezogener Daten an Dritte ===&lt;br /&gt;
Wir verwenden Ihre personenbezogenen Informationen im Falle von Infobestellungen nur innerhalb der Bundesanstalt für Wasserbau und der mit dem Versand von Informationsmaterial beauftragten Unternehmen. Wir geben sie nicht ohne Ihre ausdrückliche Einwilligung an Dritte weiter. Soweit wir gesetzlich oder per Gerichtsbeschluss dazu verpflichtet sind, werden wir Ihre Daten an auskunftsberechtigte Stellen übermitteln.&lt;br /&gt;
&lt;br /&gt;
=== Einsatz von Cookies ===&lt;br /&gt;
Bei einem Besuch unserer Website werden Informationen in Form eines Cookies auf Ihrem Rechner abgelegt. Cookies helfen unter vielen Aspekten, Ihren Besuch auf unserer Webseite einfacher, angenehmer und sinnvoller zu gestalten. Cookies sind Textdateien, die Ihr Webbrowser automatisch auf der Festplatte Ihres Computers speichert, wenn Sie unsere Internetseite besuchen.&lt;br /&gt;
&lt;br /&gt;
Sie können Ihren Browser jederzeit mittels entsprechender Einstellung so konfigurieren, dass keine Cookies auf Ihrem Computer gespeichert werden und dadurch der Setzung von Cookies widersprechen.  Zudem können Sie bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme löschen. Dies ist in allen gängigen Internetbrowsern möglich. Sofern Sie die Setzung von Cookies in dem genutzten Internetbrowser deaktivieren, sind unter Umständen nicht alle Funktionen unserer Internetseite nutzbar.&lt;br /&gt;
&lt;br /&gt;
Wir nutzen nur technisch notwendige Cookies.&lt;br /&gt;
&lt;br /&gt;
=== Statistik ===&lt;br /&gt;
Zur Optimierung unseres Angebots werten wir die Zugriffe auf unsere Seiten statistisch aus. Wir setzen dafür die Open-Source-Anwendung &amp;quot;AWStats&amp;quot; ein. AWStats nutzt für die Auswertung die Protokolldatei unseres Webservers. Die Informationen über Ihre Benutzung dieser Webseite werden nicht an Dritte weitergegeben. &lt;br /&gt;
Mit &amp;quot;AWStats&amp;quot; werden keine Daten an Server übermittelt, die außerhalb der Kontrolle der Bundesanstalt für Wasserbau liegen.&lt;br /&gt;
Aus den Daten erstellen wir keine Nutzerprofile und nutzen sie auch nicht für andere Zwecke.&lt;br /&gt;
&lt;br /&gt;
===Links ===&lt;br /&gt;
Diese Datenschutzerklärung erstreckt sich nicht auf von unserer Webseite aus verlinkte Webseiten Dritter. &lt;br /&gt;
Für den Inhalt der verlinkten Seiten sind ausschließlich deren Anbieter verantwortlich. Offensichtlich rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung unter Anwendung eines zumutbaren Prüfungsmaßstabs nicht erkennbar. Bei Kenntnis von Rechtsverletzungen werden derartige Links unverzüglich entfernt.&lt;br /&gt;
&lt;br /&gt;
=== Minderjährigenschutz ===&lt;br /&gt;
Personen unter 18 Jahren sollten ohne Zustimmung der Eltern oder Erziehungsberechtigten keine personenbezogenen Daten an uns übermitteln. Wir fordern keine personenbezogenen Daten von Kindern und Jugendlichen an. Wissentlich sammeln wir solche Daten nicht und geben sie auch nicht an Dritte weiter.&lt;br /&gt;
&lt;br /&gt;
=== Auskunftsrecht, Berichtigung, Löschung ===&lt;br /&gt;
Sie haben jederzeit das Recht auf &lt;br /&gt;
* Auskunft, &lt;br /&gt;
* Berichtigung, &lt;br /&gt;
* Löschung, &lt;br /&gt;
* Einschränkung der Verarbeitung, &lt;br /&gt;
* Widerspruch gegen die Verarbeitung &lt;br /&gt;
* Datenübertragbarkeit &lt;br /&gt;
hinsichtlich der bezüglich Ihrer Person gespeicherten Daten, deren Herkunft und Empfänger sowie den Zweck der Speicherung, sofern nicht folgendes gilt: &lt;br /&gt;
&lt;br /&gt;
Die Aufbewahrung von Bürgeranfragen in elektronischer Form erfolgt - wie auch in Papierform - gemäß den für die Aufbewahrung von Schriftgut geltenden Fristen der Registraturrichtlinie, welche die Gemeinsame Geschäftsordnung der Bundesministerien (GGO) ergänzt.&lt;br /&gt;
&lt;br /&gt;
Sie können sich mit Fragen und Beschwerden an den Datenschutzbeauftragten der Bundesanstalt für Wasserbau wenden.&lt;br /&gt;
&lt;br /&gt;
=== Behördliche Datenschutzbeauftragte ===&lt;br /&gt;
Cornelia Kaufmann&amp;lt;br/&amp;gt;&lt;br /&gt;
Telefon: +49 (0) 721 9726-2235&amp;lt;br/&amp;gt;&lt;br /&gt;
E-Mail: datenschutz@baw.de&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9557</id>
		<title>VV-WSV 1102:Datenschutz</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9557"/>
		<updated>2020-02-06T08:21:09Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: /* Behördliche Datenschutzbeauftragte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Datenschutzerklärung==&lt;br /&gt;
&lt;br /&gt;
Die Bundesanstalt für Wasserbau nimmt den Schutz Ihrer personenbezogenen Daten sehr ernst. Wir möchten, dass Sie wissen, wann wir welche Daten erheben und wie wir sie verwenden. Wir haben technische und organisatorische Maßnahmen getroffen, die sicherstellen, dass die Vorschriften über den Datenschutz sowohl von uns als auch von externen Dienstleistern beachtet werden. &lt;br /&gt;
&lt;br /&gt;
Für die Nutzung des Webangebots der Bundesanstalt für Wasserbau müssen grundsätzlich keine personenbezogenen Daten angegeben werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf das Internetangebot ===&lt;br /&gt;
Beim Besuch unserer Webseite zu Informationszwecken speichern unsere in Deutschland liegenden Server nur die personenbeziehbaren Daten, die ihr Browser an unsere Server übermittelt. In der Protokolldatei werden folgende Daten maximal 30 Tage gespeichert:&lt;br /&gt;
&lt;br /&gt;
* IP-Adresse des Clients&lt;br /&gt;
* Identität des Client-PCs&lt;br /&gt;
* Zeitpunkt des Requests&lt;br /&gt;
* URL&lt;br /&gt;
* HTTP-Status-Code &lt;br /&gt;
* Größe des angefragten Objektes&lt;br /&gt;
*  Referer&lt;br /&gt;
*  Browsertyp und Version&lt;br /&gt;
Die gespeicherten Daten werden nur zur Optimierung des Internetangebotes ausgewertet.&lt;br /&gt;
&lt;br /&gt;
=== Informationsmaterial, Newsletter, Kontaktformular ===&lt;br /&gt;
Wenn Sie Informationsmaterial oder Newsletter bestellen, fragen wir Sie nach Ihrem Namen und nach anderen persönlichen Informationen. Es unterliegt Ihrer freien Entscheidung, ob Sie diese Daten eingeben. Ihre Angaben speichern wir auf besonders geschützten Servern in Deutschland. Der Zugriff darauf ist nur wenigen besonders befugten Personen möglich, die mit der technischen oder redaktionellen Betreuung der Server befasst sind.&lt;br /&gt;
Über die auf unserer Webseite bereitgestellten Kontaktformulare können Sie direkt mit uns in Verbindung zu treten. Wir erheben, verarbeiten und nutzen die von Ihnen über ein Formular mitgeteilten Informationen ausschließlich für die Bearbeitung Ihres konkreten Anliegens und nur mit Ihrer Einwilligung.&lt;br /&gt;
&lt;br /&gt;
=== Weitergabe personenbezogener Daten an Dritte ===&lt;br /&gt;
Wir verwenden Ihre personenbezogenen Informationen im Falle von Infobestellungen nur innerhalb der Bundesanstalt für Wasserbau und der mit dem Versand von Informationsmaterial beauftragten Unternehmen. Wir geben sie nicht ohne Ihre ausdrückliche Einwilligung an Dritte weiter. Soweit wir gesetzlich oder per Gerichtsbeschluss dazu verpflichtet sind, werden wir Ihre Daten an auskunftsberechtigte Stellen übermitteln.&lt;br /&gt;
&lt;br /&gt;
=== Einsatz von Cookies ===&lt;br /&gt;
Bei einem Besuch unserer Website werden Informationen in Form eines Cookies auf Ihrem Rechner abgelegt. Cookies helfen unter vielen Aspekten, Ihren Besuch auf unserer Webseite einfacher, angenehmer und sinnvoller zu gestalten. Cookies sind Textdateien, die Ihr Webbrowser automatisch auf der Festplatte Ihres Computers speichert, wenn Sie unsere Internetseite besuchen.&lt;br /&gt;
&lt;br /&gt;
Sie können Ihren Browser jederzeit mittels entsprechender Einstellung so konfigurieren, dass keine Cookies auf Ihrem Computer gespeichert werden und dadurch der Setzung von Cookies widersprechen.  Zudem können Sie bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme löschen. Dies ist in allen gängigen Internetbrowsern möglich. Sofern Sie die Setzung von Cookies in dem genutzten Internetbrowser deaktivieren, sind unter Umständen nicht alle Funktionen unserer Internetseite nutzbar.&lt;br /&gt;
&lt;br /&gt;
=== Statistik ===&lt;br /&gt;
Zur Optimierung unseres Angebots werten wir die Zugriffe auf unsere Seiten statistisch aus. Wir setzen dafür die Open-Source-Anwendung &amp;quot;AWStats&amp;quot; ein. AWStats nutzt für die Auswertung die Protokolldatei unseres Webservers. Die Informationen über Ihre Benutzung dieser Webseite werden nicht an Dritte weitergegeben. &lt;br /&gt;
Mit &amp;quot;AWStats&amp;quot; werden keine Daten an Server übermittelt, die außerhalb der Kontrolle der Bundesanstalt für Wasserbau liegen.&lt;br /&gt;
Aus den Daten erstellen wir keine Nutzerprofile und nutzen sie auch nicht für andere Zwecke.&lt;br /&gt;
&lt;br /&gt;
===Links ===&lt;br /&gt;
Diese Datenschutzerklärung erstreckt sich nicht auf von unserer Webseite aus verlinkte Webseiten Dritter. &lt;br /&gt;
Für den Inhalt der verlinkten Seiten sind ausschließlich deren Anbieter verantwortlich. Offensichtlich rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung unter Anwendung eines zumutbaren Prüfungsmaßstabs nicht erkennbar. Bei Kenntnis von Rechtsverletzungen werden derartige Links unverzüglich entfernt.&lt;br /&gt;
&lt;br /&gt;
=== Minderjährigenschutz ===&lt;br /&gt;
Personen unter 18 Jahren sollten ohne Zustimmung der Eltern oder Erziehungsberechtigten keine personenbezogenen Daten an uns übermitteln. Wir fordern keine personenbezogenen Daten von Kindern und Jugendlichen an. Wissentlich sammeln wir solche Daten nicht und geben sie auch nicht an Dritte weiter.&lt;br /&gt;
&lt;br /&gt;
=== Auskunftsrecht, Berichtigung, Löschung ===&lt;br /&gt;
Sie haben jederzeit das Recht auf &lt;br /&gt;
* Auskunft, &lt;br /&gt;
* Berichtigung, &lt;br /&gt;
* Löschung, &lt;br /&gt;
* Einschränkung der Verarbeitung, &lt;br /&gt;
* Widerspruch gegen die Verarbeitung &lt;br /&gt;
* Datenübertragbarkeit &lt;br /&gt;
hinsichtlich der bezüglich Ihrer Person gespeicherten Daten, deren Herkunft und Empfänger sowie den Zweck der Speicherung, sofern nicht folgendes gilt: &lt;br /&gt;
&lt;br /&gt;
Die Aufbewahrung von Bürgeranfragen in elektronischer Form erfolgt - wie auch in Papierform - gemäß den für die Aufbewahrung von Schriftgut geltenden Fristen der Registraturrichtlinie, welche die Gemeinsame Geschäftsordnung der Bundesministerien (GGO) ergänzt.&lt;br /&gt;
&lt;br /&gt;
Sie können sich mit Fragen und Beschwerden an den Datenschutzbeauftragten der Bundesanstalt für Wasserbau wenden.&lt;br /&gt;
&lt;br /&gt;
=== Behördliche Datenschutzbeauftragte ===&lt;br /&gt;
Cornelia Kaufmann&amp;lt;br/&amp;gt;&lt;br /&gt;
Telefon: +49 (0) 721 9726-2235&amp;lt;br/&amp;gt;&lt;br /&gt;
E-Mail: datenschutz@baw.de&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9556</id>
		<title>VV-WSV 1102:Datenschutz</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9556"/>
		<updated>2020-01-17T08:38:18Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: /* Behördliche Datenschutzbeauftragte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Datenschutzerklärung==&lt;br /&gt;
&lt;br /&gt;
Die Bundesanstalt für Wasserbau nimmt den Schutz Ihrer personenbezogenen Daten sehr ernst. Wir möchten, dass Sie wissen, wann wir welche Daten erheben und wie wir sie verwenden. Wir haben technische und organisatorische Maßnahmen getroffen, die sicherstellen, dass die Vorschriften über den Datenschutz sowohl von uns als auch von externen Dienstleistern beachtet werden. &lt;br /&gt;
&lt;br /&gt;
Für die Nutzung des Webangebots der Bundesanstalt für Wasserbau müssen grundsätzlich keine personenbezogenen Daten angegeben werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf das Internetangebot ===&lt;br /&gt;
Beim Besuch unserer Webseite zu Informationszwecken speichern unsere in Deutschland liegenden Server nur die personenbeziehbaren Daten, die ihr Browser an unsere Server übermittelt. In der Protokolldatei werden folgende Daten maximal 30 Tage gespeichert:&lt;br /&gt;
&lt;br /&gt;
* IP-Adresse des Clients&lt;br /&gt;
* Identität des Client-PCs&lt;br /&gt;
* Zeitpunkt des Requests&lt;br /&gt;
* URL&lt;br /&gt;
* HTTP-Status-Code &lt;br /&gt;
* Größe des angefragten Objektes&lt;br /&gt;
*  Referer&lt;br /&gt;
*  Browsertyp und Version&lt;br /&gt;
Die gespeicherten Daten werden nur zur Optimierung des Internetangebotes ausgewertet.&lt;br /&gt;
&lt;br /&gt;
=== Informationsmaterial, Newsletter, Kontaktformular ===&lt;br /&gt;
Wenn Sie Informationsmaterial oder Newsletter bestellen, fragen wir Sie nach Ihrem Namen und nach anderen persönlichen Informationen. Es unterliegt Ihrer freien Entscheidung, ob Sie diese Daten eingeben. Ihre Angaben speichern wir auf besonders geschützten Servern in Deutschland. Der Zugriff darauf ist nur wenigen besonders befugten Personen möglich, die mit der technischen oder redaktionellen Betreuung der Server befasst sind.&lt;br /&gt;
Über die auf unserer Webseite bereitgestellten Kontaktformulare können Sie direkt mit uns in Verbindung zu treten. Wir erheben, verarbeiten und nutzen die von Ihnen über ein Formular mitgeteilten Informationen ausschließlich für die Bearbeitung Ihres konkreten Anliegens und nur mit Ihrer Einwilligung.&lt;br /&gt;
&lt;br /&gt;
=== Weitergabe personenbezogener Daten an Dritte ===&lt;br /&gt;
Wir verwenden Ihre personenbezogenen Informationen im Falle von Infobestellungen nur innerhalb der Bundesanstalt für Wasserbau und der mit dem Versand von Informationsmaterial beauftragten Unternehmen. Wir geben sie nicht ohne Ihre ausdrückliche Einwilligung an Dritte weiter. Soweit wir gesetzlich oder per Gerichtsbeschluss dazu verpflichtet sind, werden wir Ihre Daten an auskunftsberechtigte Stellen übermitteln.&lt;br /&gt;
&lt;br /&gt;
=== Einsatz von Cookies ===&lt;br /&gt;
Bei einem Besuch unserer Website werden Informationen in Form eines Cookies auf Ihrem Rechner abgelegt. Cookies helfen unter vielen Aspekten, Ihren Besuch auf unserer Webseite einfacher, angenehmer und sinnvoller zu gestalten. Cookies sind Textdateien, die Ihr Webbrowser automatisch auf der Festplatte Ihres Computers speichert, wenn Sie unsere Internetseite besuchen.&lt;br /&gt;
&lt;br /&gt;
Sie können Ihren Browser jederzeit mittels entsprechender Einstellung so konfigurieren, dass keine Cookies auf Ihrem Computer gespeichert werden und dadurch der Setzung von Cookies widersprechen.  Zudem können Sie bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme löschen. Dies ist in allen gängigen Internetbrowsern möglich. Sofern Sie die Setzung von Cookies in dem genutzten Internetbrowser deaktivieren, sind unter Umständen nicht alle Funktionen unserer Internetseite nutzbar.&lt;br /&gt;
&lt;br /&gt;
=== Statistik ===&lt;br /&gt;
Zur Optimierung unseres Angebots werten wir die Zugriffe auf unsere Seiten statistisch aus. Wir setzen dafür die Open-Source-Anwendung &amp;quot;AWStats&amp;quot; ein. AWStats nutzt für die Auswertung die Protokolldatei unseres Webservers. Die Informationen über Ihre Benutzung dieser Webseite werden nicht an Dritte weitergegeben. &lt;br /&gt;
Mit &amp;quot;AWStats&amp;quot; werden keine Daten an Server übermittelt, die außerhalb der Kontrolle der Bundesanstalt für Wasserbau liegen.&lt;br /&gt;
Aus den Daten erstellen wir keine Nutzerprofile und nutzen sie auch nicht für andere Zwecke.&lt;br /&gt;
&lt;br /&gt;
===Links ===&lt;br /&gt;
Diese Datenschutzerklärung erstreckt sich nicht auf von unserer Webseite aus verlinkte Webseiten Dritter. &lt;br /&gt;
Für den Inhalt der verlinkten Seiten sind ausschließlich deren Anbieter verantwortlich. Offensichtlich rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung unter Anwendung eines zumutbaren Prüfungsmaßstabs nicht erkennbar. Bei Kenntnis von Rechtsverletzungen werden derartige Links unverzüglich entfernt.&lt;br /&gt;
&lt;br /&gt;
=== Minderjährigenschutz ===&lt;br /&gt;
Personen unter 18 Jahren sollten ohne Zustimmung der Eltern oder Erziehungsberechtigten keine personenbezogenen Daten an uns übermitteln. Wir fordern keine personenbezogenen Daten von Kindern und Jugendlichen an. Wissentlich sammeln wir solche Daten nicht und geben sie auch nicht an Dritte weiter.&lt;br /&gt;
&lt;br /&gt;
=== Auskunftsrecht, Berichtigung, Löschung ===&lt;br /&gt;
Sie haben jederzeit das Recht auf &lt;br /&gt;
* Auskunft, &lt;br /&gt;
* Berichtigung, &lt;br /&gt;
* Löschung, &lt;br /&gt;
* Einschränkung der Verarbeitung, &lt;br /&gt;
* Widerspruch gegen die Verarbeitung &lt;br /&gt;
* Datenübertragbarkeit &lt;br /&gt;
hinsichtlich der bezüglich Ihrer Person gespeicherten Daten, deren Herkunft und Empfänger sowie den Zweck der Speicherung, sofern nicht folgendes gilt: &lt;br /&gt;
&lt;br /&gt;
Die Aufbewahrung von Bürgeranfragen in elektronischer Form erfolgt - wie auch in Papierform - gemäß den für die Aufbewahrung von Schriftgut geltenden Fristen der Registraturrichtlinie, welche die Gemeinsame Geschäftsordnung der Bundesministerien (GGO) ergänzt.&lt;br /&gt;
&lt;br /&gt;
Sie können sich mit Fragen und Beschwerden an den Datenschutzbeauftragten der Bundesanstalt für Wasserbau wenden.&lt;br /&gt;
&lt;br /&gt;
=== Behördliche Datenschutzbeauftragte ===&lt;br /&gt;
Cornelia Kaufmann&amp;lt;br/&amp;gt;&lt;br /&gt;
Telefon: +49 (0) 721 9726-2235&amp;lt;br/&amp;gt;&lt;br /&gt;
E-Mail: datenschutzbeauftragter@baw.de&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9555</id>
		<title>VV-WSV 1102:Datenschutz</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=VV-WSV_1102:Datenschutz&amp;diff=9555"/>
		<updated>2020-01-07T09:35:07Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: /* Behördlicher Datenschutzbeauftragter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Datenschutzerklärung==&lt;br /&gt;
&lt;br /&gt;
Die Bundesanstalt für Wasserbau nimmt den Schutz Ihrer personenbezogenen Daten sehr ernst. Wir möchten, dass Sie wissen, wann wir welche Daten erheben und wie wir sie verwenden. Wir haben technische und organisatorische Maßnahmen getroffen, die sicherstellen, dass die Vorschriften über den Datenschutz sowohl von uns als auch von externen Dienstleistern beachtet werden. &lt;br /&gt;
&lt;br /&gt;
Für die Nutzung des Webangebots der Bundesanstalt für Wasserbau müssen grundsätzlich keine personenbezogenen Daten angegeben werden.&lt;br /&gt;
&lt;br /&gt;
=== Zugriff auf das Internetangebot ===&lt;br /&gt;
Beim Besuch unserer Webseite zu Informationszwecken speichern unsere in Deutschland liegenden Server nur die personenbeziehbaren Daten, die ihr Browser an unsere Server übermittelt. In der Protokolldatei werden folgende Daten maximal 30 Tage gespeichert:&lt;br /&gt;
&lt;br /&gt;
* IP-Adresse des Clients&lt;br /&gt;
* Identität des Client-PCs&lt;br /&gt;
* Zeitpunkt des Requests&lt;br /&gt;
* URL&lt;br /&gt;
* HTTP-Status-Code &lt;br /&gt;
* Größe des angefragten Objektes&lt;br /&gt;
*  Referer&lt;br /&gt;
*  Browsertyp und Version&lt;br /&gt;
Die gespeicherten Daten werden nur zur Optimierung des Internetangebotes ausgewertet.&lt;br /&gt;
&lt;br /&gt;
=== Informationsmaterial, Newsletter, Kontaktformular ===&lt;br /&gt;
Wenn Sie Informationsmaterial oder Newsletter bestellen, fragen wir Sie nach Ihrem Namen und nach anderen persönlichen Informationen. Es unterliegt Ihrer freien Entscheidung, ob Sie diese Daten eingeben. Ihre Angaben speichern wir auf besonders geschützten Servern in Deutschland. Der Zugriff darauf ist nur wenigen besonders befugten Personen möglich, die mit der technischen oder redaktionellen Betreuung der Server befasst sind.&lt;br /&gt;
Über die auf unserer Webseite bereitgestellten Kontaktformulare können Sie direkt mit uns in Verbindung zu treten. Wir erheben, verarbeiten und nutzen die von Ihnen über ein Formular mitgeteilten Informationen ausschließlich für die Bearbeitung Ihres konkreten Anliegens und nur mit Ihrer Einwilligung.&lt;br /&gt;
&lt;br /&gt;
=== Weitergabe personenbezogener Daten an Dritte ===&lt;br /&gt;
Wir verwenden Ihre personenbezogenen Informationen im Falle von Infobestellungen nur innerhalb der Bundesanstalt für Wasserbau und der mit dem Versand von Informationsmaterial beauftragten Unternehmen. Wir geben sie nicht ohne Ihre ausdrückliche Einwilligung an Dritte weiter. Soweit wir gesetzlich oder per Gerichtsbeschluss dazu verpflichtet sind, werden wir Ihre Daten an auskunftsberechtigte Stellen übermitteln.&lt;br /&gt;
&lt;br /&gt;
=== Einsatz von Cookies ===&lt;br /&gt;
Bei einem Besuch unserer Website werden Informationen in Form eines Cookies auf Ihrem Rechner abgelegt. Cookies helfen unter vielen Aspekten, Ihren Besuch auf unserer Webseite einfacher, angenehmer und sinnvoller zu gestalten. Cookies sind Textdateien, die Ihr Webbrowser automatisch auf der Festplatte Ihres Computers speichert, wenn Sie unsere Internetseite besuchen.&lt;br /&gt;
&lt;br /&gt;
Sie können Ihren Browser jederzeit mittels entsprechender Einstellung so konfigurieren, dass keine Cookies auf Ihrem Computer gespeichert werden und dadurch der Setzung von Cookies widersprechen.  Zudem können Sie bereits gesetzte Cookies jederzeit über einen Internetbrowser oder andere Softwareprogramme löschen. Dies ist in allen gängigen Internetbrowsern möglich. Sofern Sie die Setzung von Cookies in dem genutzten Internetbrowser deaktivieren, sind unter Umständen nicht alle Funktionen unserer Internetseite nutzbar.&lt;br /&gt;
&lt;br /&gt;
=== Statistik ===&lt;br /&gt;
Zur Optimierung unseres Angebots werten wir die Zugriffe auf unsere Seiten statistisch aus. Wir setzen dafür die Open-Source-Anwendung &amp;quot;AWStats&amp;quot; ein. AWStats nutzt für die Auswertung die Protokolldatei unseres Webservers. Die Informationen über Ihre Benutzung dieser Webseite werden nicht an Dritte weitergegeben. &lt;br /&gt;
Mit &amp;quot;AWStats&amp;quot; werden keine Daten an Server übermittelt, die außerhalb der Kontrolle der Bundesanstalt für Wasserbau liegen.&lt;br /&gt;
Aus den Daten erstellen wir keine Nutzerprofile und nutzen sie auch nicht für andere Zwecke.&lt;br /&gt;
&lt;br /&gt;
===Links ===&lt;br /&gt;
Diese Datenschutzerklärung erstreckt sich nicht auf von unserer Webseite aus verlinkte Webseiten Dritter. &lt;br /&gt;
Für den Inhalt der verlinkten Seiten sind ausschließlich deren Anbieter verantwortlich. Offensichtlich rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung unter Anwendung eines zumutbaren Prüfungsmaßstabs nicht erkennbar. Bei Kenntnis von Rechtsverletzungen werden derartige Links unverzüglich entfernt.&lt;br /&gt;
&lt;br /&gt;
=== Minderjährigenschutz ===&lt;br /&gt;
Personen unter 18 Jahren sollten ohne Zustimmung der Eltern oder Erziehungsberechtigten keine personenbezogenen Daten an uns übermitteln. Wir fordern keine personenbezogenen Daten von Kindern und Jugendlichen an. Wissentlich sammeln wir solche Daten nicht und geben sie auch nicht an Dritte weiter.&lt;br /&gt;
&lt;br /&gt;
=== Auskunftsrecht, Berichtigung, Löschung ===&lt;br /&gt;
Sie haben jederzeit das Recht auf &lt;br /&gt;
* Auskunft, &lt;br /&gt;
* Berichtigung, &lt;br /&gt;
* Löschung, &lt;br /&gt;
* Einschränkung der Verarbeitung, &lt;br /&gt;
* Widerspruch gegen die Verarbeitung &lt;br /&gt;
* Datenübertragbarkeit &lt;br /&gt;
hinsichtlich der bezüglich Ihrer Person gespeicherten Daten, deren Herkunft und Empfänger sowie den Zweck der Speicherung, sofern nicht folgendes gilt: &lt;br /&gt;
&lt;br /&gt;
Die Aufbewahrung von Bürgeranfragen in elektronischer Form erfolgt - wie auch in Papierform - gemäß den für die Aufbewahrung von Schriftgut geltenden Fristen der Registraturrichtlinie, welche die Gemeinsame Geschäftsordnung der Bundesministerien (GGO) ergänzt.&lt;br /&gt;
&lt;br /&gt;
Sie können sich mit Fragen und Beschwerden an den Datenschutzbeauftragten der Bundesanstalt für Wasserbau wenden.&lt;br /&gt;
&lt;br /&gt;
=== Behördliche Datenschutzbeauftragte ===&lt;br /&gt;
Cornelia Wolf&amp;lt;br/&amp;gt;&lt;br /&gt;
Telefon: +49 (0) 721 9726-2235&amp;lt;br/&amp;gt;&lt;br /&gt;
E-Mail: datenschutzbeauftragter@baw.de&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
	<entry>
		<id>http://wiki.baw.de/vv-wsv1102/index.php?title=Hauptseite&amp;diff=9554</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://wiki.baw.de/vv-wsv1102/index.php?title=Hauptseite&amp;diff=9554"/>
		<updated>2019-12-06T13:45:52Z</updated>

		<summary type="html">&lt;p&gt;ArxioWikiSysop: Änderungen von MediaWiki default (Diskussion) wurden auf die letzte Version von imported&amp;gt;Merkel Jennifer zurückgesetzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieses Wiki enthält die Begriffsbestimmungen der VV-WSV 1102, Teil 2.&lt;br /&gt;
&lt;br /&gt;
Die VV-WSV 1102 ist eine Verwaltungsvorschrift des Bundesministerium für Verkehr und digitale Infrastruktur für den Geschäftsbereich der WSV. Die im Objektkatalog definierten Begriffe werden insbesondere bei der Identifikation der baulichen und sonstigen technischen Anlagen an den Bundeswasserstraßen verwendet. Der Teil 2 der Vorschrift enthält das für den Verwaltungsgebrauch bestimmte Begriffsglossar.&lt;br /&gt;
&lt;br /&gt;
* [[:Kategorie:Begriff|Begriffe]]&lt;/div&gt;</summary>
		<author><name>ArxioWikiSysop</name></author>
	</entry>
</feed>