CINXE.COM
Module:Wikitext Parsing - Wikipedia
<!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-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Module:Wikitext Parsing - Wikipedia</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-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);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":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"f72bdfc8-d0a5-4f83-b7d1-aabe816c2cee","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Module:Wikitext_Parsing","wgTitle":"Wikitext Parsing","wgCurRevisionId":1209492587,"wgRevisionId":1209492587,"wgArticleId":73238589,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Wikipedia fully protected modules","Modules for general use","Modules in beta"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Module:Wikitext_Parsing","wgRelevantArticleId":73238589,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":["sysop"],"wgRestrictionMove":["sysop"],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams": {"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q118959155","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};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.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","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=en&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=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Module:Wikitext Parsing - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Module:Wikitext_Parsing"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Module:Wikitext_Parsing"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&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 page-Module_Wikitext_Parsing rootpage-Module_Wikitext_Parsing skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </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/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</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="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" class=""><span>Donate</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=Special:CreateAccount&returnto=Module%3AWikitext+Parsing" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</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=Special:UserLogin&returnto=Module%3AWikitext+Parsing" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</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="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <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">Personal tools</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="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Module%3AWikitext+Parsing" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Module%3AWikitext+Parsing" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-PrepareText" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#PrepareText"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>PrepareText</span> </div> </a> <ul id="toc-PrepareText-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-ParseTemplates" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#ParseTemplates"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>ParseTemplates</span> </div> </a> <ul id="toc-ParseTemplates-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">Module</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">Wikitext Parsing</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 17 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-17" 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">17 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D9%88%D8%AD%D8%AF%D8%A9:Wikitext_Parsing" title="وحدة:Wikitext Parsing – Arabic" lang="ar" hreflang="ar" data-title="وحدة:Wikitext Parsing" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Wikitext_Parsing" title="Модуль:Wikitext Parsing – Belarusian" lang="be" hreflang="be" data-title="Модуль:Wikitext Parsing" data-language-autonym="Беларуская" data-language-local-name="Belarusian" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-ceb mw-list-item"><a href="https://ceb.wikipedia.org/wiki/Module:Wikitext_Parsing" title="Module:Wikitext Parsing – Cebuano" lang="ceb" hreflang="ceb" data-title="Module:Wikitext Parsing" data-language-autonym="Cebuano" data-language-local-name="Cebuano" class="interlanguage-link-target"><span>Cebuano</span></a></li><li class="interlanguage-link interwiki-ee mw-list-item"><a href="https://ee.wikipedia.org/wiki/Module:Wikitext_Parsing" title="Module:Wikitext Parsing – Ewe" lang="ee" hreflang="ee" data-title="Module:Wikitext Parsing" data-language-autonym="Eʋegbe" data-language-local-name="Ewe" class="interlanguage-link-target"><span>Eʋegbe</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Modul:Wikitext_Parsing" title="Modul:Wikitext Parsing – Indonesian" lang="id" hreflang="id" data-title="Modul:Wikitext Parsing" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesian" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-ku mw-list-item"><a href="https://ku.wikipedia.org/wiki/Modul:Wikitext_Parsing" title="Modul:Wikitext Parsing – Kurdish" lang="ku" hreflang="ku" data-title="Modul:Wikitext Parsing" data-language-autonym="Kurdî" data-language-local-name="Kurdish" class="interlanguage-link-target"><span>Kurdî</span></a></li><li class="interlanguage-link interwiki-mk mw-list-item"><a href="https://mk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:Wikitext_Parsing" title="Модул:Wikitext Parsing – Macedonian" lang="mk" hreflang="mk" data-title="Модул:Wikitext Parsing" data-language-autonym="Македонски" data-language-local-name="Macedonian" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Modul:Wikitext_Parsing" title="Modul:Wikitext Parsing – Malay" lang="ms" hreflang="ms" data-title="Modul:Wikitext Parsing" 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.wikipedia.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:Wikitext_Parsing" title="မော်ဂျူး:Wikitext Parsing – Burmese" lang="my" hreflang="my" data-title="မော်ဂျူး:Wikitext Parsing" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="Burmese" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wikipedia.org/wiki/Modul:Wikitext_Parsing" title="Modul:Wikitext Parsing – Uzbek" lang="uz" hreflang="uz" data-title="Modul:Wikitext Parsing" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="Uzbek" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wikipedia.org/wiki/Module:Wikitext_Parsing" title="Module:Wikitext Parsing – Sinhala" lang="si" hreflang="si" data-title="Module:Wikitext Parsing" data-language-autonym="සිංහල" data-language-local-name="Sinhala" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Modul:Wikitext_Parsing" title="Modul:Wikitext Parsing – Slovenian" lang="sl" hreflang="sl" data-title="Modul:Wikitext Parsing" data-language-autonym="Slovenščina" data-language-local-name="Slovenian" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wikipedia.org/wiki/%D9%85%DB%86%D8%AF%DB%8C%D9%88%D9%88%D9%84:Wikitext_Parsing" title="مۆدیوول:Wikitext Parsing – Central Kurdish" lang="ckb" hreflang="ckb" data-title="مۆدیوول:Wikitext Parsing" data-language-autonym="کوردی" data-language-local-name="Central Kurdish" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-tl mw-list-item"><a href="https://tl.wikipedia.org/wiki/Module:Wikitext_Parsing" title="Module:Wikitext Parsing – Tagalog" lang="tl" hreflang="tl" data-title="Module:Wikitext Parsing" data-language-autonym="Tagalog" data-language-local-name="Tagalog" class="interlanguage-link-target"><span>Tagalog</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A1%E0%B8%AD%E0%B8%94%E0%B8%B9%E0%B8%A5:Wikitext_Parsing" title="มอดูล:Wikitext Parsing – Thai" lang="th" hreflang="th" data-title="มอดูล:Wikitext Parsing" data-language-autonym="ไทย" data-language-local-name="Thai" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-ur mw-list-item"><a href="https://ur.wikipedia.org/wiki/%D9%85%D8%A7%DA%88%DB%8C%D9%88%D9%84:Wikitext_Parsing" title="ماڈیول:Wikitext Parsing – Urdu" lang="ur" hreflang="ur" data-title="ماڈیول:Wikitext Parsing" data-language-autonym="اردو" data-language-local-name="Urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Module:Wikitext_Parsing" title="Module:Wikitext Parsing – Chinese" lang="zh" hreflang="zh" data-title="Module:Wikitext Parsing" data-language-autonym="中文" data-language-local-name="Chinese" 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/Q118959155#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</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="Namespaces"> <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:Wikitext_Parsing" title="View the module page [c]" accesskey="c"><span>Module</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Module_talk:Wikitext_Parsing" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <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:Wikitext_Parsing"><span>Read</span></a></li><li id="ca-viewsource" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:Wikitext_Parsing&action=edit" title="This page is protected. You can view its source [e]" accesskey="e"><span>View source</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:Wikitext_Parsing&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <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">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Module:Wikitext_Parsing"><span>Read</span></a></li><li id="ca-more-viewsource" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:Wikitext_Parsing&action=edit"><span>View source</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:Wikitext_Parsing&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Module:Wikitext_Parsing" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Module:Wikitext_Parsing" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Module:Wikitext_Parsing&oldid=1209492587" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Module:Wikitext_Parsing&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FModule%3AWikitext_Parsing"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FModule%3AWikitext_Parsing"><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=Special:DownloadAsPdf&page=Module%3AWikitext_Parsing&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="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </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/Q118959155" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> <div id="mw-indicator-pp-default" class="mw-indicator"><div class="mw-parser-output"><span typeof="mw:File"><a href="/wiki/Wikipedia:Protection_policy#full" title="This high-risk module is permanently protected to prevent vandalism"><img alt="Permanently protected module" src="//upload.wikimedia.org/wikipedia/en/thumb/4/44/Full-protection-shackle.svg/20px-Full-protection-shackle.svg.png" decoding="async" width="20" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/4/44/Full-protection-shackle.svg/30px-Full-protection-shackle.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/4/44/Full-protection-shackle.svg/40px-Full-protection-shackle.svg.png 2x" data-file-width="512" data-file-height="512" /></a></span></div></div> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</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="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r1237875617">.mw-parser-output .documentation,.mw-parser-output .documentation-metadata{border:1px solid #a2a9b1;background-color:#ecfcf4;clear:both}.mw-parser-output .documentation{margin:1em 0 0 0;padding:1em}.mw-parser-output .documentation-metadata{margin:0.2em 0;font-style:italic;padding:0.4em 1em}.mw-parser-output .documentation-startbox{padding-bottom:3px;border-bottom:1px solid #aaa;margin-bottom:1ex}.mw-parser-output .documentation-heading{font-weight:bold;font-size:125%}.mw-parser-output .documentation-clear{clear:both}.mw-parser-output .documentation-toolbar{font-style:normal;font-size:85%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .documentation,html.skin-theme-clientpref-night .mw-parser-output .documentation-metadata{background-color:#0b1e1c}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .documentation,html.skin-theme-clientpref-os .mw-parser-output .documentation-metadata{background-color:#0b1e1c}}</style><div class="documentation-container" role="complementary" aria-labelledby="documentation-heading"> <div class="documentation"> <div class="documentation-startbox"> <span class="documentation-heading" id="documentation-heading"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/50px-Test_Template_Info-Icon_-_Version_%282%29.svg.png" decoding="async" width="50" height="22" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/75px-Test_Template_Info-Icon_-_Version_%282%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/100px-Test_Template_Info-Icon_-_Version_%282%29.svg.png 2x" data-file-width="1792" data-file-height="800" /></span></span> Module documentation</span><span class="mw-editsection-like plainlinks">[<a href="/wiki/Module:Wikitext_Parsing/doc" title="Module:Wikitext Parsing/doc">view</a>] [<a href="/wiki/Special:EditPage/Module:Wikitext_Parsing/doc" title="Special:EditPage/Module:Wikitext Parsing/doc">edit</a>] [<a href="/wiki/Special:PageHistory/Module:Wikitext_Parsing/doc" title="Special:PageHistory/Module:Wikitext Parsing/doc">history</a>] [<a href="/wiki/Special:Purge/Module:Wikitext_Parsing" title="Special:Purge/Module:Wikitext Parsing">purge</a>]</span></div> <style data-mw-deduplicate="TemplateStyles:r1238436933">.mw-parser-output .ombox{margin:4px 0;border-collapse:collapse;border:1px solid #a2a9b1;background-color:var(--background-color-neutral-subtle,#f8f9fa);box-sizing:border-box;color:var(--color-base,#202122)}.mw-parser-output .ombox.mbox-small{font-size:88%;line-height:1.25em}.mw-parser-output .ombox-speedy{border:2px solid #b32424;background-color:#fee7e6}.mw-parser-output .ombox-delete{border:2px solid #b32424}.mw-parser-output .ombox-content{border:1px solid #f28500}.mw-parser-output .ombox-style{border:1px solid #fc3}.mw-parser-output .ombox-move{border:1px solid #9932cc}.mw-parser-output .ombox-protection{border:2px solid #a2a9b1}.mw-parser-output .ombox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .ombox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .ombox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .ombox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ombox .mbox-invalid-type{text-align:center}@media(min-width:720px){.mw-parser-output .ombox{margin:4px 10%}.mw-parser-output .ombox.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;width:238px}}body.skin--responsive .mw-parser-output table.ombox img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .ombox-speedy{background-color:#310402}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .ombox-speedy{background-color:#310402}}</style><table class="plainlinks ombox ombox-content" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="Warning" src="//upload.wikimedia.org/wikipedia/en/thumb/5/5f/Ambox_warning_orange.svg/40px-Ambox_warning_orange.svg.png" decoding="async" width="40" height="34" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/5/5f/Ambox_warning_orange.svg/60px-Ambox_warning_orange.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/5/5f/Ambox_warning_orange.svg/80px-Ambox_warning_orange.svg.png 2x" data-file-width="378" data-file-height="326" /></span></span></td><td class="mbox-text"><b>This Lua module is used on <a class="external text" href="https://linkcount.toolforge.org/?project=en.wikipedia.org&page=Module%3AWikitext+Parsing#transclusions">approximately 17,300,000 pages, or roughly 28% of all pages</a></b>.<br /> To avoid major disruption and server load, any changes should be tested in the module's <a href="/wiki/Module:Wikitext_Parsing/sandbox" title="Module:Wikitext Parsing/sandbox">/sandbox</a> or <a href="/wiki/Module:Wikitext_Parsing/testcases" title="Module:Wikitext Parsing/testcases">/testcases</a> subpages, or in your own <a href="/wiki/Module:Sandbox" title="Module:Sandbox">module sandbox</a>. The tested changes can be added to this page in a single edit. Consider discussing changes on the <a href="/wiki/Module_talk:Wikitext_Parsing" title="Module talk:Wikitext Parsing">talk page</a> before implementing them.</td></tr></tbody></table> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238436933"><table class="plainlinks ombox ombox-protection" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/0/0f/Cascade-protection-shackle.svg/40px-Cascade-protection-shackle.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/0/0f/Cascade-protection-shackle.svg/60px-Cascade-protection-shackle.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/0/0f/Cascade-protection-shackle.svg/80px-Cascade-protection-shackle.svg.png 2x" data-file-width="512" data-file-height="512" /></span></span></td><td class="mbox-text">This module can only be edited by <a href="/wiki/Wikipedia:Administrators" title="Wikipedia:Administrators">administrators</a> because it is <a href="/wiki/Wikipedia:Transclusion" class="mw-redirect" title="Wikipedia:Transclusion">transcluded</a> onto one or more <a href="/wiki/Wikipedia:Protection_policy#Cascading_protection" title="Wikipedia:Protection policy">cascade-protected</a> pages.</td></tr></tbody></table> <p>This module provides some functions to help with the potential complex situation involved in modules like <a href="/wiki/Module:Template_parameter_value" title="Module:Template parameter value">Module:Template parameter value</a>, which intend to process the raw wikitext of a page and want to respect nowiki tags or similar reliably. This module is designed only to be called by other modules. </p> <div class="mw-heading mw-heading2"><h2 id="PrepareText">PrepareText</h2></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238436933"><table class="plainlinks ombox ombox-notice" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="Ready for use" src="//upload.wikimedia.org/wikipedia/commons/thumb/0/03/Green_check.svg/40px-Green_check.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/03/Green_check.svg/60px-Green_check.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/03/Green_check.svg/80px-Green_check.svg.png 2x" data-file-width="600" data-file-height="600" /></span></span></td><td class="mbox-text">This module is rated as <a href="/wiki/Category:Modules_for_general_use" title="Category:Modules for general use">ready for general use</a>. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by <a href="/wiki/Wikipedia:Template_sandbox_and_test_cases" title="Wikipedia:Template sandbox and test cases">sandbox testing</a> rather than repeated trial-and-error editing.</td></tr></tbody></table> <p><code>PrepareText(text, keepComments)</code> will run any content within certain tags that disable processing (<code class="nowrap" style=""><nowiki></code>, <code class="nowrap" style=""><pre></code>, <code class="nowrap" style=""><syntaxhighlight></code>, <code class="nowrap" style=""><source></code>, <code class="nowrap" style=""><math></code>) through mw.text.nowiki and remove HTML comments to avoid irrelevant text being processed by modules, allowing tricky syntax to be parsed through more basic means such as <code>%b{}</code>. </p><p>If the second parameter, <code>keepComments</code>, is set to true, the content of HTML comments will be passed through mw.text.nowiki instead of being removed entirely. </p><p>Any code using this function directly should consider using mw.text.decode to correct the output at the end if part of the processed text is returned, though this will also decode any input that was encoded but not inside a no-processing tag, which likely isn't a significant issue but still something worth considering. </p> <div class="mw-heading mw-heading2"><h2 id="ParseTemplates">ParseTemplates</h2></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238436933"><table class="plainlinks ombox ombox-notice" role="presentation"><tbody><tr><td class="mbox-image"><span class="skin-invert" typeof="mw:File"><span><img alt="Beta" src="//upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Greek_lc_beta_icon.svg/19px-Greek_lc_beta_icon.svg.png" decoding="async" width="19" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Greek_lc_beta_icon.svg/29px-Greek_lc_beta_icon.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Greek_lc_beta_icon.svg/38px-Greek_lc_beta_icon.svg.png 2x" data-file-width="48" data-file-height="100" /></span></span></td><td class="mbox-text">This module is rated as <a href="/wiki/Category:Modules_in_beta" title="Category:Modules in beta">beta</a>, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.</td></tr></tbody></table> <p><code>ParseTemplates(InputText, dontEscape)</code> will attempt to parse all <code>{{Templates}}</code> on a page, handling multiple factors such as <code>[[Wikilinks]]</code> and <code>{{{Variables}}}</code> among other complex syntax. Due to the complexity of the function, it is considerably slow, and should be used carefully. The function returns a list of template objects in order of appearance, which have the following properties: </p> <ul><li><b>Args</b>: A key-value set of arguments, not in order</li> <li><b>ArgOrder</b>: A list of keys in the order they appear in the template</li> <li><b>Children</b>: A list of template objects that are contained within the existing template, in order of appearance. Only immediate children are listed</li> <li><b>Name</b>: The name of the template</li> <li><b>Text</b>: The raw text of the template</li></ul> <p>If the second parameter, <code>dontEscape</code>, is set to true, the inputted text won't be ran through the <code>PrepareText</code> function. </p> <div class="documentation-clear"></div> </div> <div role="note" class="documentation-metadata plainlinks">The above <a href="/wiki/Wikipedia:Template_documentation" title="Wikipedia:Template documentation">documentation</a> is <a href="/wiki/Help:Transclusion" title="Help:Transclusion">transcluded</a> from <a href="/wiki/Module:Wikitext_Parsing/doc" title="Module:Wikitext Parsing/doc">Module:Wikitext Parsing/doc</a>. <span class="documentation-toolbar">(<a href="/wiki/Special:EditPage/Module:Wikitext_Parsing/doc" title="Special:EditPage/Module:Wikitext Parsing/doc">edit</a> | <a href="/wiki/Special:PageHistory/Module:Wikitext_Parsing/doc" title="Special:PageHistory/Module:Wikitext Parsing/doc">history</a>)</span><br />Editors can experiment in this module's <a href="/wiki/Module:Wikitext_Parsing/sandbox" title="Module:Wikitext Parsing/sandbox">sandbox</a> <span class="documentation-toolbar">(<a href="/wiki/Special:EditPage/Module:Wikitext_Parsing/sandbox" title="Special:EditPage/Module:Wikitext Parsing/sandbox">edit</a> | <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=Module%3AWikitext+Parsing&page2=Module%3AWikitext+Parsing%2Fsandbox">diff</a>)</span> and <a href="/wiki/Module:Wikitext_Parsing/testcases" title="Module:Wikitext Parsing/testcases">testcases</a> <span class="documentation-toolbar">(<a href="/wiki/Special:EditPage/Module:Wikitext_Parsing/testcases" title="Special:EditPage/Module:Wikitext Parsing/testcases">edit</a> | <a href="/wiki/Module_talk:Wikitext_Parsing/testcases" title="Module talk:Wikitext Parsing/testcases">run</a>)</span> pages.<br /> <a href="/wiki/Special:PrefixIndex/Module:Wikitext_Parsing/" title="Special:PrefixIndex/Module:Wikitext Parsing/">Subpages of this module</a>.</div></div> <p><span id="code"></span> </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="nb">require</span><span class="p">(</span><span class="s2">"strict"</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="c1">--Helper functions</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="kr">function</span> <span class="nf">startswith</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">subtext</span><span class="p">)</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a> <span class="kr">return</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">subtext</span><span class="p">)</span> <span class="o">==</span> <span class="n">subtext</span> </span><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a><span class="kr">end</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="kr">function</span> <span class="nf">endswith</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">subtext</span><span class="p">)</span> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a> <span class="kr">return</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="o">-#</span><span class="n">subtext</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">subtext</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a><span class="kr">end</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="kr">function</span> <span class="nf">allcases</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a> <span class="kr">return</span> <span class="n">s</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"%a"</span><span class="p">,</span> <span class="kr">function</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a> <span class="kr">return</span> <span class="s2">"["</span><span class="o">..</span><span class="n">c</span><span class="p">:</span><span class="n">upper</span><span class="p">()</span><span class="o">..</span><span class="n">c</span><span class="p">:</span><span class="n">lower</span><span class="p">()</span><span class="o">..</span><span class="s2">"]"</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a> <span class="kr">end</span><span class="p">)</span> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a><span class="kr">end</span> </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">trimcache</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">whitespace</span> <span class="o">=</span> <span class="p">{[</span><span class="s2">" "</span><span class="p">]</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">]</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s2">"</span><span class="se">\t</span><span class="s2">"</span><span class="p">]</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s2">"</span><span class="se">\r</span><span class="s2">"</span><span class="p">]</span><span class="o">=</span><span class="mi">1</span><span class="p">}</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">cheaptrim</span><span class="p">(</span><span class="n">str</span><span class="p">)</span> <span class="c1">--mw.text.trim is surprisingly expensive, so here's an alternative approach</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a> <span class="kd">local</span> <span class="n">quick</span> <span class="o">=</span> <span class="n">trimcache</span><span class="p">[</span><span class="n">str</span><span class="p">]</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a> <span class="kr">if</span> <span class="n">quick</span> <span class="kr">then</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a> <span class="kr">return</span> <span class="n">quick</span> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a> <span class="kr">else</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a> <span class="c1">-- local out = string.gsub(str, "^%s*(.-)%s*$", "%1")</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a> <span class="kd">local</span> <span class="n">lowEnd</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></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">str</span> <span class="kr">do</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="ow">not</span> <span class="n">whitespace</span><span class="p">[</span><span class="nb">string.sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">i</span><span class="p">)]</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="n">lowEnd</span> <span class="o">=</span> <span class="n">i</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a> <span class="kr">break</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a> <span class="kr">end</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">if</span> <span class="ow">not</span> <span class="n">lowEnd</span> <span class="kr">then</span> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a> <span class="n">trimcache</span><span class="p">[</span><span class="n">str</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a> <span class="kr">return</span> <span class="s2">""</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a> <span class="kr">end</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="o">#</span><span class="n">str</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span> <span class="kr">do</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">whitespace</span><span class="p">[</span><span class="nb">string.sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">i</span><span class="p">)]</span> <span class="kr">then</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a> <span class="kd">local</span> <span class="n">out</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="n">lowEnd</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a> <span class="n">trimcache</span><span class="p">[</span><span class="n">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">out</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> <span class="kr">return</span> <span class="n">out</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">end</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="kr">end</span> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a><span class="cm">--[=[ Implementation notes</span> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a><span class="cm">---- NORMAL HTML TAGS ----</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a><span class="cm">Tags are very strict on how they want to start, but loose on how they end.</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a><span class="cm">The start must strictly follow <[tAgNaMe](%s|>) with no room for whitespace in</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a><span class="cm">the tag's name, but may then flow as they want afterwards, making</span> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a><span class="cm"><div\nclass\n=\n"\nerror\n"\n> valid</span> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a><span class="cm">There's no sense of escaping < or ></span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a><span class="cm">E.g.</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a><span class="cm"> <div class="error\>"> will end at \> despite it being inside a quote</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a><span class="cm"> <div class="<span class="error">error</span>"> will not process the larger div</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="cm">If a tag has no end, it will consume all text instead of not processing</span> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a><span class="cm">---- NOPROCESSING TAGS (nowiki, pre, syntaxhighlight, source, etc.) ----</span> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a><span class="cm">(In most comments, <source> will not be mentioned. This is because it is the</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a><span class="cm">deprecated version of <syntaxhighlight>)</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a><span class="cm">No-Processing tags have some interesting differences to the above rules.</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a><span class="cm">For example, their syntax is a lot stricter. While an opening tag appears to</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a><span class="cm">follow the same set of rules, A closing tag can't have any sort of extra</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a><span class="cm">formatting period. While </div a/a> is valid, </nowiki a/a> isn't - only</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a><span class="cm">newlines and spaces/tabs are allowed in closing tags.</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a><span class="cm">Note that, even though <pre> tags cause a visual change when the ending tag has</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a><span class="cm">extra formatting, it won't cause the no-processing effects. For some reason, the</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a><span class="cm">format must be strict for that to apply.</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="cm">Both the content inside the tag pair and the content inside each side of the</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a><span class="cm">pair is not processed. E.g. <nowiki |}}>|}}</nowiki> would have both of the |}}</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a><span class="cm">escaped in practice.</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a><span class="cm">When something in the code is referenced to as a "Nowiki Tag", it means a tag</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a><span class="cm">which causes wiki text to not be processed, which includes <nowiki>, <pre>,</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a><span class="cm">and <syntaxhighlight></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="cm">Since we only care about these tags, we can ignore the idea of an intercepting</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a><span class="cm">tag preventing processing, and just go straight for the first ending we can find</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a><span class="cm">If there is no ending to find, the tag will NOT consume the rest of the text in</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a><span class="cm">terms of processing behaviour (though <pre> will appear to have an effect).</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a><span class="cm">Even if there is no end of the tag, the content inside the opening half will</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a><span class="cm">still be unprocessed, meaning {{X20|<nowiki }}>}} wouldn't end at the first }}</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a><span class="cm">despite there being no ending to the tag.</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="cm">Note that there are some tags, like <math>, which also function like <nowiki></span> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a><span class="cm">which are included in this aswell. Some other tags, like <ref>, have far too</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a><span class="cm">unpredictable behaviour to be handled currently (they'd have to be split and</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a><span class="cm">processed as something seperate - its complicated, but maybe not impossible.)</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a><span class="cm">I suspect that every tag listed in [[Special:Version]] may behave somewhat like</span> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a><span class="cm">this, but that's far too many cases worth checking for rarely used tags that may</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a><span class="cm">not even have a good reason to contain {{ or }} anyways, so we leave them alone.</span> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a><span class="cm">---- HTML COMMENTS AND INCLUDEONLY ----</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a><span class="cm">HTML Comments are about as basic as it could get for this</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a><span class="cm">Start at <!--, end at -->, no extra conditions. Simple enough</span> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a><span class="cm">If a comment has no end, it will eat all text instead of not being processed</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a><span class="cm">includeonly tags function mostly like a regular nowiki tag, with the exception</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a><span class="cm">that the tag will actually consume all future text if not given an ending as</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></span></a><span class="cm">opposed to simply giving up and not changing anything. Due to complications and</span> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a><span class="cm">the fact that this is far less likely to be present on a page, aswell as being</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a><span class="cm">something that may not want to be escaped, includeonly tags are ignored during</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a><span class="cm">our processing</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a><span class="cm">--]=]</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a><span class="kd">local</span> <span class="n">validtags</span> <span class="o">=</span> <span class="p">{</span><span class="n">nowiki</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">pre</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">syntaxhighlight</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">source</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">math</span><span class="o">=</span><span class="mi">1</span><span class="p">}</span> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a><span class="c1">--This function expects the string to start with the tag</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">TestForNowikiTag</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">)</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> <span class="kd">local</span> <span class="n">tagName</span> <span class="o">=</span> <span class="p">(</span><span class="nb">string.match</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"^<([^</span><span class="se">\n</span><span class="s2"> />]+)"</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">):</span><span class="n">lower</span><span class="p">()</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">validtags</span><span class="p">[</span><span class="n">tagName</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a> <span class="kr">end</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> <span class="kd">local</span> <span class="n">nextOpener</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"<"</span><span class="p">,</span> <span class="n">scanPosition</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="ow">or</span> <span class="o">-</span><span class="mi">1</span> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a> <span class="kd">local</span> <span class="n">nextCloser</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">">"</span><span class="p">,</span> <span class="n">scanPosition</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="ow">or</span> <span class="o">-</span><span class="mi">1</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> <span class="kr">if</span> <span class="n">nextCloser</span> <span class="o">></span> <span class="o">-</span><span class="mi">1</span> <span class="ow">and</span> <span class="p">(</span><span class="n">nextOpener</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> <span class="ow">or</span> <span class="n">nextCloser</span> <span class="o"><</span> <span class="n">nextOpener</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a> <span class="kd">local</span> <span class="n">startingTag</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">,</span> <span class="n">nextCloser</span><span class="p">)</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a> <span class="c1">--We have our starting tag (E.g. '<pre style="color:red">')</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> <span class="c1">--Now find our ending...</span> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="kr">if</span> <span class="n">endswith</span><span class="p">(</span><span class="n">startingTag</span><span class="p">,</span> <span class="s2">"/>"</span><span class="p">)</span> <span class="kr">then</span> <span class="c1">--self-closing tag (we are our own ending)</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="kr">return</span> <span class="p">{</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="n">Tag</span> <span class="o">=</span> <span class="n">tagName</span><span class="p">,</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a> <span class="n">Start</span> <span class="o">=</span> <span class="n">startingTag</span><span class="p">,</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> <span class="n">Content</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="n">End</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="n">Length</span> <span class="o">=</span> <span class="o">#</span><span class="n">startingTag</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> <span class="p">}</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">else</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">endingTagStart</span><span class="p">,</span> <span class="n">endingTagEnd</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"</"</span><span class="o">..</span><span class="n">allcases</span><span class="p">(</span><span class="n">tagName</span><span class="p">)</span><span class="o">..</span><span class="s2">"[ </span><span class="se">\t\n</span><span class="s2">]*>"</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">)</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a> <span class="kr">if</span> <span class="n">endingTagStart</span> <span class="kr">then</span> <span class="c1">--Regular tag formation</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="kd">local</span> <span class="n">endingTag</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">endingTagStart</span><span class="p">,</span> <span class="n">endingTagEnd</span><span class="p">)</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="kd">local</span> <span class="n">tagContent</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">nextCloser</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">endingTagStart</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a> <span class="kr">return</span> <span class="p">{</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a> <span class="n">Tag</span> <span class="o">=</span> <span class="n">tagName</span><span class="p">,</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a> <span class="n">Start</span> <span class="o">=</span> <span class="n">startingTag</span><span class="p">,</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> <span class="n">Content</span> <span class="o">=</span> <span class="n">tagContent</span><span class="p">,</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> <span class="n">End</span> <span class="o">=</span> <span class="n">endingTag</span><span class="p">,</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="n">Length</span> <span class="o">=</span> <span class="o">#</span><span class="n">startingTag</span> <span class="o">+</span> <span class="o">#</span><span class="n">tagContent</span> <span class="o">+</span> <span class="o">#</span><span class="n">endingTag</span> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a> <span class="p">}</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="kr">else</span> <span class="c1">--Content inside still needs escaping (also linter error!)</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="kr">return</span> <span class="p">{</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="n">Tag</span> <span class="o">=</span> <span class="n">tagName</span><span class="p">,</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="n">Start</span> <span class="o">=</span> <span class="n">startingTag</span><span class="p">,</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="n">Content</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="n">End</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="n">Length</span> <span class="o">=</span> <span class="o">#</span><span class="n">startingTag</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="p">}</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="kr">end</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="kr">end</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="kr">end</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a><span class="kr">end</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">TestForComment</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">)</span> <span class="c1">--Like TestForNowikiTag but for <!-- --></span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="kr">if</span> <span class="nb">string.match</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"^<!%-%-"</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a> <span class="kd">local</span> <span class="n">commentEnd</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"-->"</span><span class="p">,</span> <span class="n">scanPosition</span><span class="o">+</span><span class="mi">4</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> <span class="kr">if</span> <span class="n">commentEnd</span> <span class="kr">then</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> <span class="kr">return</span> <span class="p">{</span> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> <span class="n">Start</span> <span class="o">=</span> <span class="s2">"<!--"</span><span class="p">,</span> <span class="n">End</span> <span class="o">=</span> <span class="s2">"-->"</span><span class="p">,</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> <span class="n">Content</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">scanPosition</span><span class="o">+</span><span class="mi">4</span><span class="p">,</span> <span class="n">commentEnd</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="n">Length</span> <span class="o">=</span> <span class="n">commentEnd</span><span class="o">-</span><span class="n">scanPosition</span><span class="o">+</span><span class="mi">3</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="p">}</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a> <span class="kr">else</span> <span class="c1">--Consumes all text if not given an ending</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="kr">return</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">Start</span> <span class="o">=</span> <span class="s2">"<!--"</span><span class="p">,</span> <span class="n">End</span> <span class="o">=</span> <span class="s2">""</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">Content</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">scanPosition</span><span class="o">+</span><span class="mi">4</span><span class="p">),</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="n">Length</span> <span class="o">=</span> <span class="o">#</span><span class="n">text</span><span class="o">-</span><span class="n">scanPosition</span><span class="o">+</span><span class="mi">1</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <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 class="kr">end</span> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a><span class="kr">end</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a><span class="cm">--[[ Implementation notes</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a><span class="cm">The goal of this function is to escape all text that wouldn't be parsed if it</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a><span class="cm">was preprocessed (see above implementation notes).</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="cm">Using keepComments will keep all HTML comments instead of removing them. They</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a><span class="cm">will still be escaped regardless to avoid processing errors</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a><span class="cm">--]]</span> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">PrepareText</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">keepComments</span><span class="p">)</span> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a> <span class="kd">local</span> <span class="n">newtext</span> <span class="o">=</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">scanPosition</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="kr">while</span> <span class="kc">true</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="kd">local</span> <span class="n">NextCheck</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"<[NnSsPpMm!]"</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">)</span> <span class="c1">--Advance to the next potential tag we care about</span> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">NextCheck</span> <span class="kr">then</span> <span class="c1">--Done</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a> <span class="n">newtext</span><span class="p">[</span><span class="o">#</span><span class="n">newtext</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span><span class="n">scanPosition</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">break</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></span></a> <span class="kr">end</span> </span><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a> <span class="n">newtext</span><span class="p">[</span><span class="o">#</span><span class="n">newtext</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span><span class="n">scanPosition</span><span class="p">,</span><span class="n">NextCheck</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> <span class="n">scanPosition</span> <span class="o">=</span> <span class="n">NextCheck</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> <span class="kd">local</span> <span class="n">Comment</span> <span class="o">=</span> <span class="n">TestForComment</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">)</span> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a> <span class="kr">if</span> <span class="n">Comment</span> <span class="kr">then</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> <span class="kr">if</span> <span class="n">keepComments</span> <span class="kr">then</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a> <span class="n">newtext</span><span class="p">[</span><span class="o">#</span><span class="n">newtext</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">Comment</span><span class="p">.</span><span class="n">Start</span> <span class="o">..</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">nowiki</span><span class="p">(</span><span class="n">Comment</span><span class="p">.</span><span class="n">Content</span><span class="p">)</span> <span class="o">..</span> <span class="n">Comment</span><span class="p">.</span><span class="n">End</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> <span class="kr">end</span> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a> <span class="n">scanPosition</span> <span class="o">=</span> <span class="n">scanPosition</span> <span class="o">+</span> <span class="n">Comment</span><span class="p">.</span><span class="n">Length</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="kr">else</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> <span class="kd">local</span> <span class="n">Tag</span> <span class="o">=</span> <span class="n">TestForNowikiTag</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">)</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="kr">if</span> <span class="n">Tag</span> <span class="kr">then</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="kd">local</span> <span class="n">newTagStart</span> <span class="o">=</span> <span class="s2">"<"</span> <span class="o">..</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">nowiki</span><span class="p">(</span><span class="nb">string.sub</span><span class="p">(</span><span class="n">Tag</span><span class="p">.</span><span class="n">Start</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="o">-</span><span class="mi">2</span><span class="p">))</span> <span class="o">..</span> <span class="s2">">"</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></span></a> <span class="kd">local</span> <span class="n">newTagEnd</span> <span class="o">=</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> <span class="n">Tag</span><span class="p">.</span><span class="n">End</span> <span class="o">==</span> <span class="s2">""</span> <span class="ow">and</span> <span class="s2">""</span> <span class="ow">or</span> <span class="c1">--Respect no tag ending</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> <span class="s2">"</"</span> <span class="o">..</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">nowiki</span><span class="p">(</span><span class="nb">string.sub</span><span class="p">(</span><span class="n">Tag</span><span class="p">.</span><span class="n">End</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="o">-</span><span class="mi">2</span><span class="p">))</span> <span class="o">..</span> <span class="s2">">"</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a> <span class="kd">local</span> <span class="n">newContent</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">nowiki</span><span class="p">(</span><span class="n">Tag</span><span class="p">.</span><span class="n">Content</span><span class="p">)</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> <span class="n">newtext</span><span class="p">[</span><span class="o">#</span><span class="n">newtext</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">newTagStart</span> <span class="o">..</span> <span class="n">newContent</span> <span class="o">..</span> <span class="n">newTagEnd</span> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="n">scanPosition</span> <span class="o">=</span> <span class="n">scanPosition</span> <span class="o">+</span> <span class="n">Tag</span><span class="p">.</span><span class="n">Length</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="kr">else</span> <span class="c1">--Nothing special, move on...</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a> <span class="n">newtext</span><span class="p">[</span><span class="o">#</span><span class="n">newtext</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">,</span> <span class="n">scanPosition</span><span class="p">)</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a> <span class="n">scanPosition</span> <span class="o">=</span> <span class="n">scanPosition</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> <span class="kr">end</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">end</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> <span class="kr">return</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">newtext</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a><span class="kr">end</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a><span class="cm">--[=[ Implementation notes</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a><span class="cm">This function is an alternative to Transcluder's getParameters which considers</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a><span class="cm">the potential for a singular { or } or other odd syntax that %b doesn't like to</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a><span class="cm">be in a parameter's value.</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a><span class="cm">When handling the difference between {{ and {{{, mediawiki will attempt to match</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a><span class="cm">as many sequences of {{{ as possible before matching a {{</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a><span class="cm">E.g.</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a><span class="cm"> {{{{A}}}} -> { {{{A}}} }</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a><span class="cm"> {{{{{{{{Text|A}}}}}}}} -> {{ {{{ {{{Text|A}}} }}} }}</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a><span class="cm">If there aren't enough triple braces on both sides, the parser will compromise</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a><span class="cm">for a template interpretation.</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a><span class="cm">E.g.</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a><span class="cm"> {{{{A}} }} -> {{ {{ A }} }}</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a><span class="cm">While there are technically concerns about things such as wikilinks breaking</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a><span class="cm">template processing (E.g. {{[[}}]]}} doesn't stop at the first }}), it shouldn't</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a><span class="cm">be our job to process inputs perfectly when the input has garbage ({ / } isn't</span> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a><span class="cm">legal in titles anyways, so if something's unmatched in a wikilink, it's</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a><span class="cm">guaranteed GIGO)</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a><span class="cm">Setting dontEscape will prevent running the input text through EET. Avoid</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a><span class="cm">setting this to true if you don't have to set it.</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a><span class="cm">Returned values:</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a><span class="cm">A table of all templates. Template data goes as follows:</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a><span class="cm"> Text: The raw text of the template</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a><span class="cm"> Name: The name of the template</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a><span class="cm"> Args: A list of arguments</span> </span><span id="L-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a><span class="cm"> Children: A list of immediate template children</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a><span class="cm">--]=]</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a><span class="c1">--Helper functions</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="kr">function</span> <span class="nf">boundlen</span><span class="p">(</span><span class="n">pair</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">return</span> <span class="n">pair</span><span class="p">.</span><span class="n">End</span><span class="o">-</span><span class="n">pair</span><span class="p">.</span><span class="n">Start</span><span class="o">+</span><span class="mi">1</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a><span class="kr">end</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a><span class="c1">--Main function</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">ParseTemplates</span><span class="p">(</span><span class="n">InputText</span><span class="p">,</span> <span class="n">dontEscape</span><span class="p">)</span> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> <span class="c1">--Setup</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">dontEscape</span> <span class="kr">then</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> <span class="n">InputText</span> <span class="o">=</span> <span class="n">PrepareText</span><span class="p">(</span><span class="n">InputText</span><span class="p">)</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> <span class="kr">end</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">finalise</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">dontEscape</span> <span class="kr">then</span> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a> <span class="kr">return</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a> <span class="kr">else</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> <span class="kr">return</span> <span class="n">text</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a> <span class="kr">end</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> <span class="kr">end</span> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">CreateContainerObj</span><span class="p">(</span><span class="n">Container</span><span class="p">)</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a> <span class="n">Container</span><span class="p">.</span><span class="n">Text</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a> <span class="n">Container</span><span class="p">.</span><span class="n">Args</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a> <span class="n">Container</span><span class="p">.</span><span class="n">ArgOrder</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a> <span class="n">Container</span><span class="p">.</span><span class="n">Children</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a> <span class="c1">-- Container.Name = nil</span> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a> <span class="c1">-- Container.Value = nil</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> <span class="c1">-- Container.Key = nil</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> <span class="n">Container</span><span class="p">.</span><span class="n">BeyondStart</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a> <span class="n">Container</span><span class="p">.</span><span class="n">LastIndex</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a> <span class="n">Container</span><span class="p">.</span><span class="n">finalise</span> <span class="o">=</span> <span class="n">finalise</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="kr">function</span> <span class="nc">Container</span><span class="p">:</span><span class="nf">HandleArgInput</span><span class="p">(</span><span class="n">character</span><span class="p">,</span> <span class="n">internalcall</span><span class="p">)</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">internalcall</span> <span class="kr">then</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Text</span><span class="p">[</span><span class="o">#</span><span class="n">self</span><span class="p">.</span><span class="n">Text</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">character</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a> <span class="kr">end</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a> <span class="kr">if</span> <span class="n">character</span> <span class="o">==</span> <span class="s2">"="</span> <span class="kr">then</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">Key</span> <span class="kr">then</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Value</span><span class="p">[</span><span class="o">#</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">character</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a> <span class="kr">else</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Key</span> <span class="o">=</span> <span class="n">cheaptrim</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="ow">and</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="o">=</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">else</span> <span class="c1">--"|" or "}"</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">self</span><span class="p">.</span><span class="n">Name</span> <span class="kr">then</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Name</span> <span class="o">=</span> <span class="n">cheaptrim</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="ow">and</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="kr">else</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">finalise</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="ow">and</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">Key</span> <span class="kr">then</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Key</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">finalise</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Key</span><span class="p">)</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Args</span><span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">Key</span><span class="p">]</span> <span class="o">=</span> <span class="n">cheaptrim</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span><span class="p">)</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">ArgOrder</span><span class="p">[</span><span class="o">#</span><span class="n">self</span><span class="p">.</span><span class="n">ArgOrder</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">Key</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="kr">else</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> <span class="kd">local</span> <span class="n">Key</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">LastIndex</span><span class="p">)</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Args</span><span class="p">[</span><span class="n">Key</span><span class="p">]</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">ArgOrder</span><span class="p">[</span><span class="o">#</span><span class="n">self</span><span class="p">.</span><span class="n">ArgOrder</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">Key</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">LastIndex</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">LastIndex</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="kr">end</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Key</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="o">=</span> <span class="kc">nil</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">end</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> <span class="kr">end</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> <span class="kr">function</span> <span class="nc">Container</span><span class="p">:</span><span class="nf">AppendText</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">ftext</span><span class="p">)</span> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Text</span><span class="p">[</span><span class="o">#</span><span class="n">self</span><span class="p">.</span><span class="n">Text</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">ftext</span> <span class="ow">or</span> <span class="n">text</span><span class="p">)</span> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="kr">then</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="o">=</span> <span class="p">{}</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="n">self</span><span class="p">.</span><span class="n">BeyondStart</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">BeyondStart</span> <span class="ow">or</span> <span class="p">(</span><span class="o">#</span><span class="nb">table.concat</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Text</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> <span class="o">></span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-314"><a href="#L-314"><span class="linenos" data-line="314"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">BeyondStart</span> <span class="kr">then</span> </span><span id="L-315"><a href="#L-315"><span class="linenos" data-line="315"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Value</span><span class="p">[</span><span class="o">#</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">text</span> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> <span class="kr">end</span> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a> <span class="kr">end</span> </span><span id="L-318"><a href="#L-318"><span class="linenos" data-line="318"></span></a> <span class="kr">function</span> <span class="nc">Container</span><span class="p">:</span><span class="nf">Clean</span><span class="p">(</span><span class="n">IsTemplate</span><span class="p">)</span> </span><span id="L-319"><a href="#L-319"><span class="linenos" data-line="319"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Text</span> <span class="o">=</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Text</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="ow">and</span> <span class="n">IsTemplate</span> <span class="kr">then</span> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="o">=</span> <span class="p">{</span><span class="nb">string.sub</span><span class="p">(</span><span class="nb">table.concat</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">Value</span><span class="p">,</span> <span class="s2">""</span><span class="p">),</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">)}</span> <span class="c1">--Trim ending }}</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">HandleArgInput</span><span class="p">(</span><span class="s2">"|"</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="c1">--Simulate ending</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a> <span class="kr">end</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Value</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Key</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">BeyondStart</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">LastIndex</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">finalise</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">HandleArgInput</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">AppendText</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">Clean</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> <span class="kr">end</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> <span class="kr">return</span> <span class="n">Container</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> <span class="kr">end</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="c1">--Step 1: Find and escape the content of all wikilinks on the page, which are stronger than templates (see implementation notes)</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="kd">local</span> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> <span class="kd">local</span> <span class="n">wikilinks</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="kd">local</span> <span class="n">openWikilinks</span> <span class="o">=</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">while</span> <span class="kc">true</span> <span class="kr">do</span> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> <span class="kd">local</span> <span class="n">Position</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">Character</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">InputText</span><span class="p">,</span> <span class="s2">"([%[%]])%1"</span><span class="p">,</span> <span class="n">scannerPosition</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">if</span> <span class="ow">not</span> <span class="n">Position</span> <span class="kr">then</span> <span class="c1">--Done</span> </span><span id="L-343"><a href="#L-343"><span class="linenos" data-line="343"></span></a> <span class="kr">break</span> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a> <span class="kr">end</span> </span><span id="L-345"><a href="#L-345"><span class="linenos" data-line="345"></span></a> </span><span id="L-346"><a href="#L-346"><span class="linenos" data-line="346"></span></a> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="n">Position</span><span class="o">+</span><span class="mi">2</span> <span class="c1">--+2 to pass the [[ / ]]</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a> <span class="kr">if</span> <span class="n">Character</span> <span class="o">==</span> <span class="s2">"["</span> <span class="kr">then</span> <span class="c1">--Add a [[ to the pending wikilink queue</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a> <span class="n">openWikilinks</span><span class="p">[</span><span class="o">#</span><span class="n">openWikilinks</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">Position</span> </span><span id="L-349"><a href="#L-349"><span class="linenos" data-line="349"></span></a> <span class="kr">else</span> <span class="c1">--Pair up the ]] to any available [[</span> </span><span id="L-350"><a href="#L-350"><span class="linenos" data-line="350"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">openWikilinks</span> <span class="o">>=</span> <span class="mi">1</span> <span class="kr">then</span> </span><span id="L-351"><a href="#L-351"><span class="linenos" data-line="351"></span></a> <span class="kd">local</span> <span class="n">start</span> <span class="o">=</span> <span class="nb">table.remove</span><span class="p">(</span><span class="n">openWikilinks</span><span class="p">)</span> <span class="c1">--Pop the latest [[</span> </span><span id="L-352"><a href="#L-352"><span class="linenos" data-line="352"></span></a> <span class="n">wikilinks</span><span class="p">[</span><span class="n">start</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">Start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">End</span><span class="o">=</span><span class="n">Position</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">Type</span><span class="o">=</span><span class="s2">"Wikilink"</span><span class="p">}</span> <span class="c1">--Note the pair</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="kr">end</span> </span><span id="L-355"><a href="#L-355"><span class="linenos" data-line="355"></span></a> <span class="kr">end</span> </span><span id="L-356"><a href="#L-356"><span class="linenos" data-line="356"></span></a> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a> <span class="c1">--Step 2: Find the bounds of every valid template and variable ({{ and {{{)</span> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> <span class="kd">local</span> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-359"><a href="#L-359"><span class="linenos" data-line="359"></span></a> <span class="kd">local</span> <span class="n">templates</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-360"><a href="#L-360"><span class="linenos" data-line="360"></span></a> <span class="kd">local</span> <span class="n">variables</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a> <span class="kd">local</span> <span class="n">openBrackets</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> <span class="kr">while</span> <span class="kc">true</span> <span class="kr">do</span> </span><span id="L-363"><a href="#L-363"><span class="linenos" data-line="363"></span></a> <span class="kd">local</span> <span class="n">Start</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">Character</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">InputText</span><span class="p">,</span> <span class="s2">"([{}])%1"</span><span class="p">,</span> <span class="n">scannerPosition</span><span class="p">)</span> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">Start</span> <span class="kr">then</span> <span class="c1">--Done (both 9e9)</span> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a> <span class="kr">break</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> <span class="kr">end</span> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a> <span class="kd">local</span> <span class="n">_</span><span class="p">,</span> <span class="n">End</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">InputText</span><span class="p">,</span> <span class="s2">"^"</span><span class="o">..</span><span class="n">Character</span><span class="o">..</span><span class="s2">"+"</span><span class="p">,</span> <span class="n">Start</span><span class="p">)</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></span></a> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="n">Start</span> <span class="c1">--Get to the {{ / }} set</span> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a> <span class="kr">if</span> <span class="n">Character</span> <span class="o">==</span> <span class="s2">"{"</span> <span class="kr">then</span> <span class="c1">--Add the {{+ set to the queue</span> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a> <span class="n">openBrackets</span><span class="p">[</span><span class="o">#</span><span class="n">openBrackets</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">Start</span><span class="o">=</span><span class="n">Start</span><span class="p">,</span> <span class="n">End</span><span class="o">=</span><span class="n">End</span><span class="p">}</span> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a> <span class="kr">else</span> <span class="c1">--Pair up the }} to any available {{, accounting for {{{ / }}}</span> </span><span id="L-374"><a href="#L-374"><span class="linenos" data-line="374"></span></a> <span class="kd">local</span> <span class="n">BracketCount</span> <span class="o">=</span> <span class="n">End</span><span class="o">-</span><span class="n">Start</span><span class="o">+</span><span class="mi">1</span> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a> <span class="kr">while</span> <span class="n">BracketCount</span> <span class="o">>=</span> <span class="mi">2</span> <span class="ow">and</span> <span class="o">#</span><span class="n">openBrackets</span> <span class="o">>=</span> <span class="mi">1</span> <span class="kr">do</span> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></span></a> <span class="kd">local</span> <span class="n">OpenSet</span> <span class="o">=</span> <span class="nb">table.remove</span><span class="p">(</span><span class="n">openBrackets</span><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">boundlen</span><span class="p">(</span><span class="n">OpenSet</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">3</span> <span class="ow">and</span> <span class="n">BracketCount</span> <span class="o">>=</span> <span class="mi">3</span> <span class="kr">then</span> <span class="c1">--We have a {{{variable}}} (both sides have 3 spare)</span> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a> <span class="n">variables</span><span class="p">[</span><span class="n">OpenSet</span><span class="p">.</span><span class="n">End</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">Start</span><span class="o">=</span><span class="n">OpenSet</span><span class="p">.</span><span class="n">End</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="n">End</span><span class="o">=</span><span class="n">scannerPosition</span><span class="o">+</span><span class="mi">2</span><span class="p">,</span> <span class="n">Type</span><span class="o">=</span><span class="s2">"Variable"</span><span class="p">}</span> <span class="c1">--Done like this to ensure chronological order</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a> <span class="n">BracketCount</span> <span class="o">=</span> <span class="n">BracketCount</span> <span class="o">-</span> <span class="mi">3</span> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a> <span class="n">OpenSet</span><span class="p">.</span><span class="n">End</span> <span class="o">=</span> <span class="n">OpenSet</span><span class="p">.</span><span class="n">End</span> <span class="o">-</span> <span class="mi">3</span> </span><span id="L-381"><a href="#L-381"><span class="linenos" data-line="381"></span></a> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="n">scannerPosition</span> <span class="o">+</span> <span class="mi">3</span> </span><span id="L-382"><a href="#L-382"><span class="linenos" data-line="382"></span></a> </span><span id="L-383"><a href="#L-383"><span class="linenos" data-line="383"></span></a> <span class="kr">else</span> <span class="c1">--We have a {{template}} (both sides have 2 spare, but at least one side doesn't have 3 spare)</span> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a> <span class="n">templates</span><span class="p">[</span><span class="n">OpenSet</span><span class="p">.</span><span class="n">End</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">Start</span><span class="o">=</span><span class="n">OpenSet</span><span class="p">.</span><span class="n">End</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">End</span><span class="o">=</span><span class="n">scannerPosition</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">Type</span><span class="o">=</span><span class="s2">"Template"</span><span class="p">}</span> <span class="c1">--Done like this to ensure chronological order</span> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a> <span class="n">BracketCount</span> <span class="o">=</span> <span class="n">BracketCount</span> <span class="o">-</span> <span class="mi">2</span> </span><span id="L-386"><a href="#L-386"><span class="linenos" data-line="386"></span></a> <span class="n">OpenSet</span><span class="p">.</span><span class="n">End</span> <span class="o">=</span> <span class="n">OpenSet</span><span class="p">.</span><span class="n">End</span> <span class="o">-</span> <span class="mi">2</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="n">scannerPosition</span> <span class="o">+</span> <span class="mi">2</span> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a> <span class="kr">end</span> </span><span id="L-389"><a href="#L-389"><span class="linenos" data-line="389"></span></a> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a> <span class="kr">if</span> <span class="n">boundlen</span><span class="p">(</span><span class="n">OpenSet</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">2</span> <span class="kr">then</span> <span class="c1">--Still has enough data left, leave it in</span> </span><span id="L-391"><a href="#L-391"><span class="linenos" data-line="391"></span></a> <span class="n">openBrackets</span><span class="p">[</span><span class="o">#</span><span class="n">openBrackets</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">OpenSet</span> </span><span id="L-392"><a href="#L-392"><span class="linenos" data-line="392"></span></a> <span class="kr">end</span> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a> <span class="kr">end</span> </span><span id="L-394"><a href="#L-394"><span class="linenos" data-line="394"></span></a> <span class="kr">end</span> </span><span id="L-395"><a href="#L-395"><span class="linenos" data-line="395"></span></a> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="n">End</span> <span class="c1">--Now move past the bracket set</span> </span><span id="L-396"><a href="#L-396"><span class="linenos" data-line="396"></span></a> <span class="kr">end</span> </span><span id="L-397"><a href="#L-397"><span class="linenos" data-line="397"></span></a> </span><span id="L-398"><a href="#L-398"><span class="linenos" data-line="398"></span></a> <span class="c1">--Step 3: Re-trace every object using their known bounds, collecting our parameters with (slight) ease</span> </span><span id="L-399"><a href="#L-399"><span class="linenos" data-line="399"></span></a> <span class="kd">local</span> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-400"><a href="#L-400"><span class="linenos" data-line="400"></span></a> <span class="kd">local</span> <span class="n">activeObjects</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-401"><a href="#L-401"><span class="linenos" data-line="401"></span></a> <span class="kd">local</span> <span class="n">finalObjects</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-402"><a href="#L-402"><span class="linenos" data-line="402"></span></a> <span class="kr">while</span> <span class="kc">true</span> <span class="kr">do</span> </span><span id="L-403"><a href="#L-403"><span class="linenos" data-line="403"></span></a> <span class="kd">local</span> <span class="n">LatestObject</span> <span class="o">=</span> <span class="n">activeObjects</span><span class="p">[</span><span class="o">#</span><span class="n">activeObjects</span><span class="p">]</span> <span class="c1">--Commonly needed object</span> </span><span id="L-404"><a href="#L-404"><span class="linenos" data-line="404"></span></a> <span class="kd">local</span> <span class="n">NNC</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">Character</span> <span class="c1">--NNC = NextNotableCharacter</span> </span><span id="L-405"><a href="#L-405"><span class="linenos" data-line="405"></span></a> <span class="kr">if</span> <span class="n">LatestObject</span> <span class="kr">then</span> </span><span id="L-406"><a href="#L-406"><span class="linenos" data-line="406"></span></a> <span class="n">NNC</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">Character</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">InputText</span><span class="p">,</span> <span class="s2">"([{}%[%]|=])"</span><span class="p">,</span> <span class="n">scannerPosition</span><span class="p">)</span> </span><span id="L-407"><a href="#L-407"><span class="linenos" data-line="407"></span></a> <span class="kr">else</span> </span><span id="L-408"><a href="#L-408"><span class="linenos" data-line="408"></span></a> <span class="n">NNC</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">Character</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span><span class="n">InputText</span><span class="p">,</span> <span class="s2">"([{}])"</span><span class="p">,</span> <span class="n">scannerPosition</span><span class="p">)</span> <span class="c1">--We are only after templates right now</span> </span><span id="L-409"><a href="#L-409"><span class="linenos" data-line="409"></span></a> <span class="kr">end</span> </span><span id="L-410"><a href="#L-410"><span class="linenos" data-line="410"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">NNC</span> <span class="kr">then</span> </span><span id="L-411"><a href="#L-411"><span class="linenos" data-line="411"></span></a> <span class="kr">break</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 class="kr">if</span> <span class="n">NNC</span> <span class="o">></span> <span class="n">scannerPosition</span> <span class="ow">and</span> <span class="n">LatestObject</span> <span class="kr">then</span> </span><span id="L-414"><a href="#L-414"><span class="linenos" data-line="414"></span></a> <span class="kd">local</span> <span class="n">scannedContent</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">InputText</span><span class="p">,</span> <span class="n">scannerPosition</span><span class="p">,</span> <span class="n">NNC</span><span class="o">-</span><span class="mi">1</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">LatestObject</span><span class="p">:</span><span class="n">AppendText</span><span class="p">(</span><span class="n">scannedContent</span><span class="p">,</span> <span class="n">finalise</span><span class="p">(</span><span class="n">scannedContent</span><span class="p">))</span> </span><span id="L-416"><a href="#L-416"><span class="linenos" data-line="416"></span></a> <span class="kr">end</span> </span><span id="L-417"><a href="#L-417"><span class="linenos" data-line="417"></span></a> </span><span id="L-418"><a href="#L-418"><span class="linenos" data-line="418"></span></a> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="n">NNC</span><span class="o">+</span><span class="mi">1</span> </span><span id="L-419"><a href="#L-419"><span class="linenos" data-line="419"></span></a> <span class="kr">if</span> <span class="n">Character</span> <span class="o">==</span> <span class="s2">"{"</span> <span class="ow">or</span> <span class="n">Character</span> <span class="o">==</span> <span class="s2">"["</span> <span class="kr">then</span> </span><span id="L-420"><a href="#L-420"><span class="linenos" data-line="420"></span></a> <span class="kd">local</span> <span class="n">Container</span> <span class="o">=</span> <span class="n">templates</span><span class="p">[</span><span class="n">NNC</span><span class="p">]</span> <span class="ow">or</span> <span class="n">variables</span><span class="p">[</span><span class="n">NNC</span><span class="p">]</span> <span class="ow">or</span> <span class="n">wikilinks</span><span class="p">[</span><span class="n">NNC</span><span class="p">]</span> </span><span id="L-421"><a href="#L-421"><span class="linenos" data-line="421"></span></a> <span class="kr">if</span> <span class="n">Container</span> <span class="kr">then</span> </span><span id="L-422"><a href="#L-422"><span class="linenos" data-line="422"></span></a> <span class="n">CreateContainerObj</span><span class="p">(</span><span class="n">Container</span><span class="p">)</span> </span><span id="L-423"><a href="#L-423"><span class="linenos" data-line="423"></span></a> <span class="kr">if</span> <span class="n">Container</span><span class="p">.</span><span class="n">Type</span> <span class="o">==</span> <span class="s2">"Template"</span> <span class="kr">then</span> </span><span id="L-424"><a href="#L-424"><span class="linenos" data-line="424"></span></a> <span class="n">Container</span><span class="p">:</span><span class="n">AppendText</span><span class="p">(</span><span class="s2">"{{"</span><span class="p">)</span> </span><span id="L-425"><a href="#L-425"><span class="linenos" data-line="425"></span></a> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="n">NNC</span><span class="o">+</span><span class="mi">2</span> </span><span id="L-426"><a href="#L-426"><span class="linenos" data-line="426"></span></a> <span class="kr">elseif</span> <span class="n">Container</span><span class="p">.</span><span class="n">Type</span> <span class="o">==</span> <span class="s2">"Variable"</span> <span class="kr">then</span> </span><span id="L-427"><a href="#L-427"><span class="linenos" data-line="427"></span></a> <span class="n">Container</span><span class="p">:</span><span class="n">AppendText</span><span class="p">(</span><span class="s2">"{{{"</span><span class="p">)</span> </span><span id="L-428"><a href="#L-428"><span class="linenos" data-line="428"></span></a> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="n">NNC</span><span class="o">+</span><span class="mi">3</span> </span><span id="L-429"><a href="#L-429"><span class="linenos" data-line="429"></span></a> <span class="kr">else</span> <span class="c1">--Wikilink</span> </span><span id="L-430"><a href="#L-430"><span class="linenos" data-line="430"></span></a> <span class="n">Container</span><span class="p">:</span><span class="n">AppendText</span><span class="p">(</span><span class="s2">"[["</span><span class="p">)</span> </span><span id="L-431"><a href="#L-431"><span class="linenos" data-line="431"></span></a> <span class="n">scannerPosition</span> <span class="o">=</span> <span class="n">NNC</span><span class="o">+</span><span class="mi">2</span> </span><span id="L-432"><a href="#L-432"><span class="linenos" data-line="432"></span></a> <span class="kr">end</span> </span><span id="L-433"><a href="#L-433"><span class="linenos" data-line="433"></span></a> <span class="kr">if</span> <span class="n">LatestObject</span> <span class="ow">and</span> <span class="n">Container</span><span class="p">.</span><span class="n">Type</span> <span class="o">==</span> <span class="s2">"Template"</span> <span class="kr">then</span> <span class="c1">--Only templates count as children</span> </span><span id="L-434"><a href="#L-434"><span class="linenos" data-line="434"></span></a> <span class="n">LatestObject</span><span class="p">.</span><span class="n">Children</span><span class="p">[</span><span class="o">#</span><span class="n">LatestObject</span><span class="p">.</span><span class="n">Children</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">Container</span> </span><span id="L-435"><a href="#L-435"><span class="linenos" data-line="435"></span></a> <span class="kr">end</span> </span><span id="L-436"><a href="#L-436"><span class="linenos" data-line="436"></span></a> <span class="n">activeObjects</span><span class="p">[</span><span class="o">#</span><span class="n">activeObjects</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">Container</span> </span><span id="L-437"><a href="#L-437"><span class="linenos" data-line="437"></span></a> <span class="kr">elseif</span> <span class="n">LatestObject</span> <span class="kr">then</span> </span><span id="L-438"><a href="#L-438"><span class="linenos" data-line="438"></span></a> <span class="n">LatestObject</span><span class="p">:</span><span class="n">AppendText</span><span class="p">(</span><span class="n">Character</span><span class="p">)</span> </span><span id="L-439"><a href="#L-439"><span class="linenos" data-line="439"></span></a> <span class="kr">end</span> </span><span id="L-440"><a href="#L-440"><span class="linenos" data-line="440"></span></a> </span><span id="L-441"><a href="#L-441"><span class="linenos" data-line="441"></span></a> <span class="kr">elseif</span> <span class="n">Character</span> <span class="o">==</span> <span class="s2">"}"</span> <span class="ow">or</span> <span class="n">Character</span> <span class="o">==</span> <span class="s2">"]"</span> <span class="kr">then</span> </span><span id="L-442"><a href="#L-442"><span class="linenos" data-line="442"></span></a> <span class="kr">if</span> <span class="n">LatestObject</span> <span class="kr">then</span> </span><span id="L-443"><a href="#L-443"><span class="linenos" data-line="443"></span></a> <span class="n">LatestObject</span><span class="p">:</span><span class="n">AppendText</span><span class="p">(</span><span class="n">Character</span><span class="p">)</span> </span><span id="L-444"><a href="#L-444"><span class="linenos" data-line="444"></span></a> <span class="kr">if</span> <span class="n">LatestObject</span><span class="p">.</span><span class="n">End</span> <span class="o">==</span> <span class="n">NNC</span> <span class="kr">then</span> </span><span id="L-445"><a href="#L-445"><span class="linenos" data-line="445"></span></a> <span class="kr">if</span> <span class="n">LatestObject</span><span class="p">.</span><span class="n">Type</span> <span class="o">==</span> <span class="s2">"Template"</span> <span class="kr">then</span> </span><span id="L-446"><a href="#L-446"><span class="linenos" data-line="446"></span></a> <span class="n">LatestObject</span><span class="p">:</span><span class="n">Clean</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span> </span><span id="L-447"><a href="#L-447"><span class="linenos" data-line="447"></span></a> <span class="n">finalObjects</span><span class="p">[</span><span class="o">#</span><span class="n">finalObjects</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">LatestObject</span> </span><span id="L-448"><a href="#L-448"><span class="linenos" data-line="448"></span></a> <span class="kr">else</span> </span><span id="L-449"><a href="#L-449"><span class="linenos" data-line="449"></span></a> <span class="n">LatestObject</span><span class="p">:</span><span class="n">Clean</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span> </span><span id="L-450"><a href="#L-450"><span class="linenos" data-line="450"></span></a> <span class="kr">end</span> </span><span id="L-451"><a href="#L-451"><span class="linenos" data-line="451"></span></a> <span class="n">activeObjects</span><span class="p">[</span><span class="o">#</span><span class="n">activeObjects</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-452"><a href="#L-452"><span class="linenos" data-line="452"></span></a> <span class="kd">local</span> <span class="n">NewLatest</span> <span class="o">=</span> <span class="n">activeObjects</span><span class="p">[</span><span class="o">#</span><span class="n">activeObjects</span><span class="p">]</span> </span><span id="L-453"><a href="#L-453"><span class="linenos" data-line="453"></span></a> <span class="kr">if</span> <span class="n">NewLatest</span> <span class="kr">then</span> </span><span id="L-454"><a href="#L-454"><span class="linenos" data-line="454"></span></a> <span class="n">NewLatest</span><span class="p">:</span><span class="n">AppendText</span><span class="p">(</span><span class="n">LatestObject</span><span class="p">.</span><span class="n">Text</span><span class="p">)</span> <span class="c1">--Append to new latest</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 class="kr">end</span> </span><span id="L-458"><a href="#L-458"><span class="linenos" data-line="458"></span></a> </span><span id="L-459"><a href="#L-459"><span class="linenos" data-line="459"></span></a> <span class="kr">else</span> <span class="c1">--| or =</span> </span><span id="L-460"><a href="#L-460"><span class="linenos" data-line="460"></span></a> <span class="kr">if</span> <span class="n">LatestObject</span> <span class="kr">then</span> </span><span id="L-461"><a href="#L-461"><span class="linenos" data-line="461"></span></a> <span class="n">LatestObject</span><span class="p">:</span><span class="n">HandleArgInput</span><span class="p">(</span><span class="n">Character</span><span class="p">)</span> </span><span id="L-462"><a href="#L-462"><span class="linenos" data-line="462"></span></a> <span class="kr">end</span> </span><span id="L-463"><a href="#L-463"><span class="linenos" data-line="463"></span></a> <span class="kr">end</span> </span><span id="L-464"><a href="#L-464"><span class="linenos" data-line="464"></span></a> <span class="kr">end</span> </span><span id="L-465"><a href="#L-465"><span class="linenos" data-line="465"></span></a> </span><span id="L-466"><a href="#L-466"><span class="linenos" data-line="466"></span></a> <span class="c1">--Step 4: Fix the order</span> </span><span id="L-467"><a href="#L-467"><span class="linenos" data-line="467"></span></a> <span class="kd">local</span> <span class="n">FixedOrder</span> <span class="o">=</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">SortableReference</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-469"><a href="#L-469"><span class="linenos" data-line="469"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span><span class="n">Object</span> <span class="kr">in</span> <span class="nb">next</span><span class="p">,</span><span class="n">finalObjects</span> <span class="kr">do</span> </span><span id="L-470"><a href="#L-470"><span class="linenos" data-line="470"></span></a> <span class="n">SortableReference</span><span class="p">[</span><span class="o">#</span><span class="n">SortableReference</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">Object</span><span class="p">.</span><span class="n">Start</span> </span><span id="L-471"><a href="#L-471"><span class="linenos" data-line="471"></span></a> <span class="kr">end</span> </span><span id="L-472"><a href="#L-472"><span class="linenos" data-line="472"></span></a> <span class="nb">table.sort</span><span class="p">(</span><span class="n">SortableReference</span><span class="p">)</span> </span><span id="L-473"><a href="#L-473"><span class="linenos" data-line="473"></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">SortableReference</span> <span class="kr">do</span> </span><span id="L-474"><a href="#L-474"><span class="linenos" data-line="474"></span></a> <span class="kd">local</span> <span class="n">start</span> <span class="o">=</span> <span class="n">SortableReference</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> </span><span id="L-475"><a href="#L-475"><span class="linenos" data-line="475"></span></a> <span class="kr">for</span> <span class="n">n</span><span class="p">,</span><span class="n">Object</span> <span class="kr">in</span> <span class="nb">next</span><span class="p">,</span><span class="n">finalObjects</span> <span class="kr">do</span> </span><span id="L-476"><a href="#L-476"><span class="linenos" data-line="476"></span></a> <span class="kr">if</span> <span class="n">Object</span><span class="p">.</span><span class="n">Start</span> <span class="o">==</span> <span class="n">start</span> <span class="kr">then</span> </span><span id="L-477"><a href="#L-477"><span class="linenos" data-line="477"></span></a> <span class="n">finalObjects</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-478"><a href="#L-478"><span class="linenos" data-line="478"></span></a> <span class="n">Object</span><span class="p">.</span><span class="n">Start</span> <span class="o">=</span> <span class="kc">nil</span> <span class="c1">--Final cleanup</span> </span><span id="L-479"><a href="#L-479"><span class="linenos" data-line="479"></span></a> <span class="n">Object</span><span class="p">.</span><span class="n">End</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-480"><a href="#L-480"><span class="linenos" data-line="480"></span></a> <span class="n">Object</span><span class="p">.</span><span class="n">Type</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-481"><a href="#L-481"><span class="linenos" data-line="481"></span></a> <span class="n">FixedOrder</span><span class="p">[</span><span class="o">#</span><span class="n">FixedOrder</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">Object</span> </span><span id="L-482"><a href="#L-482"><span class="linenos" data-line="482"></span></a> <span class="kr">break</span> </span><span id="L-483"><a href="#L-483"><span class="linenos" data-line="483"></span></a> <span class="kr">end</span> </span><span id="L-484"><a href="#L-484"><span class="linenos" data-line="484"></span></a> <span class="kr">end</span> </span><span id="L-485"><a href="#L-485"><span class="linenos" data-line="485"></span></a> <span class="kr">end</span> </span><span id="L-486"><a href="#L-486"><span class="linenos" data-line="486"></span></a> </span><span id="L-487"><a href="#L-487"><span class="linenos" data-line="487"></span></a> <span class="c1">--Finished, return</span> </span><span id="L-488"><a href="#L-488"><span class="linenos" data-line="488"></span></a> <span class="kr">return</span> <span class="n">FixedOrder</span> </span><span id="L-489"><a href="#L-489"><span class="linenos" data-line="489"></span></a><span class="kr">end</span> </span><span id="L-490"><a href="#L-490"><span class="linenos" data-line="490"></span></a> </span><span id="L-491"><a href="#L-491"><span class="linenos" data-line="491"></span></a><span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-492"><a href="#L-492"><span class="linenos" data-line="492"></span></a><span class="c1">--Main entry points</span> </span><span id="L-493"><a href="#L-493"><span class="linenos" data-line="493"></span></a><span class="n">p</span><span class="p">.</span><span class="n">PrepareText</span> <span class="o">=</span> <span class="n">PrepareText</span> </span><span id="L-494"><a href="#L-494"><span class="linenos" data-line="494"></span></a><span class="n">p</span><span class="p">.</span><span class="n">ParseTemplates</span> <span class="o">=</span> <span class="n">ParseTemplates</span> </span><span id="L-495"><a href="#L-495"><span class="linenos" data-line="495"></span></a><span class="c1">--Extra entry points, not really required</span> </span><span id="L-496"><a href="#L-496"><span class="linenos" data-line="496"></span></a><span class="n">p</span><span class="p">.</span><span class="n">TestForNowikiTag</span> <span class="o">=</span> <span class="n">TestForNowikiTag</span> </span><span id="L-497"><a href="#L-497"><span class="linenos" data-line="497"></span></a><span class="n">p</span><span class="p">.</span><span class="n">TestForComment</span> <span class="o">=</span> <span class="n">TestForComment</span> </span><span id="L-498"><a href="#L-498"><span class="linenos" data-line="498"></span></a> </span><span id="L-499"><a href="#L-499"><span class="linenos" data-line="499"></span></a><span class="kr">return</span> <span class="n">p</span> </span><span id="L-500"><a href="#L-500"><span class="linenos" data-line="500"></span></a> </span><span id="L-501"><a href="#L-501"><span class="linenos" data-line="501"></span></a><span class="cm">--[==[ console tests</span> </span><span id="L-502"><a href="#L-502"><span class="linenos" data-line="502"></span></a> </span><span id="L-503"><a href="#L-503"><span class="linenos" data-line="503"></span></a><span class="cm">local s = [=[Hey!{{Text|<nowiki | ||></span> </span><span id="L-504"><a href="#L-504"><span class="linenos" data-line="504"></span></a><span class="cm">Hey! }}</span> </span><span id="L-505"><a href="#L-505"><span class="linenos" data-line="505"></span></a><span class="cm">A</nowiki>|<!--AAAAA|AAA-->Should see|Shouldn't see}}]=]</span> </span><span id="L-506"><a href="#L-506"><span class="linenos" data-line="506"></span></a><span class="cm">local out = p.PrepareText(s)</span> </span><span id="L-507"><a href="#L-507"><span class="linenos" data-line="507"></span></a><span class="cm">mw.logObject(out)</span> </span><span id="L-508"><a href="#L-508"><span class="linenos" data-line="508"></span></a> </span><span id="L-509"><a href="#L-509"><span class="linenos" data-line="509"></span></a><span class="cm">local s = [=[B<!--</span> </span><span id="L-510"><a href="#L-510"><span class="linenos" data-line="510"></span></a><span class="cm">Hey!</span> </span><span id="L-511"><a href="#L-511"><span class="linenos" data-line="511"></span></a><span class="cm">-->A]=]</span> </span><span id="L-512"><a href="#L-512"><span class="linenos" data-line="512"></span></a><span class="cm">local out = p.TestForComment(s, 2)</span> </span><span id="L-513"><a href="#L-513"><span class="linenos" data-line="513"></span></a><span class="cm">mw.logObject(out); mw.log(string.sub(s, 2, out.Length))</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="cm">local a = p.ParseTemplates([=[</span> </span><span id="L-516"><a href="#L-516"><span class="linenos" data-line="516"></span></a><span class="cm">{{User:Aidan9382/templates/dummy</span> </span><span id="L-517"><a href="#L-517"><span class="linenos" data-line="517"></span></a><span class="cm">|A|B|C {{{A|B}}} { } } {</span> </span><span id="L-518"><a href="#L-518"><span class="linenos" data-line="518"></span></a><span class="cm">|<nowiki>D</nowiki></span> </span><span id="L-519"><a href="#L-519"><span class="linenos" data-line="519"></span></a><span class="cm">|<pre>E</span> </span><span id="L-520"><a href="#L-520"><span class="linenos" data-line="520"></span></a><span class="cm">|F</pre></span> </span><span id="L-521"><a href="#L-521"><span class="linenos" data-line="521"></span></a><span class="cm">|G|=|a=|A = [[{{PAGENAME}}|A=B]]{{Text|1==<nowiki>}}</nowiki>}}|A B=Success}}</span> </span><span id="L-522"><a href="#L-522"><span class="linenos" data-line="522"></span></a><span class="cm">]=])</span> </span><span id="L-523"><a href="#L-523"><span class="linenos" data-line="523"></span></a><span class="cm">mw.logObject(a)</span> </span><span id="L-524"><a href="#L-524"><span class="linenos" data-line="524"></span></a> </span><span id="L-525"><a href="#L-525"><span class="linenos" data-line="525"></span></a><span class="cm">]==]</span> </span></pre></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐nhjc4 Cached time: 20241124095736 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1] CPU time usage: 0.106 seconds Real time usage: 0.173 seconds Preprocessor visited node count: 613/1000000 Post‐expand include size: 24182/2097152 bytes Template argument size: 1327/2097152 bytes Highest expansion depth: 13/100 Expensive parser function count: 4/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 7642/5000000 bytes Lua time usage: 0.062/10.000 seconds Lua memory usage: 1630356/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 67.135 1 Module:Wikitext_Parsing/doc 100.00% 67.135 1 -total 56.47% 37.910 1 Template:High_risk 15.50% 10.406 2 Template:Module_rating 11.34% 7.615 2 Template:Module_other 8.41% 5.647 1 Template:Sandbox_other 8.21% 5.513 1 Template:Cascade-protected_template 6.92% 4.647 2 Template:Ombox 6.28% 4.219 5 Template:Tag 4.61% 3.095 1 Template:Mbox --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Module:Wikitext_Parsing&oldid=1209492587">https://en.wikipedia.org/w/index.php?title=Module:Wikitext_Parsing&oldid=1209492587</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Modules_for_general_use" title="Category:Modules for general use">Modules for general use</a></li><li><a href="/wiki/Category:Modules_in_beta" title="Category:Modules in beta">Modules in beta</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden category: <ul><li><a href="/wiki/Category:Wikipedia_fully_protected_modules" title="Category:Wikipedia fully protected modules">Wikipedia fully protected modules</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 22 February 2024, at 04:42<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</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">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Module:Wikitext_Parsing&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-nhjc4","wgBackendResponseTime":327,"wgPageParseReport":{"limitreport":{"cputime":"0.106","walltime":"0.173","ppvisitednodes":{"value":613,"limit":1000000},"postexpandincludesize":{"value":24182,"limit":2097152},"templateargumentsize":{"value":1327,"limit":2097152},"expansiondepth":{"value":13,"limit":100},"expensivefunctioncount":{"value":4,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":7642,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 67.135 1 Module:Wikitext_Parsing/doc","100.00% 67.135 1 -total"," 56.47% 37.910 1 Template:High_risk"," 15.50% 10.406 2 Template:Module_rating"," 11.34% 7.615 2 Template:Module_other"," 8.41% 5.647 1 Template:Sandbox_other"," 8.21% 5.513 1 Template:Cascade-protected_template"," 6.92% 4.647 2 Template:Ombox"," 6.28% 4.219 5 Template:Tag"," 4.61% 3.095 1 Template:Mbox"]},"scribunto":{"limitreport-timeusage":{"value":"0.062","limit":"10.000"},"limitreport-memusage":{"value":1630356,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-nhjc4","timestamp":"20241124095736","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>