CINXE.COM

Module:String2 - 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:String2 - 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":"3faaa662-9780-4544-bf9c-b628caefa562","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Module:String2","wgTitle":"String2","wgCurRevisionId":1246706252,"wgRevisionId":1246706252,"wgArticleId":41360466,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Wikipedia template-protected modules","Modules for general use","Modules that manipulate strings"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Module:String2","wgRelevantArticleId":41360466,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":["templateeditor"],"wgRestrictionMove":["templateeditor"],"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":"Q16914835","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","mediawiki.toc","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&amp;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&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles&amp;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:String2 - 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:String2"> <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:String2"> <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&amp;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_String2 rootpage-Module_String2 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&#039;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&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;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&amp;returnto=Module%3AString2" 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&amp;returnto=Module%3AString2" title="You&#039;re encouraged to log in; however, it&#039;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&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;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&amp;returnto=Module%3AString2" 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&amp;returnto=Module%3AString2" title="You&#039;re encouraged to log in; however, it&#039;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-Functions" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Functions"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Functions</span> </div> </a> <button aria-controls="toc-Functions-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Functions subsection</span> </button> <ul id="toc-Functions-sublist" class="vector-toc-list"> <li id="toc-trim" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#trim"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>trim</span> </div> </a> <ul id="toc-trim-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-title" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#title"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2</span> <span>title</span> </div> </a> <ul id="toc-title-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-sentence" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#sentence"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.3</span> <span>sentence</span> </div> </a> <ul id="toc-sentence-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-ucfirst" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#ucfirst"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.4</span> <span>ucfirst</span> </div> </a> <ul id="toc-ucfirst-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-findlast" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#findlast"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.5</span> <span>findlast</span> </div> </a> <ul id="toc-findlast-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-split" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#split"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.6</span> <span>split</span> </div> </a> <ul id="toc-split-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-stripZeros" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#stripZeros"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.7</span> <span>stripZeros</span> </div> </a> <ul id="toc-stripZeros-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-nowiki" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#nowiki"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.8</span> <span>nowiki</span> </div> </a> <ul id="toc-nowiki-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-val2percent" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#val2percent"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.9</span> <span>val2percent</span> </div> </a> <ul id="toc-val2percent-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-one2a" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#one2a"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.10</span> <span>one2a</span> </div> </a> <ul id="toc-one2a-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-findpagetext" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#findpagetext"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.11</span> <span>findpagetext</span> </div> </a> <ul id="toc-findpagetext-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-strip" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#strip"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.12</span> <span>strip</span> </div> </a> <ul id="toc-strip-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-matchAny" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#matchAny"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.13</span> <span>matchAny</span> </div> </a> <ul id="toc-matchAny-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-hyphen2dash" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#hyphen2dash"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.14</span> <span>hyphen2dash</span> </div> </a> <ul id="toc-hyphen2dash-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-startswith" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#startswith"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.15</span> <span>startswith</span> </div> </a> <ul id="toc-startswith-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Usage" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Usage"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Usage</span> </div> </a> <button aria-controls="toc-Usage-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Usage subsection</span> </button> <ul id="toc-Usage-sublist" class="vector-toc-list"> <li id="toc-Parameters" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Parameters"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Parameters</span> </div> </a> <ul id="toc-Parameters-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Examples" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Examples"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Examples</span> </div> </a> <button aria-controls="toc-Examples-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Examples subsection</span> </button> <ul id="toc-Examples-sublist" class="vector-toc-list"> <li id="toc-String_split" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#String_split"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>String split</span> </div> </a> <ul id="toc-String_split-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-One2a_2" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#One2a_2"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>One2a</span> </div> </a> <ul id="toc-One2a_2-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>See also</span> </div> </a> <ul id="toc-See_also-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">String2</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 114 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-114" 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">114 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-af mw-list-item"><a href="https://af.wikipedia.org/wiki/Module:String2" title="Module:String2 – Afrikaans" lang="af" hreflang="af" data-title="Module:String2" data-language-autonym="Afrikaans" data-language-local-name="Afrikaans" class="interlanguage-link-target"><span>Afrikaans</span></a></li><li class="interlanguage-link interwiki-alt mw-list-item"><a href="https://alt.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Southern Altai" lang="alt" hreflang="alt" data-title="Модуль:String2" data-language-autonym="Алтай тил" data-language-local-name="Southern Altai" class="interlanguage-link-target"><span>Алтай тил</span></a></li><li class="interlanguage-link interwiki-ab mw-list-item"><a href="https://ab.wikipedia.org/wiki/%D0%90%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Амодуль:String2 – Abkhazian" lang="ab" hreflang="ab" data-title="Амодуль:String2" data-language-autonym="Аԥсшәа" data-language-local-name="Abkhazian" class="interlanguage-link-target"><span>Аԥсшәа</span></a></li><li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D9%88%D8%AD%D8%AF%D8%A9:String2" title="وحدة:String2 – Arabic" lang="ar" hreflang="ar" data-title="وحدة:String2" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-as mw-list-item"><a href="https://as.wikipedia.org/wiki/Module:String2" title="Module:String2 – Assamese" lang="as" hreflang="as" data-title="Module:String2" data-language-autonym="অসমীয়া" data-language-local-name="Assamese" class="interlanguage-link-target"><span>অসমীয়া</span></a></li><li class="interlanguage-link interwiki-ast mw-list-item"><a href="https://ast.wikipedia.org/wiki/M%C3%B3dulu:String2" title="Módulu:String2 – Asturian" lang="ast" hreflang="ast" data-title="Módulu:String2" data-language-autonym="Asturianu" data-language-local-name="Asturian" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-av mw-list-item"><a href="https://av.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Avaric" lang="av" hreflang="av" data-title="Модуль:String2" data-language-autonym="Авар" data-language-local-name="Avaric" class="interlanguage-link-target"><span>Авар</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Azerbaijani" lang="az" hreflang="az" data-title="Modul:String2" data-language-autonym="Azərbaycanca" data-language-local-name="Azerbaijani" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-azb mw-list-item"><a href="https://azb.wikipedia.org/wiki/%D9%85%D8%A7%DA%98%D9%88%D9%84:String2" title="ماژول:String2 – South Azerbaijani" lang="azb" hreflang="azb" data-title="ماژول:String2" data-language-autonym="تۆرکجه" data-language-local-name="South Azerbaijani" class="interlanguage-link-target"><span>تۆرکجه</span></a></li><li class="interlanguage-link interwiki-ban mw-list-item"><a href="https://ban.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Balinese" lang="ban" hreflang="ban" data-title="Modul:String2" data-language-autonym="Basa Bali" data-language-local-name="Balinese" class="interlanguage-link-target"><span>Basa Bali</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%AE%E0%A6%A1%E0%A6%BF%E0%A6%89%E0%A6%B2:String2" title="মডিউল:String2 – Bangla" lang="bn" hreflang="bn" data-title="মডিউল:String2" data-language-autonym="বাংলা" data-language-local-name="Bangla" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-bjn mw-list-item"><a href="https://bjn.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Banjar" lang="bjn" hreflang="bjn" data-title="Modul:String2" data-language-autonym="Banjar" data-language-local-name="Banjar" class="interlanguage-link-target"><span>Banjar</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:String2" title="模組:String2 – Minnan" lang="nan" hreflang="nan" data-title="模組:String2" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="Minnan" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-ba mw-list-item"><a href="https://ba.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Bashkir" lang="ba" hreflang="ba" data-title="Модуль:String2" data-language-autonym="Башҡортса" data-language-local-name="Bashkir" 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:String2" title="Модуль:String2 – Belarusian" lang="be" hreflang="be" data-title="Модуль:String2" data-language-autonym="Беларуская" data-language-local-name="Belarusian" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-be-x-old mw-list-item"><a href="https://be-tarask.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Belarusian (Taraškievica orthography)" lang="be-tarask" hreflang="be-tarask" data-title="Модуль:String2" data-language-autonym="Беларуская (тарашкевіца)" data-language-local-name="Belarusian (Taraškievica orthography)" class="interlanguage-link-target"><span>Беларуская (тарашкевіца)</span></a></li><li class="interlanguage-link interwiki-bh mw-list-item"><a href="https://bh.wikipedia.org/wiki/Module:String2" title="Module:String2 – Bhojpuri" lang="bh" hreflang="bh" data-title="Module:String2" data-language-autonym="भोजपुरी" data-language-local-name="Bhojpuri" class="interlanguage-link-target"><span>भोजपुरी</span></a></li><li class="interlanguage-link interwiki-bcl mw-list-item"><a href="https://bcl.wikipedia.org/wiki/Module:String2" title="Module:String2 – Central Bikol" lang="bcl" hreflang="bcl" data-title="Module:String2" data-language-autonym="Bikol Central" data-language-local-name="Central Bikol" class="interlanguage-link-target"><span>Bikol Central</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:String2" title="Модул:String2 – Bulgarian" lang="bg" hreflang="bg" data-title="Модул:String2" data-language-autonym="Български" data-language-local-name="Bulgarian" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Bosnian" lang="bs" hreflang="bs" data-title="Modul:String2" data-language-autonym="Bosanski" data-language-local-name="Bosnian" class="interlanguage-link-target"><span>Bosanski</span></a></li><li class="interlanguage-link interwiki-bxr mw-list-item"><a href="https://bxr.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Russia Buriat" lang="bxr" hreflang="bxr" data-title="Модуль:String2" data-language-autonym="Буряад" data-language-local-name="Russia Buriat" 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:String2" title="Module:String2 – Cebuano" lang="ceb" hreflang="ceb" data-title="Module:String2" data-language-autonym="Cebuano" data-language-local-name="Cebuano" class="interlanguage-link-target"><span>Cebuano</span></a></li><li class="interlanguage-link interwiki-cy mw-list-item"><a href="https://cy.wikipedia.org/wiki/Modiwl:String2" title="Modiwl:String2 – Welsh" lang="cy" hreflang="cy" data-title="Modiwl:String2" data-language-autonym="Cymraeg" data-language-local-name="Welsh" class="interlanguage-link-target"><span>Cymraeg</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Danish" lang="da" hreflang="da" data-title="Modul:String2" data-language-autonym="Dansk" data-language-local-name="Danish" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-ary mw-list-item"><a href="https://ary.wikipedia.org/wiki/%D9%85%D9%88%D8%AF%D9%88%D9%84:String2" title="مودول:String2 – Moroccan Arabic" lang="ary" hreflang="ary" data-title="مودول:String2" data-language-autonym="الدارجة" data-language-local-name="Moroccan Arabic" class="interlanguage-link-target"><span>الدارجة</span></a></li><li class="interlanguage-link interwiki-dv mw-list-item"><a href="https://dv.wikipedia.org/wiki/%DE%89%DE%AE%DE%91%DE%A8%DE%87%DE%AA%DE%8D%DE%B0:String2" title="މޮޑިއުލް:String2 – Divehi" lang="dv" hreflang="dv" data-title="މޮޑިއުލް:String2" data-language-autonym="ދިވެހިބަސް" data-language-local-name="Divehi" class="interlanguage-link-target"><span>ދިވެހިބަސް</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Moodul:String2" title="Moodul:String2 – Estonian" lang="et" hreflang="et" data-title="Moodul:String2" data-language-autonym="Eesti" data-language-local-name="Estonian" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/Module:String2" title="Module:String2 – Greek" lang="el" hreflang="el" data-title="Module:String2" data-language-autonym="Ελληνικά" data-language-local-name="Greek" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-myv mw-list-item"><a href="https://myv.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Erzya" lang="myv" hreflang="myv" data-title="Модуль:String2" data-language-autonym="Эрзянь" data-language-local-name="Erzya" class="interlanguage-link-target"><span>Эрзянь</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/M%C3%B3dulo:String2" title="Módulo:String2 – Spanish" lang="es" hreflang="es" data-title="Módulo:String2" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Modulu:String2" title="Modulu:String2 – Basque" lang="eu" hreflang="eu" data-title="Modulu:String2" data-language-autonym="Euskara" data-language-local-name="Basque" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:String2" title="پودمان:String2 – Persian" lang="fa" hreflang="fa" data-title="پودمان:String2" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fo mw-list-item"><a href="https://fo.wikipedia.org/wiki/Module:String2" title="Module:String2 – Faroese" lang="fo" hreflang="fo" data-title="Module:String2" data-language-autonym="Føroyskt" data-language-local-name="Faroese" class="interlanguage-link-target"><span>Føroyskt</span></a></li><li class="interlanguage-link interwiki-inh mw-list-item"><a href="https://inh.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Ingush" lang="inh" hreflang="inh" data-title="Модуль:String2" data-language-autonym="ГӀалгӀай" data-language-local-name="Ingush" class="interlanguage-link-target"><span>ГӀалгӀай</span></a></li><li class="interlanguage-link interwiki-gan mw-list-item"><a href="https://gan.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:String2" title="模組:String2 – Gan" lang="gan" hreflang="gan" data-title="模組:String2" data-language-autonym="贛語" data-language-local-name="Gan" class="interlanguage-link-target"><span>贛語</span></a></li><li class="interlanguage-link interwiki-gu mw-list-item"><a href="https://gu.wikipedia.org/wiki/%E0%AA%B5%E0%AA%BF%E0%AA%AD%E0%AA%BE%E0%AA%97:String2" title="વિભાગ:String2 – Gujarati" lang="gu" hreflang="gu" data-title="વિભાગ:String2" data-language-autonym="ગુજરાતી" data-language-local-name="Gujarati" class="interlanguage-link-target"><span>ગુજરાતી</span></a></li><li class="interlanguage-link interwiki-hak mw-list-item"><a href="https://hak.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:String2" title="模組:String2 – Hakka Chinese" lang="hak" hreflang="hak" data-title="模組:String2" data-language-autonym="客家語 / Hak-kâ-ngî" data-language-local-name="Hakka Chinese" class="interlanguage-link-target"><span>客家語 / Hak-kâ-ngî</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%93%88:String2" title="모듈:String2 – Korean" lang="ko" hreflang="ko" data-title="모듈:String2" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-ha mw-list-item"><a href="https://ha.wikipedia.org/wiki/Module:String2" title="Module:String2 – Hausa" lang="ha" hreflang="ha" data-title="Module:String2" data-language-autonym="Hausa" data-language-local-name="Hausa" class="interlanguage-link-target"><span>Hausa</span></a></li><li class="interlanguage-link interwiki-haw mw-list-item"><a href="https://haw.wikipedia.org/wiki/Module:String2" title="Module:String2 – Hawaiian" lang="haw" hreflang="haw" data-title="Module:String2" data-language-autonym="Hawaiʻi" data-language-local-name="Hawaiian" class="interlanguage-link-target"><span>Hawaiʻi</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/%D5%84%D5%B8%D5%A4%D5%B8%D6%82%D5%AC:String2" title="Մոդուլ:String2 – Armenian" lang="hy" hreflang="hy" data-title="Մոդուլ:String2" data-language-autonym="Հայերեն" data-language-local-name="Armenian" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%89%E0%A4%A1%E0%A5%8D%E0%A4%AF%E0%A5%82%E0%A4%B2:String2" title="मॉड्यूल:String2 – Hindi" lang="hi" hreflang="hi" data-title="मॉड्यूल:String2" data-language-autonym="हिन्दी" data-language-local-name="Hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-hr mw-list-item"><a href="https://hr.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Croatian" lang="hr" hreflang="hr" data-title="Modul:String2" data-language-autonym="Hrvatski" data-language-local-name="Croatian" class="interlanguage-link-target"><span>Hrvatski</span></a></li><li class="interlanguage-link interwiki-ilo mw-list-item"><a href="https://ilo.wikipedia.org/wiki/Modulo:String2" title="Modulo:String2 – Iloko" lang="ilo" hreflang="ilo" data-title="Modulo:String2" data-language-autonym="Ilokano" data-language-local-name="Iloko" class="interlanguage-link-target"><span>Ilokano</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Indonesian" lang="id" hreflang="id" data-title="Modul:String2" 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-os mw-list-item"><a href="https://os.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Ossetic" lang="os" hreflang="os" data-title="Модуль:String2" data-language-autonym="Ирон" data-language-local-name="Ossetic" class="interlanguage-link-target"><span>Ирон</span></a></li><li class="interlanguage-link interwiki-is mw-list-item"><a href="https://is.wikipedia.org/wiki/Module:String2" title="Module:String2 – Icelandic" lang="is" hreflang="is" data-title="Module:String2" data-language-autonym="Íslenska" data-language-local-name="Icelandic" class="interlanguage-link-target"><span>Íslenska</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/%D7%99%D7%97%D7%99%D7%93%D7%94:String2" title="יחידה:String2 – Hebrew" lang="he" hreflang="he" data-title="יחידה:String2" data-language-autonym="עברית" data-language-local-name="Hebrew" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-jv mw-list-item"><a href="https://jv.wikipedia.org/wiki/Modhul:String2" title="Modhul:String2 – Javanese" lang="jv" hreflang="jv" data-title="Modhul:String2" data-language-autonym="Jawa" data-language-local-name="Javanese" class="interlanguage-link-target"><span>Jawa</span></a></li><li class="interlanguage-link interwiki-kn mw-list-item"><a href="https://kn.wikipedia.org/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:String2" title="ಮಾಡ್ಯೂಲ್:String2 – Kannada" lang="kn" hreflang="kn" data-title="ಮಾಡ್ಯೂಲ್:String2" data-language-autonym="ಕನ್ನಡ" data-language-local-name="Kannada" class="interlanguage-link-target"><span>ಕನ್ನಡ</span></a></li><li class="interlanguage-link interwiki-ka mw-list-item"><a href="https://ka.wikipedia.org/wiki/%E1%83%9B%E1%83%9D%E1%83%93%E1%83%A3%E1%83%9A%E1%83%98:String2" title="მოდული:String2 – Georgian" lang="ka" hreflang="ka" data-title="მოდული:String2" data-language-autonym="ქართული" data-language-local-name="Georgian" class="interlanguage-link-target"><span>ქართული</span></a></li><li class="interlanguage-link interwiki-kw mw-list-item"><a href="https://kw.wikipedia.org/wiki/Module:String2" title="Module:String2 – Cornish" lang="kw" hreflang="kw" data-title="Module:String2" data-language-autonym="Kernowek" data-language-local-name="Cornish" class="interlanguage-link-target"><span>Kernowek</span></a></li><li class="interlanguage-link interwiki-rw mw-list-item"><a href="https://rw.wikipedia.org/wiki/Module:String2" title="Module:String2 – Kinyarwanda" lang="rw" hreflang="rw" data-title="Module:String2" data-language-autonym="Ikinyarwanda" data-language-local-name="Kinyarwanda" class="interlanguage-link-target"><span>Ikinyarwanda</span></a></li><li class="interlanguage-link interwiki-kv mw-list-item"><a href="https://kv.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Komi" lang="kv" hreflang="kv" data-title="Модуль:String2" data-language-autonym="Коми" data-language-local-name="Komi" class="interlanguage-link-target"><span>Коми</span></a></li><li class="interlanguage-link interwiki-ku mw-list-item"><a href="https://ku.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Kurdish" lang="ku" hreflang="ku" data-title="Modul:String2" data-language-autonym="Kurdî" data-language-local-name="Kurdish" class="interlanguage-link-target"><span>Kurdî</span></a></li><li class="interlanguage-link interwiki-mrj mw-list-item"><a href="https://mrj.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Western Mari" lang="mrj" hreflang="mrj" data-title="Модуль:String2" data-language-autonym="Кырык мары" data-language-local-name="Western Mari" class="interlanguage-link-target"><span>Кырык мары</span></a></li><li class="interlanguage-link interwiki-lbe mw-list-item"><a href="https://lbe.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Lak" lang="lbe" hreflang="lbe" data-title="Модуль:String2" data-language-autonym="Лакку" data-language-local-name="Lak" class="interlanguage-link-target"><span>Лакку</span></a></li><li class="interlanguage-link interwiki-lo mw-list-item"><a href="https://lo.wikipedia.org/wiki/Module:String2" title="Module:String2 – Lao" lang="lo" hreflang="lo" data-title="Module:String2" data-language-autonym="ລາວ" data-language-local-name="Lao" class="interlanguage-link-target"><span>ລາວ</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Modulis:String2" title="Modulis:String2 – Latvian" lang="lv" hreflang="lv" data-title="Modulis:String2" data-language-autonym="Latviešu" data-language-local-name="Latvian" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-lez mw-list-item"><a href="https://lez.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Lezghian" lang="lez" hreflang="lez" data-title="Модуль:String2" data-language-autonym="Лезги" data-language-local-name="Lezghian" class="interlanguage-link-target"><span>Лезги</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/Module:String2" title="Module:String2 – Lithuanian" lang="lt" hreflang="lt" data-title="Module:String2" data-language-autonym="Lietuvių" data-language-local-name="Lithuanian" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Hungarian" lang="hu" hreflang="hu" data-title="Modul:String2" data-language-autonym="Magyar" data-language-local-name="Hungarian" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-mai mw-list-item"><a href="https://mai.wikipedia.org/wiki/%E0%A4%AE%E0%A5%8B%E0%A4%A1%E0%A5%8D%E0%A4%AF%E0%A5%81%E0%A4%B2:String2" title="मोड्युल:String2 – Maithili" lang="mai" hreflang="mai" data-title="मोड्युल:String2" data-language-autonym="मैथिली" data-language-local-name="Maithili" class="interlanguage-link-target"><span>मैथिली</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:String2" title="Модул:String2 – Macedonian" lang="mk" hreflang="mk" data-title="Модул:String2" data-language-autonym="Македонски" data-language-local-name="Macedonian" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:String2" title="ഘടകം:String2 – Malayalam" lang="ml" hreflang="ml" data-title="ഘടകം:String2" data-language-autonym="മലയാളം" data-language-local-name="Malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mt mw-list-item"><a href="https://mt.wikipedia.org/wiki/Module:String2" title="Module:String2 – Maltese" lang="mt" hreflang="mt" data-title="Module:String2" data-language-autonym="Malti" data-language-local-name="Maltese" class="interlanguage-link-target"><span>Malti</span></a></li><li class="interlanguage-link interwiki-mnw mw-list-item"><a href="https://mnw.wikipedia.org/wiki/%E1%80%99%E1%80%9D%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0:String2" title="မဝ်ဂျူ:String2 – Mon" lang="mnw" hreflang="mnw" data-title="မဝ်ဂျူ:String2" data-language-autonym="ဘာသာမန်" data-language-local-name="Mon" class="interlanguage-link-target"><span>ဘာသာမန်</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Malay" lang="ms" hreflang="ms" data-title="Modul:String2" 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-min mw-list-item"><a href="https://min.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Minangkabau" lang="min" hreflang="min" data-title="Modul:String2" data-language-autonym="Minangkabau" data-language-local-name="Minangkabau" class="interlanguage-link-target"><span>Minangkabau</span></a></li><li class="interlanguage-link interwiki-cdo mw-list-item"><a href="https://cdo.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:String2" title="模組:String2 – Mindong" lang="cdo" hreflang="cdo" data-title="模組:String2" data-language-autonym="閩東語 / Mìng-dĕ̤ng-ngṳ̄" data-language-local-name="Mindong" class="interlanguage-link-target"><span>閩東語 / Mìng-dĕ̤ng-ngṳ̄</span></a></li><li class="interlanguage-link interwiki-mdf mw-list-item"><a href="https://mdf.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Moksha" lang="mdf" hreflang="mdf" data-title="Модуль:String2" data-language-autonym="Мокшень" data-language-local-name="Moksha" class="interlanguage-link-target"><span>Мокшень</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/Module:String2" title="Module:String2 – Mongolian" lang="mn" hreflang="mn" data-title="Module:String2" data-language-autonym="Монгол" data-language-local-name="Mongolian" class="interlanguage-link-target"><span>Монгол</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:String2" title="မော်ဂျူး:String2 – Burmese" lang="my" hreflang="my" data-title="မော်ဂျူး:String2" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="Burmese" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-ne mw-list-item"><a href="https://ne.wikipedia.org/wiki/%E0%A4%AE%E0%A5%8B%E0%A4%A1%E0%A5%8D%E0%A4%AF%E0%A5%81%E0%A4%B2:String2" title="मोड्युल:String2 – Nepali" lang="ne" hreflang="ne" data-title="मोड्युल:String2" data-language-autonym="नेपाली" data-language-local-name="Nepali" class="interlanguage-link-target"><span>नेपाली</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:String2" title="モジュール:String2 – Japanese" lang="ja" hreflang="ja" data-title="モジュール:String2" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ce mw-list-item"><a href="https://ce.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Chechen" lang="ce" hreflang="ce" data-title="Модуль:String2" data-language-autonym="Нохчийн" data-language-local-name="Chechen" class="interlanguage-link-target"><span>Нохчийн</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Norwegian Bokmål" lang="nb" hreflang="nb" data-title="Modul:String2" data-language-autonym="Norsk bokmål" data-language-local-name="Norwegian Bokmål" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-oc mw-list-item"><a href="https://oc.wikipedia.org/wiki/M%C3%B2dul:String2" title="Mòdul:String2 – Occitan" lang="oc" hreflang="oc" data-title="Mòdul:String2" data-language-autonym="Occitan" data-language-local-name="Occitan" class="interlanguage-link-target"><span>Occitan</span></a></li><li class="interlanguage-link interwiki-mhr mw-list-item"><a href="https://mhr.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Eastern Mari" lang="mhr" hreflang="mhr" data-title="Модуль:String2" data-language-autonym="Олык марий" data-language-local-name="Eastern Mari" class="interlanguage-link-target"><span>Олык марий</span></a></li><li class="interlanguage-link interwiki-or mw-list-item"><a href="https://or.wikipedia.org/wiki/%E0%AC%AE%E0%AC%A1%E0%AD%8D%E0%AD%9F%E0%AD%81%E0%AC%B2:String2" title="ମଡ୍ୟୁଲ:String2 – Odia" lang="or" hreflang="or" data-title="ମଡ୍ୟୁଲ:String2" data-language-autonym="ଓଡ଼ିଆ" data-language-local-name="Odia" 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:String2" title="Modul:String2 – Uzbek" lang="uz" hreflang="uz" data-title="Modul:String2" 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-pa mw-list-item"><a href="https://pa.wikipedia.org/wiki/%E0%A8%AE%E0%A9%8C%E0%A8%A1%E0%A8%BF%E0%A8%8A%E0%A8%B2:String2" title="ਮੌਡਿਊਲ:String2 – Punjabi" lang="pa" hreflang="pa" data-title="ਮੌਡਿਊਲ:String2" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="Punjabi" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</span></a></li><li class="interlanguage-link interwiki-pag mw-list-item"><a href="https://pag.wikipedia.org/wiki/Module:String2" title="Module:String2 – Pangasinan" lang="pag" hreflang="pag" data-title="Module:String2" data-language-autonym="Pangasinan" data-language-local-name="Pangasinan" class="interlanguage-link-target"><span>Pangasinan</span></a></li><li class="interlanguage-link interwiki-blk mw-list-item"><a href="https://blk.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:String2" title="မော်ဂျူး:String2 – Pa&#039;O" lang="blk" hreflang="blk" data-title="မော်ဂျူး:String2" data-language-autonym="ပအိုဝ်ႏဘာႏသာႏ" data-language-local-name="Pa&#039;O" class="interlanguage-link-target"><span>ပအိုဝ်ႏဘာႏသာႏ</span></a></li><li class="interlanguage-link interwiki-pap mw-list-item"><a href="https://pap.wikipedia.org/wiki/Module:String2" title="Module:String2 – Papiamento" lang="pap" hreflang="pap" data-title="Module:String2" data-language-autonym="Papiamentu" data-language-local-name="Papiamento" class="interlanguage-link-target"><span>Papiamentu</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/M%C3%B3dulo:String2" title="Módulo:String2 – Portuguese" lang="pt" hreflang="pt" data-title="Módulo:String2" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Romanian" lang="ro" hreflang="ro" data-title="Modul:String2" data-language-autonym="Română" data-language-local-name="Romanian" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-qu mw-list-item"><a href="https://qu.wikipedia.org/wiki/M%C3%B3dulo:String2" title="Módulo:String2 – Quechua" lang="qu" hreflang="qu" data-title="Módulo:String2" data-language-autonym="Runa Simi" data-language-local-name="Quechua" class="interlanguage-link-target"><span>Runa Simi</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Russian" lang="ru" hreflang="ru" data-title="Модуль:String2" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sa mw-list-item"><a href="https://sa.wikipedia.org/wiki/%E0%A4%AA%E0%A4%9F%E0%A4%B2%E0%A4%AE%E0%A5%8D:String2" title="पटलम्:String2 – Sanskrit" lang="sa" hreflang="sa" data-title="पटलम्:String2" data-language-autonym="संस्कृतम्" data-language-local-name="Sanskrit" class="interlanguage-link-target"><span>संस्कृतम्</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/Moduli:String2" title="Moduli:String2 – Albanian" lang="sq" hreflang="sq" data-title="Moduli:String2" data-language-autonym="Shqip" data-language-local-name="Albanian" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wikipedia.org/wiki/Module:String2" title="Module:String2 – Sinhala" lang="si" hreflang="si" data-title="Module:String2" data-language-autonym="සිංහල" data-language-local-name="Sinhala" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Module:String2" title="Module:String2 – Simple English" lang="en-simple" hreflang="en-simple" data-title="Module:String2" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sd mw-list-item"><a href="https://sd.wikipedia.org/wiki/%D9%85%D8%A7%DA%8A%D9%8A%D9%88%D9%84:String2" title="ماڊيول:String2 – Sindhi" lang="sd" hreflang="sd" data-title="ماڊيول:String2" data-language-autonym="سنڌي" data-language-local-name="Sindhi" class="interlanguage-link-target"><span>سنڌي</span></a></li><li class="interlanguage-link interwiki-ss mw-list-item"><a href="https://ss.wikipedia.org/wiki/Module:String2" title="Module:String2 – Swati" lang="ss" hreflang="ss" data-title="Module:String2" data-language-autonym="SiSwati" data-language-local-name="Swati" class="interlanguage-link-target"><span>SiSwati</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Modul:String2" title="Modul:String2 – Slovenian" lang="sl" hreflang="sl" data-title="Modul:String2" 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:String2" title="مۆدیوول:String2 – Central Kurdish" lang="ckb" hreflang="ckb" data-title="مۆدیوول:String2" data-language-autonym="کوردی" data-language-local-name="Central Kurdish" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:String2" title="Модул:String2 – Serbian" lang="sr" hreflang="sr" data-title="Модул:String2" data-language-autonym="Српски / srpski" data-language-local-name="Serbian" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-tl mw-list-item"><a href="https://tl.wikipedia.org/wiki/Module:String2" title="Module:String2 – Tagalog" lang="tl" hreflang="tl" data-title="Module:String2" data-language-autonym="Tagalog" data-language-local-name="Tagalog" class="interlanguage-link-target"><span>Tagalog</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/Module:String2" title="Module:String2 – Tamil" lang="ta" hreflang="ta" data-title="Module:String2" data-language-autonym="தமிழ்" data-language-local-name="Tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-kab mw-list-item"><a href="https://kab.wikipedia.org/wiki/Module:String2" title="Module:String2 – Kabyle" lang="kab" hreflang="kab" data-title="Module:String2" data-language-autonym="Taqbaylit" data-language-local-name="Kabyle" class="interlanguage-link-target"><span>Taqbaylit</span></a></li><li class="interlanguage-link interwiki-tt mw-list-item"><a href="https://tt.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Tatar" lang="tt" hreflang="tt" data-title="Модуль:String2" data-language-autonym="Татарча / tatarça" data-language-local-name="Tatar" class="interlanguage-link-target"><span>Татарча / tatarça</span></a></li><li class="interlanguage-link interwiki-shn mw-list-item"><a href="https://shn.wikipedia.org/wiki/%E1%80%99%E1%80%B1%E1%82%83%E1%82%87%E1%81%B5%E1%80%BB%E1%80%B0%E1%80%B8:String2" title="မေႃႇၵျူး:String2 – Shan" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:String2" data-language-autonym="ၽႃႇသႃႇတႆး " data-language-local-name="Shan" class="interlanguage-link-target"><span>ၽႃႇသႃႇတႆး </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:String2" title="มอดูล:String2 – Thai" lang="th" hreflang="th" data-title="มอดูล:String2" data-language-autonym="ไทย" data-language-local-name="Thai" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:String2" title="Модул:String2 – Tajik" lang="tg" hreflang="tg" data-title="Модул:String2" data-language-autonym="Тоҷикӣ" data-language-local-name="Tajik" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Mod%C3%BCl:Dizgi2" title="Modül:Dizgi2 – Turkish" lang="tr" hreflang="tr" data-title="Modül:Dizgi2" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-tk mw-list-item"><a href="https://tk.wikipedia.org/wiki/Module:String2" title="Module:String2 – Turkmen" lang="tk" hreflang="tk" data-title="Module:String2" data-language-autonym="Türkmençe" data-language-local-name="Turkmen" class="interlanguage-link-target"><span>Türkmençe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:String2" title="Модуль:String2 – Ukrainian" lang="uk" hreflang="uk" data-title="Модуль:String2" data-language-autonym="Українська" data-language-local-name="Ukrainian" 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:String2" title="ماڈیول:String2 – Urdu" lang="ur" hreflang="ur" data-title="ماڈیول:String2" data-language-autonym="اردو" data-language-local-name="Urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-za mw-list-item"><a href="https://za.wikipedia.org/wiki/%E6%A8%A1%E5%9D%97:String2" title="模块:String2 – Zhuang" lang="za" hreflang="za" data-title="模块:String2" data-language-autonym="Vahcuengh" data-language-local-name="Zhuang" class="interlanguage-link-target"><span>Vahcuengh</span></a></li><li class="interlanguage-link interwiki-vep mw-list-item"><a href="https://vep.wikipedia.org/wiki/Moodul:String2" title="Moodul:String2 – Veps" lang="vep" hreflang="vep" data-title="Moodul:String2" data-language-autonym="Vepsän kel’" data-language-local-name="Veps" class="interlanguage-link-target"><span>Vepsän kel’</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/M%C3%B4_%C4%91un:String2" title="Mô đun:String2 – Vietnamese" lang="vi" hreflang="vi" data-title="Mô đun:String2" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamese" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-vo mw-list-item"><a href="https://vo.wikipedia.org/wiki/Module:String2" title="Module:String2 – Volapük" lang="vo" hreflang="vo" data-title="Module:String2" data-language-autonym="Volapük" data-language-local-name="Volapük" class="interlanguage-link-target"><span>Volapük</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Module:String2" title="Module:String2 – Chinese" lang="zh" hreflang="zh" data-title="Module:String2" 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/Q16914835#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:String2" 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:String2" 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:String2"><span>Read</span></a></li><li id="ca-viewsource" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:String2&amp;action=edit" title="This page is protected.&#10;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:String2&amp;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:String2"><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:String2&amp;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:String2&amp;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:String2" 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:String2" 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:String2&amp;oldid=1246706252" 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:String2&amp;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&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FModule%3AString2"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FModule%3AString2"><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&amp;page=Module%3AString2&amp;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 class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Module:String2" hreflang="en"><span>Wikimedia Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-meta mw-list-item"><a href="https://meta.wikimedia.org/wiki/Module:String2" hreflang="en"><span>Meta-Wiki</span></a></li><li class="wb-otherproject-link wb-otherproject-outreach mw-list-item"><a href="https://outreach.wikimedia.org/wiki/Module:String2" hreflang="en"><span>Wikimedia Outreach</span></a></li><li class="wb-otherproject-link wb-otherproject-species mw-list-item"><a href="https://species.wikimedia.org/wiki/Module:String2" hreflang="en"><span>Wikispecies</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://en.wikibooks.org/wiki/Module:String2" hreflang="en"><span>Wikibooks</span></a></li><li class="wb-otherproject-link wb-otherproject-wikisource mw-list-item"><a href="https://en.wikisource.org/wiki/Module:String2" hreflang="en"><span>Wikisource</span></a></li><li class="wb-otherproject-link wb-otherproject-wikiversity mw-list-item"><a href="https://en.wikiversity.org/wiki/Module:String2" hreflang="en"><span>Wikiversity</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q16914835" 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#template" title="This high-risk module is permanently template-protected to prevent vandalism"><img alt="Permanently protected module" src="//upload.wikimedia.org/wikipedia/en/thumb/5/53/Template-protection-shackle.svg/20px-Template-protection-shackle.svg.png" decoding="async" width="20" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/5/53/Template-protection-shackle.svg/30px-Template-protection-shackle.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/5/53/Template-protection-shackle.svg/40px-Template-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">&#91;<a href="/wiki/Module:String2/doc" title="Module:String2/doc">view</a>&#93; &#91;<a href="/wiki/Special:EditPage/Module:String2/doc" title="Special:EditPage/Module:String2/doc">edit</a>&#93; &#91;<a href="/wiki/Special:PageHistory/Module:String2/doc" title="Special:PageHistory/Module:String2/doc">history</a>&#93; &#91;<a href="/wiki/Special:Purge/Module:String2" title="Special:Purge/Module:String2">purge</a>&#93;</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&amp;page=Module%3AString2#transclusions">approximately&#x20;4,810,000&#x20;pages, or roughly 8% 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:String2/sandbox" title="Module:String2/sandbox">/sandbox</a> or <a href="/wiki/Module:String2/testcases" title="Module:String2/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:String2" title="Module talk:String2">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-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> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238436933"><table class="plainlinks ombox mbox-small ombox-notice" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Lua-Logo.svg/30px-Lua-Logo.svg.png" decoding="async" width="30" height="30" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Lua-Logo.svg/45px-Lua-Logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Lua-Logo.svg/60px-Lua-Logo.svg.png 2x" data-file-width="947" data-file-height="947" /></span></span></td><td class="mbox-text">This module depends on the following other modules:<div><ul><li><a href="/wiki/Module:GetParameters" title="Module:GetParameters">Module:GetParameters</a></li></ul></div></td></tr></tbody></table> <p><span class="plainlinks nourlexpansion lx"><a class="mw-selflink selflink">Module:String2</a>&#160;<span style="font-size:90%;">(<a class="external text" href="https://en.wikipedia.org/w/index.php?title=Module:String2&amp;action=edit">edit</a> &#124; <a href="/wiki/Module_talk:String2" title="Module talk:String2">talk</a> &#124; <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Module:String2&amp;action=history">history</a> &#124; <a class="external text" href="https://en.wikipedia.org/wiki/Special:Whatlinkshere/Module:String2">links</a> &#124; <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Module:String2&amp;action=watch">watch</a> &#124; <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Special:Log&amp;page=Module%3AString2">logs</a>)</span></span> </p><p>The module <b>String2</b> contains a number of string manipulation functions that are much less commonly used than those in <a href="/wiki/Module:String" title="Module:String">Module:String</a>. Because Module:String is cascade-protected (some of its functions are used on the Main Page), it cannot be edited or maintained by template editors, only by admins. While it is true that string-handling functions rarely need maintenance, it is useful to allow that by template editors where possible, so this module may be used by template editors to develop novel functionality. </p><p>The module contains three case-related calls that convert strings to first letter uppercase, sentence case or title case and two calls that are useful for working with substrings. There are other utility calls that strip leading zeros from padded numbers and transform text so that it is not interpreted as wikitext, and several other calls that solve specific problems for template developers such as finding the position of a piece of text on a given page. </p><p>The functions are designed with the possibility of working with text returned from Wikidata in mind. However, a call to Wikidata may return empty, so the functions should generally fail gracefully if supplied with a missing or blank input parameter, rather than throwing an error. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Functions">Functions</h2></div> <div class="mw-heading mw-heading3"><h3 id="trim">trim</h3></div> <p>The trim function simply trims whitespace characters from the start and end of the string. </p> <div class="mw-heading mw-heading3"><h3 id="title">title</h3></div> <p>The title function capitalises the first letter of each word in the text, apart from a number of short words listed in <a href="https://en.wikisource.org/wiki/U.S._Government_Printing_Office_Style_Manual/Capitalization_Rules#3.49" class="extiw" title="s:U.S. Government Printing Office Style Manual/Capitalization Rules">The U.S. Government Printing Office Style Manual §3.49 "Center and side heads"</a>: <span class="example" style="font-family: Georgia, &#39;DejaVu Serif&#39;, serif; color: var(--color-content-added, #006400);">a, an, the, at, by, for, in, of, on, to, up, and, as, but, or, and nor</span>. </p><p>This is a very simplistic algorithm; see <a href="/wiki/Template:Title_case/doc" title="Template:Title case/doc">Template:Title case/doc</a> for some of its limitations. </p> <div class="mw-heading mw-heading3"><h3 id="sentence">sentence</h3></div> <p>The sentence function finds the first letter and capitalises it, then renders the rest of the text in lower case. It works properly with text containing wiki markup. Compare <code>{{#invoke:String2|sentence|[[action game]]}}</code> &#8594; <a href="/wiki/Action_game" title="Action game">Action game</a> with <code>{{ucfirst:{{lc:[[action game]]}}}}</code> &#8594; <a href="/wiki/Action_game" title="Action game">action game</a>. Piped wiki-links are handled as well: </p> <ul><li><code>{{#invoke:String2|sentence|[[trimix (breathing gas)|trimix]]}}</code> &#8594; <a href="/wiki/Trimix_(breathing_gas)" title="Trimix (breathing gas)">Trimix</a></li></ul> <p>So are lists: </p> <ul><li><code>{{#invoke:String2 |sentence |{{hlist ||[[apples]] |[[pears]] |[[oranges]]}}}}</code> → <style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><div class="hlist"><ul><li><a href="/wiki/Apples" class="mw-redirect" title="Apples">Apples</a></li><li><a href="/wiki/Pears" class="mw-redirect" title="Pears">pears</a></li><li><a href="/wiki/Oranges" class="mw-redirect" title="Oranges">oranges</a></li></ul></div></li></ul> <div class="mw-heading mw-heading3"><h3 id="ucfirst">ucfirst</h3></div> <p>The ucfirst function is similar to sentence; it renders the first alphabetical character in upper case, but leaves the capitalisation of the rest of the text unaltered. This is useful if the text contains proper nouns, but it will not regularise sentences that are ALLCAPS, for example. It also works with text containing piped wiki-links and with html lists. </p> <div class="mw-heading mw-heading3"><h3 id="findlast">findlast</h3></div> <ul><li>Function findlast finds the last item in a list.</li> <li>The first unnamed parameter is the list. The list is trimmed of leading and trailing whitespace</li> <li>The second, optional unnamed parameter is the list separator (default = comma space). The separator is <i>not</i> trimmed of leading and trailing whitespace (so that leading or trailing spaces can be used).</li> <li>It returns the whole list if the separator is not found.</li></ul> <p>One potential issue is that using Lua special pattern characters (<code>^$()%.[]*+-?</code>) as the separator will probably cause problems. </p> <table class="wikitable"> <caption>Examples </caption> <tbody><tr> <th scope="col">Case </th> <th scope="col">Wikitext </th> <th scope="col">Output </th></tr> <tr> <td>Normal usage</td> <td><code>{{#invoke:String2 |findlast | 5, 932, 992,532, 6,074,702, 6,145,291}}</code></td> <td>6,145,291 </td></tr> <tr> <td>Space as separator</td> <td><code>{{#invoke:String2 |findlast | 5 932 992,532 6,074,702 6,145,291 }}</code></td> <td>5 932 992,532 6,074,702 6,145,291 </td></tr> <tr> <td>One item list</td> <td><code>{{#invoke:String2 |findlast | 6,074,702 }}</code></td> <td>6,074,702 </td></tr> <tr> <td>Separator not found</td> <td><code>{{#invoke:String2 |findlast | 5, 932, 992,532, 6,074,702, 6,145,291 |;}}</code></td> <td>5, 932, 992,532, 6,074,702, 6,145,291 </td></tr> <tr> <td>List missing</td> <td><code>{{#invoke:String2 |findlast |}}</code></td> <td> </td></tr></tbody></table> <div class="mw-heading mw-heading3"><h3 id="split">split</h3></div> <p>The <i>split</i> function splits text at boundaries specified by separator and returns the chunk for the index idx (starting at 1). It can use positional parameters or named parameters (but these should not be mixed): </p> <dl><dt>Usage</dt> <dd><code>{{#invoke:String2 |split |text |separator |index |true/false}}</code></dd> <dd><code>{{#invoke:String2 |split |txt=text |sep=separator |idx=index |plain=true/false}}</code></dd></dl> <p>Any double quotes (") in the separator parameter are stripped out, which allows spaces and wikitext like <code>["[</code> to be passed. Use <code><span class="nowrap">&#123;&#123;</span><a href="/wiki/Template:!" title="Template:!">!</a><span class="nowrap">&#125;&#125;</span></code> for the pipe character <code>|</code>. </p><p>If the optional plain parameter is set to <code>false / no / 0</code> then separator is treated as a Lua pattern. The default is plain=true, i.e. normal text matching. </p><p>The index parameter is optional; it defaults to the first chunk of text. </p><p>The <span class="nowrap">&#123;&#123;</span><a href="/wiki/Template:String_split" title="Template:String split">string split</a><span class="nowrap">&#125;&#125;</span> is a convenience wrapper for the split function. </p> <div class="mw-heading mw-heading3"><h3 id="stripZeros">stripZeros</h3></div> <p>The stripZeros functions finds the first number in a string of text and strips leading zeros, but retains a zero which is followed by a decimal point. For example: "0940" &#8594; "940"; "Year: 0023" &#8594; "Year: 23"; "00.12" &#8594; "0.12" </p> <div class="mw-heading mw-heading3"><h3 id="nowiki">nowiki</h3></div> <p>The nowiki function ensures that a string of text is treated by the MediaWiki software as just a string, not code. It trims leading and trailing whitespace. </p> <div class="mw-heading mw-heading3"><h3 id="val2percent">val2percent</h3></div> <p>The val2percent functions scans through a string, passed as either the first unnamed parameter or |txt=, and converts each number it finds into a percentage, then returns the resulting string. </p> <div class="mw-heading mw-heading3"><h3 id="one2a">one2a</h3></div> <p>The one2a function scans through a string, passed as either the first unnamed parameter or |txt=, and converts each occurrence of 'one ' into either 'a ' or 'an ', then returns the resultant string. </p><p>The <a href="/wiki/Template:One2a" title="Template:One2a">Template:One2a</a> is a convenience wrapper for the one2a function. </p> <div class="mw-heading mw-heading3"><h3 id="findpagetext">findpagetext</h3></div> <p>The findpagetext function returns the position of a piece of text in the wikitext source of a page. It takes up to four parameters: </p> <ul><li>First positional parameter or |text is the text to be searched for.</li> <li>Optional parameter |title is the page title, defaults to the current page.</li> <li>Optional parameter |plain is either true for a plain search (default), or false for a <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">Lua pattern</a> search.</li> <li>Optional parameter |nomatch is the value returned when no match is found; default is nothing.</li></ul> <dl><dt>Examples</dt> <dd><code>{{#invoke:String2 |findpagetext |text=Youghiogheny}}</code> →</dd> <dd><code>{{#invoke:String2 |findpagetext |text=Youghiogheny |nomatch=not found}}</code> → not found</dd> <dd><code>{{#invoke:String2 |findpagetext |text=Youghiogheny |title=Boston Bridge |nomatch=not found}}</code> → 296</dd> <dd><code>{{#invoke:String2 |findpagetext |text=river |title=Boston Bridge |nomatch=not found}}</code> → not found</dd> <dd><code>{{#invoke:String2 |findpagetext |text=[Rr]iver |title=Boston Bridge |plain=false |nomatch=not found}}</code> → 309</dd> <dd><code>{{#invoke:String2 |findpagetext |text=%[%[ |title=Boston Bridge |plain=f |nomatch=not found}}</code> → 294</dd> <dd><code>{{#invoke:String2 |findpagetext |text=%{%{[Cc]oord |title=Boston Bridge |plain=f |nomatch=not found}}</code> → 2470</dd></dl> <p>The search is case-sensitive, so Lua pattern matching is needed to find <code>river</code> or <code>River</code>. The last example finds <code>{{coord</code> and <code>{{Coord</code>. The penultimate example finds a wiki-link. </p><p>The <a href="/wiki/Template:Findpagetext" class="mw-redirect" title="Template:Findpagetext">Template:Findpagetext</a> is a convenience wrapper for this function. </p> <div class="mw-heading mw-heading3"><h3 id="strip">strip</h3></div> <p>The strip function strips the first positional parameter of the characters or pattern supplied in the second positional parameter. </p> <dl><dt>Usage</dt> <dd><code>{{#invoke:String2|strip|<var>source_string</var>|<var>characters_to_strip</var>|<var>plain_flag</var>}}</code></dd> <dd><code>{{#invoke:String2|strip|source=|chars=|plain=}}</code></dd></dl> <dl><dt>Examples</dt> <dd><code>{{#invoke:String2|strip|abc123def|123}}</code> → abcdef</dd> <dd><code>{{#invoke:String2|strip|abc123def|%d+|false}}</code> → abcdef</dd> <dd><code>{{#invoke:String2|strip|source=abc123def|chars=123}}</code> → abcdef</dd> <dd><code>{{#invoke:String2|strip|source=abc123def|chars=%d+|plain=false}}</code> → abcdef</dd></dl> <div class="mw-heading mw-heading3"><h3 id="matchAny">matchAny</h3></div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">For a function to replace multiple patterns, see <a href="/wiki/Module:MultiReplace" title="Module:MultiReplace">Module:MultiReplace</a>.</div> <p>The matchAny function returns the index of the first positional parameter to match the <i>source</i> parameter. If the <i>plain</i> parameter is set to false (default true) then the search strings are Lua patterns. This can usefully be put in a switch statement to pick a switch case based on which pattern a string matches. Returns the empty string if nothing matches, for use in {{<a href="https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23if" class="extiw" title="mw:Help:Extension:ParserFunctions">#if</a>}}. </p><p><code>{{#invoke:String2|matchAny|123|abc|source=abc 124}}</code> returns 2. </p> <div class="mw-heading mw-heading3"><h3 id="hyphen2dash">hyphen2dash</h3></div> <p>Extracted hyphen_to_dash() function from <a href="/wiki/Special:PermanentLink/1017669505" title="Special:PermanentLink/1017669505">Module:Citation/CS1</a>. </p><p>Converts a hyphen to a dash under certain conditions. The hyphen must separate like items; unlike items are returned unmodified. These forms are modified: </p> <ul><li>letter - letter (A - B)</li> <li>digit - digit (4-5)</li> <li>digit separator digit - digit separator digit (4.1-4.5 or 4-1-4-5)</li> <li>letterdigit - letterdigit (A1-A5) (an optional separator between letter and digit is supported – a.1-a.5 or a-1-a-5)</li> <li>digitletter - digitletter (5a - 5d) (an optional separator between letter and digit is supported – 5.a-5.d or 5-a-5-d)</li></ul> <p>Any other forms are returned unmodified. </p><p>The input string may be a comma- or semicolon-separated list. Semicolons are converted to commas. </p><p><code>{{#invoke:String2|hyphen2dash|1=1-2}}</code> returns 1–2. </p><p><code>{{#invoke:String2|hyphen2dash|1=1-2; 4–10}}</code> returns 1–2, 4–10. </p><p><a href="/wiki/Help:Citation_Style_1#Accept-this-as-written_markup" title="Help:Citation Style 1">Accept-this-as-written markup</a> is supported, e.g. <code>{{#invoke:String2|hyphen2dash|1=((1-2)); 4–10}}</code> returns 1-2, 4–10. </p><p>By default, a normal space is inserted after the separating comma in lists. An optional second parameter allows to change this to a different character (i.e. a thin space or hair space). </p> <div class="mw-heading mw-heading3"><h3 id="startswith">startswith</h3></div> <p>A startswith function similar to &#123;&#123;<a href="/wiki/Module:String" title="Module:String">#invoke:string</a>|endswith&#125;&#125;. Both parameters are required, although they can be blank. Leading and trailing whitespace <i>is</i> counted, use named parameters to avoid this if required. Outputs "yes" for true and blank for false so may be passed directly to #if. </p> <table style="margin-top:0;margin-left:0; border-width:medium; padding:0;"> <tbody><tr> <th scope="col" style="width:50%;">Markup</th> <th scope="col" style="width:50%;">Renders as&#32; </th></tr> <tr> <td style="background:#f8f9fa; background:var(--background-color-interactive-subtle, #f8f9fa); color:var(--color-base, #000); border:1px solid #eaecf0; padding:9px 5px 5px; vertical-align:top;"><pre style="margin:0; border:none; padding:0; word-wrap:break-word; white-space:-moz-pre-wrap; white-space:-o-pre-wrap; white-space:-pre-wrap; white-space:pre-wrap; ">{{#invoke:string2|startswith|search|se}}</pre> </td> <td style="background:#f8f9fa; background:var(--background-color-interactive-subtle, #f8f9fa); color:var(--color-base, #000); border:1px solid #eaecf0; padding:5px; vertical-align:top;"><div style=""> <p>yes </p> </div>&#32; </td></tr> <tr> <td style="background:#f8f9fa; background:var(--background-color-interactive-subtle, #f8f9fa); color:var(--color-base, #000); border:1px solid #eaecf0; padding:9px 5px 5px; vertical-align:top;"><pre style="margin:0; border:none; padding:0; word-wrap:break-word; white-space:-moz-pre-wrap; white-space:-o-pre-wrap; white-space:-pre-wrap; white-space:pre-wrap; ">{{#invoke:string2|startswith|search|ch}}</pre> </td> <td style="background:#f8f9fa; background:var(--background-color-interactive-subtle, #f8f9fa); color:var(--color-base, #000); border:1px solid #eaecf0; padding:5px; vertical-align:top;"><div style=""> </div> </td></tr> <tr> <td style="border-width:1px;border-style: none none none;border-color:#ddd; padding:5px; vertical-align:top;"> </td> <td style="border-width:1px;border-style: none none none;border-color:#ddd; padding:5px; vertical-align:top;"> </td></tr></tbody></table> <div class="mw-heading mw-heading2"><h2 id="Usage">Usage</h2></div> <ul><li><code>{{#invoke:String2 | sentence |…}}</code> - Capitalizes the first character and shifts the rest to lowercase <ul><li>Although similar to <a href="/wiki/Help:Magic_words#Formatting" title="Help:Magic words">magic words</a>' <code>{{ucfirst:}}</code> function, this call works even with piped wiki-links because it searches beyond leading brackets and other non-alphanumeric characters.</li> <li>It now also recognises when it has an html list passed to it and capitalises the first alphabetic letter beyond the list item markup (<code class="nowrap" style="">&lt;li&gt;</code>) and any piped links that may be there.</li></ul></li> <li><code>{{#invoke:String2 | ucfirst |…}}</code> - Capitalizes the first alphabetic character and leaves the rest unaltered <ul><li>Works with piped wiki-links and html lists</li></ul></li> <li><code>{{#invoke:String2 | title |…}}</code> - Capitalizes all words, except for <code>a</code>, <code>an</code>, <code>the</code>, <code>at</code>, <code>by</code>, <code>for</code>, <code>in</code>, <code>of</code>, <code>on</code>, <code>to</code>, <code>up</code>, <code>and</code>, <code>as</code>, <code>but</code>, <code>or</code>, and <code>nor</code>.</li> <li><code>{{#invoke:String2 | stripZeros |…}}</code> - Removes leading padding zeros from the first number it finds in the string</li> <li><code>{{#invoke:String2 | title |…}}</code> - Renders the string as plain text without wikicode</li></ul> <div class="mw-heading mw-heading3"><h3 id="Parameters">Parameters</h3></div> <p>These functions take one unnamed parameter comprising (or invoking as a string) the text to be manipulated: </p> <ul><li>title</li> <li>sentence</li> <li>ucfirst</li></ul> <div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div> <table class="wikitable"> <tbody><tr> <th scope="col">Input </th> <th scope="col">Output </th></tr> <tr> <td>{{#invoke:String2| ucfirst | abcd }} </td> <td>Abcd </td></tr> <tr> <td>{{#invoke:String2| ucfirst | abCD }} </td> <td>AbCD </td></tr> <tr> <td>{{#invoke:String2| ucfirst | ABcd }} </td> <td>ABcd </td></tr> <tr> <td>{{#invoke:String2| ucfirst | ABCD }} </td> <td>ABCD </td></tr> <tr> <td>{{#invoke:String2| ucfirst | 123abcd }} </td> <td>123abcd </td></tr> <tr> <td>{{#invoke:String2| ucfirst | }} </td> <td> </td></tr> <tr> <td>{{#invoke:String2| ucfirst | human X chromosome }} </td> <td>Human X chromosome </td></tr> <tr> <td>{{#invoke:String2 | ucfirst | {{#invoke:WikidataIB |getValue<br />| P136 |fetchwikidata=ALL |onlysourced=no |qid=Q1396889}} }} </td> <td><a href="/wiki/Roman_%C3%A0_clef" title="Roman à clef">Roman à clef</a>, satirical fiction, <a href="/wiki/Fable" title="Fable">fable</a>, dystopian fiction&#160;<span class="penicon autoconfirmed-show"><span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q1396889?uselang=en#P136" title="Edit this on Wikidata"><img alt="Edit this on Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></span> </td></tr> <tr> <td>{{#invoke:String2 | ucfirst | {{#invoke:WikidataIB |getValue<br />| P106 |fetchwikidata=ALL |list=hlist |qid=Q453196}} }} </td> <td><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><div class="hlist"><ul><li><a href="/wiki/Geologist" title="Geologist">Geologist</a></li><li>university teacher</li><li><a href="/wiki/Author" title="Author">author</a></li><li><a href="/wiki/Editor" class="mw-redirect" title="Editor">editor</a></li><li><a href="/wiki/Educator" class="mw-redirect" title="Educator">educator</a>&#160;<span class="penicon autoconfirmed-show"><span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q453196?uselang=en#P106" title="Edit this on Wikidata"><img alt="Edit this on Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></span></li></ul></div> </td></tr> <tr> <td>&#160; </td> <td> </td></tr> <tr> <td>{{#invoke:String2| sentence | abcd }} </td> <td>Abcd </td></tr> <tr> <td>{{#invoke:String2| sentence | abCD }} </td> <td>Abcd </td></tr> <tr> <td>{{#invoke:String2| sentence | ABcd }} </td> <td>Abcd </td></tr> <tr> <td>{{#invoke:String2| sentence | ABCD }} </td> <td>Abcd </td></tr> <tr> <td>{{#invoke:String2| sentence | [[action game]] }} </td> <td><a href="/wiki/Action_game" title="Action game">Action game</a> </td></tr> <tr> <td>{{#invoke:String2| sentence | [[trimix (breathing gas)|trimix]] }} </td> <td><a href="/wiki/Trimix_(breathing_gas)" title="Trimix (breathing gas)">Trimix</a> </td></tr> <tr> <td>{{#invoke:String2| sentence | }} </td> <td> </td></tr> <tr> <td>&#160; </td> <td> </td></tr> <tr> <td>{{#invoke:String2| title | abcd }} </td> <td>Abcd </td></tr> <tr> <td>{{#invoke:String2| title | abCD }} </td> <td>Abcd </td></tr> <tr> <td>{{#invoke:String2| title | ABcd }} </td> <td>Abcd </td></tr> <tr> <td>{{#invoke:String2| title | ABCD }} </td> <td>Abcd </td></tr> <tr> <td>{{#invoke:String2| title | }} </td> <td> </td></tr> <tr> <td>{{#invoke:String2| title | the vitamins are in my fresh california raisins}} </td> <td>The Vitamins Are in My Fresh California Raisins </td></tr> </tbody></table> <div class="mw-heading mw-heading3"><h3 id="String_split">String split</h3></div> <p><a href="/wiki/Template:String_split" title="Template:String split">Template:String split</a> is a convenience wrapper for the split function. </p> <ul><li><code>{{String split |This is a piece of text to be split |" "}}</code> → This</li> <li><code>{{String split |This is a piece of text to be split |" "| 4}}</code> → piece</li> <li><code>{{String split |This is a piece of text to be split |x| 2}}</code> → t to be split</li></ul> <p>Modules may return strings with | as separators like this: <code>{{#invoke:carousel | main | name = WPDogs | switchsecs = 5 }}</code> → YellowLabradorLooking new.jpg | Yellow <a href="/wiki/Labrador_Retriever" title="Labrador Retriever">Labrador Retriever</a> </p> <ul><li><code>{{String split |{{#invoke:carousel | main | name = WPDogs | switchsecs = 5 }}|{{!}}| 2}}</code> → Yellow <a href="/wiki/Labrador_Retriever" title="Labrador Retriever">Labrador Retriever</a></li></ul> <p>Lua patterns can allow splitting at classes of characters such as punctuation: </p> <ul><li><code>{{String split |Apples, pears, oranges; Cats, dogs|"%p"| 2 |false}}</code> → pears</li> <li><code>{{String split |Apples, pears, oranges; Cats, dogs|"%p"| 4 |false}}</code> → Cats</li></ul> <p>Or split on anything that isn't a letter (no is treated as false): </p> <ul><li><code>{{String split |Apples pears oranges; Cats dogs|"%A+"| 4 |no}}</code> → Cats</li></ul> <p>Named parameters force the trimming of leading and trailing spaces in the parameters and are generally clearer when used: </p> <ul><li><code>{{String split | txt=Apples pears oranges; Cats dogs | sep="%A+" | idx=3 | plain=false }}</code> → oranges</li></ul> <div class="mw-heading mw-heading3"><h3 id="One2a_2">One2a</h3></div> <p><a href="/wiki/Template:One2a" title="Template:One2a">Template:One2a</a> is a convenience wrapper for the one2a function. </p><p>Capitalisation is kept. Aimed for usage with <span class="nowrap">&#123;&#123;</span><a href="/wiki/Template:Convert" title="Template:Convert">Convert</a><span class="nowrap">&#125;&#125;</span>. </p> <ul><li><code>{{one2a |One foot. One mile. One kilometer. One inch.One amp. one foot. one mile. one inch. Alone at last. Onely the lonely. ONE ounce. One monkey.}}</code> →</li></ul> <dl><dd>A foot. A mile. A kilometer. An inch.An amp. a foot. a mile. an inch. Alone at last. Onely the lonely. ONE ounce. A monkey.</dd></dl> <ul><li><code>{{convert|1|ft|spell=on}}</code> → one foot (zero point three zero metres)</li> <li><code>{{one2a|{{convert|1|ft|spell=on}}}}</code> → a foot (zero point three zero metres)</li> <li><code>{{convert|2.54|cm|0|disp=out|spell=on}}</code> → one inch</li> <li><code>{{one2a|{{convert|2.54|cm|0|disp=out|spell=on}}}}</code> → an inch</li></ul> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div> <p><a href="/wiki/Module:String" title="Module:String">Module:String</a> for the following functions: </p> <ul><li>len</li> <li>sub</li> <li>sublength</li> <li>match</li> <li>pos</li> <li>str_find</li> <li>find</li> <li>replace</li> <li>rep</li></ul> <p>Templates and modules related to capitalization </p> <ul><li><span class="nowrap">&#123;&#123;</span><a href="/wiki/Template:R_from_other_capitalisation" title="Template:R from other capitalisation">R from other capitalisation</a><span class="nowrap">&#125;&#125;</span> – for categorizing <a href="/wiki/Wikipedia:Redirect" title="Wikipedia:Redirect">WP:Redirects</a> from titles to article (or other pages) where the redirect is just a different capitalization</li> <li><span class="nowrap">&#123;&#123;</span><a href="/wiki/Template:Template_capitalization" title="Template:Template capitalization">Template capitalization</a><span class="nowrap">&#125;&#125;</span> –&#160;??</li> <li><a class="mw-selflink selflink">Module:String2</a></li></ul> <p><a href="/wiki/Help:Magic_words#Formatting" title="Help:Magic words">Magic words</a> that rewrite the output (copy-paste will get the text as displayed, not as entered): </p> <ul><li><code>{{lc:}}</code> – lower case output of the full text</li> <li><code>{{uc:}}</code> – upper case output of the full text</li> <li><code>{{lcfirst:}}</code> – lower case output of the first character only</li> <li><code>{{ucfirst:}}</code> – upper case output of the first character only</li></ul> <p><br /> Templates that implement <code class="nowrap" style="">&lt;nowiki&gt;</code> </p> <ul><li><span class="nowrap">&#123;&#123;</span><a href="/wiki/Template:Nowiki" title="Template:Nowiki">nowiki</a><span class="nowrap">&#125;&#125;</span></li> <li><span class="nowrap">&#123;&#123;</span><a href="/wiki/Template:Nowiki2" title="Template:Nowiki2">nowiki2</a><span class="nowrap">&#125;&#125;</span></li></ul> <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:String2/doc" title="Module:String2/doc">Module:String2/doc</a>. <span class="documentation-toolbar">(<a href="/wiki/Special:EditPage/Module:String2/doc" title="Special:EditPage/Module:String2/doc">edit</a> &#124; <a href="/wiki/Special:PageHistory/Module:String2/doc" title="Special:PageHistory/Module:String2/doc">history</a>)</span><br />Editors can experiment in this module's <a href="/wiki/Module:String2/sandbox" title="Module:String2/sandbox">sandbox</a> <span class="documentation-toolbar">(<a href="/wiki/Special:EditPage/Module:String2/sandbox" title="Special:EditPage/Module:String2/sandbox">edit</a> &#124; <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Special%3AComparePages&amp;page1=Module%3AString2&amp;page2=Module%3AString2%2Fsandbox">diff</a>)</span> and <a href="/wiki/Module:String2/testcases" title="Module:String2/testcases">testcases</a> <span class="documentation-toolbar">(<a href="/wiki/Special:EditPage/Module:String2/testcases" title="Special:EditPage/Module:String2/testcases">edit</a> &#124; <a href="/wiki/Module_talk:String2/testcases" title="Module talk:String2/testcases">run</a>)</span> pages.<br /> <a href="/wiki/Special:PrefixIndex/Module:String2/" title="Special:PrefixIndex/Module:String2/">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="s1">&#39;strict&#39;</span><span class="p">);</span> </span><span id="L-2"><a href="#L-2"><span class="linenos" data-line="2"></span></a><span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-3"><a href="#L-3"><span class="linenos" data-line="3"></span></a> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a><span class="n">p</span><span class="p">.</span><span class="n">trim</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</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="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">)</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><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a><span class="n">p</span><span class="p">.</span><span class="n">sentence</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a> <span class="c1">-- {{lc:}} is strip-marker safe, string.lower is not.</span> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">callParserFunction</span><span class="p">(</span><span class="s1">&#39;lc&#39;</span><span class="p">,</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</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">p</span><span class="p">.</span><span class="n">ucfirst</span><span class="p">(</span><span class="n">frame</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">end</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a><span class="n">p</span><span class="p">.</span><span class="n">ucfirst</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">frame</span> <span class="p">)</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">s</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> </span><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">s</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span> <span class="o">==</span> <span class="n">s</span> <span class="ow">or</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="s1">&#39;^%s+$&#39;</span><span class="p">)</span> <span class="kr">then</span> <span class="c1">-- when &lt;s&gt; is nil, empty, or only whitespace</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a> <span class="kr">return</span> <span class="n">s</span><span class="p">;</span> <span class="c1">-- abandon because nothing to do</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a> <span class="kr">end</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span> <span class="p">)</span> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a> <span class="kd">local</span> <span class="n">s1</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a> </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">prefix_patterns_t</span> <span class="o">=</span> <span class="p">{</span> <span class="c1">-- sequence of prefix patterns</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a> <span class="s1">&#39;^</span><span class="se">\127</span><span class="s1">[^</span><span class="se">\127</span><span class="s1">]*UNIQ%-%-%a+%-%x+%-QINU[^</span><span class="se">\127</span><span class="s1">]*</span><span class="se">\127</span><span class="s1">&#39;</span><span class="p">,</span> <span class="c1">-- stripmarker</span> </span><span id="L-25"><a href="#L-25"><span class="linenos" data-line="25"></span></a> <span class="s1">&#39;^([%*;:#]+)&#39;</span><span class="p">,</span> <span class="c1">-- various list markup</span> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a> <span class="s1">&#39;^(</span><span class="se">\&#39;\&#39;\&#39;</span><span class="s1">*)&#39;</span><span class="p">,</span> <span class="c1">-- bold / italic markup</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a> <span class="s1">&#39;^(%b&lt;&gt;)&#39;</span><span class="p">,</span> <span class="c1">-- html-like tags because some templates render these</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a> <span class="s1">&#39;^(&amp;%a+;)&#39;</span><span class="p">,</span> <span class="c1">-- html character entities because some templates render these</span> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a> <span class="s1">&#39;^(&amp;#%d+;)&#39;</span><span class="p">,</span> <span class="c1">-- html numeric (decimal) entities because some templates render these</span> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a> <span class="s1">&#39;^(&amp;#x%x+;)&#39;</span><span class="p">,</span> <span class="c1">-- html numeric (hexadecimal) entities because some templates render these</span> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a> <span class="s1">&#39;^(%s+)&#39;</span><span class="p">,</span> <span class="c1">-- any whitespace characters</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a> <span class="s1">&#39;^([%(%)%-%+%?%.%%!~!@%$%^&amp;_={}/`,‘’„“”ʻ|</span><span class="se">\&quot;\&#39;\\</span><span class="s1">]+)&#39;</span><span class="p">,</span> <span class="c1">-- miscellaneous punctuation</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a> <span class="p">}</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="kd">local</span> <span class="n">prefixes_t</span> <span class="o">=</span> <span class="p">{};</span> <span class="c1">-- list, bold/italic, and html-like markup, &amp; whitespace saved here</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">prefix_strip</span> <span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="c1">-- local function to strip prefixes from &lt;s&gt;</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">pattern</span> <span class="kr">in</span> <span class="nb">ipairs</span> <span class="p">(</span><span class="n">prefix_patterns_t</span><span class="p">)</span> <span class="kr">do</span> <span class="c1">-- spin through &lt;prefix_patterns_t&gt; </span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a> <span class="kr">if</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="n">pattern</span><span class="p">)</span> <span class="kr">then</span> <span class="c1">-- when there is a match</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a> <span class="kd">local</span> <span class="n">prefix</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="n">pattern</span><span class="p">);</span> <span class="c1">-- get a copy of the matched prefix</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a> <span class="nb">table.insert</span> <span class="p">(</span><span class="n">prefixes_t</span><span class="p">,</span> <span class="n">prefix</span><span class="p">);</span> <span class="c1">-- save it</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">sub</span> <span class="p">(</span><span class="n">prefix</span><span class="p">:</span><span class="n">len</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> <span class="c1">-- remove the prefix from &lt;s&gt;</span> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a> <span class="kr">return</span> <span class="n">s</span><span class="p">,</span> <span class="kc">true</span><span class="p">;</span> <span class="c1">-- return &lt;s&gt; without prefix and flag; force restart at top of sequence because misc punct removal can break stripmarker</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a> <span class="kr">end</span> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a> <span class="kr">end</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a> <span class="kr">return</span> <span class="n">s</span><span class="p">;</span> <span class="c1">-- no prefix found; return &lt;s&gt; with nil flag</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> <span class="kr">end</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a> <span class="kd">local</span> <span class="n">prefix_removed</span><span class="p">;</span> <span class="c1">-- flag; boolean true as long as prefix_strip() finds and removes a prefix</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="kr">repeat</span> <span class="c1">-- one by one remove list, bold/italic, html-like markup, whitespace, etc from start of &lt;s&gt;</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="n">s</span><span class="p">,</span> <span class="n">prefix_removed</span> <span class="o">=</span> <span class="n">prefix_strip</span> <span class="p">(</span><span class="n">s</span><span class="p">);</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a> <span class="kr">until</span> <span class="p">(</span><span class="ow">not</span> <span class="n">prefix_removed</span><span class="p">);</span> <span class="c1">-- until &lt;prefix_removed&gt; is nil</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a> <span class="n">s1</span> <span class="o">=</span> <span class="nb">table.concat</span> <span class="p">(</span><span class="n">prefixes_t</span><span class="p">);</span> <span class="c1">-- recreate the prefix string for later reattachment</span> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a> <span class="kd">local</span> <span class="n">first_text</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s1">&#39;^%[%[[^%]]+%]%]&#39;</span><span class="p">);</span> <span class="c1">-- extract wikilink at start of string if present; TODO: this can be string.match()?</span> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a> <span class="kd">local</span> <span class="n">upcased</span><span class="p">;</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a> <span class="kr">if</span> <span class="n">first_text</span> <span class="kr">then</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> <span class="kr">if</span> <span class="n">first_text</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="s1">&#39;^%[%[[^|]+|[^%]]+%]%]&#39;</span><span class="p">)</span> <span class="kr">then</span> <span class="c1">-- if &lt;first_text&gt; is a piped link</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a> <span class="n">upcased</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s1">&#39;^%[%[[^|]+|%W*(%w)&#39;</span><span class="p">);</span> <span class="c1">-- get first letter character</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="n">upcased</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">upper</span> <span class="p">(</span><span class="n">upcased</span><span class="p">);</span> <span class="c1">-- upcase first letter character</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">gsub</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s1">&#39;^(%[%[[^|]+|%W*)%w&#39;</span><span class="p">,</span> <span class="s1">&#39;%1&#39;</span> <span class="o">..</span> <span class="n">upcased</span><span class="p">);</span> <span class="c1">-- replace</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a> <span class="kr">else</span> <span class="c1">-- here when &lt;first_text&gt; is a wikilink but not a piped link</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a> <span class="n">upcased</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s1">&#39;^%[%[%W*%w&#39;</span><span class="p">);</span> <span class="c1">-- get &#39;[[&#39; and first letter</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> <span class="n">upcased</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">upper</span> <span class="p">(</span><span class="n">upcased</span><span class="p">);</span> <span class="c1">-- upcase first letter character</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">gsub</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s1">&#39;^%[%[%W*%w&#39;</span><span class="p">,</span> <span class="n">upcased</span><span class="p">);</span> <span class="c1">-- replace; no capture needed here</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a> <span class="kr">end</span> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="kr">elseif</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="s1">&#39;^%[%S+%s+[^%]]+%]&#39;</span><span class="p">)</span> <span class="kr">then</span> <span class="c1">-- if &lt;s&gt; is a ext link of some sort; must have label text</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="n">upcased</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s1">&#39;^%[%S+%s+%W*(%w)&#39;</span><span class="p">);</span> <span class="c1">-- get first letter character</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="n">upcased</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">upper</span> <span class="p">(</span><span class="n">upcased</span><span class="p">);</span> <span class="c1">-- upcase first letter character</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">gsub</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s1">&#39;^(%[%S+%s+%W*)%w&#39;</span><span class="p">,</span> <span class="s1">&#39;%1&#39;</span> <span class="o">..</span> <span class="n">upcased</span><span class="p">);</span> <span class="c1">-- replace</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> <span class="kr">elseif</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="s1">&#39;^%[%S+%s*%]&#39;</span><span class="p">)</span> <span class="kr">then</span> <span class="c1">-- if &lt;s&gt; is a ext link without label text; nothing to do</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a> <span class="kr">return</span> <span class="n">s1</span> <span class="o">..</span> <span class="n">s</span><span class="p">;</span> <span class="c1">-- reattach prefix string (if present) and done</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="kr">else</span> <span class="c1">-- &lt;s&gt; is not a wikilink or ext link; assume plain text</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a> <span class="n">upcased</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s1">&#39;^%W*%w&#39;</span><span class="p">);</span> <span class="c1">-- get the first letter character</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a> <span class="n">upcased</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">upper</span> <span class="p">(</span><span class="n">upcased</span><span class="p">);</span> <span class="c1">-- upcase first letter character</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">gsub</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="s1">&#39;^%W*%w&#39;</span><span class="p">,</span> <span class="n">upcased</span><span class="p">);</span> <span class="c1">-- replace; no capture needed here</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a> <span class="kr">end</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a> <span class="kr">return</span> <span class="n">s1</span> <span class="o">..</span> <span class="n">s</span><span class="p">;</span> <span class="c1">-- reattach prefix string (if present) and done</span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a><span class="kr">end</span> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a><span class="n">p</span><span class="p">.</span><span class="n">title</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">frame</span> <span class="p">)</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a> <span class="c1">-- http://grammar.yourdictionary.com/capitalization/rules-for-capitalization-in-titles.html</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a> <span class="c1">-- recommended by The U.S. Government Printing Office Style Manual:</span> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a> <span class="c1">-- &quot;Capitalize all words in titles of publications and documents,</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a> <span class="c1">-- except a, an, the, at, by, for, in, of, on, to, up, and, as, but, or, and nor.&quot;</span> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a> <span class="kd">local</span> <span class="n">alwayslower</span> <span class="o">=</span> <span class="p">{[</span><span class="s1">&#39;a&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;an&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;the&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a> <span class="p">[</span><span class="s1">&#39;and&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;but&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;or&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;for&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a> <span class="p">[</span><span class="s1">&#39;nor&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;on&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;in&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;at&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;to&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> <span class="p">[</span><span class="s1">&#39;from&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;by&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;of&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;up&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> <span class="p">}</span> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a> <span class="kd">local</span> <span class="n">res</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span> <span class="p">)</span> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a> <span class="kd">local</span> <span class="n">words</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">split</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a> <span class="kr">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">s</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">words</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></span></a> <span class="c1">-- {{lc:}} is strip-marker safe, string.lower is not.</span> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">callParserFunction</span><span class="p">(</span><span class="s1">&#39;lc&#39;</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">alwayslower</span><span class="p">[</span><span class="n">s</span><span class="p">]</span> <span class="o">~=</span> <span class="mi">1</span> <span class="kr">then</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">getContentLanguage</span><span class="p">():</span><span class="n">ucfirst</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a> <span class="kr">end</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a> <span class="n">words</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">s</span> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a> <span class="kr">end</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a> <span class="kr">return</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">words</span><span class="p">,</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a><span class="kr">end</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a><span class="c1">-- findlast finds the last item in a list</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a><span class="c1">-- the first unnamed parameter is the list</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a><span class="c1">-- the second, optional unnamed parameter is the list separator (default = comma space)</span> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a><span class="c1">-- returns the whole list if separator not found</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a><span class="n">p</span><span class="p">.</span><span class="n">findlast</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</span><span class="p">)</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">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span> <span class="p">)</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a> <span class="kd">local</span> <span class="n">sep</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> <span class="kr">if</span> <span class="n">sep</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span> <span class="kr">end</span> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="kd">local</span> <span class="n">pattern</span> <span class="o">=</span> <span class="s2">&quot;.*&quot;</span> <span class="o">..</span> <span class="n">sep</span> <span class="o">..</span> <span class="s2">&quot;(.*)&quot;</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="kd">local</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">last</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="kr">if</span> <span class="n">a</span> <span class="kr">then</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a> <span class="kr">return</span> <span class="n">last</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> <span class="kr">else</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="kr">return</span> <span class="n">s</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> <span class="kr">end</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a><span class="kr">end</span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a><span class="c1">-- stripZeros finds the first number and strips leading zeros (apart from units)</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a><span class="c1">-- e.g &quot;0940&quot; -&gt; &quot;940&quot;; &quot;Year: 0023&quot; -&gt; &quot;Year: 23&quot;; &quot;00.12&quot; -&gt; &quot;0.12&quot;</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a><span class="n">p</span><span class="p">.</span><span class="n">stripZeros</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</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">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a> <span class="kd">local</span> <span class="n">n</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="nb">string.match</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="s2">&quot;%d+&quot;</span> <span class="p">)</span> <span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">string.gsub</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="s2">&quot;%d+&quot;</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="mi">1</span> <span class="p">)</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a> <span class="kr">return</span> <span class="n">s</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a><span class="kr">end</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a><span class="c1">-- nowiki ensures that a string of text is treated by the MediaWiki software as just a string</span> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a><span class="c1">-- it takes an unnamed parameter and trims whitespace, then removes any wikicode</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a><span class="n">p</span><span class="p">.</span><span class="n">nowiki</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="kd">local</span> <span class="n">str</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="kr">return</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">str</span><span class="p">)</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a><span class="kr">end</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a><span class="c1">-- split splits text at boundaries specified by separator</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a><span class="c1">-- and returns the chunk for the index idx (starting at 1)</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a><span class="c1">-- #invoke:String2 |split |text |separator |index |true/false</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a><span class="c1">-- #invoke:String2 |split |txt=text |sep=separator |idx=index |plain=true/false</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a><span class="c1">-- if plain is false/no/0 then separator is treated as a Lua pattern - defaults to plain=true</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a><span class="n">p</span><span class="p">.</span><span class="n">split</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a> <span class="kr">if</span> <span class="ow">not</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">txt</span><span class="p">)</span> <span class="kr">then</span> <span class="n">args</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span> <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="n">txt</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">txt</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</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="n">txt</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</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">sep</span> <span class="o">=</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">sep</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">):</span><span class="n">gsub</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> <span class="kd">local</span> <span class="n">idx</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">idx</span><span class="p">)</span> <span class="ow">or</span> <span class="mi">1</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> <span class="kd">local</span> <span class="n">plain</span> <span class="o">=</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">plain</span> <span class="ow">or</span> <span class="s2">&quot;true&quot;</span><span class="p">):</span><span class="n">sub</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</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">plain</span> <span class="o">=</span> <span class="p">(</span><span class="n">plain</span> <span class="o">~=</span> <span class="s2">&quot;f&quot;</span> <span class="ow">and</span> <span class="n">plain</span> <span class="o">~=</span> <span class="s2">&quot;n&quot;</span> <span class="ow">and</span> <span class="n">plain</span> <span class="o">~=</span> <span class="s2">&quot;0&quot;</span><span class="p">)</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> <span class="kd">local</span> <span class="n">splittbl</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">split</span><span class="p">(</span> <span class="n">txt</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">plain</span> <span class="p">)</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="kr">if</span> <span class="n">idx</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="kr">then</span> <span class="n">idx</span> <span class="o">=</span> <span class="o">#</span><span class="n">splittbl</span> <span class="o">+</span> <span class="n">idx</span> <span class="o">+</span> <span class="mi">1</span> <span class="kr">end</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="kr">return</span> <span class="n">splittbl</span><span class="p">[</span><span class="n">idx</span><span class="p">]</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a><span class="kr">end</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a><span class="c1">-- val2percent scans through a string, passed as either the first unnamed parameter or |txt=</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a><span class="c1">-- it converts each number it finds into a percentage and returns the resultant string.</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a><span class="n">p</span><span class="p">.</span><span class="n">val2percent</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a> <span class="kr">if</span> <span class="ow">not</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">txt</span><span class="p">)</span> <span class="kr">then</span> <span class="n">args</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span> <span class="kr">end</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> <span class="kd">local</span> <span class="n">txt</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">txt</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="kr">if</span> <span class="n">txt</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">v2p</span> <span class="p">(</span><span class="n">x</span><span class="p">)</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> <span class="n">x</span> <span class="o">=</span> <span class="p">(</span><span class="nb">tonumber</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="kr">if</span> <span class="n">x</span> <span class="o">==</span> <span class="nb">math.floor</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="kr">then</span> <span class="n">x</span> <span class="o">=</span> <span class="nb">math.floor</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="kr">end</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="kr">return</span> <span class="n">x</span> <span class="o">..</span> <span class="s2">&quot;%&quot;</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a> <span class="kr">end</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> <span class="n">txt</span> <span class="o">=</span> <span class="n">txt</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">&quot;%d[%d%.]*&quot;</span><span class="p">,</span> <span class="n">v2p</span><span class="p">)</span> <span class="c1">-- store just the string</span> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a> <span class="kr">return</span> <span class="n">txt</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a><span class="kr">end</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a><span class="c1">-- one2a scans through a string, passed as either the first unnamed parameter or |txt=</span> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a><span class="c1">-- it converts each occurrence of &#39;one &#39; into either &#39;a &#39; or &#39;an &#39; and returns the resultant string.</span> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a><span class="n">p</span><span class="p">.</span><span class="n">one2a</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></span></a> <span class="kr">if</span> <span class="ow">not</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">txt</span><span class="p">)</span> <span class="kr">then</span> <span class="n">args</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span> <span class="kr">end</span> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a> <span class="kd">local</span> <span class="n">txt</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">txt</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a> <span class="kr">if</span> <span class="n">txt</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> </span><span id="L-187"><a href="#L-187"><span class="linenos" data-line="187"></span></a> <span class="n">txt</span> <span class="o">=</span> <span class="n">txt</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">&quot; one &quot;</span><span class="p">,</span> <span class="s2">&quot; a &quot;</span><span class="p">):</span><span class="n">gsub</span><span class="p">(</span><span class="s2">&quot;^one&quot;</span><span class="p">,</span> <span class="s2">&quot;a&quot;</span><span class="p">):</span><span class="n">gsub</span><span class="p">(</span><span class="s2">&quot;One &quot;</span><span class="p">,</span> <span class="s2">&quot;A &quot;</span><span class="p">):</span><span class="n">gsub</span><span class="p">(</span><span class="s2">&quot;a ([aeiou])&quot;</span><span class="p">,</span> <span class="s2">&quot;an %1&quot;</span><span class="p">):</span><span class="n">gsub</span><span class="p">(</span><span class="s2">&quot;A ([aeiou])&quot;</span><span class="p">,</span> <span class="s2">&quot;An %1&quot;</span><span class="p">)</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></span></a> <span class="kr">return</span> <span class="n">txt</span> </span><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a><span class="kr">end</span> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a><span class="c1">-- findpagetext returns the position of a piece of text in a page</span> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a><span class="c1">-- First positional parameter or |text is the search text</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a><span class="c1">-- Optional parameter |title is the page title, defaults to current page</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a><span class="c1">-- Optional parameter |plain is either true for plain search (default) or false for Lua pattern search</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a><span class="c1">-- Optional parameter |nomatch is the return value when no match is found; default is nil</span> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a><span class="n">p</span><span class="p">.</span><span class="n">_findpagetext</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="c1">-- process parameters</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">nomatch</span> <span class="o">=</span> <span class="n">args</span><span class="p">.</span><span class="n">nomatch</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</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">nomatch</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> <span class="n">nomatch</span> <span class="o">=</span> <span class="kc">nil</span> <span class="kr">end</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="c1">--</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">text</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">text</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">)</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> <span class="kr">if</span> <span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> <span class="c1">--</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">title</span> <span class="o">=</span> <span class="n">args</span><span class="p">.</span><span class="n">title</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> <span class="kd">local</span> <span class="n">titleobj</span> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="kr">if</span> <span class="n">title</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="n">titleobj</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">getCurrentTitle</span><span class="p">()</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a> <span class="kr">else</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a> <span class="n">titleobj</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">title</span><span class="p">)</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> <span class="kr">end</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a> <span class="c1">--</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="kd">local</span> <span class="n">plain</span> <span class="o">=</span> <span class="n">args</span><span class="p">.</span><span class="n">plain</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> <span class="kr">if</span> <span class="n">plain</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;f&quot;</span> <span class="kr">then</span> <span class="n">plain</span> <span class="o">=</span> <span class="kc">false</span> <span class="kr">else</span> <span class="n">plain</span> <span class="o">=</span> <span class="kc">true</span> <span class="kr">end</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a> <span class="c1">-- get the page content and look for &#39;text&#39; - return position or nomatch</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> <span class="kd">local</span> <span class="n">content</span> <span class="o">=</span> <span class="n">titleobj</span> <span class="ow">and</span> <span class="n">titleobj</span><span class="p">:</span><span class="n">getContent</span><span class="p">()</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a> <span class="kr">return</span> <span class="n">content</span> <span class="ow">and</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">content</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="n">plain</span><span class="p">)</span> <span class="ow">or</span> <span class="n">nomatch</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a><span class="kr">end</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a><span class="n">p</span><span class="p">.</span><span class="n">findpagetext</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> <span class="kd">local</span> <span class="n">pargs</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">pargs</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a> <span class="n">args</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a> <span class="kr">end</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">args</span><span class="p">.</span><span class="n">text</span><span class="p">)</span> <span class="kr">then</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a> <span class="c1">-- just the first value</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">p</span><span class="p">.</span><span class="n">_findpagetext</span><span class="p">(</span><span class="n">args</span><span class="p">))</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a><span class="kr">end</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a><span class="c1">-- returns the decoded url. Inverse of parser function {{urlencode:val|TYPE}}</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a><span class="c1">-- Type is:</span> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a><span class="c1">-- QUERY decodes + to space (default)</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a><span class="c1">-- PATH does no extra decoding</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a><span class="c1">-- WIKI decodes _ to space</span> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a><span class="n">p</span><span class="p">.</span><span class="n">_urldecode</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="nb">type</span><span class="p">)</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a> <span class="n">url</span> <span class="o">=</span> <span class="n">url</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> <span class="nb">type</span> <span class="o">=</span> <span class="p">(</span><span class="nb">type</span> <span class="o">==</span> <span class="s2">&quot;PATH&quot;</span> <span class="ow">or</span> <span class="nb">type</span> <span class="o">==</span> <span class="s2">&quot;WIKI&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">type</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a> <span class="kr">return</span> <span class="n">mw</span><span class="p">.</span><span class="n">uri</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span> <span class="n">url</span><span class="p">,</span> <span class="nb">type</span> <span class="p">)</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a><span class="kr">end</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a><span class="c1">-- {{#invoke:String2|urldecode|url=url|type=type}}</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a><span class="n">p</span><span class="p">.</span><span class="n">urldecode</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a> <span class="kr">return</span> <span class="n">mw</span><span class="p">.</span><span class="n">uri</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">url</span><span class="p">,</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="nb">type</span> <span class="p">)</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a><span class="kr">end</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a><span class="c1">-- what follows was merged from Module:StringFunc</span> </span><span id="L-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a><span class="c1">-- helper functions</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a><span class="n">p</span><span class="p">.</span><span class="n">_GetParameters</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">&#39;Module:GetParameters&#39;</span><span class="p">)</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a><span class="c1">-- Argument list helper function, as per Module:String</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a><span class="n">p</span><span class="p">.</span><span class="n">_getParameters</span> <span class="o">=</span> <span class="n">p</span><span class="p">.</span><span class="n">_GetParameters</span><span class="p">.</span><span class="n">getParameters</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">-- Escape Pattern helper function so that all characters are treated as plain text, as per Module:String</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">_escapePattern</span><span class="p">(</span> <span class="n">pattern_str</span> <span class="p">)</span> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> <span class="kr">return</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">gsub</span><span class="p">(</span> <span class="n">pattern_str</span><span class="p">,</span> <span class="s2">&quot;([%(%)%.%%%+%-%*%?%[%^%$%]])&quot;</span><span class="p">,</span> <span class="s2">&quot;%%%1&quot;</span> <span class="p">)</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a><span class="kr">end</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a><span class="c1">-- Helper Function to interpret boolean strings, as per Module:String</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a><span class="n">p</span><span class="p">.</span><span class="n">_getBoolean</span> <span class="o">=</span> <span class="n">p</span><span class="p">.</span><span class="n">_GetParameters</span><span class="p">.</span><span class="n">getBoolean</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a><span class="cm">--[[</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a><span class="cm">Strip</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a><span class="cm">This function Strips characters from string</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a><span class="cm">Usage:</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a><span class="cm">{{#invoke:String2|strip|source_string|characters_to_strip|plain_flag}}</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a><span class="cm">Parameters</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a><span class="cm"> source: The string to strip</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a><span class="cm"> chars: The pattern or list of characters to strip from string, replaced with &#39;&#39;</span> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a><span class="cm"> plain: A flag indicating that the chars should be understood as plain text. defaults to true.</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a><span class="cm">Leading and trailing whitespace is also automatically stripped from the string.</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a><span class="cm">]]</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">strip</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="kd">local</span> <span class="n">new_args</span> <span class="o">=</span> <span class="n">p</span><span class="p">.</span><span class="n">_getParameters</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;source&#39;</span><span class="p">,</span> <span class="s1">&#39;chars&#39;</span><span class="p">,</span> <span class="s1">&#39;plain&#39;</span><span class="p">}</span> <span class="p">)</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a> <span class="kd">local</span> <span class="n">source_str</span> <span class="o">=</span> <span class="n">new_args</span><span class="p">[</span><span class="s1">&#39;source&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a> <span class="kd">local</span> <span class="n">chars</span> <span class="o">=</span> <span class="n">new_args</span><span class="p">[</span><span class="s1">&#39;chars&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span> <span class="ow">or</span> <span class="s1">&#39;characters&#39;</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a> <span class="n">source_str</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">source_str</span><span class="p">)</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">source_str</span> <span class="o">==</span> <span class="s1">&#39;&#39;</span> <span class="ow">or</span> <span class="n">chars</span> <span class="o">==</span> <span class="s1">&#39;&#39;</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">return</span> <span class="n">source_str</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a> <span class="kr">end</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a> <span class="kd">local</span> <span class="n">l_plain</span> <span class="o">=</span> <span class="n">p</span><span class="p">.</span><span class="n">_getBoolean</span><span class="p">(</span> <span class="n">new_args</span><span class="p">[</span><span class="s1">&#39;plain&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="kc">true</span> <span class="p">)</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="kr">if</span> <span class="n">l_plain</span> <span class="kr">then</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a> <span class="n">chars</span> <span class="o">=</span> <span class="n">p</span><span class="p">.</span><span class="n">_escapePattern</span><span class="p">(</span> <span class="n">chars</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="kd">local</span> <span class="n">result</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">gsub</span><span class="p">(</span><span class="n">source_str</span><span class="p">,</span> <span class="s2">&quot;[&quot;</span><span class="o">..</span><span class="n">chars</span><span class="o">..</span><span class="s2">&quot;]&quot;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a> <span class="kr">return</span> <span class="n">result</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a><span class="kr">end</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a><span class="cm">--[[</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a><span class="cm">Match any</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a><span class="cm">Returns the index of the first given pattern to match the input. Patterns must be consecutively numbered.</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a><span class="cm">Returns the empty string if nothing matches for use in {{#if:}}</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a><span class="cm">Usage:</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a><span class="cm"> {{#invoke:String2|matchAll|source=123 abc|456|abc}} returns &#39;2&#39;.</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a><span class="cm">Parameters:</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a><span class="cm"> source: the string to search</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a><span class="cm"> plain: A flag indicating that the patterns should be understood as plain text. defaults to true.</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a><span class="cm"> 1, 2, 3, ...: the patterns to search for</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a><span class="cm">]]</span> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">matchAny</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a> <span class="kd">local</span> <span class="n">source_str</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;source&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="nb">error</span><span class="p">(</span><span class="s1">&#39;The source parameter is mandatory.&#39;</span><span class="p">)</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> <span class="kd">local</span> <span class="n">l_plain</span> <span class="o">=</span> <span class="n">p</span><span class="p">.</span><span class="n">_getBoolean</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;plain&#39;</span><span class="p">]</span> <span class="ow">or</span> <span class="kc">true</span> <span class="p">)</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">math.huge</span> <span class="kr">do</span> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a> <span class="kd">local</span> <span class="n">pattern</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="n">i</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">pattern</span> <span class="kr">then</span> <span class="kr">return</span> <span class="s1">&#39;&#39;</span> <span class="kr">end</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="kr">if</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">source_str</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l_plain</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> <span class="kr">return</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> </span><span id="L-313"><a href="#L-313"><span class="linenos" data-line="313"></span></a> <span class="kr">end</span> </span><span id="L-314"><a href="#L-314"><span class="linenos" data-line="314"></span></a> <span class="kr">end</span> </span><span id="L-315"><a href="#L-315"><span class="linenos" data-line="315"></span></a><span class="kr">end</span> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a><span class="cm">--[[--------------------------&lt; H Y P H E N _ T O _ D A S H &gt;--------------------------------------------------</span> </span><span id="L-318"><a href="#L-318"><span class="linenos" data-line="318"></span></a> </span><span id="L-319"><a href="#L-319"><span class="linenos" data-line="319"></span></a><span class="cm">Converts a hyphen to a dash under certain conditions. The hyphen must separate</span> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a><span class="cm">like items; unlike items are returned unmodified. These forms are modified:</span> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a><span class="cm"> letter - letter (A - B)</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a><span class="cm"> digit - digit (4-5)</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a><span class="cm"> digit separator digit - digit separator digit (4.1-4.5 or 4-1-4-5)</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a><span class="cm"> letterdigit - letterdigit (A1-A5) (an optional separator between letter and</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a><span class="cm"> digit is supported – a.1-a.5 or a-1-a-5)</span> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a><span class="cm"> digitletter - digitletter (5a - 5d) (an optional separator between letter and</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a><span class="cm"> digit is supported – 5.a-5.d or 5-a-5-d)</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a><span class="cm">any other forms are returned unmodified.</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a><span class="cm">str may be a comma- or semicolon-separated list</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a><span class="cm">]]</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">hyphen_to_dash</span><span class="p">(</span> <span class="n">str</span><span class="p">,</span> <span class="n">spacing</span> <span class="p">)</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> <span class="kr">if</span> <span class="p">(</span><span class="n">str</span> <span class="o">==</span> <span class="kc">nil</span> <span class="ow">or</span> <span class="n">str</span> <span class="o">==</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="kr">return</span> <span class="n">str</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="kr">end</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="kd">local</span> <span class="n">accept</span> </span><span id="L-340"><a href="#L-340"><span class="linenos" data-line="340"></span></a> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> <span class="n">str</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">decode</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="c1">-- replace html entities with their characters; semicolon mucks up the text.split</span> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a> </span><span id="L-343"><a href="#L-343"><span class="linenos" data-line="343"></span></a> <span class="kd">local</span> <span class="n">out</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a> <span class="kd">local</span> <span class="n">list</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">split</span> <span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="s1">&#39;%s*[,;]%s*&#39;</span><span class="p">)</span> <span class="c1">-- split str at comma or semicolon separators if there are any</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="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">item</span> <span class="kr">in</span> <span class="nb">ipairs</span> <span class="p">(</span><span class="n">list</span><span class="p">)</span> <span class="kr">do</span> <span class="c1">-- for each item in the list</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a> <span class="n">item</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="c1">-- trim whitespace</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a> <span class="n">item</span><span class="p">,</span> <span class="n">accept</span> <span class="o">=</span> <span class="n">item</span><span class="p">:</span><span class="n">gsub</span> <span class="p">(</span><span class="s1">&#39;^%(%((.+)%)%)$&#39;</span><span class="p">,</span> <span class="s1">&#39;%1&#39;</span><span class="p">)</span> </span><span id="L-349"><a href="#L-349"><span class="linenos" data-line="349"></span></a> <span class="kr">if</span> <span class="n">accept</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s1">&#39;^%w*[%.%-]?%w+%s*[%-–—]%s*%w*[%.%-]?%w+$&#39;</span><span class="p">)</span> <span class="kr">then</span> <span class="c1">-- if a hyphenated range or has endash or emdash separators</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="n">item</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="s1">&#39;^%a+[%.%-]?%d+%s*%-%s*%a+[%.%-]?%d+$&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="c1">-- letterdigit hyphen letterdigit (optional separator between letter and digit)</span> </span><span id="L-351"><a href="#L-351"><span class="linenos" data-line="351"></span></a> <span class="n">item</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="s1">&#39;^%d+[%.%-]?%a+%s*%-%s*%d+[%.%-]?%a+$&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="c1">-- digitletter hyphen digitletter (optional separator between digit and letter)</span> </span><span id="L-352"><a href="#L-352"><span class="linenos" data-line="352"></span></a> <span class="n">item</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="s1">&#39;^%d+[%.%-]%d+%s*%-%s*%d+[%.%-]%d+$&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="c1">-- digit separator digit hyphen digit separator digit</span> </span><span id="L-353"><a href="#L-353"><span class="linenos" data-line="353"></span></a> <span class="n">item</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="s1">&#39;^%d+%s*%-%s*%d+$&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="c1">-- digit hyphen digit</span> </span><span id="L-354"><a href="#L-354"><span class="linenos" data-line="354"></span></a> <span class="n">item</span><span class="p">:</span><span class="n">match</span> <span class="p">(</span><span class="s1">&#39;^%a+%s*%-%s*%a+$&#39;</span><span class="p">)</span> <span class="kr">then</span> <span class="c1">-- letter hyphen letter</span> </span><span id="L-355"><a href="#L-355"><span class="linenos" data-line="355"></span></a> <span class="n">item</span> <span class="o">=</span> <span class="n">item</span><span class="p">:</span><span class="n">gsub</span> <span class="p">(</span><span class="s1">&#39;(%w*[%.%-]?%w+)%s*%-%s*(%w*[%.%-]?%w+)&#39;</span><span class="p">,</span> <span class="s1">&#39;%1–%2&#39;</span><span class="p">)</span> <span class="c1">-- replace hyphen, remove extraneous space characters</span> </span><span id="L-356"><a href="#L-356"><span class="linenos" data-line="356"></span></a> <span class="kr">else</span> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a> <span class="n">item</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">gsub</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s1">&#39;%s*[–—]%s*&#39;</span><span class="p">,</span> <span class="s1">&#39;–&#39;</span><span class="p">)</span> <span class="c1">-- for endash or emdash separated ranges, replace em with en, remove extraneous whitespace</span> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> <span class="kr">end</span> </span><span id="L-359"><a href="#L-359"><span class="linenos" data-line="359"></span></a> <span class="kr">end</span> </span><span id="L-360"><a href="#L-360"><span class="linenos" data-line="360"></span></a> <span class="nb">table.insert</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span> <span class="c1">-- add the (possibly modified) item to the output table</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a> <span class="kr">end</span> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> </span><span id="L-363"><a href="#L-363"><span class="linenos" data-line="363"></span></a> <span class="kd">local</span> <span class="n">temp_str</span> <span class="o">=</span> <span class="nb">table.concat</span> <span class="p">(</span><span class="n">out</span><span class="p">,</span> <span class="s1">&#39;,&#39;</span> <span class="o">..</span> <span class="n">spacing</span><span class="p">)</span> <span class="c1">-- concatenate the output table into a comma separated string</span> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> <span class="n">temp_str</span><span class="p">,</span> <span class="n">accept</span> <span class="o">=</span> <span class="n">temp_str</span><span class="p">:</span><span class="n">gsub</span> <span class="p">(</span><span class="s1">&#39;^%(%((.+)%)%)$&#39;</span><span class="p">,</span> <span class="s1">&#39;%1&#39;</span><span class="p">)</span> <span class="c1">-- remove accept-this-as-written markup when it wraps all of concatenated out</span> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a> <span class="kr">if</span> <span class="n">accept</span> <span class="o">~=</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> <span class="n">temp_str</span> <span class="o">=</span> <span class="n">str</span><span class="p">:</span><span class="n">gsub</span> <span class="p">(</span><span class="s1">&#39;^%(%((.+)%)%)$&#39;</span><span class="p">,</span> <span class="s1">&#39;%1&#39;</span><span class="p">)</span> <span class="c1">-- when global markup removed, return original str; do it this way to suppress boolean second return value</span> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a> <span class="kr">end</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> <span class="kr">return</span> <span class="n">temp_str</span> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></span></a><span class="kr">end</span> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">hyphen2dash</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a> <span class="kd">local</span> <span class="n">str</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a> <span class="kd">local</span> <span class="n">spacing</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39; &#39;</span> <span class="c1">-- space is part of the standard separator for normal spacing (but in conjunction with templates r/rp/ran we may need a narrower spacing</span> </span><span id="L-374"><a href="#L-374"><span class="linenos" data-line="374"></span></a> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a> <span class="kr">return</span> <span class="n">p</span><span class="p">.</span><span class="n">hyphen_to_dash</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="n">spacing</span><span class="p">)</span> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></span></a><span class="kr">end</span> </span><span id="L-377"><a href="#L-377"><span class="linenos" data-line="377"></span></a> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a><span class="c1">-- Similar to [[Module:String#endswith]]</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">startswith</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span><span class="n">sub</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]:</span><span class="n">len</span><span class="p">())</span> <span class="o">==</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="ow">and</span> <span class="s1">&#39;yes&#39;</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span> </span><span id="L-381"><a href="#L-381"><span class="linenos" data-line="381"></span></a><span class="kr">end</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="c1">-- Implements [[Template:Isnumeric]]</span> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isnumeric</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-386"><a href="#L-386"><span class="linenos" data-line="386"></span></a> <span class="kd">local</span> <span class="n">boolean</span> <span class="o">=</span> <span class="p">(</span><span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">boolean</span> <span class="ow">or</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span><span class="p">.</span><span class="n">boolean</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;string&#39;</span> <span class="ow">and</span> <span class="n">mw</span><span class="p">.</span><span class="n">getContentLanguage</span><span class="p">():</span><span class="n">parseFormattedNumber</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a> <span class="kr">return</span> <span class="n">boolean</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">s</span> </span><span id="L-389"><a href="#L-389"><span class="linenos" data-line="389"></span></a> <span class="kr">end</span> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a> <span class="kr">return</span> <span class="n">boolean</span> <span class="ow">and</span> <span class="mi">0</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span> </span><span id="L-391"><a href="#L-391"><span class="linenos" data-line="391"></span></a><span class="kr">end</span> </span><span id="L-392"><a href="#L-392"><span class="linenos" data-line="392"></span></a> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a><span class="kr">return</span> <span class="n">p</span> </span></pre></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐rxt7p Cached time: 20241122075633 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, vary‐page‐id, show‐toc] CPU time usage: 0.391 seconds Real time usage: 0.681 seconds Preprocessor visited node count: 1769/1000000 Post‐expand include size: 67563/2097152 bytes Template argument size: 1586/2097152 bytes Highest expansion depth: 13/100 Expensive parser function count: 7/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 15433/5000000 bytes Lua time usage: 0.252/10.000 seconds Lua memory usage: 4432219/52428800 bytes Number of Wikibase entities loaded: 2/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 527.984 1 -total 100.00% 527.984 1 Module:String2/doc 15.54% 82.046 4 Template:Convert 10.47% 55.265 1 Template:Markup 9.02% 47.640 1 Template:For_loop 6.55% 34.583 1 Template:High-use 6.27% 33.080 1 Template:Hlist 4.78% 25.261 20 Template:Item 3.87% 20.411 1 Template:For 2.40% 12.663 1 Template:Lua --> </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:String2&amp;oldid=1246706252">https://en.wikipedia.org/w/index.php?title=Module:String2&amp;oldid=1246706252</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_that_manipulate_strings" title="Category:Modules that manipulate strings">Modules that manipulate strings</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_template-protected_modules" title="Category:Wikipedia template-protected modules">Wikipedia template-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 20 September 2024, at 15:35<span class="anonymous-show">&#160;(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:String2&amp;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-rxt7p","wgBackendResponseTime":859,"wgPageParseReport":{"limitreport":{"cputime":"0.391","walltime":"0.681","ppvisitednodes":{"value":1769,"limit":1000000},"postexpandincludesize":{"value":67563,"limit":2097152},"templateargumentsize":{"value":1586,"limit":2097152},"expansiondepth":{"value":13,"limit":100},"expensivefunctioncount":{"value":7,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":15433,"limit":5000000},"entityaccesscount":{"value":2,"limit":400},"timingprofile":["100.00% 527.984 1 -total","100.00% 527.984 1 Module:String2/doc"," 15.54% 82.046 4 Template:Convert"," 10.47% 55.265 1 Template:Markup"," 9.02% 47.640 1 Template:For_loop"," 6.55% 34.583 1 Template:High-use"," 6.27% 33.080 1 Template:Hlist"," 4.78% 25.261 20 Template:Item"," 3.87% 20.411 1 Template:For"," 2.40% 12.663 1 Template:Lua"]},"scribunto":{"limitreport-timeusage":{"value":"0.252","limit":"10.000"},"limitreport-memusage":{"value":4432219,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-rxt7p","timestamp":"20241122075633","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10