CINXE.COM
Module:parser - Wikizzjunarju
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available" lang="mt" dir="ltr"> <head> <meta charset="UTF-8"> <title>Module:parser - Wikizzjunarju</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available";var cookie=document.cookie.match(/(?:^|; )mtwiktionarymwclientpreferences=([^;]+)/);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":["",""],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"dmy","wgMonthNames":["","Jannar","Frar","Marzu","April","Mejju","Ġunju","Lulju","Awwissu","Settembru","Ottubru","Novembru","Diċembru"],"wgRequestId":"69a4dfc6-f326-426e-95fa-133463f985ef","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Module:parser","wgTitle":"parser","wgCurRevisionId":20911,"wgRevisionId":20911,"wgArticleId":5855,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageViewLanguage":"mt","wgPageContentLanguage":"mt","wgPageContentModel":"Scribunto","wgRelevantPageName":"Module:parser","wgRelevantArticleId":5855,"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":10000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q123551062","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"]};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","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","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=mt&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=mt&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=mt&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <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="Wikizzjunarju"> <meta property="og:title" content="Module:parser - Wikizzjunarju"> <meta property="og:type" content="website"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//mt.m.wiktionary.org/wiki/Module:parser"> <link rel="alternate" type="application/x-wiki" title="Editja" href="/w/index.php?title=Module:parser&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="Wikizzjunarju (mt)"> <link rel="EditURI" type="application/rsd+xml" href="//mt.wiktionary.org/w/api.php?action=rsd"> <link rel="canonical" href="https://mt.wiktionary.org/wiki/Module:parser"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.mt"> <link rel="alternate" type="application/atom+xml" title="Feed Atom ta' Wikizzjunarju" href="/w/index.php?title=Spe%C4%8Bjali:TibdilRi%C4%8Benti&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-Module_parser rootpage-Module_parser skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Aqbeż għall-kontentut</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="Sit"> <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="Menu prinċipali" > <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">Menu prinċipali</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">Menu prinċipali</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">mexxi għall-ġenb</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">aħbi</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigazzjoni </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-text" class="mw-list-item"><a href="/wiki/Il-Pa%C4%A1na_prin%C4%8Bipali"><span>Paġna prinċipali</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikizzjunarju:Portal_tal-komunit%C3%A0" title="Dwar il-proġett, x'tista' tagħmel, fejn tista' ssib l-affarijiet"><span>Portal tal-komunità</span></a></li><li id="n-Pjazza" class="mw-list-item"><a href="/wiki/Wikizzjunarju:Pjazza"><span>Pjazza</span></a></li><li id="n-requestedarticles" class="mw-list-item"><a href="/wiki/Wikizzjunarju:Artikli_rikjesti"><span>Artikli rikjesti</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Spe%C4%8Bjali:TibdilRi%C4%8Benti" title="Lista tal-bidliet riċenti fil-wiki [r]" accesskey="r"><span>Bidliet riċenti</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Spe%C4%8Bjali:Pa%C4%A1naKwalunkwe" title="Uri paġna kwalunkwe [x]" accesskey="x"><span>Paġna kwalunkwe</span></a></li><li id="n-help" class="mw-list-item"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents" title="Il-post fejn issir taf iżjed."><span>Għajnuna</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Il-Pa%C4%A1na_prin%C4%8Bipali" 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="Wikizzjunarju" src="/static/images/mobile/copyright/wiktionary-wordmark-mt.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="" src="/static/images/mobile/copyright/wiktionary-tagline-mt.svg" width="121" height="12" style="width: 7.5625em; height: 0.75em;"> </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/Spe%C4%8Bjali:Fittex" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Fittex fis-sit: Wikizzjunarju [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Fittex</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="Fittex fis-sit: Wikizzjunarju" aria-label="Fittex fis-sit: Wikizzjunarju" autocapitalize="none" title="Fittex fis-sit: Wikizzjunarju [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Speċjali:Fittex"> </div> <button class="cdx-button cdx-search-input__end-button">Fittex</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Għodda personali"> <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="Dehra"> <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="Dehra" > <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">Dehra</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_mt.wiktionary.org&uselang=mt" class=""><span>Donazzjonijiet</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=Spe%C4%8Bjali:O%C4%A7loqKont&returnto=Module%3Aparser" title="Nagħtuk parir toħloq kont u tidħol fih; però dan mhux obligatorju." class=""><span>Oħloq kont</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=Spe%C4%8Bjali:UtentD%C4%A7ul&returnto=Module%3Aparser" title="Inħeġġuk tidħol fil-kont tiegħek, għalkemm dan mhux obbligatorju [o]" accesskey="o" class=""><span>Idħol</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="Aktar għażliet" > <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="Għodda personali" > <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">Għodda personali</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_mt.wiktionary.org&uselang=mt"><span>Donazzjonijiet</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Spe%C4%8Bjali:O%C4%A7loqKont&returnto=Module%3Aparser" title="Nagħtuk parir toħloq kont u tidħol fih; però dan mhux obligatorju."><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Oħloq kont</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Spe%C4%8Bjali:UtentD%C4%A7ul&returnto=Module%3Aparser" title="Inħeġġuk tidħol fil-kont tiegħek, għalkemm dan mhux obbligatorju [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Idħol</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"> Il-paġni għal edituri anonimi <a href="/wiki/G%C4%A7ajnuna:Introduction" aria-label="Tgħallem iktar dwar kif timmodifika"><span>kun af aktar</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/Spe%C4%8Bjali:KontribuzzjonijietTieg%C4%A7i" title="A list of edits made from this IP address [y]" accesskey="y"><span>Kontribuzzjonijiet</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Spe%C4%8Bjali:DiskussjonijietTieg%C4%A7i" title="Diskussjoni dwar il-modifiki magħmula minn dan l-indirizz tal-IP [n]" accesskey="n"><span>Diskussjoni</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="Sit"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">Module</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">parser</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="Żur artiklu f'lingwa differenti. Disponibbli fi 18 lingwi" > <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-18" 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">18 lingwi</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:parser" title="وحدة:parser – Għarbi" lang="ar" hreflang="ar" data-title="وحدة:parser" data-language-autonym="العربية" data-language-local-name="Għarbi" 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:parser" title="Modul:parser – Banjar" lang="bjn" hreflang="bjn" data-title="Modul:parser" data-language-autonym="Banjar" data-language-local-name="Banjar" class="interlanguage-link-target"><span>Banjar</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:parser" title="মডিউল:parser – Bengali" lang="bn" hreflang="bn" data-title="মডিউল:parser" data-language-autonym="বাংলা" data-language-local-name="Bengali" class="interlanguage-link-target"><span>বাংলা</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:parser" title="مۆدیوول:parser – Kurd Ċentrali" lang="ckb" hreflang="ckb" data-title="مۆدیوول:parser" data-language-autonym="کوردی" data-language-local-name="Kurd Ċentrali" 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:parser" title="Module:parser – Ingliż" lang="en" hreflang="en" data-title="Module:parser" data-language-autonym="English" data-language-local-name="Ingliż" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-hsb mw-list-item"><a href="https://hsb.wiktionary.org/wiki/Modul:parser" title="Modul:parser – Sorbjan ta’ Fuq" lang="hsb" hreflang="hsb" data-title="Modul:parser" data-language-autonym="Hornjoserbsce" data-language-local-name="Sorbjan ta’ Fuq" class="interlanguage-link-target"><span>Hornjoserbsce</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:parser" title="モジュール:parser – Ġappuniż" lang="ja" hreflang="ja" data-title="モジュール:parser" data-language-autonym="日本語" data-language-local-name="Ġappuniż" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ky mw-list-item"><a href="https://ky.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:parser" title="Модуль:parser – Kirgiż" lang="ky" hreflang="ky" data-title="Модуль:parser" data-language-autonym="Кыргызча" data-language-local-name="Kirgiż" 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:parser" title="မဝ်ဂျူ:parser – Mon" lang="mnw" hreflang="mnw" data-title="မဝ်ဂျူ:parser" data-language-autonym="ဘာသာမန်" data-language-local-name="Mon" 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:parser" title="Modul:parser – Malay" lang="ms" hreflang="ms" data-title="Modul:parser" data-language-autonym="Bahasa Melayu" data-language-local-name="Malay" 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:parser" title="မော်ဂျူး:parser – Burmiż" lang="my" hreflang="my" data-title="မော်ဂျူး:parser" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="Burmiż" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wiktionary.org/wiki/%E0%A8%AE%E0%A9%8C%E0%A8%A1%E0%A8%BF%E0%A8%8A%E0%A8%B2:parser" title="ਮੌਡਿਊਲ:parser – Punjabi" lang="pa" hreflang="pa" data-title="ਮੌਡਿਊਲ:parser" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="Punjabi" 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:parser" title="မေႃႇၵျူး:parser – Shan" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:parser" 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:parser" title="Module:parser – Sinhala" lang="si" hreflang="si" data-title="Module:parser" data-language-autonym="සිංහල" data-language-local-name="Sinhala" class="interlanguage-link-target"><span>සිංහල</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:parser" title="Модул:parser – Serb" lang="sr" hreflang="sr" data-title="Модул:parser" data-language-autonym="Српски / srpski" data-language-local-name="Serb" class="interlanguage-link-target"><span>Српски / srpski</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:parser" title="มอดูล:parser – Tajlandiż" lang="th" hreflang="th" data-title="มอดูล:parser" data-language-autonym="ไทย" data-language-local-name="Tajlandiż" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wiktionary.org/wiki/M%C3%B4_%C4%91un:parser" title="Mô đun:parser – Vjetnamiż" lang="vi" hreflang="vi" data-title="Mô đun:parser" data-language-autonym="Tiếng Việt" data-language-local-name="Vjetnamiż" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wiktionary.org/wiki/Module:Parser" title="Module:Parser – Ċiniż" lang="zh" hreflang="zh" data-title="Module:Parser" data-language-autonym="中文" data-language-local-name="Ċiniż" 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/Q123551062#sitelinks-wiktionary" title="Immodifika l-ħoloq interlingwi" class="wbc-editpage">Immodifika l-ħoloq</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="Spazji tal-isem"> <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/Module:parser" 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=Module_talk:parser&action=edit&redlink=1" rel="discussion" class="new" title="Diskussjoni dwar il-paġna ta' kontenut (il-paġna ma teżistix) [t]" accesskey="t"><span>Diskussjoni</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="Biddel il-varjant tal-lingwa" > <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="Dehriet"> <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/Module:parser"><span>Aqra</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:parser&action=edit" title="Immodifika din il-paġna [e]" accesskey="e"><span>Editja</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:parser&action=history" title="Verżjonijiet preċedenti ta' din il-paġna [h]" accesskey="h"><span>Ara l-kronoloġija</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Għodda tal-paġna"> <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="Għodda" > <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">Għodda</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">Għodda</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">mexxi għall-ġenb</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">aħbi</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"> Azzjonijiet </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/Module:parser"><span>Aqra</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:parser&action=edit" title="Immodifika din il-paġna [e]" accesskey="e"><span>Editja</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:parser&action=history"><span>Ara l-kronoloġija</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Ġenerali </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Spe%C4%8Bjali:XiJwassalHawn/Module:parser" title="Lista tal-paġni tal-wiki kollha li jwasslu hawn [j]" accesskey="j"><span>Li jwasslu 'l hawn</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Spe%C4%8Bjali:TibdilRelatat/Module:parser" rel="nofollow" title="Modifiki riċenti f'paġni b'ħolqa minn din il-paġna [k]" accesskey="k"><span>Tibdil relatat</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=mt" title="Tella' fajls [u]" accesskey="u"><span>Tella' fajl</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Spe%C4%8Bjali:Pa%C4%A1niSpe%C4%8Bjali" title="Lista tal-paġni speċjali kollha [q]" accesskey="q"><span>Paġni speċjali</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Module:parser&oldid=20911" title="Ħolqa permanenti għal din il-verżjoni tal-paġna"><span>Ħolqa permanenti</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Module:parser&action=info" title="Aktar informazzjoni fuq din il-paġna"><span>Informazzjoni fuq il-paġna</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Spe%C4%8Bjali:UrlShortener&url=https%3A%2F%2Fmt.wiktionary.org%2Fwiki%2FModule%3Aparser"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Spe%C4%8Bjali:QrCode&url=https%3A%2F%2Fmt.wiktionary.org%2Fwiki%2FModule%3Aparser"><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=Spe%C4%8Bjali:DownloadAsPdf&page=Module%3Aparser&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="Verżjoni tal-ipprintjar ta' din il-paġna [p]" accesskey="p"><span>Verżjoni għall-ipprintjar</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"> Fi proġetti oħra </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q123551062" title="Ħolqa għall-element konness tal-arkivju tad-dejta [g]" accesskey="g"><span>Element ta' 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="Għodda tal-paġna"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Dehra"> <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">Dehra</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">mexxi għall-ġenb</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">aħbi</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">Minn Wikizzjunarju</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="mt" dir="ltr"><p><i>Documentation for this module may be created at <a href="/w/index.php?title=Module:parser/doc&action=edit&redlink=1" class="new" title="Module:parser/doc (il-paġna ma teżistix)">Module:parser/doc</a></i> </p><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="kd">local</span> <span class="n">export</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-2"><a href="#L-2"><span class="linenos" data-line="2"></span></a> </span><span id="L-3"><a href="#L-3"><span class="linenos" data-line="3"></span></a><span class="kd">local</span> <span class="n">concat</span> <span class="o">=</span> <span class="nb">table.concat</span> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a><span class="kd">local</span> <span class="n">deepcopy</span> <span class="c1">-- Assigned when needed.</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a><span class="kd">local</span> <span class="nb">getmetatable</span> <span class="o">=</span> <span class="nb">getmetatable</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">insert</span> <span class="o">=</span> <span class="nb">table.insert</span> </span><span id="L-7"><a href="#L-7"><span class="linenos" data-line="7"></span></a><span class="kd">local</span> <span class="nb">next</span> <span class="o">=</span> <span class="nb">next</span> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a><span class="kd">local</span> <span class="nb">rawget</span> <span class="o">=</span> <span class="nb">rawget</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a><span class="kd">local</span> <span class="nb">rawset</span> <span class="o">=</span> <span class="nb">rawset</span> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a><span class="kd">local</span> <span class="n">remove</span> <span class="o">=</span> <span class="nb">table.remove</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a><span class="kd">local</span> <span class="nb">setmetatable</span> <span class="o">=</span> <span class="nb">setmetatable</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a><span class="kd">local</span> <span class="nb">type</span> <span class="o">=</span> <span class="nb">type</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a><span class="kd">local</span> <span class="n">unpack</span> <span class="o">=</span> <span class="n">unpack</span> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a> </span><span id="L-15"><a href="#L-15"><span class="linenos" data-line="15"></span></a><span class="kd">local</span> <span class="n">classes</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a><span class="kd">local</span> <span class="n">metamethods</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s2">"Module:data/metamethods"</span><span class="p">)</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a><span class="c1">------------------------------------------------------------------------------------</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a><span class="c1">--</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a><span class="c1">-- Helper functions</span> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a><span class="c1">--</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a><span class="c1">------------------------------------------------------------------------------------</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">get_nested</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-25"><a href="#L-25"><span class="linenos" data-line="25"></span></a> <span class="kr">if</span> <span class="n">t</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a> <span class="kr">elseif</span> <span class="p">...</span> <span class="o">==</span> <span class="kc">nil</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">t</span><span class="p">[</span><span class="n">k</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">end</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">get_nested</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="n">k</span><span class="p">],</span> <span class="p">...)</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><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">set_nested</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a> <span class="kr">if</span> <span class="p">...</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="kd">local</span> <span class="n">t_next</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">k</span><span class="p">]</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">t_next</span> <span class="o">==</span> <span class="kc">nil</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="n">t_next</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> <span class="n">t</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">t_next</span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a> <span class="kr">end</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a> <span class="kr">return</span> <span class="n">set_nested</span><span class="p">(</span><span class="n">t_next</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a> <span class="kr">end</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> <span class="n">t</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</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><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">inherit_metamethods</span><span class="p">(</span><span class="n">child</span><span class="p">,</span> <span class="n">parent</span><span class="p">)</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a> <span class="kr">if</span> <span class="n">parent</span> <span class="kr">then</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> <span class="kr">for</span> <span class="n">method</span><span class="p">,</span> <span class="n">value</span> <span class="kr">in</span> <span class="nb">next</span><span class="p">,</span> <span class="n">parent</span> <span class="kr">do</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a> <span class="kr">if</span> <span class="n">child</span><span class="p">[</span><span class="n">method</span><span class="p">]</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">and</span> <span class="n">metamethods</span><span class="p">[</span><span class="n">method</span><span class="p">]</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a> <span class="n">child</span><span class="p">[</span><span class="n">method</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a> <span class="kr">end</span> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a> <span class="kr">end</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="kr">end</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a> <span class="kr">return</span> <span class="n">child</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a><span class="kr">end</span> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">signed_index</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a> <span class="kr">return</span> <span class="n">n</span> <span class="ow">and</span> <span class="n">n</span> <span class="o"><=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="o">#</span><span class="n">t</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">n</span> <span class="ow">or</span> <span class="n">n</span> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a><span class="kr">end</span> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">is_node</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> <span class="kr">return</span> <span class="n">classes</span><span class="p">[</span><span class="nb">getmetatable</span><span class="p">(</span><span class="n">value</span><span class="p">)]</span> <span class="o">~=</span> <span class="kc">nil</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a><span class="kr">end</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a><span class="c1">-- Recursively calling tostring() adds to the C stack (limit: 200), whereas</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a><span class="c1">-- calling __tostring metamethods directly does not. Occasionally relevant when</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a><span class="c1">-- dealing with very deep nesting.</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a><span class="kd">local</span> <span class="nb">tostring</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a><span class="kr">do</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">_tostring</span> <span class="o">=</span> <span class="n">_G</span><span class="p">.</span><span class="n">tostring</span> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="kr">function</span> <span class="nf">tostring</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="kr">if</span> <span class="n">is_node</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="kr">return</span> <span class="n">value</span><span class="p">:</span><span class="n">__tostring</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="kr">end</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> <span class="kr">return</span> <span class="n">_tostring</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> <span class="kr">end</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a><span class="kr">end</span> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">class_else_type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a> <span class="kd">local</span> <span class="n">class</span> <span class="o">=</span> <span class="n">classes</span><span class="p">[</span><span class="nb">getmetatable</span><span class="p">(</span><span class="n">value</span><span class="p">)]</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a> <span class="kr">if</span> <span class="n">class</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a> <span class="kr">return</span> <span class="n">class</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a> <span class="kr">end</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a> <span class="kr">return</span> <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a><span class="kr">end</span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a><span class="c1">------------------------------------------------------------------------------------</span> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a><span class="c1">--</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a><span class="c1">-- Nodes</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a><span class="c1">--</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a><span class="c1">------------------------------------------------------------------------------------</span> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a><span class="kd">local</span> <span class="n">Node</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a><span class="n">Node</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">Node</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a><span class="kr">function</span> <span class="nc">Node</span><span class="p">:</span><span class="nf">next</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">self</span><span class="p">,</span> <span class="n">i</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a><span class="kr">end</span> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a><span class="kr">function</span> <span class="nc">Node</span><span class="p">:</span><span class="nf">next_node</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></span></a> <span class="kd">local</span> <span class="n">v</span> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a> <span class="kr">repeat</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a> <span class="n">v</span><span class="p">,</span> <span class="n">self</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="nb">next</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a> <span class="kr">until</span> <span class="n">v</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">or</span> <span class="n">is_node</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a> <span class="kr">return</span> <span class="n">v</span><span class="p">,</span> <span class="n">self</span><span class="p">,</span> <span class="n">i</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><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a><span class="c1">-- Implements recursive iteration over a node tree, using functors to maintain state (which uses a lot less memory than closures). Iterator1 exists only to return the calling node on the first iteration, while Iterator2 uses a stack to store the state of each layer in the tree.</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a><span class="c1">-- When a node is encountered (which may contain other nodes), it is returned on the first iteration, and then any child nodes are returned on each subsequent iteration; the same process is followed if any of those children contain nodes themselves. Once a particular node has been fully traversed, the iterator moves back up one layer and continues with any sibling nodes.</span> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a><span class="c1">-- Each iteration returns three values: `value`, `node` and `key`. Together, these can be used to manipulate the node tree at any given point without needing to know the full structure. Note that when the input node is returned on the first iteration, `node` and `key` will be nil.</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a><span class="c1">-- By default, the iterator will use the `next` method of each node, but this can be changed with the `next_func` parameter, which accepts a string argument with the name of a next method. This is because trees might consist of several different classes of node, and each might have different next methods that are tailored to their particular structures. In addition, each class of node might have multiple different next methods, which can be named according to their purposes. `next_func` ensures that the iterator uses equivalent next methods between different types of node.</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a><span class="c1">-- Currently, two next methods are available: `next`, which simply iterates over the node conventionally, and `next_node`, which only returns children that are themselves nodes. Custom next methods can be declared by any calling module.</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a><span class="kr">do</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> <span class="kd">local</span> <span class="n">Iterator1</span><span class="p">,</span> <span class="n">Iterator2</span> <span class="o">=</span> <span class="p">{},</span> <span class="p">{}</span> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="n">Iterator1</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">Iterator2</span> <span class="c1">-- Not a typo.</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="n">Iterator2</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">Iterator2</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a> <span class="kr">function</span> <span class="nc">Iterator1</span><span class="p">:</span><span class="nf">__call</span><span class="p">()</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">Iterator2</span><span class="p">)</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="n">node</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> <span class="kr">end</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a> <span class="kr">function</span> <span class="nc">Iterator2</span><span class="p">:</span><span class="nf">push</span><span class="p">(</span><span class="n">node</span><span class="p">)</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">node</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="p">}</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a> <span class="n">self</span><span class="p">[</span><span class="o">#</span><span class="n">self</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">layer</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">layer</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a> <span class="kr">return</span> <span class="n">self</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> <span class="kr">end</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="kr">function</span> <span class="nc">Iterator2</span><span class="p">:</span><span class="nf">pop</span><span class="p">()</span> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a> <span class="kd">local</span> <span class="n">len</span> <span class="o">=</span> <span class="o">#</span><span class="n">self</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a> <span class="n">self</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="n">len</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="kr">end</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="kr">function</span> <span class="nc">Iterator2</span><span class="p">:</span><span class="nf">iterate</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="kd">local</span> <span class="n">v</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">k</span> <span class="o">=</span> <span class="p">...</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></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-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="n">layer</span><span class="p">.</span><span class="n">k</span> <span class="o">=</span> <span class="n">k</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="kr">return</span> <span class="p">...</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="kr">end</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">pop</span><span class="p">()</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a> <span class="kr">if</span> <span class="n">layer</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">layer</span><span class="p">.</span><span class="n">node</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">iterate</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">node</span><span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">next_func</span><span class="p">](</span><span class="n">node</span><span class="p">,</span> <span class="n">layer</span><span class="p">.</span><span class="n">k</span><span class="p">))</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a> <span class="kr">end</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> <span class="kr">end</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> <span class="kr">function</span> <span class="nc">Iterator2</span><span class="p">:</span><span class="nf">__call</span><span class="p">()</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="kd">local</span> <span class="n">node</span><span class="p">,</span> <span class="n">k</span> <span class="o">=</span> <span class="n">layer</span><span class="p">.</span><span class="n">node</span><span class="p">,</span> <span class="n">layer</span><span class="p">.</span><span class="n">k</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="kd">local</span> <span class="n">curr_val</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a> <span class="kr">if</span> <span class="n">is_node</span><span class="p">(</span><span class="n">curr_val</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">push</span><span class="p">(</span><span class="n">curr_val</span><span class="p">)</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a> <span class="n">node</span><span class="p">,</span> <span class="n">k</span> <span class="o">=</span> <span class="n">layer</span><span class="p">.</span><span class="n">node</span><span class="p">,</span> <span class="n">layer</span><span class="p">.</span><span class="n">k</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="kr">end</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">iterate</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">node</span><span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">next_func</span><span class="p">](</span><span class="n">node</span><span class="p">,</span> <span class="n">k</span><span class="p">))</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a> <span class="kr">end</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="kr">function</span> <span class="nc">Node</span><span class="p">:</span><span class="nf">__pairs</span><span class="p">(</span><span class="n">next_func</span><span class="p">)</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">({</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> <span class="n">next_func</span> <span class="o">=</span> <span class="n">next_func</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">and</span> <span class="s2">"next"</span> <span class="ow">or</span> <span class="n">next_func</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="p">},</span> <span class="n">Iterator1</span><span class="p">):</span><span class="n">push</span><span class="p">(</span><span class="n">self</span><span class="p">)</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="kr">end</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a><span class="kr">end</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a><span class="kr">function</span> <span class="nc">Node</span><span class="p">:</span><span class="nf">rawpairs</span><span class="p">()</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a> <span class="kr">return</span> <span class="nb">next</span><span class="p">,</span> <span class="n">self</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a><span class="kr">end</span> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a><span class="kr">function</span> <span class="nc">Node</span><span class="p">:</span><span class="nf">__tostring</span><span class="p">()</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">output</span> <span class="o">=</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">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">self</span> <span class="kr">do</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">self</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a> <span class="kr">end</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a> <span class="kr">return</span> <span class="n">concat</span><span class="p">(</span><span class="n">output</span><span class="p">)</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><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a><span class="kr">function</span> <span class="nc">Node</span><span class="p">:</span><span class="nf">clone</span><span class="p">()</span> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">deepcopy</span> <span class="kr">then</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> <span class="n">deepcopy</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:table"</span><span class="p">).</span><span class="n">deepcopy</span> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a> <span class="kr">end</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> <span class="kr">return</span> <span class="n">deepcopy</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="s2">"keep"</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a><span class="kr">end</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a><span class="kr">function</span> <span class="nc">Node</span><span class="p">:</span><span class="nf">new_class</span><span class="p">(</span><span class="n">class</span><span class="p">)</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="kd">local</span> <span class="n">t</span> <span class="o">=</span> <span class="p">{</span><span class="nb">type</span> <span class="o">=</span> <span class="n">class</span><span class="p">}</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> <span class="n">t</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">t</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="n">t</span> <span class="o">=</span> <span class="n">inherit_metamethods</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">self</span><span class="p">)</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="n">classes</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">class</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">self</span><span class="p">)</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a><span class="kr">end</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a><span class="n">Node</span><span class="p">.</span><span class="n">keys_to_remove</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"fail"</span><span class="p">,</span> <span class="s2">"handler"</span><span class="p">,</span> <span class="s2">"head"</span><span class="p">,</span> <span class="s2">"override"</span><span class="p">,</span> <span class="s2">"route"</span><span class="p">}</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a><span class="kr">function</span> <span class="nc">Node</span><span class="p">:</span><span class="nf">new</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="kc">nil</span><span class="p">)</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a> <span class="kd">local</span> <span class="n">keys_to_remove</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">keys_to_remove</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">keys_to_remove</span> <span class="kr">do</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> <span class="n">t</span><span class="p">[</span><span class="n">keys_to_remove</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a> <span class="kr">end</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">self</span><span class="p">)</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a><span class="kr">end</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a><span class="kr">do</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a> <span class="kd">local</span> <span class="n">Proxy</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a> <span class="kr">function</span> <span class="nc">Proxy</span><span class="p">:</span><span class="nf">__index</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="kd">local</span> <span class="n">v</span> <span class="o">=</span> <span class="n">Proxy</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></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-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> <span class="kr">return</span> <span class="n">v</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">return</span> <span class="n">self</span><span class="p">.</span><span class="n">__chars</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a> <span class="kr">end</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> <span class="kr">function</span> <span class="nc">Proxy</span><span class="p">:</span><span class="nf">__newindex</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a> <span class="kd">local</span> <span class="n">key</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">__keys</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> <span class="kr">if</span> <span class="n">key</span> <span class="kr">then</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">__chars</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">__parents</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a> <span class="kr">elseif</span> <span class="n">key</span> <span class="o">==</span> <span class="kc">false</span> <span class="kr">then</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"Character is immutable."</span><span class="p">)</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a> <span class="kr">else</span> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"Invalid key."</span><span class="p">)</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a> <span class="kr">end</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> <span class="kr">end</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> <span class="kr">function</span> <span class="nc">Proxy</span><span class="p">:</span><span class="nf">build</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a> <span class="kd">local</span> <span class="n">len</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">__len</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">__chars</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">__parents</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> <span class="o">=</span> <span class="n">b</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">__keys</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> <span class="o">=</span> <span class="n">c</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">__len</span> <span class="o">=</span> <span class="n">len</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a> <span class="kr">end</span> </span><span id="L-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a> <span class="kr">function</span> <span class="nc">Proxy</span><span class="p">:</span><span class="nf">iter</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="kd">local</span> <span class="n">char</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">__chars</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> <span class="kr">if</span> <span class="n">char</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a> <span class="kr">return</span> <span class="n">i</span><span class="p">,</span> <span class="n">self</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">self</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">__parents</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">self</span><span class="p">.</span><span class="n">__keys</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> <span class="kr">end</span> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> <span class="kr">end</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> <span class="kr">function</span> <span class="nc">Node</span><span class="p">:</span><span class="nf">new_proxy</span><span class="p">()</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">({</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> <span class="n">__node</span> <span class="o">=</span> <span class="n">self</span><span class="p">,</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> <span class="n">__chars</span> <span class="o">=</span> <span class="p">{},</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> <span class="n">__parents</span> <span class="o">=</span> <span class="p">{},</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> <span class="n">__keys</span> <span class="o">=</span> <span class="p">{},</span> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a> <span class="n">__len</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a> <span class="p">},</span> <span class="n">Proxy</span><span class="p">)</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> <span class="kr">end</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a><span class="kr">end</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a><span class="c1">------------------------------------------------------------------------------------</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a><span class="c1">--</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a><span class="c1">-- Parser</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a><span class="c1">--</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a><span class="c1">------------------------------------------------------------------------------------</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a><span class="kd">local</span> <span class="n">Parser</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a><span class="n">Parser</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">Parser</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">read</span><span class="p">(</span><span class="n">delta</span><span class="p">)</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a> <span class="kd">local</span> <span class="n">v</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">text</span><span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">head</span> <span class="o">+</span> <span class="p">(</span><span class="n">delta</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">)]</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="kr">return</span> <span class="n">v</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">and</span> <span class="s2">""</span> <span class="ow">or</span> <span class="n">v</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a><span class="kr">end</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">advance</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">head</span> <span class="o">+</span> <span class="p">(</span><span class="n">n</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">n</span><span class="p">)</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="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">layer</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="kr">if</span> <span class="n">n</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a> <span class="kr">return</span> <span class="nb">rawget</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="o">#</span><span class="n">self</span> <span class="o">+</span> <span class="n">n</span><span class="p">)</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 class="kr">return</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a><span class="kr">end</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">emit</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="kr">if</span> <span class="n">b</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">signed_index</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">a</span><span class="p">),</span> <span class="n">b</span><span class="p">)</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="kr">else</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a> <span class="nb">rawset</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="o">#</span><span class="n">layer</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="kr">end</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a><span class="kr">end</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">emit_tokens</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="kr">if</span> <span class="n">b</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="n">a</span> <span class="o">=</span> <span class="n">signed_index</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">b</span> <span class="kr">do</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">a</span> <span class="o">+</span> <span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a> <span class="kr">end</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a> <span class="kr">else</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> <span class="kd">local</span> <span class="n">len</span> <span class="o">=</span> <span class="o">#</span><span class="n">layer</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">a</span> <span class="kr">do</span> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a> <span class="n">len</span> <span class="o">=</span> <span class="n">len</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a> <span class="nb">rawset</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">len</span><span class="p">,</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="kr">end</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> <span class="kr">end</span> </span><span id="L-313"><a href="#L-313"><span class="linenos" data-line="313"></span></a><span class="kr">end</span> </span><span id="L-314"><a href="#L-314"><span class="linenos" data-line="314"></span></a> </span><span id="L-315"><a href="#L-315"><span class="linenos" data-line="315"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">remove</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a> <span class="kr">if</span> <span class="n">n</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-318"><a href="#L-318"><span class="linenos" data-line="318"></span></a> <span class="kr">return</span> <span class="n">remove</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">signed_index</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">n</span><span class="p">))</span> </span><span id="L-319"><a href="#L-319"><span class="linenos" data-line="319"></span></a> <span class="kr">end</span> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a> <span class="kd">local</span> <span class="n">len</span> <span class="o">=</span> <span class="o">#</span><span class="n">layer</span> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> <span class="kd">local</span> <span class="n">token</span> <span class="o">=</span> <span class="n">layer</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a> <span class="n">layer</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a> <span class="kr">return</span> <span class="n">token</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a><span class="kr">end</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">replace</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> <span class="n">layer</span><span class="p">[</span><span class="n">signed_index</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">a</span><span class="p">)]</span> <span class="o">=</span> <span class="n">b</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a><span class="kr">end</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a><span class="c1">-- Unlike default table.concat, this respects __tostring metamethods.</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">concat</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> <span class="kr">if</span> <span class="n">a</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">or</span> <span class="n">a</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">concat</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> <span class="kr">end</span> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="kd">local</span> <span class="n">layer</span><span class="p">,</span> <span class="n">ret</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">layer</span><span class="p">(</span><span class="n">a</span><span class="p">),</span> <span class="p">{},</span> <span class="mi">0</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="n">b</span> <span class="ow">and</span> <span class="n">signed_index</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> <span class="ow">or</span> <span class="mi">1</span><span class="p">,</span> <span class="n">c</span> <span class="ow">and</span> <span class="n">signed_index</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="ow">or</span> <span class="o">#</span><span class="n">layer</span> <span class="kr">do</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="n">ret</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">layer</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> </span><span id="L-340"><a href="#L-340"><span class="linenos" data-line="340"></span></a> <span class="kr">end</span> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> <span class="kr">return</span> <span class="n">concat</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a><span class="kr">end</span> </span><span id="L-343"><a href="#L-343"><span class="linenos" data-line="343"></span></a> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">emitted</span><span class="p">(</span><span class="n">delta</span><span class="p">)</span> </span><span id="L-345"><a href="#L-345"><span class="linenos" data-line="345"></span></a> <span class="kr">if</span> <span class="n">delta</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-346"><a href="#L-346"><span class="linenos" data-line="346"></span></a> <span class="n">delta</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a> <span class="kr">end</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a> <span class="kd">local</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-349"><a href="#L-349"><span class="linenos" data-line="349"></span></a> <span class="kr">while</span> <span class="kc">true</span> <span class="kr">do</span> </span><span id="L-350"><a href="#L-350"><span class="linenos" data-line="350"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">layer</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> </span><span id="L-351"><a href="#L-351"><span class="linenos" data-line="351"></span></a> <span class="kr">if</span> <span class="n">layer</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-352"><a href="#L-352"><span class="linenos" data-line="352"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-353"><a href="#L-353"><span class="linenos" data-line="353"></span></a> <span class="kr">end</span> </span><span id="L-354"><a href="#L-354"><span class="linenos" data-line="354"></span></a> <span class="kd">local</span> <span class="n">layer_len</span> <span class="o">=</span> <span class="o">#</span><span class="n">layer</span> </span><span id="L-355"><a href="#L-355"><span class="linenos" data-line="355"></span></a> <span class="kr">if</span> <span class="o">-</span><span class="n">delta</span> <span class="o"><=</span> <span class="n">layer_len</span> <span class="kr">then</span> </span><span id="L-356"><a href="#L-356"><span class="linenos" data-line="356"></span></a> <span class="kr">return</span> <span class="nb">rawget</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">layer_len</span> <span class="o">+</span> <span class="n">delta</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a> <span class="kr">end</span> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> <span class="n">delta</span> <span class="o">=</span> <span class="n">delta</span> <span class="o">+</span> <span class="n">layer_len</span> </span><span id="L-359"><a href="#L-359"><span class="linenos" data-line="359"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-360"><a href="#L-360"><span class="linenos" data-line="360"></span></a> <span class="kr">end</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a><span class="kr">end</span> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> </span><span id="L-363"><a href="#L-363"><span class="linenos" data-line="363"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">push</span><span class="p">(</span><span class="n">route</span><span class="p">)</span> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a> <span class="n">head</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">head</span><span class="p">,</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> <span class="n">route</span> <span class="o">=</span> <span class="n">route</span> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a> <span class="p">}</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> <span class="n">self</span><span class="p">[</span><span class="o">#</span><span class="n">self</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">layer</span> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></span></a> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">layer</span> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a><span class="kr">end</span> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">push_sublayer</span><span class="p">(</span><span class="n">handler</span><span class="p">,</span> <span class="n">inherit</span><span class="p">)</span> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a> <span class="kd">local</span> <span class="n">sublayer</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-374"><a href="#L-374"><span class="linenos" data-line="374"></span></a> <span class="n">handler</span> <span class="o">=</span> <span class="n">handler</span><span class="p">,</span> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a> <span class="n">sublayer</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></span></a> <span class="p">}</span> </span><span id="L-377"><a href="#L-377"><span class="linenos" data-line="377"></span></a> <span class="kr">if</span> <span class="n">inherit</span> <span class="kr">then</span> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">sublayer</span><span class="p">,</span> <span class="n">inherit_metamethods</span><span class="p">({</span> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a> <span class="n">__index</span> <span class="o">=</span> <span class="n">layer</span><span class="p">,</span> </span><span id="L-381"><a href="#L-381"><span class="linenos" data-line="381"></span></a> <span class="n">__newindex</span> <span class="o">=</span> <span class="n">layer</span> </span><span id="L-382"><a href="#L-382"><span class="linenos" data-line="382"></span></a> <span class="p">},</span> <span class="nb">getmetatable</span><span class="p">(</span><span class="n">layer</span><span class="p">)))</span> </span><span id="L-383"><a href="#L-383"><span class="linenos" data-line="383"></span></a> <span class="kr">end</span> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a> <span class="n">self</span><span class="p">[</span><span class="o">#</span><span class="n">self</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">sublayer</span> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">sublayer</span> </span><span id="L-386"><a href="#L-386"><span class="linenos" data-line="386"></span></a><span class="kr">end</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">pop</span><span class="p">()</span> </span><span id="L-389"><a href="#L-389"><span class="linenos" data-line="389"></span></a> <span class="kd">local</span> <span class="n">len</span><span class="p">,</span> <span class="n">layer</span> <span class="o">=</span> <span class="o">#</span><span class="n">self</span> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a> <span class="kr">while</span> <span class="kc">true</span> <span class="kr">do</span> </span><span id="L-391"><a href="#L-391"><span class="linenos" data-line="391"></span></a> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> </span><span id="L-392"><a href="#L-392"><span class="linenos" data-line="392"></span></a> <span class="n">self</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a> <span class="n">len</span> <span class="o">=</span> <span class="n">len</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-394"><a href="#L-394"><span class="linenos" data-line="394"></span></a> <span class="kd">local</span> <span class="n">new</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> </span><span id="L-395"><a href="#L-395"><span class="linenos" data-line="395"></span></a> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">new</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">and</span> <span class="n">self</span> <span class="ow">or</span> <span class="n">new</span> </span><span id="L-396"><a href="#L-396"><span class="linenos" data-line="396"></span></a> <span class="kr">if</span> <span class="n">layer</span><span class="p">.</span><span class="n">sublayer</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-397"><a href="#L-397"><span class="linenos" data-line="397"></span></a> <span class="kr">break</span> </span><span id="L-398"><a href="#L-398"><span class="linenos" data-line="398"></span></a> <span class="kr">end</span> </span><span id="L-399"><a href="#L-399"><span class="linenos" data-line="399"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">emit_tokens</span><span class="p">(</span><span class="n">layer</span><span class="p">)</span> </span><span id="L-400"><a href="#L-400"><span class="linenos" data-line="400"></span></a> <span class="kr">end</span> </span><span id="L-401"><a href="#L-401"><span class="linenos" data-line="401"></span></a> <span class="kr">return</span> <span class="n">layer</span> </span><span id="L-402"><a href="#L-402"><span class="linenos" data-line="402"></span></a><span class="kr">end</span> </span><span id="L-403"><a href="#L-403"><span class="linenos" data-line="403"></span></a> </span><span id="L-404"><a href="#L-404"><span class="linenos" data-line="404"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">pop_sublayer</span><span class="p">()</span> </span><span id="L-405"><a href="#L-405"><span class="linenos" data-line="405"></span></a> <span class="kd">local</span> <span class="n">len</span><span class="p">,</span> <span class="n">layer</span> <span class="o">=</span> <span class="o">#</span><span class="n">self</span><span class="p">,</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-406"><a href="#L-406"><span class="linenos" data-line="406"></span></a> <span class="n">self</span><span class="p">[</span><span class="n">len</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-407"><a href="#L-407"><span class="linenos" data-line="407"></span></a> <span class="kd">local</span> <span class="n">new</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="n">len</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> </span><span id="L-408"><a href="#L-408"><span class="linenos" data-line="408"></span></a> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">new</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">and</span> <span class="n">self</span> <span class="ow">or</span> <span class="n">new</span> </span><span id="L-409"><a href="#L-409"><span class="linenos" data-line="409"></span></a> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="kc">nil</span><span class="p">)</span> </span><span id="L-410"><a href="#L-410"><span class="linenos" data-line="410"></span></a> <span class="n">layer</span><span class="p">.</span><span class="n">sublayer</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-411"><a href="#L-411"><span class="linenos" data-line="411"></span></a> <span class="kr">return</span> <span class="n">layer</span> </span><span id="L-412"><a href="#L-412"><span class="linenos" data-line="412"></span></a><span class="kr">end</span> </span><span id="L-413"><a href="#L-413"><span class="linenos" data-line="413"></span></a> </span><span id="L-414"><a href="#L-414"><span class="linenos" data-line="414"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">get</span><span class="p">(</span><span class="n">route</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-415"><a href="#L-415"><span class="linenos" data-line="415"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">push</span><span class="p">(</span><span class="n">route</span><span class="p">)</span> </span><span id="L-416"><a href="#L-416"><span class="linenos" data-line="416"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">route</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-417"><a href="#L-417"><span class="linenos" data-line="417"></span></a> <span class="kr">if</span> <span class="n">layer</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-418"><a href="#L-418"><span class="linenos" data-line="418"></span></a> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">traverse</span><span class="p">()</span> </span><span id="L-419"><a href="#L-419"><span class="linenos" data-line="419"></span></a> <span class="kr">end</span> </span><span id="L-420"><a href="#L-420"><span class="linenos" data-line="420"></span></a> <span class="kr">return</span> <span class="n">layer</span> </span><span id="L-421"><a href="#L-421"><span class="linenos" data-line="421"></span></a><span class="kr">end</span> </span><span id="L-422"><a href="#L-422"><span class="linenos" data-line="422"></span></a> </span><span id="L-423"><a href="#L-423"><span class="linenos" data-line="423"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">try</span><span class="p">(</span><span class="n">route</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-424"><a href="#L-424"><span class="linenos" data-line="424"></span></a> <span class="kd">local</span> <span class="n">failed_layer</span> <span class="o">=</span> <span class="n">get_nested</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">failed_routes</span><span class="p">,</span> <span class="n">route</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">head</span><span class="p">)</span> </span><span id="L-425"><a href="#L-425"><span class="linenos" data-line="425"></span></a> <span class="kr">if</span> <span class="n">failed_layer</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-426"><a href="#L-426"><span class="linenos" data-line="426"></span></a> <span class="kr">return</span> <span class="kc">false</span><span class="p">,</span> <span class="n">failed_layer</span> </span><span id="L-427"><a href="#L-427"><span class="linenos" data-line="427"></span></a> <span class="kr">end</span> </span><span id="L-428"><a href="#L-428"><span class="linenos" data-line="428"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">get</span><span class="p">(</span><span class="n">route</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-429"><a href="#L-429"><span class="linenos" data-line="429"></span></a> <span class="kr">return</span> <span class="ow">not</span> <span class="n">layer</span><span class="p">.</span><span class="n">fail</span><span class="p">,</span> <span class="n">layer</span> </span><span id="L-430"><a href="#L-430"><span class="linenos" data-line="430"></span></a><span class="kr">end</span> </span><span id="L-431"><a href="#L-431"><span class="linenos" data-line="431"></span></a> </span><span id="L-432"><a href="#L-432"><span class="linenos" data-line="432"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">consume</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-433"><a href="#L-433"><span class="linenos" data-line="433"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-434"><a href="#L-434"><span class="linenos" data-line="434"></span></a> <span class="kr">if</span> <span class="n">this</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-435"><a href="#L-435"><span class="linenos" data-line="435"></span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">read</span><span class="p">()</span> </span><span id="L-436"><a href="#L-436"><span class="linenos" data-line="436"></span></a> <span class="kr">end</span> </span><span id="L-437"><a href="#L-437"><span class="linenos" data-line="437"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">layer</span><span class="p">.</span><span class="n">override</span> <span class="ow">or</span> <span class="n">layer</span><span class="p">.</span><span class="n">handler</span><span class="p">)(</span><span class="n">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-438"><a href="#L-438"><span class="linenos" data-line="438"></span></a><span class="kr">end</span> </span><span id="L-439"><a href="#L-439"><span class="linenos" data-line="439"></span></a> </span><span id="L-440"><a href="#L-440"><span class="linenos" data-line="440"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">fail_route</span><span class="p">()</span> </span><span id="L-441"><a href="#L-441"><span class="linenos" data-line="441"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">pop</span><span class="p">()</span> </span><span id="L-442"><a href="#L-442"><span class="linenos" data-line="442"></span></a> <span class="n">layer</span><span class="p">.</span><span class="n">fail</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-443"><a href="#L-443"><span class="linenos" data-line="443"></span></a> <span class="n">set_nested</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="s2">"failed_routes"</span><span class="p">,</span> <span class="n">layer</span><span class="p">.</span><span class="n">route</span><span class="p">,</span> <span class="n">layer</span><span class="p">.</span><span class="n">head</span><span class="p">,</span> <span class="n">layer</span><span class="p">)</span> </span><span id="L-444"><a href="#L-444"><span class="linenos" data-line="444"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">head</span> <span class="o">=</span> <span class="n">layer</span><span class="p">.</span><span class="n">head</span> </span><span id="L-445"><a href="#L-445"><span class="linenos" data-line="445"></span></a> <span class="kr">return</span> <span class="n">layer</span> </span><span id="L-446"><a href="#L-446"><span class="linenos" data-line="446"></span></a><span class="kr">end</span> </span><span id="L-447"><a href="#L-447"><span class="linenos" data-line="447"></span></a> </span><span id="L-448"><a href="#L-448"><span class="linenos" data-line="448"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">traverse</span><span class="p">()</span> </span><span id="L-449"><a href="#L-449"><span class="linenos" data-line="449"></span></a> <span class="kr">while</span> <span class="kc">true</span> <span class="kr">do</span> </span><span id="L-450"><a href="#L-450"><span class="linenos" data-line="450"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">consume</span><span class="p">()</span> </span><span id="L-451"><a href="#L-451"><span class="linenos" data-line="451"></span></a> <span class="kr">if</span> <span class="n">layer</span> <span class="o">~=</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-452"><a href="#L-452"><span class="linenos" data-line="452"></span></a> <span class="kr">return</span> <span class="n">layer</span> </span><span id="L-453"><a href="#L-453"><span class="linenos" data-line="453"></span></a> <span class="kr">end</span> </span><span id="L-454"><a href="#L-454"><span class="linenos" data-line="454"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">advance</span><span class="p">()</span> </span><span id="L-455"><a href="#L-455"><span class="linenos" data-line="455"></span></a> <span class="kr">end</span> </span><span id="L-456"><a href="#L-456"><span class="linenos" data-line="456"></span></a><span class="kr">end</span> </span><span id="L-457"><a href="#L-457"><span class="linenos" data-line="457"></span></a> </span><span id="L-458"><a href="#L-458"><span class="linenos" data-line="458"></span></a><span class="c1">-- Converts a handler into a switch table the first time it's called, which avoids creating unnecessary objects, and prevents any scoping issues caused by parser methods being assigned to table keys before they've been declared.</span> </span><span id="L-459"><a href="#L-459"><span class="linenos" data-line="459"></span></a><span class="c1">-- false is used as the default key.</span> </span><span id="L-460"><a href="#L-460"><span class="linenos" data-line="460"></span></a><span class="kr">do</span> </span><span id="L-461"><a href="#L-461"><span class="linenos" data-line="461"></span></a> <span class="kd">local</span> <span class="n">Switch</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-462"><a href="#L-462"><span class="linenos" data-line="462"></span></a> </span><span id="L-463"><a href="#L-463"><span class="linenos" data-line="463"></span></a> <span class="kr">function</span> <span class="nc">Switch</span><span class="p">:</span><span class="nf">__call</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span> </span><span id="L-464"><a href="#L-464"><span class="linenos" data-line="464"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">self</span><span class="p">[</span><span class="n">this</span><span class="p">]</span> <span class="ow">or</span> <span class="n">self</span><span class="p">[</span><span class="kc">false</span><span class="p">])(</span><span class="n">parser</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span> </span><span id="L-465"><a href="#L-465"><span class="linenos" data-line="465"></span></a> <span class="kr">end</span> </span><span id="L-466"><a href="#L-466"><span class="linenos" data-line="466"></span></a> </span><span id="L-467"><a href="#L-467"><span class="linenos" data-line="467"></span></a> <span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">switch</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> </span><span id="L-468"><a href="#L-468"><span class="linenos" data-line="468"></span></a> <span class="kd">local</span> <span class="n">layer</span> <span class="o">=</span> <span class="n">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-469"><a href="#L-469"><span class="linenos" data-line="469"></span></a> <span class="c1">-- Point handler to the new switch table if the calling function is the current handler.</span> </span><span id="L-470"><a href="#L-470"><span class="linenos" data-line="470"></span></a> <span class="kr">if</span> <span class="n">layer</span><span class="p">.</span><span class="n">handler</span> <span class="o">==</span> <span class="n">func</span> <span class="kr">then</span> </span><span id="L-471"><a href="#L-471"><span class="linenos" data-line="471"></span></a> <span class="n">layer</span><span class="p">.</span><span class="n">handler</span> <span class="o">=</span> <span class="n">t</span> </span><span id="L-472"><a href="#L-472"><span class="linenos" data-line="472"></span></a> <span class="kr">end</span> </span><span id="L-473"><a href="#L-473"><span class="linenos" data-line="473"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">Switch</span><span class="p">)</span> </span><span id="L-474"><a href="#L-474"><span class="linenos" data-line="474"></span></a> <span class="kr">end</span> </span><span id="L-475"><a href="#L-475"><span class="linenos" data-line="475"></span></a><span class="kr">end</span> </span><span id="L-476"><a href="#L-476"><span class="linenos" data-line="476"></span></a> </span><span id="L-477"><a href="#L-477"><span class="linenos" data-line="477"></span></a><span class="c1">-- Generate a new parser class object, which is used as the template for any parser objects. These should be customized with additional/modified methods as needed.</span> </span><span id="L-478"><a href="#L-478"><span class="linenos" data-line="478"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">new_class</span><span class="p">()</span> </span><span id="L-479"><a href="#L-479"><span class="linenos" data-line="479"></span></a> <span class="kd">local</span> <span class="n">t</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-480"><a href="#L-480"><span class="linenos" data-line="480"></span></a> <span class="n">t</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">t</span> </span><span id="L-481"><a href="#L-481"><span class="linenos" data-line="481"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">inherit_metamethods</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">self</span><span class="p">),</span> <span class="n">self</span><span class="p">)</span> </span><span id="L-482"><a href="#L-482"><span class="linenos" data-line="482"></span></a><span class="kr">end</span> </span><span id="L-483"><a href="#L-483"><span class="linenos" data-line="483"></span></a> </span><span id="L-484"><a href="#L-484"><span class="linenos" data-line="484"></span></a><span class="c1">-- Generate a new parser object, which is used for a specific parse.</span> </span><span id="L-485"><a href="#L-485"><span class="linenos" data-line="485"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">new</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-486"><a href="#L-486"><span class="linenos" data-line="486"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">({</span> </span><span id="L-487"><a href="#L-487"><span class="linenos" data-line="487"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="p">,</span> </span><span id="L-488"><a href="#L-488"><span class="linenos" data-line="488"></span></a> <span class="n">head</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-489"><a href="#L-489"><span class="linenos" data-line="489"></span></a> <span class="p">},</span> <span class="n">self</span><span class="p">)</span> </span><span id="L-490"><a href="#L-490"><span class="linenos" data-line="490"></span></a><span class="kr">end</span> </span><span id="L-491"><a href="#L-491"><span class="linenos" data-line="491"></span></a> </span><span id="L-492"><a href="#L-492"><span class="linenos" data-line="492"></span></a><span class="kr">function</span> <span class="nc">Parser</span><span class="p">:</span><span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> </span><span id="L-493"><a href="#L-493"><span class="linenos" data-line="493"></span></a> <span class="kd">local</span> <span class="n">parser</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">new</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">text</span><span class="p">)</span> </span><span id="L-494"><a href="#L-494"><span class="linenos" data-line="494"></span></a> <span class="kd">local</span> <span class="n">success</span><span class="p">,</span> <span class="n">tokens</span> <span class="o">=</span> <span class="n">parser</span><span class="p">:</span><span class="n">try</span><span class="p">(</span><span class="n">unpack</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">route</span><span class="p">))</span> </span><span id="L-495"><a href="#L-495"><span class="linenos" data-line="495"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">parser</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-496"><a href="#L-496"><span class="linenos" data-line="496"></span></a> <span class="c1">-- This shouldn't happen.</span> </span><span id="L-497"><a href="#L-497"><span class="linenos" data-line="497"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"Parser exited with non-empty stack."</span><span class="p">)</span> </span><span id="L-498"><a href="#L-498"><span class="linenos" data-line="498"></span></a> <span class="kr">elseif</span> <span class="n">success</span> <span class="kr">then</span> </span><span id="L-499"><a href="#L-499"><span class="linenos" data-line="499"></span></a> <span class="kd">local</span> <span class="n">node</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">node</span> </span><span id="L-500"><a href="#L-500"><span class="linenos" data-line="500"></span></a> <span class="kr">return</span> <span class="kc">true</span><span class="p">,</span> <span class="n">node</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span><span class="n">new</span><span class="p">(</span><span class="n">tokens</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="mi">2</span><span class="p">)),</span> <span class="n">parser</span> </span><span id="L-501"><a href="#L-501"><span class="linenos" data-line="501"></span></a> <span class="kr">elseif</span> <span class="n">data</span><span class="p">.</span><span class="n">allow_fail</span> <span class="kr">then</span> </span><span id="L-502"><a href="#L-502"><span class="linenos" data-line="502"></span></a> <span class="kr">return</span> <span class="kc">false</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">parser</span> </span><span id="L-503"><a href="#L-503"><span class="linenos" data-line="503"></span></a> <span class="kr">end</span> </span><span id="L-504"><a href="#L-504"><span class="linenos" data-line="504"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"Parser exited with failed route."</span><span class="p">)</span> </span><span id="L-505"><a href="#L-505"><span class="linenos" data-line="505"></span></a><span class="kr">end</span> </span><span id="L-506"><a href="#L-506"><span class="linenos" data-line="506"></span></a> </span><span id="L-507"><a href="#L-507"><span class="linenos" data-line="507"></span></a><span class="n">export</span><span class="p">.</span><span class="n">class_else_type</span> <span class="o">=</span> <span class="n">class_else_type</span> </span><span id="L-508"><a href="#L-508"><span class="linenos" data-line="508"></span></a><span class="n">export</span><span class="p">.</span><span class="n">is_node</span> <span class="o">=</span> <span class="n">is_node</span> </span><span id="L-509"><a href="#L-509"><span class="linenos" data-line="509"></span></a><span class="n">export</span><span class="p">.</span><span class="n">tostring</span> <span class="o">=</span> <span class="nb">tostring</span> </span><span id="L-510"><a href="#L-510"><span class="linenos" data-line="510"></span></a> </span><span id="L-511"><a href="#L-511"><span class="linenos" data-line="511"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">new</span><span class="p">()</span> </span><span id="L-512"><a href="#L-512"><span class="linenos" data-line="512"></span></a> <span class="kr">return</span> <span class="n">Parser</span><span class="p">:</span><span class="n">new_class</span><span class="p">(),</span> <span class="n">Node</span><span class="p">:</span><span class="n">new_class</span><span class="p">(</span><span class="s2">"node"</span><span class="p">)</span> </span><span id="L-513"><a href="#L-513"><span class="linenos" data-line="513"></span></a><span class="kr">end</span> </span><span id="L-514"><a href="#L-514"><span class="linenos" data-line="514"></span></a> </span><span id="L-515"><a href="#L-515"><span class="linenos" data-line="515"></span></a><span class="kr">return</span> <span class="n">export</span> </span></pre></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐78f4c97c5d‐5x28m Cached time: 20241128230844 Cache expiry: 2592000 Reduced expiry: false Complications: [] CPU time usage: 0.002 seconds Real time usage: 0.002 seconds Preprocessor visited node count: 1/1000000 Post‐expand include size: 0/2097152 bytes Template argument size: 0/2097152 bytes Highest expansion depth: 1/100 Expensive parser function count: 0/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 0/5000000 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 0.000 1 -total --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1&useformat=desktop" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Miksub minn "<a dir="ltr" href="https://mt.wiktionary.org/w/index.php?title=Module:parser&oldid=20911">https://mt.wiktionary.org/w/index.php?title=Module:parser&oldid=20911</a>"</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> L-aħħar bidla fuq il-paġna: 05:26, 23 Novembru 2024.</li> <li id="footer-info-copyright">It-test huwa disponibbli taħt il-<a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/">Liċenzja Creative Commons Attribution-ShareAlike</a>; jistgħu japplikaw xi kundizzjonijiet oħra. Ara l-<a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">kundizzjonijiet tal-użu</a> għal aktar dettalji.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Politika dwar il-privatezza</a></li> <li id="footer-places-about"><a href="/wiki/Wikizzjunarju:Dwar">Dwar il-Wikizzjunarju</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikizzjunarju:%C4%8Aa%C4%A7da_%C4%A1enerali">Ċaħdiet</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">Żviluppaturi</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/mt.wiktionary.org">Statistika</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Stqarrija dwar il-cookies</a></li> <li id="footer-places-mobileview"><a href="//mt.m.wiktionary.org/w/index.php?title=Module:parser&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Verżjoni għall-mowbajl</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-78f4c97c5d-5x28m","wgBackendResponseTime":206,"wgPageParseReport":{"limitreport":{"cputime":"0.002","walltime":"0.002","ppvisitednodes":{"value":1,"limit":1000000},"postexpandincludesize":{"value":0,"limit":2097152},"templateargumentsize":{"value":0,"limit":2097152},"expansiondepth":{"value":1,"limit":100},"expensivefunctioncount":{"value":0,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":0,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 0.000 1 -total"]},"cachereport":{"origin":"mw-web.codfw.main-78f4c97c5d-5x28m","timestamp":"20241128230844","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>