CINXE.COM
Modulus:Arguments - Victionarium
<!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-available" lang="la" dir="ltr"> <head> <meta charset="UTF-8"> <title>Modulus:Arguments - Victionarium</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-available";var cookie=document.cookie.match(/(?:^|; )lawiktionarymwclientpreferences=([^;]+)/);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":["","Ianuarius","Februarius","Martius","Aprilis","Maius","Iunius","Iulius","Augustus","Septembris","Octobris","Novembris","Decembris"],"wgRequestId":"4346147c-9864-45b2-b40f-160dce7ca677","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Modulus:Arguments","wgTitle":"Arguments","wgCurRevisionId":151311,"wgRevisionId":151311,"wgArticleId":25875,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Pages using deprecated source tags"],"wgPageViewLanguage":"la","wgPageContentLanguage":"la","wgPageContentModel":"Scribunto","wgRelevantPageName":"Modulus:Arguments","wgRelevantArticleId":25875,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wiktionary","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true, "wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":9000,"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.gadget.NewLook":"ready","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","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","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.urlShortener.toolbar","ext.centralauth.centralautologin","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=la&modules=ext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.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=la&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=la&modules=ext.gadget.NewLook&only=styles&skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=la&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:site_name" content="Victionarium"> <meta property="og:title" content="Modulus:Arguments - Victionarium"> <meta property="og:type" content="website"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//la.m.wiktionary.org/wiki/Modulus:Arguments"> <link rel="alternate" type="application/x-wiki" title="Recensere" href="/w/index.php?title=Modulus:Arguments&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wiktionary.png"> <link rel="icon" href="/static/favicon/piece.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Victionarium (la)"> <link rel="EditURI" type="application/rsd+xml" href="//la.wiktionary.org/w/api.php?action=rsd"> <link rel="canonical" href="https://la.wiktionary.org/wiki/Modulus:Arguments"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.la"> <link rel="alternate" type="application/atom+xml" title="Victionarium Fluxus Atom" href="/w/index.php?title=Specialis:Nuper_mutata&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-Modulus_Arguments rootpage-Modulus_Arguments skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</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="Site"> <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="Main menu" > <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">Main menu</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">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigatio </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-text" class="mw-list-item"><a href="/wiki/Victionarium:Pagina_prima"><span>Pagina prima</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Victionarium:Porta_communis" title="De hoc incepto"><span>Porta communis</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Victionarium:Novissima" title="Eventus novissimi"><span>Novissima</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Specialis:Nuper_mutata" title="Index nuper mutatorum in hac vici [r]" accesskey="r"><span>Mutationes recentes</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Specialis:Pagina_fortuita" title="Ire ad paginam fortuitam [x]" accesskey="x"><span>Pagina fortuita</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Specialis:Paginae_omnes"><span>Omnes paginae</span></a></li> </ul> </div> </div> <div id="p-contribution" class="vector-menu mw-portlet mw-portlet-contribution" > <div class="vector-menu-heading"> Victionario cooperari </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-new-entry" class="mw-list-item"><a href="/wiki/Victionarium:Paginam_creare"><span>Paginam novam addere</span></a></li> </ul> </div> </div> <div id="p-support" class="vector-menu mw-portlet mw-portlet-support" > <div class="vector-menu-heading"> Adiutatum </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Victionarium:Auxilium" title="Adiumentum ad hoc incepto utendum"><span>Auxilium</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Victionarium:Pagina_prima" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wiktionary.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Victionarium" src="/static/images/mobile/copyright/wiktionary-wordmark-la.svg" style="width: 7.4375em; height: 0.9375em;"> </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/Specialis:Quaerere" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Quaerere apud Victionarium [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Quaerere</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="Quaerere apud Victionarium" aria-label="Quaerere apud Victionarium" autocapitalize="none" title="Quaerere apud Victionarium [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Specialis:Quaerere"> </div> <button class="cdx-button cdx-search-input__end-button">Quaerere</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Instrumenta personalia"> <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="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <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="Appearance" > <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">Appearance</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="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_la.wiktionary.org&uselang=la" class=""><span>Donationes</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=Specialis:Rationem_creare&returnto=Modulus%3AArguments" title="Suademus, ut nomen tibi imponas, neque cogeris" class=""><span>Sibi nomen imponere</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=Specialis:Conventum_aperire&returnto=Modulus%3AArguments" title="Te nomen dare hortamur neque cogimus [o]" accesskey="o" class=""><span>Nomen dare</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="More options" > <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="Instrumenta personalia" > <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">Instrumenta personalia</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <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="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_la.wiktionary.org&uselang=la"><span>Donationes</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Specialis:Rationem_creare&returnto=Modulus%3AArguments" title="Suademus, ut nomen tibi imponas, neque cogeris"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Sibi nomen imponere</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Specialis:Conventum_aperire&returnto=Modulus%3AArguments" title="Te nomen dare hortamur neque cogimus [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Nomen dare</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"> Pages for logged out editors <a href="/wiki/Auxilium:Introduction" aria-label="Learn more about editing"><span>learn more</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/Specialis:Conlationes_meae" title="Ostendit recensiones ex hoc loco IP factas [y]" accesskey="y"><span>Conlationes</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Specialis:Disputatio_mea" title="Disputatio de recensionibus ex hoc loco IP factis [n]" accesskey="n"><span>Disputatio huius IP</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="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Index" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Index</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Initium</div> </a> </li> <li id="toc-Purpose" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Purpose"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Purpose</span> </div> </a> <ul id="toc-Purpose-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Basic_use" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Basic_use"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Basic use</span> </div> </a> <button aria-controls="toc-Basic_use-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Basic use subsection</span> </button> <ul id="toc-Basic_use-sublist" class="vector-toc-list"> <li id="toc-Options" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Options"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Options</span> </div> </a> <ul id="toc-Options-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Trimming_and_removing_blanks" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Trimming_and_removing_blanks"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Trimming and removing blanks</span> </div> </a> <ul id="toc-Trimming_and_removing_blanks-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Custom_formatting_of_arguments" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Custom_formatting_of_arguments"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span>Custom formatting of arguments</span> </div> </a> <ul id="toc-Custom_formatting_of_arguments-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Frames_and_parent_frames" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Frames_and_parent_frames"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4</span> <span>Frames and parent frames</span> </div> </a> <ul id="toc-Frames_and_parent_frames-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Wrappers" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Wrappers"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.5</span> <span>Wrappers</span> </div> </a> <ul id="toc-Wrappers-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Writing_to_the_args_table" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Writing_to_the_args_table"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.6</span> <span>Writing to the args table</span> </div> </a> <ul id="toc-Writing_to_the_args_table-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Ref_tags" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Ref_tags"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.7</span> <span>Ref tags</span> </div> </a> <ul id="toc-Ref_tags-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Known_limitations" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Known_limitations"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.8</span> <span>Known limitations</span> </div> </a> <ul id="toc-Known_limitations-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Index" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-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-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">Modulus</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="Go to an article in another language. Available in 68 languages" > <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-68" 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">68 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wiktionary.org/wiki/%D9%88%D8%AD%D8%AF%D8%A9:Arguments" title="وحدة:Arguments – Arabica" lang="ar" hreflang="ar" data-title="وحدة:Arguments" data-language-autonym="العربية" data-language-local-name="Arabica" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-ast mw-list-item"><a href="https://ast.wiktionary.org/wiki/M%C3%B3dulu:Argumentos" title="Módulu:Argumentos – Asturian" lang="ast" hreflang="ast" data-title="Módulu:Argumentos" data-language-autonym="Asturianu" data-language-local-name="Asturian" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Atropatenica" lang="az" hreflang="az" data-title="Modul:Arguments" data-language-autonym="Azərbaycanca" data-language-local-name="Atropatenica" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-bcl mw-list-item"><a href="https://bcl.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Central Bikol" lang="bcl" hreflang="bcl" data-title="Module:Arguments" data-language-autonym="Bikol Central" data-language-local-name="Central Bikol" class="interlanguage-link-target"><span>Bikol Central</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments" title="Модуль:Arguments – Ruthenica Alba" lang="be" hreflang="be" data-title="Модуль:Arguments" data-language-autonym="Беларуская" data-language-local-name="Ruthenica Alba" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:Arguments" title="Модул:Arguments – Bulgarica" lang="bg" hreflang="bg" data-title="Модул:Arguments" data-language-autonym="Български" data-language-local-name="Bulgarica" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-bjn mw-list-item"><a href="https://bjn.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Banjar" lang="bjn" hreflang="bjn" data-title="Modul:Arguments" data-language-autonym="Banjar" data-language-local-name="Banjar" class="interlanguage-link-target"><span>Banjar</span></a></li><li class="interlanguage-link interwiki-blk mw-list-item"><a href="https://blk.wiktionary.org/wiki/%E1%80%99%E1%80%B1%E1%80%AC%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0%E1%80%B8:Arguments" title="မော်ဂျူး:Arguments – Pa'O" lang="blk" hreflang="blk" data-title="မော်ဂျူး:Arguments" data-language-autonym="ပအိုဝ်ႏဘာႏသာႏ" data-language-local-name="Pa'O" class="interlanguage-link-target"><span>ပအိုဝ်ႏဘာႏသာႏ</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wiktionary.org/wiki/%E0%A6%AE%E0%A6%A1%E0%A6%BF%E0%A6%89%E0%A6%B2:Arguments" title="মডিউল:Arguments – Bengalica" lang="bn" hreflang="bn" data-title="মডিউল:Arguments" data-language-autonym="বাংলা" data-language-local-name="Bengalica" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wiktionary.org/wiki/M%C3%B2dul:Arguments" title="Mòdul:Arguments – Catalana" lang="ca" hreflang="ca" data-title="Mòdul:Arguments" data-language-autonym="Català" data-language-local-name="Catalana" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wiktionary.org/wiki/%D9%85%DB%86%D8%AF%DB%8C%D9%88%D9%88%D9%84:Arguments" title="مۆدیوول:Arguments – Central Kurdish" lang="ckb" hreflang="ckb" data-title="مۆدیوول:Arguments" data-language-autonym="کوردی" data-language-local-name="Central Kurdish" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Graeca" lang="el" hreflang="el" data-title="Module:Arguments" data-language-autonym="Ελληνικά" data-language-local-name="Graeca" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Anglica" lang="en" hreflang="en" data-title="Module:Arguments" data-language-autonym="English" data-language-local-name="Anglica" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wiktionary.org/wiki/Moodul:Arguments" title="Moodul:Arguments – Estonica" lang="et" hreflang="et" data-title="Moodul:Arguments" data-language-autonym="Eesti" data-language-local-name="Estonica" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wiktionary.org/wiki/%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Arguments" title="پودمان:Arguments – Persica" lang="fa" hreflang="fa" data-title="پودمان:Arguments" data-language-autonym="فارسی" data-language-local-name="Persica" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-gd mw-list-item"><a href="https://gd.wiktionary.org/wiki/M%C3%B2ideal:Arguments" title="Mòideal:Arguments – Scotica" lang="gd" hreflang="gd" data-title="Mòideal:Arguments" data-language-autonym="Gàidhlig" data-language-local-name="Scotica" class="interlanguage-link-target"><span>Gàidhlig</span></a></li><li class="interlanguage-link interwiki-gor mw-list-item"><a href="https://gor.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Gorontalo" lang="gor" hreflang="gor" data-title="Modul:Arguments" data-language-autonym="Bahasa Hulontalo" data-language-local-name="Gorontalo" class="interlanguage-link-target"><span>Bahasa Hulontalo</span></a></li><li class="interlanguage-link interwiki-gu mw-list-item"><a href="https://gu.wiktionary.org/wiki/%E0%AA%B5%E0%AA%BF%E0%AA%AD%E0%AA%BE%E0%AA%97:Arguments" title="વિભાગ:Arguments – Gujaratensis" lang="gu" hreflang="gu" data-title="વિભાગ:Arguments" data-language-autonym="ગુજરાતી" data-language-local-name="Gujaratensis" class="interlanguage-link-target"><span>ગુજરાતી</span></a></li><li class="interlanguage-link interwiki-guw mw-list-item"><a href="https://guw.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Gun" lang="guw" hreflang="guw" data-title="Module:Arguments" data-language-autonym="Gungbe" data-language-local-name="Gun" class="interlanguage-link-target"><span>Gungbe</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wiktionary.org/wiki/%D7%99%D7%97%D7%99%D7%93%D7%94:Arguments" title="יחידה:Arguments – Hebrew" lang="he" hreflang="he" data-title="יחידה:Arguments" data-language-autonym="עברית" data-language-local-name="Hebrew" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wiktionary.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 – Hindica" lang="hi" hreflang="hi" data-title="मॉड्यूल:arguments" data-language-autonym="हिन्दी" data-language-local-name="Hindica" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-hif mw-list-item"><a href="https://hif.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Fiji Hindi" lang="hif" hreflang="hif" data-title="Module:Arguments" data-language-autonym="Fiji Hindi" data-language-local-name="Fiji Hindi" class="interlanguage-link-target"><span>Fiji Hindi</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Hungarica" lang="hu" hreflang="hu" data-title="Modul:Arguments" data-language-autonym="Magyar" data-language-local-name="Hungarica" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wiktionary.org/wiki/%D5%84%D5%B8%D5%A4%D5%B8%D6%82%D5%AC:Arguments" title="Մոդուլ:Arguments – Armenica" lang="hy" hreflang="hy" data-title="Մոդուլ:Arguments" data-language-autonym="Հայերեն" data-language-local-name="Armenica" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Indonesian" lang="id" hreflang="id" data-title="Modul:Arguments" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesian" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wiktionary.org/wiki/Modulo:Arguments" title="Modulo:Arguments – Italiana" lang="it" hreflang="it" data-title="Modulo:Arguments" data-language-autonym="Italiano" data-language-local-name="Italiana" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wiktionary.org/wiki/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Arguments" title="モジュール:Arguments – Iaponica" lang="ja" hreflang="ja" data-title="モジュール:Arguments" data-language-autonym="日本語" data-language-local-name="Iaponica" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ka mw-list-item"><a href="https://ka.wiktionary.org/wiki/%E1%83%9B%E1%83%9D%E1%83%93%E1%83%A3%E1%83%9A%E1%83%98:Arguments" title="მოდული:Arguments – Georgiana" lang="ka" hreflang="ka" data-title="მოდული:Arguments" data-language-autonym="ქართული" data-language-local-name="Georgiana" class="interlanguage-link-target"><span>ქართული</span></a></li><li class="interlanguage-link interwiki-kaa mw-list-item"><a href="https://kaa.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Kara-Kalpak" lang="kaa" hreflang="kaa" data-title="Module:Arguments" data-language-autonym="Qaraqalpaqsha" data-language-local-name="Kara-Kalpak" class="interlanguage-link-target"><span>Qaraqalpaqsha</span></a></li><li class="interlanguage-link interwiki-km mw-list-item"><a href="https://km.wiktionary.org/wiki/Module:arguments" title="Module:arguments – Chmerica" lang="km" hreflang="km" data-title="Module:arguments" data-language-autonym="ភាសាខ្មែរ" data-language-local-name="Chmerica" class="interlanguage-link-target"><span>ភាសាខ្មែរ</span></a></li><li class="interlanguage-link interwiki-kn mw-list-item"><a href="https://kn.wiktionary.org/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:Arguments" title="ಮಾಡ್ಯೂಲ್:Arguments – Cannadica" lang="kn" hreflang="kn" data-title="ಮಾಡ್ಯೂಲ್:Arguments" data-language-autonym="ಕನ್ನಡ" data-language-local-name="Cannadica" class="interlanguage-link-target"><span>ಕನ್ನಡ</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wiktionary.org/wiki/%EB%AA%A8%EB%93%88:Arguments" title="모듈:Arguments – Coreana" lang="ko" hreflang="ko" data-title="모듈:Arguments" data-language-autonym="한국어" data-language-local-name="Coreana" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-ku mw-list-item"><a href="https://ku.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Curdica" lang="ku" hreflang="ku" data-title="Modul:Arguments" data-language-autonym="Kurdî" data-language-local-name="Curdica" class="interlanguage-link-target"><span>Kurdî</span></a></li><li class="interlanguage-link interwiki-lmo mw-list-item"><a href="https://lmo.wiktionary.org/wiki/M%C3%B2dul:Arguments" title="Mòdul:Arguments – Lombard" lang="lmo" hreflang="lmo" data-title="Mòdul:Arguments" data-language-autonym="Lombard" data-language-local-name="Lombard" class="interlanguage-link-target"><span>Lombard</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Lithuanica" lang="lt" hreflang="lt" data-title="Module:Arguments" data-language-autonym="Lietuvių" data-language-local-name="Lithuanica" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-mk mw-list-item"><a href="https://mk.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:Arguments" title="Модул:Arguments – Macedonica" lang="mk" hreflang="mk" data-title="Модул:Arguments" data-language-autonym="Македонски" data-language-local-name="Macedonica" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wiktionary.org/wiki/%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:Arguments" title="ഘടകം:Arguments – Malabarica" lang="ml" hreflang="ml" data-title="ഘടകം:Arguments" data-language-autonym="മലയാളം" data-language-local-name="Malabarica" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mnw mw-list-item"><a href="https://mnw.wiktionary.org/wiki/%E1%80%99%E1%80%9D%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0:Arguments" title="မဝ်ဂျူ:Arguments – Mon" lang="mnw" hreflang="mnw" data-title="မဝ်ဂျူ:Arguments" data-language-autonym="ဘာသာမန်" data-language-local-name="Mon" class="interlanguage-link-target"><span>ဘာသာမန်</span></a></li><li class="interlanguage-link interwiki-mr mw-list-item"><a href="https://mr.wiktionary.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%AD%E0%A4%BE%E0%A4%97:Arguments" title="विभाग:Arguments – Marathica" lang="mr" hreflang="mr" data-title="विभाग:Arguments" data-language-autonym="मराठी" data-language-local-name="Marathica" class="interlanguage-link-target"><span>मराठी</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Malayana" lang="ms" hreflang="ms" data-title="Modul:Arguments" data-language-autonym="Bahasa Melayu" data-language-local-name="Malayana" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-my mw-list-item"><a href="https://my.wiktionary.org/wiki/%E1%80%99%E1%80%B1%E1%80%AC%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0%E1%80%B8:Arguments" title="မော်ဂျူး:Arguments – Birmanica" lang="my" hreflang="my" data-title="မော်ဂျူး:Arguments" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="Birmanica" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-ne mw-list-item"><a href="https://ne.wiktionary.org/wiki/%E0%A4%AE%E0%A5%8B%E0%A4%A1%E0%A5%8D%E0%A4%AF%E0%A5%81%E0%A4%B2:Arguments" title="मोड्युल:Arguments – Nepalensis" lang="ne" hreflang="ne" data-title="मोड्युल:Arguments" data-language-autonym="नेपाली" data-language-local-name="Nepalensis" class="interlanguage-link-target"><span>नेपाली</span></a></li><li class="interlanguage-link interwiki-or mw-list-item"><a href="https://or.wiktionary.org/wiki/%E0%AC%AE%E0%AC%A1%E0%AD%8D%E0%AD%9F%E0%AD%81%E0%AC%B2:Arguments" title="ମଡ୍ୟୁଲ:Arguments – Orissensis" lang="or" hreflang="or" data-title="ମଡ୍ୟୁଲ:Arguments" data-language-autonym="ଓଡ଼ିଆ" data-language-local-name="Orissensis" class="interlanguage-link-target"><span>ଓଡ଼ିଆ</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wiktionary.org/wiki/M%C3%B3dulo:Arguments" title="Módulo:Arguments – Lusitana" lang="pt" hreflang="pt" data-title="Módulo:Arguments" data-language-autonym="Português" data-language-local-name="Lusitana" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments" title="Модуль:Arguments – Russica" lang="ru" hreflang="ru" data-title="Модуль:Arguments" data-language-autonym="Русский" data-language-local-name="Russica" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sd mw-list-item"><a href="https://sd.wiktionary.org/wiki/%D9%85%D8%A7%DA%8A%D9%8A%D9%88%D9%84:Arguments" title="ماڊيول:Arguments – Sindhuica" lang="sd" hreflang="sd" data-title="ماڊيول:Arguments" data-language-autonym="سنڌي" data-language-local-name="Sindhuica" class="interlanguage-link-target"><span>سنڌي</span></a></li><li class="interlanguage-link interwiki-shn mw-list-item"><a href="https://shn.wiktionary.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 – Shan" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:Arguments" data-language-autonym="ၽႃႇသႃႇတႆး " data-language-local-name="Shan" class="interlanguage-link-target"><span>ၽႃႇသႃႇတႆး </span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Singhalensis" lang="si" hreflang="si" data-title="Module:Arguments" data-language-autonym="සිංහල" data-language-local-name="Singhalensis" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Simple English" lang="en-simple" hreflang="en-simple" data-title="Module:Arguments" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Slovena" lang="sl" hreflang="sl" data-title="Modul:Arguments" data-language-autonym="Slovenščina" data-language-local-name="Slovena" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-so mw-list-item"><a href="https://so.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Somalica" lang="so" hreflang="so" data-title="Module:Arguments" data-language-autonym="Soomaaliga" data-language-local-name="Somalica" class="interlanguage-link-target"><span>Soomaaliga</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wiktionary.org/wiki/Moduli:Arguments" title="Moduli:Arguments – Albanica" lang="sq" hreflang="sq" data-title="Moduli:Arguments" data-language-autonym="Shqip" data-language-local-name="Albanica" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:Arguments" title="Модул:Arguments – Serbica" lang="sr" hreflang="sr" data-title="Модул:Arguments" data-language-autonym="Српски / srpski" data-language-local-name="Serbica" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-st mw-list-item"><a href="https://st.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Southern Sotho" lang="st" hreflang="st" data-title="Module:Arguments" data-language-autonym="Sesotho" data-language-local-name="Southern Sotho" class="interlanguage-link-target"><span>Sesotho</span></a></li><li class="interlanguage-link interwiki-su mw-list-item"><a href="https://su.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Sundanese" lang="su" hreflang="su" data-title="Modul:Arguments" data-language-autonym="Sunda" data-language-local-name="Sundanese" class="interlanguage-link-target"><span>Sunda</span></a></li><li class="interlanguage-link interwiki-sw mw-list-item"><a href="https://sw.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Suahili" lang="sw" hreflang="sw" data-title="Module:Arguments" data-language-autonym="Kiswahili" data-language-local-name="Suahili" class="interlanguage-link-target"><span>Kiswahili</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Tamulica" lang="ta" hreflang="ta" data-title="Module:Arguments" data-language-autonym="தமிழ்" data-language-local-name="Tamulica" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:Arguments" title="Модул:Arguments – Tadzikica" lang="tg" hreflang="tg" data-title="Модул:Arguments" data-language-autonym="Тоҷикӣ" data-language-local-name="Tadzikica" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wiktionary.org/wiki/%E0%B8%A1%E0%B8%AD%E0%B8%94%E0%B8%B9%E0%B8%A5:arguments" title="มอดูล:arguments – Thai" lang="th" hreflang="th" data-title="มอดูล:arguments" data-language-autonym="ไทย" data-language-local-name="Thai" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tn mw-list-item"><a href="https://tn.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Tswana" lang="tn" hreflang="tn" data-title="Module:Arguments" data-language-autonym="Setswana" data-language-local-name="Tswana" class="interlanguage-link-target"><span>Setswana</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wiktionary.org/wiki/Mod%C3%BCl:Arguments" title="Modül:Arguments – Turcica" lang="tr" hreflang="tr" data-title="Modül:Arguments" data-language-autonym="Türkçe" data-language-local-name="Turcica" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments" title="Модуль:Arguments – Ucrainica" lang="uk" hreflang="uk" data-title="Модуль:Arguments" data-language-autonym="Українська" data-language-local-name="Ucrainica" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-ur mw-list-item"><a href="https://ur.wiktionary.org/wiki/%D9%85%D8%A7%DA%88%DB%8C%D9%88%D9%84:Arguments" title="ماڈیول:Arguments – Urdu" lang="ur" hreflang="ur" data-title="ماڈیول:Arguments" data-language-autonym="اردو" data-language-local-name="Urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wiktionary.org/wiki/Modul:Arguments" title="Modul:Arguments – Uzbecica" lang="uz" hreflang="uz" data-title="Modul:Arguments" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="Uzbecica" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-vec mw-list-item"><a href="https://vec.wiktionary.org/wiki/Modulo:Arguments" title="Modulo:Arguments – Venetian" lang="vec" hreflang="vec" data-title="Modulo:Arguments" data-language-autonym="Vèneto" data-language-local-name="Venetian" class="interlanguage-link-target"><span>Vèneto</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wiktionary.org/wiki/M%C3%B4_%C4%91un:Arguments" title="Mô đun:Arguments – Vietnamica" lang="vi" hreflang="vi" data-title="Mô đun:Arguments" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamica" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-yue mw-list-item"><a href="https://yue.wiktionary.org/wiki/%E6%A8%A1%E7%B5%84:arguments" title="模組:arguments – Cantonese" lang="yue" hreflang="yue" data-title="模組:arguments" data-language-autonym="粵語" data-language-local-name="Cantonese" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wiktionary.org/wiki/Module:Arguments" title="Module:Arguments – Sinica" lang="zh" hreflang="zh" data-title="Module:Arguments" data-language-autonym="中文" data-language-local-name="Sinica" 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-wiktionary" title="Nexus inter linguas recensere" class="wbc-editpage">Nexus recensere</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="Spatia nominalia"> <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/Modulus:Arguments" title="View the module page [c]" accesskey="c"><span>Module</span></a></li><li id="ca-talk" class="new vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Disputatio_Moduli:Arguments&action=edit&redlink=1" rel="discussion" class="new" title="Disputatio de hac pagina (non est haec pagina) [t]" accesskey="t"><span>Disputatio</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="Change language variant" > <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="Aspectus"> <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/Modulus:Arguments"><span>Legere</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Modulus:Arguments&action=edit" title="Hanc paginam recensere [e]" accesskey="e"><span>Recensere</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Modulus:Arguments&action=history" title="Superiores huius paginae versiones [h]" accesskey="h"><span>Historiam inspicere</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <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="Instrumentarium" > <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">Instrumentarium</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">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </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/Modulus:Arguments"><span>Legere</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Modulus:Arguments&action=edit" title="Hanc paginam recensere [e]" accesskey="e"><span>Recensere</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Modulus:Arguments&action=history"><span>Historiam inspicere</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Specialis:Nexus_ad_paginam/Modulus:Arguments" title="Index paginarum quae hic nectunt [j]" accesskey="j"><span>Nexus ad hanc paginam</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Specialis:Nuper_mutata_annexorum/Modulus:Arguments" rel="nofollow" title="Nuper mutata in paginis quibus haec pagina nectit [k]" accesskey="k"><span>Nuper mutata annexorum</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=la" title="Fasciculos imponere [u]" accesskey="u"><span>Onerare fascicula</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Specialis:Paginae_speciales" title="Index paginarum specialium [q]" accesskey="q"><span>Paginae speciales</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Modulus:Arguments&oldid=151311" title="Nexus perpetuus ad hanc paginae redactionem"><span>Nexus perpetuus</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Modulus:Arguments&action=info" title="More information about this page"><span>De hac pagina</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Specialis:UrlShortener&url=https%3A%2F%2Fla.wiktionary.org%2Fwiki%2FModulus%3AArguments"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Specialis:QrCode&url=https%3A%2F%2Fla.wiktionary.org%2Fwiki%2FModulus%3AArguments"><span>Download QR code</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"> Print/export </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=Specialis:DownloadAsPdf&page=Modulus%3AArguments&action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="javascript:print();" rel="alternate" title="Forma impressibilis huius paginae [p]" accesskey="p"><span>Forma imprimabilia</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"> Inceptis aliis </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>Vicimedia Communia</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>Multilingual 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>Vicispecies</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://la.wikibooks.org/wiki/Modulus:Arguments" hreflang="la"><span>Vicilibri</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>Vicidata</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-wikipedia mw-list-item"><a href="https://la.wikipedia.org/wiki/Modulus:Arguments" hreflang="la"><span>Vicipaedia</span></a></li><li class="wb-otherproject-link wb-otherproject-wikisource mw-list-item"><a href="https://la.wikisource.org/wiki/Modulus:Arguments" hreflang="la"><span>Vicifons</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="Nexus ad rem repositorii Vicibasis [g]" accesskey="g"><span>Res Wikidata</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="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <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">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</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">E Victionario</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="la" dir="ltr"><meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Purpose">Purpose</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-1" title="Recensere partem: Purpose"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></div> <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 <ref>...</ref> tags.</li> <li>Most features can be customized.</li></ul> <div class="mw-heading mw-heading2"><h2 id="Basic_use">Basic use</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-2" title="Recensere partem: Basic use"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></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><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-3" title="Recensere partem: Options"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></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><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-4" title="Recensere partem: Trimming and removing blanks"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></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><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-5" title="Recensere partem: Custom formatting of arguments"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></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><p><a href="/w/index.php?title=Formula:cot&action=edit&redlink=1" class="new" title="Formula:cot (non est haec pagina)">Formula:cot</a> 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> <p><a href="/w/index.php?title=Formula:cob&action=edit&redlink=1" class="new" title="Formula:cob (non est haec pagina)">Formula:cob</a> </p><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><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-6" title="Recensere partem: Frames and parent frames"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></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><p><a href="/w/index.php?title=Formula:cot&action=edit&redlink=1" class="new" title="Formula:cot (non est haec pagina)">Formula:cot</a> </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="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> <p><a href="/w/index.php?title=Formula:cob&action=edit&redlink=1" class="new" title="Formula:cob (non est haec pagina)">Formula:cob</a> </p><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><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-7" title="Recensere partem: Wrappers"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></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="/w/index.php?title=Formula:Side_box&action=edit&redlink=1" class="new" title="Formula:Side box (non est haec pagina)">Template:Side box</a> (excluding content in <a href="/w/index.php?title=Formula:tag&action=edit&redlink=1" class="new" title="Formula:tag (non est haec pagina)">Formula:tag</a> 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>|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="/w/index.php?title=Formula:Side_box&action=edit&redlink=1" class="new" title="Formula:Side box (non est haec pagina)">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><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-8" title="Recensere partem: Writing to the args table"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></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><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-9" title="Recensere partem: Ref tags"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></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 <a href="/w/index.php?title=Formula:tag&action=edit&redlink=1" class="new" title="Formula:tag (non est haec pagina)">Formula:tag</a> tags as input. </p><p>As soon as <a href="/w/index.php?title=Formula:tag&action=edit&redlink=1" class="new" title="Formula:tag (non est haec pagina)">Formula:tag</a> 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><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Modulus:Arguments/doc&action=edit&section=T-10" title="Recensere partem: Known limitations"><span>+/-</span></a><span class="mw-editsection-bracket">]</span></span></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> <hr /><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="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-56"><a href="#L-56"><span class="linenos" data-line="56"></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-57"><a href="#L-57"><span class="linenos" data-line="57"></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-58"><a href="#L-58"><span class="linenos" data-line="58"></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-59"><a href="#L-59"><span class="linenos" data-line="59"></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-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> <span class="cm">--[[</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a><span class="cm"> -- Get the argument tables. If we were passed a valid frame object, get the</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a><span class="cm"> -- frame arguments (fargs) and the parent frame arguments (pargs), depending</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></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-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a><span class="cm"> -- passed a valid frame object, we are being called from another Lua module</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></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-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a><span class="cm"> -- directly, and assign it to a new variable (luaArgs).</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a><span class="cm"> --]]</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></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-70"><a href="#L-70"><span class="linenos" data-line="70"></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-71"><a href="#L-71"><span class="linenos" data-line="71"></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-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="cm">--[[</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a><span class="cm"> -- The wrappers option makes Module:Arguments look up arguments in</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a><span class="cm"> -- either the frame argument table or the parent argument table, but</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a><span class="cm"> -- not both. This means that users can use either the #invoke syntax</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a><span class="cm"> -- or a wrapper template without the loss of performance associated</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a><span class="cm"> -- with looking arguments up in both the frame and the parent frame.</span> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a><span class="cm"> -- Module:Arguments will look up arguments in the parent frame</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a><span class="cm"> -- if it finds the parent frame's title in options.wrapper;</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a><span class="cm"> -- otherwise it will look up arguments in the frame object passed</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a><span class="cm"> -- to getArgs.</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a><span class="cm"> --]]</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></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-84"><a href="#L-84"><span class="linenos" data-line="84"></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-85"><a href="#L-85"><span class="linenos" data-line="85"></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-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a> <span class="kr">else</span> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></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-88"><a href="#L-88"><span class="linenos" data-line="88"></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-89"><a href="#L-89"><span class="linenos" data-line="89"></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-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a> <span class="n">found</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></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-92"><a href="#L-92"><span class="linenos" data-line="92"></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-93"><a href="#L-93"><span class="linenos" data-line="93"></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-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a> <span class="n">found</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a> <span class="kr">break</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a> <span class="kr">end</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> <span class="kr">end</span> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a> <span class="kr">end</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a> <span class="c1">-- We test for false specifically here so that nil (the default) acts like true.</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></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-102"><a href="#L-102"><span class="linenos" data-line="102"></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-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a> <span class="kr">end</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></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-105"><a href="#L-105"><span class="linenos" data-line="105"></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-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a> <span class="kr">end</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a> <span class="kr">end</span> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a> <span class="kr">else</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a> <span class="c1">-- options.wrapper isn't set, so check the other options.</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></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-111"><a href="#L-111"><span class="linenos" data-line="111"></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-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> <span class="kr">end</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></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-114"><a href="#L-114"><span class="linenos" data-line="114"></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-115"><a href="#L-115"><span class="linenos" data-line="115"></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-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> <span class="kr">end</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a> <span class="kr">end</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></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-119"><a href="#L-119"><span class="linenos" data-line="119"></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-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="kr">end</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="kr">else</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="n">luaArgs</span> <span class="o">=</span> <span class="n">frame</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><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="c1">-- Set the order of precedence of the argument tables. If the variables are</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> <span class="c1">-- nil, nothing will be added to the table, which is how we avoid clashes</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a> <span class="c1">-- between the frame/parent args and the Lua args. </span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></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-129"><a href="#L-129"><span class="linenos" data-line="129"></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-130"><a href="#L-130"><span class="linenos" data-line="130"></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-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="cm">--[[</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a><span class="cm"> -- Generate the tidyVal function. If it has been specified by the user, we</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a><span class="cm"> -- use that; if not, we choose one of four functions depending on the</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></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-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a><span class="cm"> -- every time the function is called.</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a><span class="cm"> --]]</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></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-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a> <span class="kr">if</span> <span class="n">tidyVal</span> <span class="kr">then</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="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-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="nb">error</span><span class="p">(</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="s2">"bad value assigned to option 'valueFunc'"</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="o">..</span> <span class="s1">'(function expected, got '</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></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-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="o">..</span> <span class="s1">')'</span><span class="p">,</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="mi">2</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="p">)</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="kr">end</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></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-150"><a href="#L-150"><span class="linenos" data-line="150"></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-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="n">tidyVal</span> <span class="o">=</span> <span class="n">tidyValDefault</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a> <span class="kr">else</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a> <span class="n">tidyVal</span> <span class="o">=</span> <span class="n">tidyValTrimOnly</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="kr">end</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a> <span class="kr">else</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></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-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> <span class="n">tidyVal</span> <span class="o">=</span> <span class="n">tidyValRemoveBlanksOnly</span> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> <span class="kr">else</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> <span class="n">tidyVal</span> <span class="o">=</span> <span class="n">tidyValNoChange</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="kr">end</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="kr">end</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="cm">--[[</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a><span class="cm"> -- Set up the args, metaArgs and nilArgs tables. args will be the one</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a><span class="cm"> -- accessed from functions, and metaArgs will hold the actual arguments. Nil</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a><span class="cm"> -- arguments are memoized in nilArgs, and the metatable connects all of them</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a><span class="cm"> -- together.</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a><span class="cm"> --]]</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></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-170"><a href="#L-170"><span class="linenos" data-line="170"></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-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></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-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="cm">--[[</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a><span class="cm"> -- Accepts multiple tables as input and merges their keys and values</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a><span class="cm"> -- into one table. If a value is already present it is not overwritten;</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a><span class="cm"> -- tables listed earlier have precedence. We are also memoizing nil</span> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a><span class="cm"> -- values, which can be overwritten if they are 's' (soft).</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a><span class="cm"> --]]</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></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-180"><a href="#L-180"><span class="linenos" data-line="180"></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-181"><a href="#L-181"><span class="linenos" data-line="181"></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-182"><a href="#L-182"><span class="linenos" data-line="182"></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-183"><a href="#L-183"><span class="linenos" data-line="183"></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-184"><a href="#L-184"><span class="linenos" data-line="184"></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-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">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-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 class="kr">end</span> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> <span class="kr">end</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> <span class="kr">end</span> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> <span class="cm">--[[</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a><span class="cm"> -- Define metatable behaviour. Arguments are memoized in the metaArgs table,</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a><span class="cm"> -- and are only fetched from the argument tables once. Fetching arguments</span> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a><span class="cm"> -- from the argument tables is the most resource-intensive step in this</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a><span class="cm"> -- module, so we try and avoid it where possible. For this reason, nil</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a><span class="cm"> -- arguments are also memoized, in the nilArgs table. Also, we keep a record</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></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-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a><span class="cm"> -- run pairs and ipairs on the argument tables more than once. We also do</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></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-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a><span class="cm"> -- the arguments will already have been copied over.</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a><span class="cm"> --]]</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></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-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="cm">--[[</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a><span class="cm"> -- Fetches an argument when the args table is indexed. First we check</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></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-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a><span class="cm"> -- the argument tables. When we check memoization, we need to check</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a><span class="cm"> -- metaArgs before nilArgs, as both can be non-nil at the same time.</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a><span class="cm"> -- If the argument is not present in metaArgs, we also check whether</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a><span class="cm"> -- pairs has been run yet. If pairs has already been run, we return nil.</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a><span class="cm"> -- This is because all the arguments will have already been copied into</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a><span class="cm"> -- metaArgs by the mergeArgs function, meaning that any other arguments</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a><span class="cm"> -- must be nil.</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a><span class="cm"> --]]</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></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-218"><a href="#L-218"><span class="linenos" data-line="218"></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-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="kr">return</span> <span class="n">val</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></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-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a> <span class="kr">end</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></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-224"><a href="#L-224"><span class="linenos" data-line="224"></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-225"><a href="#L-225"><span class="linenos" data-line="225"></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-226"><a href="#L-226"><span class="linenos" data-line="226"></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-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a> <span class="kr">return</span> <span class="n">argTableVal</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> <span class="kr">end</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a> <span class="kr">end</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></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-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a> <span class="kr">end</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></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-235"><a href="#L-235"><span class="linenos" data-line="235"></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-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> <span class="c1">-- args table, or tries to change an existing value.</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></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-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> <span class="nb">error</span><span class="p">(</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a> <span class="s1">'could not write to argument table key "'</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></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-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a> <span class="o">..</span> <span class="s1">'"; the table is read-only'</span><span class="p">,</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a> <span class="mi">2</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a> <span class="p">)</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></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-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a> <span class="nb">error</span><span class="p">(</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a> <span class="s1">'could not write to argument table key "'</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></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-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="o">..</span> <span class="s1">'"; overwriting existing arguments is not permitted'</span><span class="p">,</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> <span class="mi">2</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a> <span class="p">)</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></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-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> <span class="cm">--[[</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a><span class="cm"> -- If the argument is to be overwritten with nil, we need to erase</span> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a><span class="cm"> -- the value in metaArgs, so that __index, __pairs and __ipairs do</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a><span class="cm"> -- not use a previous existing value, if present; and we also need</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a><span class="cm"> -- to memoize the nil in nilArgs, so that the value isn't looked</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a><span class="cm"> -- up in the argument tables if it is accessed again.</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a><span class="cm"> --]]</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></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-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">else</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></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-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a> <span class="kr">end</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> <span class="kr">end</span> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></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-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a> <span class="c1">-- Called when pairs is run on the args table.</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></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-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a> <span class="n">mergeArgs</span><span class="p">(</span><span class="n">argTables</span><span class="p">)</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></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-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a> <span class="kr">end</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> <span class="kr">return</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">metaArgs</span><span class="p">)</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> <span class="kr">end</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></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-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="c1">-- This uses our __index metamethod</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></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-278"><a href="#L-278"><span class="linenos" data-line="278"></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-279"><a href="#L-279"><span class="linenos" data-line="279"></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-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a> <span class="kr">end</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a> <span class="kr">end</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></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-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="c1">-- Called when ipairs is run on the args table.</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></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-286"><a href="#L-286"><span class="linenos" data-line="286"></span></a> <span class="kr">end</span> </span><span id="L-287"><a href="#L-287"><span class="linenos" data-line="287"></span></a> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a> <span class="kr">return</span> <span class="n">args</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a><span class="kr">end</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></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‐twlxc Cached time: 20241125032319 Cache expiry: 2592000 Reduced expiry: false Complications: [show‐toc] CPU time usage: 0.046 seconds Real time usage: 0.060 seconds Preprocessor visited node count: 131/1000000 Post‐expand include size: 12880/2097152 bytes Template argument size: 17/2097152 bytes Highest expansion depth: 6/100 Expensive parser function count: 14/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 18398/5000000 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 24.352 1 Modulus:Arguments/doc 100.00% 24.352 1 -total 44.91% 10.937 1 Formula:para 5.56% 1.355 2 Formula:cot 4.88% 1.188 2 Formula:cob 4.32% 1.053 3 Formula:tag --> </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="">Receptum de "<a dir="ltr" href="https://la.wiktionary.org/w/index.php?title=Modulus:Arguments&oldid=151311">https://la.wiktionary.org/w/index.php?title=Modulus:Arguments&oldid=151311</a>"</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Categoria celata: <ul><li><a href="/wiki/Categoria:Pages_using_deprecated_source_tags" title="Categoria:Pages using deprecated source tags">Pages using deprecated source tags</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-lastmod"> Novissima mutatio die 25 Augusti 2016 hora 10:47 facta.</li> <li id="footer-info-copyright">Nonobstantibus ceteris condicionibus hunc textum tractare licet secundum <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/">"Creative Commons Attribution-ShareAlike License"</a>. Vide <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">modos et condiciones</a>.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Consilium de secreto</a></li> <li id="footer-places-about"><a href="/wiki/Victionarium:De_Victionario">De Victionario</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Victionarium:Repudiationes">Repudiationes</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Elaboratores</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/la.wiktionary.org">Statistica</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//la.m.wiktionary.org/w/index.php?title=Modulus:Arguments&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Pagina mobilis</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-twlxc","wgBackendResponseTime":233,"wgPageParseReport":{"limitreport":{"cputime":"0.046","walltime":"0.060","ppvisitednodes":{"value":131,"limit":1000000},"postexpandincludesize":{"value":12880,"limit":2097152},"templateargumentsize":{"value":17,"limit":2097152},"expansiondepth":{"value":6,"limit":100},"expensivefunctioncount":{"value":14,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":18398,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 24.352 1 Modulus:Arguments/doc","100.00% 24.352 1 -total"," 44.91% 10.937 1 Formula:para"," 5.56% 1.355 2 Formula:cot"," 4.88% 1.188 2 Formula:cob"," 4.32% 1.053 3 Formula:tag"]},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-twlxc","timestamp":"20241125032319","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>