CINXE.COM
Modul:Arguments – Reiseführer auf Wikivoyage
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available" lang="de" dir="ltr"> <head> <meta charset="UTF-8"> <title>Modul:Arguments – Reiseführer auf Wikivoyage</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available";var cookie=document.cookie.match(/(?:^|; )dewikivoyagemwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":[",\t.",".\t,"],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"dmy","wgMonthNames":["","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"wgRequestId":"5ac544ea-4cfa-4813-ab4f-d260958d7879","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Modul:Arguments","wgTitle":"Arguments","wgCurRevisionId":1010898,"wgRevisionId":1010898,"wgArticleId":61315,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Verwendbare Module","Module:Importierte Module","Module:Vielfach benutzte Module","Module, die in anderen Modulen verwendet werden","Module"],"wgPageViewLanguage":"de","wgPageContentLanguage":"de","wgPageContentModel":"Scribunto","wgRelevantPageName":"Modul:Arguments","wgRelevantArticleId":61315,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikivoyage", "wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":10000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q15379728","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"]};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.pygments":"ready", "skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","jquery.makeCollapsible","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.CommonsDirekt","ext.gadget.Wdsearch","ext.gadget.DeleteRequestsTally","ext.gadget.ListingInfo","ext.gadget.MapTools","ext.gadget.MarkerTooltip","ext.gadget.MarkerUtilities","ext.gadget.Poi2gpx","ext.gadget.ScrollGallery","ext.gadget.TabsSelection","ext.gadget.Upload","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging", "ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","wikibase.client.vector-2022","ext.checkUser.clientHints","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=de&modules=ext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=de&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=de&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Modul:Arguments – Reiseführer auf Wikivoyage"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//de.m.wikivoyage.org/wiki/Modul:Arguments"> <link rel="alternate" type="application/x-wiki" title="Bearbeiten" href="/w/index.php?title=Modul:Arguments&action=edit"> <link rel="icon" href="/static/favicon/wikivoyage.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikivoyage (de)"> <link rel="EditURI" type="application/rsd+xml" href="//de.wikivoyage.org/w/api.php?action=rsd"> <link rel="canonical" href="https://de.wikivoyage.org/wiki/Modul:Arguments"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de"> <link rel="alternate" type="application/atom+xml" title="Atom-Feed für „Wikivoyage“" href="/w/index.php?title=Spezial:Letzte_%C3%84nderungen&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject mw-editable page-Modul_Arguments rootpage-Modul_Arguments skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Zum Inhalt springen</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Website"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Hauptmenü" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Hauptmenü</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Hauptmenü</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">In die Seitenleiste verschieben</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">Verbergen</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage" class="mw-list-item"><a href="/wiki/Hauptseite" title="Hauptseite anzeigen [z]" accesskey="z"><span>Hauptseite</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikivoyage:%C3%9Cber_uns"><span>Über Wikivoyage</span></a></li><li id="n-Wikivoyage-Lounge" class="mw-list-item"><a href="/wiki/Wikivoyage:Lounge"><span>Wikivoyage-Lounge</span></a></li><li id="n-Was-gibt-es-in-der-Nähe?" class="mw-list-item"><a href="/wiki/Spezial:In_der_N%C3%A4he"><span>Was gibt es in der Nähe?</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Spezial:Zuf%C3%A4llige_Seite" title="Zufällige Seite aufrufen [x]" accesskey="x"><span>Zufällige Seite</span></a></li> </ul> </div> </div> <div id="p-Mitmachen" class="vector-menu mw-portlet mw-portlet-Mitmachen" > <div class="vector-menu-heading"> Mitmachen </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-Erste-Schritte" class="mw-list-item"><a href="/wiki/Hilfe:Neu_bei_Wikivoyage"><span>Erste Schritte</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Hilfe:Portal" title="Hilfeseite anzeigen"><span>Hilfe</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikivoyage:Autorenportal" title="Über das Projekt, was du tun kannst, wo was zu finden ist"><span>Autorenportal</span></a></li><li id="n-Projektseiten" class="mw-list-item"><a href="/wiki/Wikivoyage:Index"><span>Projektseiten</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Spezial:Letzte_%C3%84nderungen" title="Liste der letzten Änderungen in diesem Wiki [r]" accesskey="r"><span>Letzte Änderungen</span></a></li><li id="n-Wie-du-Wikivoyage-helfen-kannst" class="mw-list-item"><a href="/wiki/Wikivoyage:Wie_du_Wikivoyage_helfen_kannst"><span>Wie du Wikivoyage helfen kannst</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Hauptseite" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikivoyage.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikivoyage" src="/static/images/mobile/copyright/wikivoyage-wordmark-en.svg" style="width: 7.5em; height: 1.5625em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Spezial:Suche" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Wikivoyage durchsuchen [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Suche</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Wikivoyage durchsuchen" aria-label="Wikivoyage durchsuchen" autocapitalize="sentences" title="Wikivoyage durchsuchen [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Spezial:Suche"> </div> <button class="cdx-button cdx-search-input__end-button">Suchen</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Meine Werkzeuge"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Erscheinungsbild"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Änderung des Aussehens der Schriftgröße, -breite und -farbe der Seite" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Erscheinungsbild" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Erscheinungsbild</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=de" class=""><span>Spenden</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Spezial:Benutzerkonto_anlegen&returnto=Modul%3AArguments" title="Wir ermutigen dich dazu, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich." class=""><span>Benutzerkonto erstellen</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Spezial:Anmelden&returnto=Modul%3AArguments" title="Sich anzumelden wird gerne gesehen, ist jedoch nicht zwingend erforderlich. [o]" accesskey="o" class=""><span>Anmelden</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Weitere Optionen" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Meine Werkzeuge" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Meine Werkzeuge</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Benutzermenü" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=de"><span>Spenden</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Spezial:Benutzerkonto_anlegen&returnto=Modul%3AArguments" title="Wir ermutigen dich dazu, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich."><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Benutzerkonto erstellen</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Spezial:Anmelden&returnto=Modul%3AArguments" title="Sich anzumelden wird gerne gesehen, ist jedoch nicht zwingend erforderlich. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Anmelden</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Seiten für abgemeldete Benutzer <a href="/wiki/Hilfe:Einf%C3%BChrung" aria-label="Erfahre mehr über das Bearbeiten"><span>Weitere Informationen</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Spezial:Meine_Beitr%C3%A4ge" title="Eine Liste der Bearbeitungen, die von dieser IP-Adresse gemacht wurden [y]" accesskey="y"><span>Beiträge</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Spezial:Meine_Diskussionsseite" title="Diskussion über Änderungen von dieser IP-Adresse [n]" accesskey="n"><span>Diskussionsseite</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Website"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">Modul</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">Arguments</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Zu einem Artikel in einer anderen Sprache gehen. Verfügbar in 25 Sprachen" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-25" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">25 Sprachen</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikivoyage.org/wiki/%E0%A6%AE%E0%A6%A1%E0%A6%BF%E0%A6%89%E0%A6%B2:Arguments" title="মডিউল:Arguments – Bengalisch" lang="bn" hreflang="bn" data-title="মডিউল:Arguments" data-language-autonym="বাংলা" data-language-local-name="Bengalisch" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikivoyage.org/wiki/Modul:Arguments" title="Modul:Arguments – Tschechisch" lang="cs" hreflang="cs" data-title="Modul:Arguments" data-language-autonym="Čeština" data-language-local-name="Tschechisch" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikivoyage.org/wiki/Module:Arguments" title="Module:Arguments – Griechisch" lang="el" hreflang="el" data-title="Module:Arguments" data-language-autonym="Ελληνικά" data-language-local-name="Griechisch" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikivoyage.org/wiki/Module:Arguments" title="Module:Arguments – Englisch" lang="en" hreflang="en" data-title="Module:Arguments" data-language-autonym="English" data-language-local-name="Englisch" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikivoyage.org/wiki/Modulo:Arguments" title="Modulo:Arguments – Esperanto" lang="eo" hreflang="eo" data-title="Modulo:Arguments" data-language-autonym="Esperanto" data-language-local-name="Esperanto" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikivoyage.org/wiki/M%C3%B3dulo:Argumentos" title="Módulo:Argumentos – Spanisch" lang="es" hreflang="es" data-title="Módulo:Argumentos" data-language-autonym="Español" data-language-local-name="Spanisch" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikivoyage.org/wiki/%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Arguments" title="پودمان:Arguments – Persisch" lang="fa" hreflang="fa" data-title="پودمان:Arguments" data-language-autonym="فارسی" data-language-local-name="Persisch" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikivoyage.org/wiki/Moduuli:Arguments" title="Moduuli:Arguments – Finnisch" lang="fi" hreflang="fi" data-title="Moduuli:Arguments" data-language-autonym="Suomi" data-language-local-name="Finnisch" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikivoyage.org/wiki/Module:Arguments" title="Module:Arguments – Französisch" lang="fr" hreflang="fr" data-title="Module:Arguments" data-language-autonym="Français" data-language-local-name="Französisch" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikivoyage.org/wiki/%D7%99%D7%97%D7%99%D7%93%D7%94:Arguments" title="יחידה:Arguments – Hebräisch" lang="he" hreflang="he" data-title="יחידה:Arguments" data-language-autonym="עברית" data-language-local-name="Hebräisch" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikivoyage.org/wiki/%E0%A4%AE%E0%A5%89%E0%A4%A1%E0%A5%8D%E0%A4%AF%E0%A5%82%E0%A4%B2:Arguments" title="मॉड्यूल:Arguments – Hindi" lang="hi" hreflang="hi" data-title="मॉड्यूल:Arguments" data-language-autonym="हिन्दी" data-language-local-name="Hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikivoyage.org/wiki/Modulo:Arguments" title="Modulo:Arguments – Italienisch" lang="it" hreflang="it" data-title="Modulo:Arguments" data-language-autonym="Italiano" data-language-local-name="Italienisch" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikivoyage.org/wiki/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Arguments" title="モジュール:Arguments – Japanisch" lang="ja" hreflang="ja" data-title="モジュール:Arguments" data-language-autonym="日本語" data-language-local-name="Japanisch" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikivoyage.org/wiki/Module:Arguments" title="Module:Arguments – Niederländisch" lang="nl" hreflang="nl" data-title="Module:Arguments" data-language-autonym="Nederlands" data-language-local-name="Niederländisch" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikivoyage.org/wiki/Modu%C5%82:Arguments" title="Moduł:Arguments – Polnisch" lang="pl" hreflang="pl" data-title="Moduł:Arguments" data-language-autonym="Polski" data-language-local-name="Polnisch" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-ps mw-list-item"><a href="https://ps.wikivoyage.org/wiki/Module:Arguments" title="Module:Arguments – Paschtu" lang="ps" hreflang="ps" data-title="Module:Arguments" data-language-autonym="پښتو" data-language-local-name="Paschtu" class="interlanguage-link-target"><span>پښتو</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikivoyage.org/wiki/M%C3%B3dulo:Arguments" title="Módulo:Arguments – Portugiesisch" lang="pt" hreflang="pt" data-title="Módulo:Arguments" data-language-autonym="Português" data-language-local-name="Portugiesisch" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikivoyage.org/wiki/Modul:Arguments" title="Modul:Arguments – Rumänisch" lang="ro" hreflang="ro" data-title="Modul:Arguments" data-language-autonym="Română" data-language-local-name="Rumänisch" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikivoyage.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments" title="Модуль:Arguments – Russisch" lang="ru" hreflang="ru" data-title="Модуль:Arguments" data-language-autonym="Русский" data-language-local-name="Russisch" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-shn mw-list-item"><a href="https://shn.wikivoyage.org/wiki/%E1%80%99%E1%80%B1%E1%82%83%E1%82%87%E1%81%B5%E1%80%BB%E1%80%B0%E1%80%B8:Arguments" title="မေႃႇၵျူး:Arguments – Schan" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:Arguments" data-language-autonym="ၽႃႇသႃႇတႆး " data-language-local-name="Schan" class="interlanguage-link-target"><span>ၽႃႇသႃႇတႆး </span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikivoyage.org/wiki/Modul:Arguments" title="Modul:Arguments – Schwedisch" lang="sv" hreflang="sv" data-title="Modul:Arguments" data-language-autonym="Svenska" data-language-local-name="Schwedisch" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikivoyage.org/wiki/Mod%C3%BCl:Ba%C4%9F%C4%B1ms%C4%B1z_de%C4%9Fi%C5%9Fkenler" title="Modül:Bağımsız değişkenler – Türkisch" lang="tr" hreflang="tr" data-title="Modül:Bağımsız değişkenler" data-language-autonym="Türkçe" data-language-local-name="Türkisch" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikivoyage.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments" title="Модуль:Arguments – Ukrainisch" lang="uk" hreflang="uk" data-title="Модуль:Arguments" data-language-autonym="Українська" data-language-local-name="Ukrainisch" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikivoyage.org/wiki/M%C3%B4_%C4%91un:Arguments" title="Mô đun:Arguments – Vietnamesisch" lang="vi" hreflang="vi" data-title="Mô đun:Arguments" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamesisch" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikivoyage.org/wiki/Module:Arguments" title="Module:Arguments – Chinesisch" lang="zh" hreflang="zh" data-title="Module:Arguments" data-language-autonym="中文" data-language-local-name="Chinesisch" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q15379728#sitelinks-wikivoyage" title="Links auf Artikel in anderen Sprachen bearbeiten" class="wbc-editpage">Links bearbeiten</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namensräume"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-module" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Modul:Arguments" title="Die Modulseite ansehen [c]" accesskey="c"><span>Modul</span></a></li><li id="ca-talk" class="new vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Modul_Diskussion:Arguments&action=edit&redlink=1" rel="discussion" class="new" title="Diskussion zum Seiteninhalt (Seite nicht vorhanden) [t]" accesskey="t"><span>Diskussion</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Sprachvariante ändern" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Ansichten"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Modul:Arguments"><span>Lesen</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Modul:Arguments&action=edit" title="Den Quelltext dieser Seite bearbeiten [e]" accesskey="e"><span>Quelltext bearbeiten</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Modul:Arguments&action=history" title="Frühere Versionen dieser Seite [h]" accesskey="h"><span>Versionsgeschichte</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Seitenwerkzeuge"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Werkzeuge" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Werkzeuge</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Werkzeuge</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">In die Seitenleiste verschieben</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">Verbergen</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Weitere Optionen" > <div class="vector-menu-heading"> Aktionen </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Modul:Arguments"><span>Lesen</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Modul:Arguments&action=edit" title="Den Quelltext dieser Seite bearbeiten [e]" accesskey="e"><span>Quelltext bearbeiten</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Modul:Arguments&action=history"><span>Versionsgeschichte</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Allgemein </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Spezial:Linkliste/Modul:Arguments" title="Liste aller Seiten, die hierher verlinken [j]" accesskey="j"><span>Links auf diese Seite</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Spezial:%C3%84nderungen_an_verlinkten_Seiten/Modul:Arguments" rel="nofollow" title="Letzte Änderungen an Seiten, die von hier verlinkt sind [k]" accesskey="k"><span>Änderungen an verlinkten Seiten</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=de" title="Dateien hochladen [u]" accesskey="u"><span>Datei hochladen</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Spezial:Spezialseiten" title="Liste aller Spezialseiten [q]" accesskey="q"><span>Spezialseiten</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Modul:Arguments&oldid=1010898" title="Dauerhafter Link zu dieser Seitenversion"><span>Permanenter Link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Modul:Arguments&action=info" title="Weitere Informationen über diese Seite"><span>Seiteninformationen</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Spezial:URL-K%C3%BCrzung&url=https%3A%2F%2Fde.wikivoyage.org%2Fwiki%2FModul%3AArguments"><span>Gekürzte URL abrufen</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Spezial:QrCode&url=https%3A%2F%2Fde.wikivoyage.org%2Fwiki%2FModul%3AArguments"><span>QR-Code runterladen</span></a></li> </ul> </div> </div> <div id="p-electronpdfservice-sidebar-portlet-heading" class="vector-menu mw-portlet mw-portlet-electronpdfservice-sidebar-portlet-heading" > <div class="vector-menu-heading"> Drucken/Exportieren </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="electron-print_pdf" class="mw-list-item"><a href="/w/index.php?title=Spezial:DownloadAsPdf&page=Modul%3AArguments&action=show-download-screen"><span>Als PDF herunterladen</span></a></li><li id="t-print" class="mw-list-item"><a href="javascript:print();" rel="alternate" title="Druckansicht dieser Seite [p]" accesskey="p"><span>Druckversion</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In anderen Projekten </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Module:Arguments" hreflang="en"><span>Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-foundation mw-list-item"><a href="https://foundation.wikimedia.org/wiki/Module:Arguments" hreflang="en"><span>Wikimedia Foundation</span></a></li><li class="wb-otherproject-link wb-otherproject-mediawiki mw-list-item"><a href="https://www.mediawiki.org/wiki/Module:Arguments" hreflang="en"><span>MediaWiki</span></a></li><li class="wb-otherproject-link wb-otherproject-meta mw-list-item"><a href="https://meta.wikimedia.org/wiki/Module:Arguments" hreflang="en"><span>Meta-Wiki</span></a></li><li class="wb-otherproject-link wb-otherproject-outreach mw-list-item"><a href="https://outreach.wikimedia.org/wiki/Module:Arguments" hreflang="en"><span>Wikimedia Outreach</span></a></li><li class="wb-otherproject-link wb-otherproject-sources mw-list-item"><a href="https://wikisource.org/wiki/Module:Arguments" hreflang="en"><span>Mehrsprachige Wikisource</span></a></li><li class="wb-otherproject-link wb-otherproject-species mw-list-item"><a href="https://species.wikimedia.org/wiki/Module:Arguments" hreflang="en"><span>Wikispecies</span></a></li><li class="wb-otherproject-link wb-otherproject-wikidata mw-list-item"><a href="https://www.wikidata.org/wiki/Module:Arguments" hreflang="en"><span>Wikidata</span></a></li><li class="wb-otherproject-link wb-otherproject-wikifunctions mw-list-item"><a href="https://www.wikifunctions.org/wiki/Module:Arguments" hreflang="en"><span>Wikifunctions</span></a></li><li class="wb-otherproject-link wb-otherproject-wikimania mw-list-item"><a href="https://wikimania.wikimedia.org/wiki/Module:Arguments" hreflang="en"><span>Wikimania</span></a></li><li class="wb-otherproject-link wb-otherproject-wikinews mw-list-item"><a href="https://de.wikinews.org/wiki/Modul:Arguments" hreflang="de"><span>Wikinews</span></a></li><li class="wb-otherproject-link wb-otherproject-wikipedia mw-list-item"><a href="https://de.wikipedia.org/wiki/Modul:Arguments" hreflang="de"><span>Wikipedia</span></a></li><li class="wb-otherproject-link wb-otherproject-wikisource mw-list-item"><a href="https://de.wikisource.org/wiki/Modul:Arguments" hreflang="de"><span>Wikisource</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q15379728" title="Link zum verbundenen Objekt im Datenrepositorium [g]" accesskey="g"><span>Wikidata-Datenobjekt</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Seitenwerkzeuge"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Erscheinungsbild"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Erscheinungsbild</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">In die Seitenleiste verschieben</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">Verbergen</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">Aus Wikivoyage</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"> <style data-mw-deduplicate="TemplateStyles:r1644638">.mw-parser-output .voy-box-wrapper{display:flow-root;box-sizing:border-box;border:1px solid #6cc8f3;border-radius:5px;position:relative;padding:0 0.5em 3px;margin:0.75em 0 0}.mw-parser-output .voy-box-first,.mw-parser-output .voy-tabsWrapper+style+.voy-box-wrapper,.mw-parser-output .voy-tabsWrapper+link+.voy-box-wrapper,.mw-parser-output .voy-tabsWrapper+.voy-box-wrapper{margin:0;clear:both}body.skin-minerva .mw-parser-output .voy-box-wrapper{width:auto!important}.mw-parser-output .qbDiv .voy-box-wrapper,.mw-parser-output .qbRightDiv .voy-box-wrapper{border:none;margin:0}body.skin-minerva .mw-parser-output .voy-box-wrapper+ul,body.skin-minerva .mw-parser-output .voy-box-wrapper+ol{margin-top:0.75em}.mw-parser-output .voy-box-wrapper .emph{font-size:110%;font-weight:bold}.mw-parser-output .voy-box-var-1{border-color:#6cc8f3}.mw-parser-output .voy-box-var-2{border-color:#80f000}.mw-parser-output .voy-box-var-3{border-color:#f3706c}.mw-parser-output .voy-box-centered{clear:both;float:none;margin:1em auto}.mw-parser-output .voy-box-left{clear:left;float:left;margin:0 1em 1em 0;background-color:#fff;color:inherit}.mw-parser-output .voy-box-right{clear:right;float:right;margin:0 0 1em 1em;background-color:#fff;color:inherit}@media(max-width:720px){.mw-parser-output .voy-box-left,.mw-parser-output .voy-box-right{clear:both;float:none;margin:0 0 1em;width:100%!important}}.mw-parser-output .voy-box-wrapper .voy-box-edit-link,.mw-parser-output .voy-box-wrapper>.mw-collapsible-toggle:first-child{display:block;float:right;font-size:90%;background:transparent;color:inherit;margin:0.5em 0 0.5em 0.5em;padding-top:0.4em}.mw-parser-output .voy-box-wrapper.mw-collapsed{padding-bottom:0}.mw-parser-output .voy-box-header{background-color:#f0f0f0;color:#004f80;margin:0 -0.4em 0.4em;padding:0.3em 0.4em;border-top-left-radius:5px;border-top-right-radius:5px;font-size:1.25em}.mw-parser-output .voy-box-wrapper .voy-text-center{text-align:center}body.skin-minerva .mw-parser-output .voy-box-header .lazy-image-placeholder{display:inline}.mw-parser-output .mw-collapsed .voy-box-header{border-radius:5px;margin-bottom:0}.mw-parser-output .voy-box-var-1>.voy-box-header,.mw-parser-output .voy-box-var-1>.voy-box-header a{color:#004f80}.mw-parser-output .voy-box-var-2>.voy-box-header,.mw-parser-output .voy-box-var-2>.voy-box-header a{color:#00804f}.mw-parser-output .voy-box-var-3>.voy-box-header,.mw-parser-output .voy-box-var-3>.voy-box-header a{color:#800200}@media print{.mw-parser-output .voy-box-wrapper{border:0.25mm solid #6cc8f3}.mw-parser-output .voy-box-header{font-size:1em;border-top:0.25mm solid #c0c0c0;border-bottom:0.25mm solid #c0c0c0}.mw-parser-output .voy-box-edit-link,.mw-parser-output .voy-box-wrapper .mw-collapsible-toggle{display:none}}.mw-parser-output .voy-box-image{position:relative;background-color:transparent;color:inherit;margin:0 0 0 -0.5em;padding:2px 2px 1px;float:left;border-top-left-radius:5px}@media screen{html.skin-theme-clientpref-night .mw-parser-output .voy-box-left,html.skin-theme-clientpref-night .mw-parser-output .voy-box-right{background-color:#000;color:inherit}html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-var-1,html.skin-theme-clientpref-night body.ns-100 .mw-parser-output .voy-box-var-1{border-color:#6cc8f3!important}html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-var-2,html.skin-theme-clientpref-night body.ns-100 .mw-parser-output .voy-box-var-{border-color:#80f000!important}html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-var-3,html.skin-theme-clientpref-night body.ns-100 .mw-parser-output .voy-box-var-3{border-color:#f3706c!important}html.skin-theme-clientpref-night .mw-parser-output .voy-box-header,html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-header,html.skin-theme-clientpref-night body.ns-100 .mw-parser-output .voy-box-header{background-color:#333!important}html.skin-theme-clientpref-night .mw-parser-output .voy-box-var-1 .voy-box-header,html.skin-theme-clientpref-night .mw-parser-output .voy-box-var-1 .voy-box-header a,html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-var-1 .voy-box-header,html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-var-1 .voy-box-header a{color:#6cc8f3!important}html.skin-theme-clientpref-night .mw-parser-output .voy-box-var-2 .voy-box-header,html.skin-theme-clientpref-night .mw-parser-output .voy-box-var-2 .voy-box-header a,html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-var-2 .voy-box-header,html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-var-2 .voy-box-header a{color:#80f000!important}html.skin-theme-clientpref-night .mw-parser-output .voy-box-var-3 .voy-box-header,html.skin-theme-clientpref-night .mw-parser-output .voy-box-var-3 .voy-box-header a,html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-var-3 .voy-box-header,html.skin-theme-clientpref-night body.page-Main_Page .mw-parser-output .voy-box-var-3 .voy-box-header a{color:#f3706c!important}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .voy-box-left,html.skin-theme-clientpref-os .mw-parser-output .voy-box-right{background-color:#000;color:inherit}html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-var-1,html.skin-theme-clientpref-os body.ns-100 .mw-parser-output .voy-box-var-1{border-color:#6cc8f3!important}html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-var-2,html.skin-theme-clientpref-os body.ns-100 .mw-parser-output .voy-box-var-2{border-color:#80f000!important}html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-var-3,html.skin-theme-clientpref-os body.ns-100 .mw-parser-output .voy-box-var-3{border-color:#f3706c!important}html.skin-theme-clientpref-os .mw-parser-output .voy-box-header,html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-header,html.skin-theme-clientpref-os body.ns-100 .mw-parser-output .voy-box-header{background-color:#333!important}html.skin-theme-clientpref-os .mw-parser-output .voy-box-var-1 .voy-box-header,html.skin-theme-clientpref-os .mw-parser-output .voy-box-var-1 .voy-box-header a,html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-var-1 .voy-box-header,html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-var-1 .voy-box-header a{color:#6cc8f3!important}html.skin-theme-clientpref-os .mw-parser-output .voy-box-var-2 .voy-box-header,html.skin-theme-clientpref-os .mw-parser-output .voy-box-var-2 .voy-box-header a,html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-var-2 .voy-box-header,html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-var-2 .voy-box-header a{color:#80f000!important}html.skin-theme-clientpref-os .mw-parser-output .voy-box-var-3 .voy-box-header,html.skin-theme-clientpref-os .mw-parser-output .voy-box-var-3 .voy-box-header a,html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-var-3 .voy-box-header,html.skin-theme-clientpref-os body.page-Main_Page .mw-parser-output .voy-box-var-3 .voy-box-header a{color:#f3706c!important}}.mw-parser-output .voy-box-wrapper>.voy-box-content:first-child{margin-top:0.3em}.mw-parser-output .voy-box-content>*:first-child{margin-top:0;padding-top:0}.mw-parser-output .voy-box-content>p:last-child,.mw-parser-output .voy-box-content>ul:last-child,.mw-parser-output .voy-box-content>ol:last-child,.mw-parser-output .voy-box-content>div:last-child{margin-bottom:0.3em}.mw-parser-output .voy-navigation-bar{text-align:center;padding-bottom:0}.mw-parser-output .voy-navigation-bar .voy-box-header{margin-bottom:0}.mw-parser-output .voy-navigation-bar .voy-box-content{margin-top:0.3em;padding:0 0 0.3em}.mw-parser-output .voy-navigation-bar .voy-box-image img{background:#fff!important}</style><div class="voy-box-wrapper voy-box-var-1"><div class="voy-box-header"><span typeof="mw:File"><span><img src="//upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Template-info.png/50px-Template-info.png" decoding="async" width="50" height="22" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Template-info.png/75px-Template-info.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Template-info.png/100px-Template-info.png 2x" data-file-width="706" data-file-height="316" /></span></span> Dokumentation für das Modul <em>Arguments</em><span class="plainlinks voy-doc-editlinks" style="font-size: small; padding-left: 1em;">[<a href="/wiki/Modul:Arguments/Doku" title="Modul:Arguments/Doku"><span title="Ansicht der Dokumentationsseite">Ansicht</span></a>] [<a class="external text" href="https://de.wikivoyage.org/w/index.php?title=Modul:Arguments/Doku&action=edit"><span title="Bearbeiten der Dokumentationsseite">Bearbeiten</span></a>] [<a class="external text" href="https://de.wikivoyage.org/w/index.php?title=Modul:Arguments/Doku&action=history"><span title="Frühere Versionen der Dokumentationsseite">Versionsgeschichte</span></a>] [<span class="noprint plainlinks purgelink"><a class="external text" href="https://de.wikivoyage.org/w/index.php?title=Modul:Arguments&action=purge"><span title="Server-Cache für diese Seite leeren.">Aktualisieren</span></a></span>]</span></div><div class="voy-box-content mw-collapsible-content"> <style data-mw-deduplicate="TemplateStyles:r1647858">.mw-parser-output .ombox{margin:4px 0;border-collapse:collapse;border:1px solid #a2a9b1;background-color:var(--background-color-neutral-subtle,#f8f9fa);box-sizing:border-box;color:var(--color-base,#202122)}.mw-parser-output .ombox.mbox-small{font-size:88%;line-height:1.25em}.mw-parser-output .ombox-speedy{border:2px solid #b32424;background-color:#fee7e6}.mw-parser-output .ombox-delete{border:2px solid #b32424}.mw-parser-output .ombox-content{border:1px solid #f28500}.mw-parser-output .ombox-style{border:1px solid #fc3}.mw-parser-output .ombox-move{border:1px solid #9932cc}.mw-parser-output .ombox-protection{border:2px solid #a2a9b1}.mw-parser-output .ombox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .ombox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .ombox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .ombox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ombox .mbox-invalid-type{text-align:center}@media(min-width:720px){.mw-parser-output .ombox{margin:4px 10%}.mw-parser-output .ombox.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;width:238px}}body.skin--responsive .mw-parser-output table.ombox img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .ombox-speedy{background-color:#310402}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .ombox-speedy{background-color:#310402}}</style><table class="plainlinks ombox ombox-move" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Merge-split-transwiki_default.svg/36px-Merge-split-transwiki_default.svg.png" decoding="async" width="36" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Merge-split-transwiki_default.svg/54px-Merge-split-transwiki_default.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Merge-split-transwiki_default.svg/72px-Merge-split-transwiki_default.svg.png 2x" data-file-width="36" data-file-height="40" /></span></span></td><td class="mbox-text">Dieses Modul wurde am 7. Mai 2019 von <a href="https://de.wikipedia.org/wiki/en:Module:Arguments" class="extiw" title="w:en:Module:Arguments">Module:Arguments</a> der englischen Wikipedia importiert. Statt Änderungen hier auf Wikivoyage vorzunehmen, sollte eine neuer Import vorgezogen werden, falls im originalen Wiki neue Funktionen hinzugekommen sind. Stimme dich dazu bitte mit der Community in der <a href="/wiki/Wikivoyage:VW" class="mw-redirect" title="Wikivoyage:VW">Vorlagenwerkstatt</a> ab.</td></tr></tbody></table> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1647858"><table class="plainlinks ombox ombox-notice" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img src="//upload.wikimedia.org/wikipedia/commons/thumb/0/03/Green_check.svg/40px-Green_check.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/03/Green_check.svg/60px-Green_check.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/03/Green_check.svg/80px-Green_check.svg.png 2x" data-file-width="600" data-file-height="600" /></span></span></td><td class="mbox-text">Dieses Modul ist getestet und für den <a href="/wiki/Kategorie:Verwendbare_Module" title="Kategorie:Verwendbare Module">projektweiten Gebrauch</a> geeignet. Es kann in Vorlagen benutzt und auf Hilfeseiten erläutert werden. Entwicklungen an dem Modul sollten auf <a href="/w/index.php?title=Modul:Arguments/Test&action=edit&redlink=1" class="new" title="Modul:Arguments/Test (Seite nicht vorhanden)">Arguments/Test</a> und die Anwendung auf der <a href="/wiki/Hilfe:Spielwiese" title="Hilfe:Spielwiese">Spielwiese</a> getestet werden, da wiederholte Trial-and-Error-Edits die Resourcen stark belasten können.</td></tr></tbody></table> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1647858"><table class="plainlinks ombox ombox-style" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><a href="/wiki/Datei:Emblem-important-yellow.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/9/97/Emblem-important-yellow.svg/40px-Emblem-important-yellow.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/9/97/Emblem-important-yellow.svg/60px-Emblem-important-yellow.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/97/Emblem-important-yellow.svg/80px-Emblem-important-yellow.svg.png 2x" data-file-width="48" data-file-height="48" /></a></span></td><td class="mbox-text"><b>Dieses Modul wird auf vielen Seiten benutzt</b>, und Änderungen werden projektweit sofort wahrgenommen. Bitte teste Änderungen vorher im <a href="/w/index.php?title=Modul:Arguments/Sandkasten&action=edit&redlink=1" class="new" title="Modul:Arguments/Sandkasten (Seite nicht vorhanden)">/Sandkasten</a> oder in deinem <a href="/wiki/Wikivoyage:Unterseiten#Benutzer" title="Wikivoyage:Unterseiten">Benutzernamensraum</a>. Die getestete Änderung sollte dann in einem einzigen Edit auf dieser Seite eingefügt werden. Bitte diskutiere Änderungen zuerst auf der <a href="/w/index.php?title=Modul_Diskussion:Arguments&action=edit&redlink=1" class="new" title="Modul Diskussion:Arguments (Seite nicht vorhanden)">Diskussionsseite</a> bevor du sie implementierst.</td></tr></tbody></table> <p>This module provides easy processing of arguments passed from #invoke. It is a meta-module, meant for use by other modules, and should not be called from #invoke directly. Its features include: </p> <ul><li>Easy trimming of arguments and removal of blank arguments.</li> <li>Arguments can be passed by both the current frame and by the parent frame at the same time. (More details below.)</li> <li>Arguments can be passed in directly from another Lua module or from the debug console.</li> <li>Arguments are fetched as needed, which can help avoid (some) problems with <code style="white-space:nowrap;"><ref>...</ref></code> tags.</li> <li>Most features can be customized.</li></ul> <div class="mw-heading mw-heading2"><h2 id="Basic_use">Basic use</h2></div> <p>First, you need to load the module. It contains one function, named <code>getArgs</code>. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">getArgs</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Module:Arguments'</span><span class="p">).</span><span class="n">getArgs</span> </pre></div> <p>In the most basic scenario, you can use getArgs inside your main function. The variable <code>args</code> is a table containing the arguments from #invoke. (See below for details.) </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">getArgs</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Module:Arguments'</span><span class="p">).</span><span class="n">getArgs</span> <span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{}</span> <span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">main</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="c1">-- Main module code goes here.</span> <span class="kr">end</span> <span class="kr">return</span> <span class="n">p</span> </pre></div> <p>However, the recommended practice is to use a function just for processing arguments from #invoke. This means that if someone calls your module from another Lua module you don't have to have a frame object available, which improves performance. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">getArgs</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Module:Arguments'</span><span class="p">).</span><span class="n">getArgs</span> <span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{}</span> <span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">main</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="kr">return</span> <span class="n">p</span><span class="p">.</span><span class="n">_main</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="kr">end</span> <span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">_main</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="c1">-- Main module code goes here.</span> <span class="kr">end</span> <span class="kr">return</span> <span class="n">p</span> </pre></div> <p>If you want multiple functions to use the arguments, and you also want them to be accessible from #invoke, you can use a wrapper function. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">getArgs</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Module:Arguments'</span><span class="p">).</span><span class="n">getArgs</span> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">makeInvokeFunc</span><span class="p">(</span><span class="n">funcName</span><span class="p">)</span> <span class="kr">return</span> <span class="kr">function</span> <span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="kr">return</span> <span class="n">p</span><span class="p">[</span><span class="n">funcName</span><span class="p">](</span><span class="n">args</span><span class="p">)</span> <span class="kr">end</span> <span class="kr">end</span> <span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{}</span> <span class="n">p</span><span class="p">.</span><span class="n">func1</span> <span class="o">=</span> <span class="n">makeInvokeFunc</span><span class="p">(</span><span class="s1">'_func1'</span><span class="p">)</span> <span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">_func1</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="c1">-- Code for the first function goes here.</span> <span class="kr">end</span> <span class="n">p</span><span class="p">.</span><span class="n">func2</span> <span class="o">=</span> <span class="n">makeInvokeFunc</span><span class="p">(</span><span class="s1">'_func2'</span><span class="p">)</span> <span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">_func2</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="c1">-- Code for the second function goes here.</span> <span class="kr">end</span> <span class="kr">return</span> <span class="n">p</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Options">Options</h3></div> <p>The following options are available. They are explained in the sections below. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="p">{</span> <span class="n">trim</span> <span class="o">=</span> <span class="kc">false</span><span class="p">,</span> <span class="n">removeBlanks</span> <span class="o">=</span> <span class="kc">false</span><span class="p">,</span> <span class="n">valueFunc</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="c1">-- Code for processing one argument</span> <span class="kr">end</span><span class="p">,</span> <span class="n">frameOnly</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="n">parentOnly</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="n">parentFirst</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="n">wrappers</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'Template:A wrapper template'</span><span class="p">,</span> <span class="s1">'Template:Another wrapper template'</span> <span class="p">},</span> <span class="n">readOnly</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="n">noOverwrite</span> <span class="o">=</span> <span class="kc">true</span> <span class="p">})</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Trimming_and_removing_blanks">Trimming and removing blanks</h3></div> <p>Blank arguments often trip up coders new to converting MediaWiki templates to Lua. In template syntax, blank strings and strings consisting only of whitespace are considered false. However, in Lua, blank strings and strings consisting of whitespace are considered true. This means that if you don't pay attention to such arguments when you write your Lua modules, you might treat something as true that should actually be treated as false. To avoid this, by default this module removes all blank arguments. </p><p>Similarly, whitespace can cause problems when dealing with positional arguments. Although whitespace is trimmed for named arguments coming from #invoke, it is preserved for positional arguments. Most of the time this additional whitespace is not desired, so this module trims it off by default. </p><p>However, sometimes you want to use blank arguments as input, and sometimes you want to keep additional whitespace. This can be necessary to convert some templates exactly as they were written. If you want to do this, you can set the <code>trim</code> and <code>removeBlanks</code> arguments to <code>false</code>. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="p">{</span> <span class="n">trim</span> <span class="o">=</span> <span class="kc">false</span><span class="p">,</span> <span class="n">removeBlanks</span> <span class="o">=</span> <span class="kc">false</span> <span class="p">})</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Custom_formatting_of_arguments">Custom formatting of arguments</h3></div> <p>Sometimes you want to remove some blank arguments but not others, or perhaps you might want to put all of the positional arguments in lower case. To do things like this you can use the <code>valueFunc</code> option. The input to this option must be a function that takes two parameters, <code>key</code> and <code>value</code>, and returns a single value. This value is what you will get when you access the field <code>key</code> in the <code>args</code> table. </p><p>Example 1: this function preserves whitespace for the first positional argument, but trims all other arguments and removes all other blank arguments. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="p">{</span> <span class="n">valueFunc</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="kr">if</span> <span class="n">key</span> <span class="o">==</span> <span class="mi">1</span> <span class="kr">then</span> <span class="kr">return</span> <span class="n">value</span> <span class="kr">elseif</span> <span class="n">value</span> <span class="kr">then</span> <span class="n">value</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="kr">if</span> <span class="n">value</span> <span class="o">~=</span> <span class="s1">''</span> <span class="kr">then</span> <span class="kr">return</span> <span class="n">value</span> <span class="kr">end</span> <span class="kr">end</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> <span class="p">})</span> </pre></div> <p>Example 2: this function removes blank arguments and converts all arguments to lower case, but doesn't trim whitespace from positional parameters. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="p">{</span> <span class="n">valueFunc</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="kr">if</span> <span class="ow">not</span> <span class="n">value</span> <span class="kr">then</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> <span class="n">value</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">lower</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="kr">if</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s1">'%S'</span><span class="p">)</span> <span class="kr">then</span> <span class="kr">return</span> <span class="n">value</span> <span class="kr">end</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> <span class="p">})</span> </pre></div> <p>Note: the above functions will fail if passed input that is not of type <code>string</code> or <code>nil</code>. This might be the case if you use the <code>getArgs</code> function in the main function of your module, and that function is called by another Lua module. In this case, you will need to check the type of your input. This is not a problem if you are using a function specially for arguments from #invoke (i.e. you have <code>p.main</code> and <code>p._main</code> functions, or something similar). </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1644638"><div class="voy-box-wrapper voy-box-var-1 mw-collapsible mw-collapsed"><div class="voy-box-header">Examples 1 and 2 with type checking</div><div class="voy-box-content mw-collapsible-content"> <p>Example 1: </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="p">{</span> <span class="n">valueFunc</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="kr">if</span> <span class="n">key</span> <span class="o">==</span> <span class="mi">1</span> <span class="kr">then</span> <span class="kr">return</span> <span class="n">value</span> <span class="kr">elseif</span> <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> <span class="kr">then</span> <span class="n">value</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="kr">if</span> <span class="n">value</span> <span class="o">~=</span> <span class="s1">''</span> <span class="kr">then</span> <span class="kr">return</span> <span class="n">value</span> <span class="kr">else</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> <span class="kr">else</span> <span class="kr">return</span> <span class="n">value</span> <span class="kr">end</span> <span class="kr">end</span> <span class="p">})</span> </pre></div> <p>Example 2: </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="p">{</span> <span class="n">valueFunc</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> <span class="kr">then</span> <span class="n">value</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">lower</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="kr">if</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s1">'%S'</span><span class="p">)</span> <span class="kr">then</span> <span class="kr">return</span> <span class="n">value</span> <span class="kr">else</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> <span class="kr">else</span> <span class="kr">return</span> <span class="n">value</span> <span class="kr">end</span> <span class="kr">end</span> <span class="p">})</span> </pre></div></div> </div> <p>Also, please note that the <code>valueFunc</code> function is called more or less every time an argument is requested from the <code>args</code> table, so if you care about performance you should make sure you aren't doing anything inefficient with your code. </p> <div class="mw-heading mw-heading3"><h3 id="Frames_and_parent_frames">Frames and parent frames</h3></div> <p>Arguments in the <code>args</code> table can be passed from the current frame or from its parent frame at the same time. To understand what this means, it is easiest to give an example. Let's say that we have a module called <code>Module:ExampleArgs</code>. This module prints the first two positional arguments that it is passed. </p> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1644638"><div class="voy-box-wrapper voy-box-var-1 mw-collapsible mw-collapsed"><div class="voy-box-header">Module:ExampleArgs code</div><div class="voy-box-content mw-collapsible-content"> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">getArgs</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Module:Arguments'</span><span class="p">).</span><span class="n">getArgs</span> <span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{}</span> <span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">main</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="kr">return</span> <span class="n">p</span><span class="p">.</span><span class="n">_main</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="kr">end</span> <span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">_main</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="kd">local</span> <span class="n">first</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">''</span> <span class="kd">local</span> <span class="n">second</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">''</span> <span class="kr">return</span> <span class="n">first</span> <span class="o">..</span> <span class="s1">' '</span> <span class="o">..</span> <span class="n">second</span> <span class="kr">end</span> <span class="kr">return</span> <span class="n">p</span> </pre></div></div> </div> <p><code>Module:ExampleArgs</code> is then called by <code>Template:ExampleArgs</code>, which contains the code <code>{{#invoke:ExampleArgs|main|firstInvokeArg}}</code>. This produces the result "firstInvokeArg". </p><p>Now if we were to call <code>Template:ExampleArgs</code>, the following would happen: </p> <table class="wikitable" style="width: 50em; max-width: 100%;"> <tbody><tr> <th style="width: 60%;">Code </th> <th style="width: 40%;">Result </th></tr> <tr> <td><code>{{ExampleArgs}}</code> </td> <td>firstInvokeArg </td></tr> <tr> <td><code>{{ExampleArgs|firstTemplateArg}}</code> </td> <td>firstInvokeArg </td></tr> <tr> <td><code>{{ExampleArgs|firstTemplateArg|secondTemplateArg}}</code> </td> <td>firstInvokeArg secondTemplateArg </td></tr></tbody></table> <p>There are three options you can set to change this behaviour: <code>frameOnly</code>, <code>parentOnly</code> and <code>parentFirst</code>. If you set <code>frameOnly</code> then only arguments passed from the current frame will be accepted; if you set <code>parentOnly</code> then only arguments passed from the parent frame will be accepted; and if you set <code>parentFirst</code> then arguments will be passed from both the current and parent frames, but the parent frame will have priority over the current frame. Here are the results in terms of <code>Template:ExampleArgs</code>: </p> <dl><dt>frameOnly</dt></dl> <table class="wikitable" style="width: 50em; max-width: 100%;"> <tbody><tr> <th style="width: 60%;">Code </th> <th style="width: 40%;">Result </th></tr> <tr> <td><code>{{ExampleArgs}}</code> </td> <td>firstInvokeArg </td></tr> <tr> <td><code>{{ExampleArgs|firstTemplateArg}}</code> </td> <td>firstInvokeArg </td></tr> <tr> <td><code>{{ExampleArgs|firstTemplateArg|secondTemplateArg}}</code> </td> <td>firstInvokeArg </td></tr></tbody></table> <dl><dt>parentOnly</dt></dl> <table class="wikitable" style="width: 50em; max-width: 100%;"> <tbody><tr> <th style="width: 60%;">Code </th> <th style="width: 40%;">Result </th></tr> <tr> <td><code>{{ExampleArgs}}</code> </td> <td> </td></tr> <tr> <td><code>{{ExampleArgs|firstTemplateArg}}</code> </td> <td>firstTemplateArg </td></tr> <tr> <td><code>{{ExampleArgs|firstTemplateArg|secondTemplateArg}}</code> </td> <td>firstTemplateArg secondTemplateArg </td></tr></tbody></table> <dl><dt>parentFirst</dt></dl> <table class="wikitable" style="width: 50em; max-width: 100%;"> <tbody><tr> <th style="width: 60%;">Code </th> <th style="width: 40%;">Result </th></tr> <tr> <td><code>{{ExampleArgs}}</code> </td> <td>firstInvokeArg </td></tr> <tr> <td><code>{{ExampleArgs|firstTemplateArg}}</code> </td> <td>firstTemplateArg </td></tr> <tr> <td><code>{{ExampleArgs|firstTemplateArg|secondTemplateArg}}</code> </td> <td>firstTemplateArg secondTemplateArg </td></tr></tbody></table> <p>Notes: </p> <ol><li>If you set both the <code>frameOnly</code> and <code>parentOnly</code> options, the module won't fetch any arguments at all from #invoke. This is probably not what you want.</li> <li>In some situations a parent frame may not be available, e.g. if getArgs is passed the parent frame rather than the current frame. In this case, only the frame arguments will be used (unless parentOnly is set, in which case no arguments will be used) and the <code>parentFirst</code> and <code>frameOnly</code> options will have no effect.</li></ol> <div class="mw-heading mw-heading3"><h3 id="Wrappers">Wrappers</h3></div> <p>The <i>wrappers</i> option is used to specify a limited number of templates as <i>wrapper templates</i>, that is, templates whose only purpose is to call a module. If the module detects that it is being called from a wrapper template, it will only check for arguments in the parent frame; otherwise it will only check for arguments in the frame passed to getArgs. This allows modules to be called by either #invoke or through a wrapper template without the loss of performance associated with having to check both the frame and the parent frame for each argument lookup. </p><p>For example, the only content of <a href="/wiki/Vorlage:Side_box" title="Vorlage:Side box">Template:Side box</a> (excluding content in <code style="white-space:nowrap;"><noinclude>...</noinclude></code> tags) is <code>{{#invoke:Side box|main}}</code>. There is no point in checking the arguments passed directly to the #invoke statement for this template, as no arguments will ever be specified there. We can avoid checking arguments passed to #invoke by using the <i>parentOnly</i> option, but if we do this then #invoke will not work from other pages either. If this were the case, the <code class="templatelink" style="white-space:nowrap;">|text=Some text</code> in the code <code>{{#invoke:Side box|main|text=Some text}}</code> would be ignored completely, no matter what page it was used from. By using the <code>wrappers</code> option to specify 'Template:Side box' as a wrapper, we can make <code>{{#invoke:Side box|main|text=Some text}}</code> work from most pages, while still not requiring that the module check for arguments on the <a href="/wiki/Vorlage:Side_box" title="Vorlage:Side box">Template:Side box</a> page itself. </p><p>Wrappers can be specified either as a string, or as an array of strings. </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="p">{</span> <span class="n">wrappers</span> <span class="o">=</span> <span class="s1">'Template:Wrapper template'</span> <span class="p">})</span> </pre></div> <p><br /> </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="p">{</span> <span class="n">wrappers</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'Template:Wrapper 1'</span><span class="p">,</span> <span class="s1">'Template:Wrapper 2'</span><span class="p">,</span> <span class="c1">-- Any number of wrapper templates can be added here.</span> <span class="p">}</span> <span class="p">})</span> </pre></div> <p>Notes: </p> <ol><li>The module will automatically detect if it is being called from a wrapper template's /sandbox subpage, so there is no need to specify sandbox pages explicitly.</li> <li>The <i>wrappers</i> option effectively changes the default of the <i>frameOnly</i> and <i>parentOnly</i> options. If, for example, <i>parentOnly</i> were explicitly set to false with <i>wrappers</i> set, calls via wrapper templates would result in both frame and parent arguments being loaded, though calls not via wrapper templates would result in only frame arguments being loaded.</li> <li>If the <i>wrappers</i> option is set and no parent frame is available, the module will always get the arguments from the frame passed to <code>getArgs</code>.</li></ol> <div class="mw-heading mw-heading3"><h3 id="Writing_to_the_args_table">Writing to the args table</h3></div> <p>Sometimes it can be useful to write new values to the args table. This is possible with the default settings of this module. (However, bear in mind that it is usually better coding style to create a new table with your new values and copy arguments from the args table as needed.) </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">args</span><span class="p">.</span><span class="n">foo</span> <span class="o">=</span> <span class="s1">'some value'</span> </pre></div> <p>It is possible to alter this behaviour with the <code>readOnly</code> and <code>noOverwrite</code> options. If <code>readOnly</code> is set then it is not possible to write any values to the args table at all. If <code>noOverwrite</code> is set, then it is possible to add new values to the table, but it is not possible to add a value if it would overwrite any arguments that are passed from #invoke. </p> <div class="mw-heading mw-heading3"><h3 id="Ref_tags">Ref tags</h3></div> <p>This module uses <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Metatables" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">metatables</a> to fetch arguments from #invoke. This allows access to both the frame arguments and the parent frame arguments without using the <code>pairs()</code> function. This can help if your module might be passed <code style="white-space:nowrap;"><ref>...</ref></code> tags as input. </p><p>As soon as <code style="white-space:nowrap;"><ref>...</ref></code> tags are accessed from Lua, they are processed by the MediaWiki software and the reference will appear in the reference list at the bottom of the article. If your module proceeds to omit the reference tag from the output, you will end up with a phantom reference - a reference that appears in the reference list, but no number that links to it. This has been a problem with modules that use <code>pairs()</code> to detect whether to use the arguments from the frame or the parent frame, as those modules automatically process every available argument. </p><p>This module solves this problem by allowing access to both frame and parent frame arguments, while still only fetching those arguments when it is necessary. The problem will still occur if you use <code>pairs(args)</code> elsewhere in your module, however. </p> <div class="mw-heading mw-heading3"><h3 id="Known_limitations">Known limitations</h3></div> <p>The use of metatables also has its downsides. Most of the normal Lua table tools won't work properly on the args table, including the <code>#</code> operator, the <code>next()</code> function, and the functions in the table library. If using these is important for your module, you should use your own argument processing function instead of this module. </p> <div class="mw-heading mw-heading2"><h2 id="Verwendung_in_anderen_Modulen">Verwendung in anderen Modulen</h2></div> <p>Dieses Modul ist notwendig für die Ausführung folgender Module. Bei Anpassungen sollte die Funktionstüchtigkeit der folgenden Module geprüft werden. Benutze dazu auch diese <a href="/wiki/Kategorie:Seiten_mit_Skriptfehlern" title="Kategorie:Seiten mit Skriptfehlern">Tracking-Kategorie</a> um Fehler zu finden, die sich dann auf Artikel auswirken: </p> <ul><li><span class="nowrap"><a href="/wiki/Modul:Pagelist" title="Modul:Pagelist">Pagelist</a> •</span> <span class="nowrap"><a href="/wiki/Modul:Routemap" title="Modul:Routemap">Routemap</a> •</span> <span class="nowrap"><a href="/wiki/Modul:TemplateData" title="Modul:TemplateData">TemplateData</a></span></li> <li><a href="/wiki/Kategorie:Modul_ben%C3%B6tigt_das_Modul_Arguments" title="Kategorie:Modul benötigt das Modul Arguments">Modul benötigt das Modul Arguments</a> – Wartungskategorie, in der nochmals alle Module gelistet sind, die von diesem Modul abhängig sind.</li></ul></div> </div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1644638"><div class="voy-box-wrapper voy-box-var-1"><div class="voy-box-header">Hinweise</div><div class="voy-box-content mw-collapsible-content"> <ul> <li>Die obige Dokumentation wurde aus der Seite <a href="/wiki/Modul:Arguments/Doku" title="Modul:Arguments/Doku">Modul:Arguments/Doku</a> eingefügt. <small>(<span class="plainlinks"><a class="external text" href="https://de.wikivoyage.org/w/index.php?title=Modul:Arguments/Doku&action=edit">bearbeiten</a></span> | <span class="plainlinks"><a class="external text" href="https://de.wikivoyage.org/w/index.php?title=Modul:Arguments/Doku&action=history">Versionsgeschichte</a></span>)</small> Die Kategorien für dieses Modul sollten in der Dokumentation eingetragen werden. Die Interwiki-Links sollten auf Wikidata eingepflegt werden.</li><li><a href="/wiki/Spezial:Pr%C3%A4fixindex/Modul:Arguments" title="Spezial:Präfixindex/Modul:Arguments">Liste der Unterseiten</a></li> </ul></div> </div><div class="mw-highlight mw-highlight-lang-lua mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos" data-line="1"></span></a><span class="c1">-- This module provides easy processing of arguments passed to Scribunto from</span> </span><span id="L-2"><a href="#L-2"><span class="linenos" data-line="2"></span></a><span class="c1">-- #invoke. It is intended for use by other Lua modules, and should not be</span> </span><span id="L-3"><a href="#L-3"><span class="linenos" data-line="3"></span></a><span class="c1">-- called from #invoke directly.</span> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a><span class="kd">local</span> <span class="n">libraryUtil</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'libraryUtil'</span><span class="p">)</span> </span><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a><span class="kd">local</span> <span class="n">checkType</span> <span class="o">=</span> <span class="n">libraryUtil</span><span class="p">.</span><span class="n">checkType</span> </span><span id="L-7"><a href="#L-7"><span class="linenos" data-line="7"></span></a> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a><span class="kd">local</span> <span class="n">arguments</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a><span class="c1">-- Generate four different tidyVal functions, so that we don't have to check the</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a><span class="c1">-- options every time we call it.</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">tidyValDefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-15"><a href="#L-15"><span class="linenos" data-line="15"></span></a> <span class="n">val</span> <span class="o">=</span> <span class="n">val</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s1">'^%s*(.-)%s*$'</span><span class="p">)</span> </span><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a> <span class="kr">if</span> <span class="n">val</span> <span class="o">==</span> <span class="s1">''</span> <span class="kr">then</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a> <span class="kr">else</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a> <span class="kr">return</span> <span class="n">val</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a> <span class="kr">end</span> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a> <span class="kr">else</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a> <span class="kr">return</span> <span class="n">val</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a> <span class="kr">end</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a><span class="kr">end</span> </span><span id="L-25"><a href="#L-25"><span class="linenos" data-line="25"></span></a> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">tidyValTrimOnly</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a> <span class="kr">return</span> <span class="n">val</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s1">'^%s*(.-)%s*$'</span><span class="p">)</span> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a> <span class="kr">else</span> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a> <span class="kr">return</span> <span class="n">val</span> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a> <span class="kr">end</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a><span class="kr">end</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">tidyValRemoveBlanksOnly</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a> <span class="kr">if</span> <span class="n">val</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s1">'%S'</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a> <span class="kr">return</span> <span class="n">val</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> <span class="kr">else</span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a> <span class="kr">end</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a> <span class="kr">else</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> <span class="kr">return</span> <span class="n">val</span> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a> <span class="kr">end</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a><span class="kr">end</span> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">tidyValNoChange</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> <span class="kr">return</span> <span class="n">val</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a><span class="kr">end</span> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">matchesTitle</span><span class="p">(</span><span class="n">given</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a> <span class="kd">local</span> <span class="n">tp</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span> <span class="n">given</span> <span class="p">)</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">tp</span> <span class="o">==</span> <span class="s1">'string'</span> <span class="ow">or</span> <span class="n">tp</span> <span class="o">==</span> <span class="s1">'number'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">new</span><span class="p">(</span> <span class="n">given</span> <span class="p">).</span><span class="n">prefixedText</span> <span class="o">==</span> <span class="n">title</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a><span class="kr">end</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a><span class="kd">local</span> <span class="n">translate_mt</span> <span class="o">=</span> <span class="p">{</span> <span class="n">__index</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span> <span class="kr">return</span> <span class="n">k</span> <span class="kr">end</span> <span class="p">}</span> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a><span class="kr">function</span> <span class="nc">arguments</span><span class="p">.</span><span class="nf">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a> <span class="n">checkType</span><span class="p">(</span><span class="s1">'getArgs'</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">frame</span><span class="p">,</span> <span class="s1">'table'</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a> <span class="n">checkType</span><span class="p">(</span><span class="s1">'getArgs'</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="s1">'table'</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a> <span class="n">frame</span> <span class="o">=</span> <span class="n">frame</span> <span class="ow">or</span> <span class="p">{}</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">options</span> <span class="ow">or</span> <span class="p">{}</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="cm">--[[</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a><span class="cm"> -- Set up argument translation.</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a><span class="cm"> --]]</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">translate</span> <span class="o">=</span> <span class="n">options</span><span class="p">.</span><span class="n">translate</span> <span class="ow">or</span> <span class="p">{}</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> <span class="kr">if</span> <span class="nb">getmetatable</span><span class="p">(</span><span class="n">options</span><span class="p">.</span><span class="n">translate</span><span class="p">)</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">options</span><span class="p">.</span><span class="n">translate</span><span class="p">,</span> <span class="n">translate_mt</span><span class="p">)</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a> <span class="kr">end</span> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">backtranslate</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">backtranslate</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">options</span><span class="p">.</span><span class="n">translate</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">backtranslate</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">k</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="kr">end</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> <span class="kr">end</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">backtranslate</span> <span class="ow">and</span> <span class="nb">getmetatable</span><span class="p">(</span><span class="n">options</span><span class="p">.</span><span class="n">backtranslate</span><span class="p">)</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">options</span><span class="p">.</span><span class="n">backtranslate</span><span class="p">,</span> <span class="p">{</span> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a> <span class="n">__index</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">translate</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">~=</span> <span class="n">k</span> <span class="kr">then</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a> <span class="kr">else</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a> <span class="kr">return</span> <span class="n">k</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a> <span class="kr">end</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a> <span class="kr">end</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a> <span class="p">})</span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a> <span class="kr">end</span> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a> <span class="cm">--[[</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a><span class="cm"> -- Get the argument tables. If we were passed a valid frame object, get the</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a><span class="cm"> -- frame arguments (fargs) and the parent frame arguments (pargs), depending</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a><span class="cm"> -- on the options set and on the parent frame's availability. If we weren't</span> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a><span class="cm"> -- passed a valid frame object, we are being called from another Lua module</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a><span class="cm"> -- or from the debug console, so assume that we were passed a table of args</span> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a><span class="cm"> -- directly, and assign it to a new variable (luaArgs).</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a><span class="cm"> --]]</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a> <span class="kd">local</span> <span class="n">fargs</span><span class="p">,</span> <span class="n">pargs</span><span class="p">,</span> <span class="n">luaArgs</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'table'</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">frame</span><span class="p">.</span><span class="n">getParent</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'function'</span> <span class="kr">then</span> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">wrappers</span> <span class="kr">then</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> <span class="cm">--[[</span> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a><span class="cm"> -- The wrappers option makes Module:Arguments look up arguments in</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a><span class="cm"> -- either the frame argument table or the parent argument table, but</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></span></a><span class="cm"> -- not both. This means that users can use either the #invoke syntax</span> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a><span class="cm"> -- or a wrapper template without the loss of performance associated</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a><span class="cm"> -- with looking arguments up in both the frame and the parent frame.</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a><span class="cm"> -- Module:Arguments will look up arguments in the parent frame</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a><span class="cm"> -- if it finds the parent frame's title in options.wrapper;</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a><span class="cm"> -- otherwise it will look up arguments in the frame object passed</span> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a><span class="cm"> -- to getArgs.</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a><span class="cm"> --]]</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> <span class="kd">local</span> <span class="n">parent</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">()</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">parent</span> <span class="kr">then</span> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> <span class="n">fargs</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a> <span class="kr">else</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> <span class="kd">local</span> <span class="n">title</span> <span class="o">=</span> <span class="n">parent</span><span class="p">:</span><span class="n">getTitle</span><span class="p">():</span><span class="n">gsub</span><span class="p">(</span><span class="s1">'/sandbox$'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a> <span class="kd">local</span> <span class="n">found</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> <span class="kr">if</span> <span class="n">matchesTitle</span><span class="p">(</span><span class="n">options</span><span class="p">.</span><span class="n">wrappers</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a> <span class="n">found</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a> <span class="kr">elseif</span> <span class="nb">type</span><span class="p">(</span><span class="n">options</span><span class="p">.</span><span class="n">wrappers</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'table'</span> <span class="kr">then</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span><span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">options</span><span class="p">.</span><span class="n">wrappers</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="kr">if</span> <span class="n">matchesTitle</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="n">found</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="kr">break</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a> <span class="kr">end</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> <span class="kr">end</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="kr">end</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a> <span class="c1">-- We test for false specifically here so that nil (the default) acts like true.</span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a> <span class="kr">if</span> <span class="n">found</span> <span class="ow">or</span> <span class="n">options</span><span class="p">.</span><span class="n">frameOnly</span> <span class="o">==</span> <span class="kc">false</span> <span class="kr">then</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a> <span class="n">pargs</span> <span class="o">=</span> <span class="n">parent</span><span class="p">.</span><span class="n">args</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a> <span class="kr">end</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">found</span> <span class="ow">or</span> <span class="n">options</span><span class="p">.</span><span class="n">parentOnly</span> <span class="o">==</span> <span class="kc">false</span> <span class="kr">then</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="n">fargs</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a> <span class="kr">end</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a> <span class="kr">end</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a> <span class="kr">else</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> <span class="c1">-- options.wrapper isn't set, so check the other options.</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">options</span><span class="p">.</span><span class="n">parentOnly</span> <span class="kr">then</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="n">fargs</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a> <span class="kr">end</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">options</span><span class="p">.</span><span class="n">frameOnly</span> <span class="kr">then</span> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="kd">local</span> <span class="n">parent</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">()</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="n">pargs</span> <span class="o">=</span> <span class="n">parent</span> <span class="ow">and</span> <span class="n">parent</span><span class="p">.</span><span class="n">args</span> <span class="ow">or</span> <span class="kc">nil</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="kr">end</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="kr">end</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">parentFirst</span> <span class="kr">then</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="n">fargs</span><span class="p">,</span> <span class="n">pargs</span> <span class="o">=</span> <span class="n">pargs</span><span class="p">,</span> <span class="n">fargs</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="kr">end</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="kr">else</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="n">luaArgs</span> <span class="o">=</span> <span class="n">frame</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="kr">end</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a> <span class="c1">-- Set the order of precedence of the argument tables. If the variables are</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a> <span class="c1">-- nil, nothing will be added to the table, which is how we avoid clashes</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="c1">-- between the frame/parent args and the Lua args.</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a> <span class="kd">local</span> <span class="n">argTables</span> <span class="o">=</span> <span class="p">{</span><span class="n">fargs</span><span class="p">}</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> <span class="n">argTables</span><span class="p">[</span><span class="o">#</span><span class="n">argTables</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">pargs</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> <span class="n">argTables</span><span class="p">[</span><span class="o">#</span><span class="n">argTables</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">luaArgs</span> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> <span class="cm">--[[</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a><span class="cm"> -- Generate the tidyVal function. If it has been specified by the user, we</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a><span class="cm"> -- use that; if not, we choose one of four functions depending on the</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a><span class="cm"> -- options chosen. This is so that we don't have to call the options table</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a><span class="cm"> -- every time the function is called.</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a><span class="cm"> --]]</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a> <span class="kd">local</span> <span class="n">tidyVal</span> <span class="o">=</span> <span class="n">options</span><span class="p">.</span><span class="n">valueFunc</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="kr">if</span> <span class="n">tidyVal</span> <span class="kr">then</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">tidyVal</span><span class="p">)</span> <span class="o">~=</span> <span class="s1">'function'</span> <span class="kr">then</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a> <span class="nb">error</span><span class="p">(</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> <span class="s2">"bad value assigned to option 'valueFunc'"</span> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="o">..</span> <span class="s1">'(function expected, got '</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> <span class="o">..</span> <span class="nb">type</span><span class="p">(</span><span class="n">tidyVal</span><span class="p">)</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> <span class="o">..</span> <span class="s1">')'</span><span class="p">,</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="mi">2</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="p">)</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a> <span class="kr">end</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> <span class="kr">elseif</span> <span class="n">options</span><span class="p">.</span><span class="n">trim</span> <span class="o">~=</span> <span class="kc">false</span> <span class="kr">then</span> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">removeBlanks</span> <span class="o">~=</span> <span class="kc">false</span> <span class="kr">then</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a> <span class="n">tidyVal</span> <span class="o">=</span> <span class="n">tidyValDefault</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a> <span class="kr">else</span> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a> <span class="n">tidyVal</span> <span class="o">=</span> <span class="n">tidyValTrimOnly</span> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a> <span class="kr">end</span> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a> <span class="kr">else</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">removeBlanks</span> <span class="o">~=</span> <span class="kc">false</span> <span class="kr">then</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></span></a> <span class="n">tidyVal</span> <span class="o">=</span> <span class="n">tidyValRemoveBlanksOnly</span> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a> <span class="kr">else</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a> <span class="n">tidyVal</span> <span class="o">=</span> <span class="n">tidyValNoChange</span> </span><span id="L-187"><a href="#L-187"><span class="linenos" data-line="187"></span></a> <span class="kr">end</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></span></a> <span class="kr">end</span> </span><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> <span class="cm">--[[</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a><span class="cm"> -- Set up the args, metaArgs and nilArgs tables. args will be the one</span> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a><span class="cm"> -- accessed from functions, and metaArgs will hold the actual arguments. Nil</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a><span class="cm"> -- arguments are memoized in nilArgs, and the metatable connects all of them</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a><span class="cm"> -- together.</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a><span class="cm"> --]]</span> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a> <span class="kd">local</span> <span class="n">args</span><span class="p">,</span> <span class="n">metaArgs</span><span class="p">,</span> <span class="n">nilArgs</span><span class="p">,</span> <span class="n">metatable</span> <span class="o">=</span> <span class="p">{},</span> <span class="p">{},</span> <span class="p">{},</span> <span class="p">{}</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">metatable</span><span class="p">)</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">mergeArgs</span><span class="p">(</span><span class="n">tables</span><span class="p">)</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="cm">--[[</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></span></a><span class="cm"> -- Accepts multiple tables as input and merges their keys and values</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a><span class="cm"> -- into one table. If a value is already present it is not overwritten;</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a><span class="cm"> -- tables listed earlier have precedence. We are also memoizing nil</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a><span class="cm"> -- values, which can be overwritten if they are 's' (soft).</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a><span class="cm"> --]]</span> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">t</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">tables</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="kr">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a> <span class="kr">if</span> <span class="n">metaArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">and</span> <span class="n">nilArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">~=</span> <span class="s1">'h'</span> <span class="kr">then</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a> <span class="kd">local</span> <span class="n">tidiedVal</span> <span class="o">=</span> <span class="n">tidyVal</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> <span class="kr">if</span> <span class="n">tidiedVal</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a> <span class="n">nilArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'s'</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="kr">else</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> <span class="n">metaArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">tidiedVal</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a> <span class="kr">end</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> <span class="kr">end</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a> <span class="kr">end</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a> <span class="kr">end</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a> <span class="kr">end</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> <span class="cm">--[[</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a><span class="cm"> -- Define metatable behaviour. Arguments are memoized in the metaArgs table,</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a><span class="cm"> -- and are only fetched from the argument tables once. Fetching arguments</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a><span class="cm"> -- from the argument tables is the most resource-intensive step in this</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a><span class="cm"> -- module, so we try and avoid it where possible. For this reason, nil</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a><span class="cm"> -- arguments are also memoized, in the nilArgs table. Also, we keep a record</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a><span class="cm"> -- in the metatable of when pairs and ipairs have been called, so we do not</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a><span class="cm"> -- run pairs and ipairs on the argument tables more than once. We also do</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a><span class="cm"> -- not run ipairs on fargs and pargs if pairs has already been run, as all</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a><span class="cm"> -- the arguments will already have been copied over.</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a><span class="cm"> --]]</span> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a> <span class="n">metatable</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a> <span class="cm">--[[</span> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a><span class="cm"> -- Fetches an argument when the args table is indexed. First we check</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a><span class="cm"> -- to see if the value is memoized, and if not we try and fetch it from</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a><span class="cm"> -- the argument tables. When we check memoization, we need to check</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a><span class="cm"> -- metaArgs before nilArgs, as both can be non-nil at the same time.</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a><span class="cm"> -- If the argument is not present in metaArgs, we also check whether</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a><span class="cm"> -- pairs has been run yet. If pairs has already been run, we return nil.</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a><span class="cm"> -- This is because all the arguments will have already been copied into</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a><span class="cm"> -- metaArgs by the mergeArgs function, meaning that any other arguments</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a><span class="cm"> -- must be nil.</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a><span class="cm"> --]]</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">options</span><span class="p">.</span><span class="n">translate</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a> <span class="kr">end</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a> <span class="kd">local</span> <span class="n">val</span> <span class="o">=</span> <span class="n">metaArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="kr">if</span> <span class="n">val</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> <span class="kr">return</span> <span class="n">val</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a> <span class="kr">elseif</span> <span class="n">metatable</span><span class="p">.</span><span class="n">donePairs</span> <span class="ow">or</span> <span class="n">nilArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> <span class="kr">end</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">argTable</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">argTables</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> <span class="kd">local</span> <span class="n">argTableVal</span> <span class="o">=</span> <span class="n">tidyVal</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">argTable</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> <span class="kr">if</span> <span class="n">argTableVal</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> <span class="n">metaArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">argTableVal</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> <span class="kr">return</span> <span class="n">argTableVal</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> <span class="kr">end</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> <span class="kr">end</span> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a> <span class="n">nilArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'h'</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> <span class="kr">end</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> <span class="n">metatable</span><span class="p">.</span><span class="n">__newindex</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a> <span class="c1">-- This function is called when a module tries to add a new value to the</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a> <span class="c1">-- args table, or tries to change an existing value.</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">options</span><span class="p">.</span><span class="n">translate</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a> <span class="kr">end</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">readOnly</span> <span class="kr">then</span> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a> <span class="nb">error</span><span class="p">(</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> <span class="s1">'could not write to argument table key "'</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> <span class="o">..</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a> <span class="o">..</span> <span class="s1">'"; the table is read-only'</span><span class="p">,</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a> <span class="mi">2</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="p">)</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a> <span class="kr">elseif</span> <span class="n">options</span><span class="p">.</span><span class="n">noOverwrite</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a> <span class="nb">error</span><span class="p">(</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a> <span class="s1">'could not write to argument table key "'</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a> <span class="o">..</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a> <span class="o">..</span> <span class="s1">'"; overwriting existing arguments is not permitted'</span><span class="p">,</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a> <span class="mi">2</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a> <span class="p">)</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="kr">elseif</span> <span class="n">val</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a> <span class="cm">--[[</span> </span><span id="L-286"><a href="#L-286"><span class="linenos" data-line="286"></span></a><span class="cm"> -- If the argument is to be overwritten with nil, we need to erase</span> </span><span id="L-287"><a href="#L-287"><span class="linenos" data-line="287"></span></a><span class="cm"> -- the value in metaArgs, so that __index, __pairs and __ipairs do</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a><span class="cm"> -- not use a previous existing value, if present; and we also need</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a><span class="cm"> -- to memoize the nil in nilArgs, so that the value isn't looked</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a><span class="cm"> -- up in the argument tables if it is accessed again.</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a><span class="cm"> --]]</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="n">metaArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="n">nilArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'h'</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="kr">else</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a> <span class="n">metaArgs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="kr">end</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="kr">end</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">translatenext</span><span class="p">(</span><span class="n">invariant</span><span class="p">)</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="kd">local</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">invariant</span><span class="p">.</span><span class="n">t</span><span class="p">,</span> <span class="n">invariant</span><span class="p">.</span><span class="n">k</span><span class="p">)</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="n">invariant</span><span class="p">.</span><span class="n">k</span> <span class="o">=</span> <span class="n">k</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> <span class="kr">elseif</span> <span class="nb">type</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="o">~=</span> <span class="s1">'string'</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">options</span><span class="p">.</span><span class="n">backtranslate</span> <span class="kr">then</span> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a> <span class="kr">return</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a> <span class="kr">else</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> <span class="kd">local</span> <span class="n">backtranslate</span> <span class="o">=</span> <span class="n">options</span><span class="p">.</span><span class="n">backtranslate</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> <span class="kr">if</span> <span class="n">backtranslate</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a> <span class="c1">-- Skip this one. This is a tail call, so this won't cause stack overflow</span> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a> <span class="kr">return</span> <span class="n">translatenext</span><span class="p">(</span><span class="n">invariant</span><span class="p">)</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="kr">else</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> <span class="kr">return</span> <span class="n">backtranslate</span><span class="p">,</span> <span class="n">v</span> </span><span id="L-313"><a href="#L-313"><span class="linenos" data-line="313"></span></a> <span class="kr">end</span> </span><span id="L-314"><a href="#L-314"><span class="linenos" data-line="314"></span></a> <span class="kr">end</span> </span><span id="L-315"><a href="#L-315"><span class="linenos" data-line="315"></span></a> <span class="kr">end</span> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a> <span class="n">metatable</span><span class="p">.</span><span class="n">__pairs</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">()</span> </span><span id="L-318"><a href="#L-318"><span class="linenos" data-line="318"></span></a> <span class="c1">-- Called when pairs is run on the args table.</span> </span><span id="L-319"><a href="#L-319"><span class="linenos" data-line="319"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">metatable</span><span class="p">.</span><span class="n">donePairs</span> <span class="kr">then</span> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a> <span class="n">mergeArgs</span><span class="p">(</span><span class="n">argTables</span><span class="p">)</span> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> <span class="n">metatable</span><span class="p">.</span><span class="n">donePairs</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a> <span class="kr">end</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a> <span class="kr">return</span> <span class="n">translatenext</span><span class="p">,</span> <span class="p">{</span> <span class="n">t</span> <span class="o">=</span> <span class="n">metaArgs</span> <span class="p">}</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a> <span class="kr">end</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">inext</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a> <span class="c1">-- This uses our __index metamethod</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> <span class="kd">local</span> <span class="n">v</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a> <span class="kr">if</span> <span class="n">v</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> <span class="kr">return</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">v</span> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a> <span class="kr">end</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> <span class="kr">end</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> <span class="n">metatable</span><span class="p">.</span><span class="n">__ipairs</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">t</span><span class="p">)</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> <span class="c1">-- Called when ipairs is run on the args table.</span> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="kr">return</span> <span class="n">inext</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="mi">0</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="kr">end</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="kr">return</span> <span class="n">args</span> </span><span id="L-340"><a href="#L-340"><span class="linenos" data-line="340"></span></a><span class="kr">end</span> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a><span class="kr">return</span> <span class="n">arguments</span> </span></pre></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐ng8f6 Cached time: 20241125072751 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, no‐toc] CPU time usage: 0.227 seconds Real time usage: 0.277 seconds Preprocessor visited node count: 1013/1000000 Post‐expand include size: 119529/2097152 bytes Template argument size: 20496/2097152 bytes Highest expansion depth: 19/100 Expensive parser function count: 18/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 55789/5000000 bytes Lua time usage: 0.029/10.000 seconds Lua memory usage: 1095588/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 232.915 1 -total 100.00% 232.915 1 Vorlage:Dokumentation 99.77% 232.372 4 Vorlage:Box 53.34% 124.236 1 Modul:Arguments/Doku 21.11% 49.158 1 Vorlage:Modulimport 19.99% 46.569 2 Vorlage:Namespace_detect 13.91% 32.390 3 Vorlage:Ombox 13.09% 30.490 2 Vorlage:Module_other 12.48% 29.063 1 Vorlage:Modul_wird_benötigt_von 5.76% 13.417 1 Vorlage:Module_rating --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Abgerufen von „<a dir="ltr" href="https://de.wikivoyage.org/w/index.php?title=Modul:Arguments&oldid=1010898">https://de.wikivoyage.org/w/index.php?title=Modul:Arguments&oldid=1010898</a>“</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Spezial:Kategorien" title="Spezial:Kategorien">Kategorien</a>: <ul><li><a href="/wiki/Kategorie:Module:Importierte_Module" title="Kategorie:Module:Importierte Module">Module:Importierte Module</a></li><li><a href="/wiki/Kategorie:Module:Vielfach_benutzte_Module" title="Kategorie:Module:Vielfach benutzte Module">Module:Vielfach benutzte Module</a></li><li><a href="/wiki/Kategorie:Module,_die_in_anderen_Modulen_verwendet_werden" title="Kategorie:Module, die in anderen Modulen verwendet werden">Module, die in anderen Modulen verwendet werden</a></li><li><a href="/wiki/Kategorie:Module" title="Kategorie:Module">Module</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Versteckte Kategorie: <ul><li><a href="/wiki/Kategorie:Verwendbare_Module" title="Kategorie:Verwendbare Module">Verwendbare Module</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-copyright"><div id="footer-info-copyright-stats" class="noprint"><a class="external text" href="//pageviews.toolforge.org/?pages=Modul:Arguments&project=de.wikivoyage.org">Abrufstatistik</a><br /> </div> <div id="footer-info-copyright-info">Der Text ist unter der Lizenz <a rel="nofollow" class="external text" href="//creativecommons.org/licenses/by-sa/4.0/deed.de">„Creative Commons Attribution/Share Alike“</a> verfügbar. Informationen zu den Urhebern und zum Lizenzstatus eingebundener Mediendateien (etwa Bilder oder Videos) können im Regelfall durch Anklicken dieser abgerufen werden. Möglicherweise unterliegen die Inhalte jeweils zusätzlichen Bedingungen. Durch die Nutzung dieser Website erklären Sie sich mit den <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use/de">Nutzungsbedingungen</a> und der <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/de">Datenschutzrichtlinie</a> einverstanden.<br /> Wikivoyage® ist eine eingetragene Marke der Wikimedia Foundation Inc.</div></li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/de">Datenschutz</a></li> <li id="footer-places-about"><a href="/wiki/Wikivoyage:%C3%9Cber_uns">Über Wikivoyage</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikivoyage:Impressum">Kontakt und Impressum</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Verhaltenskodex</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Entwickler</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/de.wikivoyage.org">Statistiken</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Stellungnahme zu Cookies</a></li> <li id="footer-places-mobileview"><a href="//de.m.wikivoyage.org/w/index.php?title=Modul:Arguments&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile Ansicht</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-ng8f6","wgBackendResponseTime":434,"wgPageParseReport":{"limitreport":{"cputime":"0.227","walltime":"0.277","ppvisitednodes":{"value":1013,"limit":1000000},"postexpandincludesize":{"value":119529,"limit":2097152},"templateargumentsize":{"value":20496,"limit":2097152},"expansiondepth":{"value":19,"limit":100},"expensivefunctioncount":{"value":18,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":55789,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 232.915 1 -total","100.00% 232.915 1 Vorlage:Dokumentation"," 99.77% 232.372 4 Vorlage:Box"," 53.34% 124.236 1 Modul:Arguments/Doku"," 21.11% 49.158 1 Vorlage:Modulimport"," 19.99% 46.569 2 Vorlage:Namespace_detect"," 13.91% 32.390 3 Vorlage:Ombox"," 13.09% 30.490 2 Vorlage:Module_other"," 12.48% 29.063 1 Vorlage:Modul_wird_benötigt_von"," 5.76% 13.417 1 Vorlage:Module_rating"]},"scribunto":{"limitreport-timeusage":{"value":"0.029","limit":"10.000"},"limitreport-memusage":{"value":1095588,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-ng8f6","timestamp":"20241125072751","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>