CINXE.COM
Module:Text - 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:Text - 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":"42d90af7-7d07-4f7b-8708-d0ca0da6a0d5","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Module:Text","wgTitle":"Text","wgCurRevisionId":1246857616,"wgRevisionId":1246857616,"wgArticleId":56481575,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Wikipedia template-protected modules","Modules that manipulate strings"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Module:Text","wgRelevantArticleId":56481575,"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":"Q29387871","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","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","jquery.makeCollapsible","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&modules=ext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Module:Text - 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:Text"> <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:Text"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject page-Module_Text rootpage-Module_Text skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Module%3AText" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Module%3AText" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Module%3AText" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Module%3AText" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-Functions_for_templates" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Functions_for_templates"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Functions for templates</span> </div> </a> <button aria-controls="toc-Functions_for_templates-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 for templates subsection</span> </button> <ul id="toc-Functions_for_templates-sublist" class="vector-toc-list"> <li id="toc-Examples_and_test_page" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Examples_and_test_page"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>Examples and test page</span> </div> </a> <ul id="toc-Examples_and_test_page-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Use_in_another_Lua_module" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Use_in_another_Lua_module"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Use in another Lua module</span> </div> </a> <ul id="toc-Use_in_another_Lua_module-sublist" class="vector-toc-list"> </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">3</span> <span>Usage</span> </div> </a> <ul id="toc-Usage-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Dependencies" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Dependencies"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Dependencies</span> </div> </a> <ul id="toc-Dependencies-sublist" class="vector-toc-list"> </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">5</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">Text</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 54 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-54" 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">54 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:Text" title="Module:Text – Afrikaans" lang="af" hreflang="af" data-title="Module:Text" data-language-autonym="Afrikaans" data-language-local-name="Afrikaans" class="interlanguage-link-target"><span>Afrikaans</span></a></li><li class="interlanguage-link interwiki-als mw-list-item"><a href="https://als.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Alemannic" lang="gsw" hreflang="gsw" data-title="Modul:Text" data-language-autonym="Alemannisch" data-language-local-name="Alemannic" class="interlanguage-link-target"><span>Alemannisch</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:Text" title="Амодуль:Text – Abkhazian" lang="ab" hreflang="ab" data-title="Амодуль:Text" 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:Text" title="وحدة:Text – Arabic" lang="ar" hreflang="ar" data-title="وحدة:Text" 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:Text" title="Module:Text – Assamese" lang="as" hreflang="as" data-title="Module:Text" data-language-autonym="অসমীয়া" data-language-local-name="Assamese" class="interlanguage-link-target"><span>অসমীয়া</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:Text" title="Модуль:Text – Avaric" lang="av" hreflang="av" data-title="Модуль:Text" data-language-autonym="Авар" data-language-local-name="Avaric" class="interlanguage-link-target"><span>Авар</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:Text" title="ماژول:Text – South Azerbaijani" lang="azb" hreflang="azb" data-title="ماژول:Text" data-language-autonym="تۆرکجه" data-language-local-name="South Azerbaijani" 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:Text" title="Module:Text – Bhojpuri" lang="bh" hreflang="bh" data-title="Module:Text" data-language-autonym="भोजपुरी" data-language-local-name="Bhojpuri" class="interlanguage-link-target"><span>भोजपुरी</span></a></li><li class="interlanguage-link interwiki-bar mw-list-item"><a href="https://bar.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Bavarian" lang="bar" hreflang="bar" data-title="Modul:Text" data-language-autonym="Boarisch" data-language-local-name="Bavarian" class="interlanguage-link-target"><span>Boarisch</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Bosnian" lang="bs" hreflang="bs" data-title="Modul:Text" 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:Text" title="Модуль:Text – Russia Buriat" lang="bxr" hreflang="bxr" data-title="Модуль:Text" 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:Text" title="Module:Text – Cebuano" lang="ceb" hreflang="ceb" data-title="Module:Text" data-language-autonym="Cebuano" data-language-local-name="Cebuano" class="interlanguage-link-target"><span>Cebuano</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Modul:Text" title="Modul:Text – German" lang="de" hreflang="de" data-title="Modul:Text" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</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:Text" title="پودمان:Text – Persian" lang="fa" hreflang="fa" data-title="پودمان:Text" data-language-autonym="فارسی" data-language-local-name="Persian" 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:Text" title="વિભાગ:Text – Gujarati" lang="gu" hreflang="gu" data-title="વિભાગ:Text" data-language-autonym="ગુજરાતી" data-language-local-name="Gujarati" class="interlanguage-link-target"><span>ગુજરાતી</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:Text" title="모듈:Text – Korean" lang="ko" hreflang="ko" data-title="모듈:Text" data-language-autonym="한국어" data-language-local-name="Korean" 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:Text" title="मॉड्यूल:Text – Hindi" lang="hi" hreflang="hi" data-title="मॉड्यूल:Text" data-language-autonym="हिन्दी" data-language-local-name="Hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-ilo mw-list-item"><a href="https://ilo.wikipedia.org/wiki/Modulo:Text" title="Modulo:Text – Iloko" lang="ilo" hreflang="ilo" data-title="Modulo:Text" 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:Text" title="Modul:Text – Indonesian" lang="id" hreflang="id" data-title="Modul:Text" 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-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:Text" title="მოდული:Text – Georgian" lang="ka" hreflang="ka" data-title="მოდული:Text" data-language-autonym="ქართული" data-language-local-name="Georgian" 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:Text" title="Modul:Text – Kurdish" lang="ku" hreflang="ku" data-title="Modul:Text" data-language-autonym="Kurdî" data-language-local-name="Kurdish" class="interlanguage-link-target"><span>Kurdî</span></a></li><li class="interlanguage-link interwiki-lld mw-list-item"><a href="https://lld.wikipedia.org/wiki/Modulo:Text" title="Modulo:Text – Ladin" lang="lld" hreflang="lld" data-title="Modulo:Text" data-language-autonym="Ladin" data-language-local-name="Ladin" class="interlanguage-link-target"><span>Ladin</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:Text" title="मोड्युल:Text – Maithili" lang="mai" hreflang="mai" data-title="मोड्युल:Text" data-language-autonym="मैथिली" data-language-local-name="Maithili" 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:Text" title="ഘടകം:Text – Malayalam" lang="ml" hreflang="ml" data-title="ഘടകം:Text" data-language-autonym="മലയാളം" data-language-local-name="Malayalam" class="interlanguage-link-target"><span>മലയാളം</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:Text" title="မဝ်ဂျူ:Text – Mon" lang="mnw" hreflang="mnw" data-title="မဝ်ဂျူ:Text" 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:Text" title="Modul:Text – Malay" lang="ms" hreflang="ms" data-title="Modul:Text" 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-fat mw-list-item"><a href="https://fat.wikipedia.org/wiki/Module:Text" title="Module:Text – Fanti" lang="fat" hreflang="fat" data-title="Module:Text" data-language-autonym="Mfantse" data-language-local-name="Fanti" class="interlanguage-link-target"><span>Mfantse</span></a></li><li class="interlanguage-link interwiki-min mw-list-item"><a href="https://min.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Minangkabau" lang="min" hreflang="min" data-title="Modul:Text" data-language-autonym="Minangkabau" data-language-local-name="Minangkabau" class="interlanguage-link-target"><span>Minangkabau</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/Module:Text" title="Module:Text – Mongolian" lang="mn" hreflang="mn" data-title="Module:Text" 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:Text" title="မော်ဂျူး:Text – Burmese" lang="my" hreflang="my" data-title="မော်ဂျူး:Text" 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:Text" title="मोड्युल:Text – Nepali" lang="ne" hreflang="ne" data-title="मोड्युल:Text" 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:Text" title="モジュール:Text – Japanese" lang="ja" hreflang="ja" data-title="モジュール:Text" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-frr mw-list-item"><a href="https://frr.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Northern Frisian" lang="frr" hreflang="frr" data-title="Modul:Text" data-language-autonym="Nordfriisk" data-language-local-name="Northern Frisian" class="interlanguage-link-target"><span>Nordfriisk</span></a></li><li class="interlanguage-link interwiki-oc mw-list-item"><a href="https://oc.wikipedia.org/wiki/M%C3%B2dul:Text" title="Mòdul:Text – Occitan" lang="oc" hreflang="oc" data-title="Mòdul:Text" data-language-autonym="Occitan" data-language-local-name="Occitan" class="interlanguage-link-target"><span>Occitan</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Uzbek" lang="uz" hreflang="uz" data-title="Modul:Text" 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:Text" title="ਮੌਡਿਊਲ:Text – Punjabi" lang="pa" hreflang="pa" data-title="ਮੌਡਿਊਲ:Text" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="Punjabi" 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:Text" title="Module:Text – Papiamento" lang="pap" hreflang="pap" data-title="Module:Text" data-language-autonym="Papiamentu" data-language-local-name="Papiamento" class="interlanguage-link-target"><span>Papiamentu</span></a></li><li class="interlanguage-link interwiki-nds mw-list-item"><a href="https://nds.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Low German" lang="nds" hreflang="nds" data-title="Modul:Text" data-language-autonym="Plattdüütsch" data-language-local-name="Low German" class="interlanguage-link-target"><span>Plattdüütsch</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/M%C3%B3dulo:Text" title="Módulo:Text – Portuguese" lang="pt" hreflang="pt" data-title="Módulo:Text" 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-si mw-list-item"><a href="https://si.wikipedia.org/wiki/Module:Text" title="Module:Text – Sinhala" lang="si" hreflang="si" data-title="Module:Text" 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:Text" title="Module:Text – Simple English" lang="en-simple" hreflang="en-simple" data-title="Module:Text" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Slovenian" lang="sl" hreflang="sl" data-title="Modul:Text" 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:Text" title="مۆدیوول:Text – Central Kurdish" lang="ckb" hreflang="ckb" data-title="مۆدیوول:Text" 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:Text" title="Модул:Text – Serbian" lang="sr" hreflang="sr" data-title="Модул:Text" data-language-autonym="Српски / srpski" data-language-local-name="Serbian" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Serbo-Croatian" lang="sh" hreflang="sh" data-title="Modul:Text" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="Serbo-Croatian" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-tl mw-list-item"><a href="https://tl.wikipedia.org/wiki/Module:Text" title="Module:Text – Tagalog" lang="tl" hreflang="tl" data-title="Module:Text" 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:Text" title="Module:Text – Tamil" lang="ta" hreflang="ta" data-title="Module:Text" data-language-autonym="தமிழ்" data-language-local-name="Tamil" class="interlanguage-link-target"><span>தமிழ்</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:Text" title="မေႃႇၵျူး:Text – Shan" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:Text" 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:Text" title="มอดูล:Text – Thai" lang="th" hreflang="th" data-title="มอดูล:Text" data-language-autonym="ไทย" data-language-local-name="Thai" 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:Text" title="Modül:Text – Turkish" lang="tr" hreflang="tr" data-title="Modül:Text" 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-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Text" title="Модуль:Text – Ukrainian" lang="uk" hreflang="uk" data-title="Модуль:Text" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/M%C3%B4_%C4%91un:Text" title="Mô đun:Text – Vietnamese" lang="vi" hreflang="vi" data-title="Mô đun:Text" 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-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Module:Text" title="Module:Text – Chinese" lang="zh" hreflang="zh" data-title="Module:Text" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li><li class="interlanguage-link interwiki-iba mw-list-item"><a href="https://iba.wikipedia.org/wiki/Modul:Text" title="Modul:Text – Iban" lang="iba" hreflang="iba" data-title="Modul:Text" data-language-autonym="Jaku Iban" data-language-local-name="Iban" class="interlanguage-link-target"><span>Jaku Iban</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/Q29387871#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:Text" 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:Text" 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:Text"><span>Read</span></a></li><li id="ca-viewsource" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:Text&action=edit" title="This page is protected. You can view its source [e]" accesskey="e"><span>View source</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:Text&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:Text"><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:Text&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:Text&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:Text" 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:Text" 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:Text&oldid=1246857616" 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:Text&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FModule%3AText"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FModule%3AText"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-electronpdfservice-sidebar-portlet-heading" class="vector-menu mw-portlet mw-portlet-electronpdfservice-sidebar-portlet-heading" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="electron-print_pdf" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Module%3AText&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-wikidata mw-list-item"><a href="https://www.wikidata.org/wiki/Module:Text" hreflang="en"><span>Wikidata</span></a></li><li class="wb-otherproject-link wb-otherproject-wikimania mw-list-item"><a href="https://wikimania.wikimedia.org/wiki/Module:Text" hreflang="en"><span>Wikimania</span></a></li><li class="wb-otherproject-link wb-otherproject-wikiquote mw-list-item"><a href="https://en.wikiquote.org/wiki/Module:Text" hreflang="en"><span>Wikiquote</span></a></li><li class="wb-otherproject-link wb-otherproject-wikiversity mw-list-item"><a href="https://en.wikiversity.org/wiki/Module:Text" 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/Q29387871" 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">[<a href="/wiki/Module:Text/doc" title="Module:Text/doc">view</a>] [<a href="/wiki/Special:EditPage/Module:Text/doc" title="Special:EditPage/Module:Text/doc">edit</a>] [<a href="/wiki/Special:PageHistory/Module:Text/doc" title="Special:PageHistory/Module:Text/doc">history</a>] [<a href="/wiki/Special:Purge/Module:Text" title="Special:Purge/Module:Text">purge</a>]</span></div> <style data-mw-deduplicate="TemplateStyles:r1238436933">.mw-parser-output .ombox{margin:4px 0;border-collapse:collapse;border:1px solid #a2a9b1;background-color:var(--background-color-neutral-subtle,#f8f9fa);box-sizing:border-box;color:var(--color-base,#202122)}.mw-parser-output .ombox.mbox-small{font-size:88%;line-height:1.25em}.mw-parser-output .ombox-speedy{border:2px solid #b32424;background-color:#fee7e6}.mw-parser-output .ombox-delete{border:2px solid #b32424}.mw-parser-output .ombox-content{border:1px solid #f28500}.mw-parser-output .ombox-style{border:1px solid #fc3}.mw-parser-output .ombox-move{border:1px solid #9932cc}.mw-parser-output .ombox-protection{border:2px solid #a2a9b1}.mw-parser-output .ombox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .ombox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .ombox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .ombox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ombox .mbox-invalid-type{text-align:center}@media(min-width:720px){.mw-parser-output .ombox{margin:4px 10%}.mw-parser-output .ombox.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;width:238px}}body.skin--responsive .mw-parser-output table.ombox img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .ombox-speedy{background-color:#310402}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .ombox-speedy{background-color:#310402}}</style><table class="plainlinks ombox ombox-content" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="Warning" src="//upload.wikimedia.org/wikipedia/en/thumb/5/5f/Ambox_warning_orange.svg/40px-Ambox_warning_orange.svg.png" decoding="async" width="40" height="34" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/5/5f/Ambox_warning_orange.svg/60px-Ambox_warning_orange.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/5/5f/Ambox_warning_orange.svg/80px-Ambox_warning_orange.svg.png 2x" data-file-width="378" data-file-height="326" /></span></span></td><td class="mbox-text"><b>This Lua module is used on <a class="external text" href="https://linkcount.toolforge.org/?project=en.wikipedia.org&page=Module%3AText#transclusions">approximately 1,870,000 pages, or roughly 3% 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:Text/sandbox" title="Module:Text/sandbox">/sandbox</a> or <a href="/wiki/Module:Text/testcases" title="Module:Text/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:Text" title="Module talk:Text">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 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:Yesno" title="Module:Yesno">Module:Yesno</a> (<a href="/wiki/Module:Yesno/sandbox" title="Module:Yesno/sandbox">sandbox</a>)</li></ul></div></td></tr></tbody></table> <p><b><code>Text</code></b> – Module containing methods for the manipulation of text, wikimarkup and some HTML. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Functions_for_templates"><span class="anchor" id="Vorlage"></span> Functions for templates</h2></div> <p>All methods have an unnamed parameter containing the text. </p><p>The return value is an empty string if the parameter does not meet the conditions. When the condition is matched or some result is successfully found, strings of at least one character are returned. </p> <dl><dt>char <span class="anchor" id="char"></span></dt> <dd>Creates a string from a list of character codes. <dl><dd><dl><dt>1</dt> <dd>Space-separated list of character codes</dd> <dt>*</dt> <dd>Number of repetitions of the list in parameter <b>1</b>; (Default 1).</dd> <dt>errors</dt> <dd><code>0</code> – Silence errors</dd></dl></dd></dl></dd></dl> <dl><dt>concatParams <span class="anchor" id="concatParams"></span></dt> <dd>Combine any number of elements into a list, like <code>table.concat()</code> in Lua.</dd> <dd>From a template: <dl><dd><dl><dt>1</dt> <dd>First element; missing and empty elements are ignored.</dd> <dt>2 3 4 5 6 …</dt> <dd>Further list elements</dd></dl></dd></dl></dd> <dd>From Lua <dl><dd><dl><dt>args</dt> <dd><i>table (sequence)</i> of the elements</dd> <dt>apply</dt> <dd>Separator between elements; defaults to <code>|</code></dd> <dt>adapt</dt> <dd>optional formatting, which will be applied to each element; must contain <code>%s</code>.</dd></dl></dd></dl></dd></dl> <dl><dt>containsCJK <span class="anchor" id="containsCJK"></span></dt> <dd>Returns whether the input string contains any <a href="/wiki/CJK_characters" title="CJK characters">CJK characters</a> <ul><li>Returns nothing if there are no CJK characters</li></ul></dd></dl> <dl><dt>removeDelimited</dt> <dd>Remove all text between delimiters, including the delimiters themselves.</dd> <dt>getPlain<span class="anchor" id="getPlain"></span></dt> <dd>Remove wikimarkup (except templates): comments, tags, bold, italic, nbsp</dd> <dt>isLatinRange <span class="anchor" id="isLatinRange"></span></dt> <dd>Returns some content, unless the string contains a character that would not normally be found in Latin text. <ul><li>Returns nothing if there is a non-Latin string.</li></ul></dd></dl> <dl><dt>isQuote <span class="anchor" id="isQuote"></span></dt> <dd>Returns some content if the parameter passed is a single character, and that character is a quote, such as <code>'</code>. <ul><li>Returns nothing for multiple characters, or if the character passed is not a quote.</li></ul></dd></dl> <dl><dt>listToText <span class="anchor" id="listToText"></span></dt> <dd>Formats list elements analogously to <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.text.listToText" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">mw.text.listToText()</a>.</dd> <dd>The elements are separated by a comma and space ; the word "and" appears between the first and last.</dd> <dd>Unnamed parameters become the list items.</dd> <dd>Optional parameters for <code>#invoke</code>: <ul><li><code>format</code> – Every list element will first be formatted with this format string; see <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#string.format" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">here</a> for how to construct this string. The string must contain at least one <code>%s</code> sequence.</li> <li><code>template=1</code> – List elements should be taken from the calling template.</li></ul></dd> <dd>Returns the resulting string.</dd> <dt>quote <span class="anchor" id="quote"></span></dt> <dd>Wrap the string in quotes; quotes can be chosen for a specific language. <dl><dd><dl><dt>1</dt> <dd>Input text (will be automatically trimmed); may be empty.</dd> <dt>2</dt> <dd><i>(optional)</i> the <a href="/wiki/ISO_639" title="ISO 639">ISO 639</a> language code for the quote marks; should be one of the <a href="https://de.wikipedia.org/wiki/Wikipedia:Lua/Modul/Text/Test#Anführungszeichen" class="extiw" title="de:Wikipedia:Lua/Modul/Text/Test">supported languages</a> <span class="languageicon">(in German)</span></dd> <dt>3</dt> <dd><i>(optional)</i> <code>2</code> for second level quotes. This means the single quote marks in a statement such as: Jack said, “Jill said ‘fish’ last Tuesday.”</dd></dl></dd></dl></dd></dl> <dl><dt>quoteUnquoted <span class="anchor" id="quoteUnquoted"></span></dt> <dd></dd> <dd>Wrap the string in quotes; quotes can be chosen for a specific language. Will not quote an empty string, and will not quote if there is a quote at the start or end of the (trimmed) string. <dl><dd><dl><dt>1</dt> <dd>Input text (will be automatically trimmed); may be empty.</dd> <dt>2</dt> <dd><i>(optional)</i> the <a href="/wiki/ISO_639" title="ISO 639">ISO 639</a> language code for the quote marks; should be one of the <a href="https://de.wikipedia.org/wiki/Wikipedia:Lua/Modul/Text/Test#Anführungszeichen" class="extiw" title="de:Wikipedia:Lua/Modul/Text/Test">supported languages</a> <span class="languageicon">(in German)</span></dd> <dt>3</dt> <dd><i>(optional)</i> <code>2</code> for second level quotes. This means the single quote marks in a statement such as: Jack said, “Jill said ‘fish’ last Tuesday.”</dd></dl></dd></dl></dd></dl> <dl><dt>removeDiacritics <span class="anchor" id="removeDiacritics"></span></dt> <dd>Removes all <a href="/wiki/Diacritical_marks" class="mw-redirect" title="Diacritical marks">diacritical marks</a> from the input. <dl><dd><dl><dt>1</dt></dl> <dl><dt><dl><dd>Input text</dd></dl></dt></dl></dd></dl></dd></dl> <dl><dt>sentenceTerminated <span class="anchor" id="sentenceTerminated"></span></dt> <dd>Is this sentence terminated? Should work with CJK, and allows quotation marks to follow. <ul><li>Returns nothing if the sentence is unterminated.</li></ul></dd></dl> <dl><dt>ucfirstAll <span class="anchor" id="ucfirstAll"></span></dt> <dd>The first letter of every recognized word is converted to upper case. This contrasts with the parser function {{<a href="https://www.mediawiki.org/wiki/ucfirst" class="extiw" title="mw:ucfirst">ucfirst:</a>}} which changes only the first character of the whole string passed.</dd> <dd>A few common HTML entities are protected; the implementation of this may mean that numerical entities passed (e.g. <code>&#38;)</code> are converted to <code>&amp;</code> form</dd> <dt>uprightNonlatin <span class="anchor" id="uprightNonlatin"></span></dt> <dd>Takes a string. Italicized non-Latin characters are un-italicized, unless they are a single Greek letter.</dd> <dt>zip <span class="anchor" id="zip"></span></dt> <dd>Combines a tuple of lists by <a href="/wiki/Convolution_(computer_science)" class="mw-redirect" title="Convolution (computer science)">convolution</a>. This is easiest to explain by example: given two lists, list1 = "a b c" and list2 = "1 2 3", then<br /><code>zip(liste1, liste2, sep = " ", isep = "-", osep = "/")</code><br />outputs<br /><code>a-1/b-2/c-3</code> <ul><li>1, 2, 3, … – Lists to be combined</li> <li><code>sep</code> – A separator (in Lua <a href="/wiki/Regex" class="mw-redirect" title="Regex">regex</a> form) used to split the lists. If empty, the lists are split into individual characters.</li> <li><code>sep1</code>, <code>sep2</code>, <code>sep3</code>, … – Allows a different separator to be used for each list.</li> <li><code>isep</code> – Output separator; placed between elements which were at the <i>same</i> index in their lists.</li> <li><code>osep</code> – Output separator; placed between elements which had <i>different</i> original indices; i.e. between the groups joined with <code>isep</code></li></ul></dd></dl> <dl><dt>split <span class="anchor" id="split"></span></dt> <dd>Splits a string into chunks at the specified delimiter, and returns the first (or user-specified) chunk. This is non-Unicode-aware implementation of <a href="https://www.mediawiki.org/wiki/Lua_reference_manual#mw.text.split" class="extiw" title="mw:Lua reference manual">mw.text.split</a> which, for ASCII-only text, can be up to 60 times faster. <ul><li>1 (or <code>text</code>) – the text to be split</li> <li>2 (or <code>pattern</code>) – the pattern to use when splitting the text. By default, this can be a <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">string library pattern</a>.</li> <li>3 (or <code>plain</code>) – if set to "true", <code>pattern</code> will be interpreted as plain text, not a pattern.</li> <li>4 (or <code>index</code>) – The chunk to return. If omitted, the first chunk will be returned. Can be set to a negative number to count from the end (e.g. <code>-1</code> will return the last chunk).</li></ul></dd></dl> <div class="mw-heading mw-heading3"><h3 id="Examples_and_test_page">Examples and test page</h3></div> <p>There are <a href="https://de.wikipedia.org/wiki/Wikipedia:Lua/Modul/Text/Test" class="extiw" title="de:Wikipedia:Lua/Modul/Text/Test">tests available</a> <span class="languageicon">(in German)</span> to illustrate this in practice. </p> <div class="mw-heading mw-heading2"><h2 id="Use_in_another_Lua_module"><span class="anchor" id="Lua"></span> Use in another Lua module</h2></div> <p>All of the above functions can be called from other Lua modules. Use <code>require()</code>; the below code checks for errors loading it: </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">local</span> <span class="n">lucky</span><span class="p">,</span> <span class="n">Text</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span> <span class="nb">require</span><span class="p">,</span> <span class="s2">"Module:Text"</span> <span class="p">)</span> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">Text</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> <span class="n">Text</span> <span class="o">=</span> <span class="n">Text</span><span class="p">.</span><span class="n">Text</span><span class="p">()</span> <span class="kr">else</span> <span class="c1">-- In the event of errors, Text is an error message.</span> <span class="kr">return</span> <span class="s2">"<span class=</span><span class="se">\"</span><span class="s2">error</span><span class="se">\"</span><span class="s2">>"</span> <span class="o">..</span> <span class="n">Text</span> <span class="o">..</span> <span class="s2">"</span>"</span> <span class="kr">end</span> </pre></div> <p>You may then call: </p> <ul><li><code>Text.char( apply, again, accept )</code></li> <li><code>Text.concatParams( args, separator, format )</code></li> <li><code>Text.containsCJK( s )</code></li> <li><code>Text.removeDelimited( s )</code></li> <li><code>Text.getPlain( s )</code></li> <li><code>Text.isLatinRange( s )</code></li> <li><code>Text.isQuote( c )</code></li> <li><code>Text.listToText( table, format )</code></li> <li><code>Text.quote( s, lang, mode )</code></li> <li><code>Text.quoteUnquoted( s, lang, mode )</code></li> <li><code>Text.removeDiacritics( s )</code></li> <li><code>Text.sentenceTerminated( s )</code></li> <li><code>Text.split( text, pattern, plain )</code> – non Unicode version of <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.text.split" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">mw.text.split</a></li> <li><code>Text.gsplit( text, pattern, plain )</code> – non Unicode version of <a href="https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.text.gsplit" class="extiw" title="mw:Extension:Scribunto/Lua reference manual">mw.text.gsplit</a></li> <li><code>Text.ucfirstAll( s )</code></li> <li><code>Text.uprightNonlatin( s )</code></li> <li><s><code>Text.zip(…)</code></s></li> <li><i><code>Text.test( s )</code></i></li></ul> <div class="mw-heading mw-heading2"><h2 id="Usage">Usage</h2></div> <p>This is a general library; use it anywhere. </p> <div class="mw-heading mw-heading2"><h2 id="Dependencies">Dependencies</h2></div> <ul><li><a href="/wiki/Module:Yesno" title="Module:Yesno">Module:Yesno</a></li> <li><a href="/wiki/Module:Text/data" title="Module:Text/data">Module:Text/data</a> --- Lua patterns and information about quotes</li></ul> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div> <div class="navbox-styles"><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><style data-mw-deduplicate="TemplateStyles:r1126788409">.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="String-handling_templates_(help_page)" style="padding:3px"><table class="nowraplinks plainlist mw-collapsible expanded navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:String-handling_templates" title="Template:String-handling templates"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:String-handling_templates" title="Template talk:String-handling templates"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:String-handling_templates" title="Special:EditPage/Template:String-handling templates"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="String-handling_templates_(help_page)" style="font-size:114%;margin:0 4em">String-handling templates <a href="/wiki/Help:Manipulating_strings" title="Help:Manipulating strings">(help page)</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks mw-collapsible mw-collapsed navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Substring_(select_chunk_of_string_by_its_position)" style="font-size:114%;margin:0 4em">Substring (select chunk of string by its position)</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><table style="width:100%;border-collapse:collapse;border-spacing:0px 0px;border:none;text-align: left;"><tbody><tr style="vertical-align:top"><td style="width:50%;;"> <table style="padding-right: 2em;"><tbody><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_sub_new" title="Template:Str sub new">str sub new</a><span class="nowrap">}}</span></td><td> Select a substring based on starting and ending index counted in either direction.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_left" title="Template:Str left">str left</a><span class="nowrap">}}</span></td><td> Keep the first N characters of a string, or duplicate it to N characters.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_crop" title="Template:Str crop">str crop</a><span class="nowrap">}}</span></td><td> Return all but the last N characters of a string.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_index" title="Template:Str index">str index</a><span class="nowrap">}}</span></td><td> Return the N-th character of a string.</td></tr></tbody></table></td><td> <table><tbody><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_right" title="Template:Str right">str right</a><span class="nowrap">}}</span></td><td> Return substring starting at N-th character to end of string.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_rightc" title="Template:Str rightc">str rightc</a><span class="nowrap">}}</span></td><td> Return the last N characters of a string; or a given value if empty.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_sub_old" title="Template:Str sub old">str sub old</a><span class="nowrap">}}</span></td><td> Return substring of given length starting at N-th character.</td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks mw-collapsible mw-collapsed navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Trimming_(select/remove_chunk_of_string_by_character_type)" style="font-size:114%;margin:0 4em">Trimming (select/remove chunk of string by character type)</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><table style="width:100%;border-collapse:collapse;border-spacing:0px 0px;border:none;text-align: left;"><tbody><tr style="vertical-align:top"><td style="width:50%;;"> <table style="padding-right: 2em;"><tbody><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Trim" title="Template:Trim">trim</a><span class="nowrap">}}</span></td><td> Trim any leading or trailing whitespace</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_letter/trim" title="Template:Str letter/trim">str letter/trim</a><span class="nowrap">}}</span></td><td> Trim down to the beginning letters.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_number/trim" title="Template:Str number/trim">str number/trim</a><span class="nowrap">}}</span></td><td> Trim down to the beginning numbers.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Trim_brackets" title="Template:Trim brackets">trim brackets</a><span class="nowrap">}}</span></td><td> Trim any leading or trailing square brackets.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Trim_quotes" title="Template:Trim quotes">trim quotes</a><span class="nowrap">}}</span></td><td> Trim leading or trailing matching quotes.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Trim_leading" title="Template:Trim leading">trim leading</a><span class="nowrap">}}</span></td><td> Trim up to six instances of specified <prefix>.</td></tr></tbody></table></td><td> <table><tbody><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:String_split" title="Template:String split">string split</a><span class="nowrap">}}</span></td><td> Extract a short string from a long string.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:First_word" title="Template:First word">first word</a><span class="nowrap">}}</span></td><td> Trim down to the first space.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Remove_first_word" title="Template:Remove first word">remove first word</a><span class="nowrap">}}</span></td><td> Remove anything before the first space.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Last_word" title="Template:Last word">last word</a><span class="nowrap">}}</span></td><td> Trim down from the last space.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Remove_last_word" title="Template:Remove last word">remove last word</a><span class="nowrap">}}</span></td><td> Remove anything after the last space.</td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks mw-collapsible mw-collapsed navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Select/remove_specific_item_from_string" style="font-size:114%;margin:0 4em">Select/remove specific item from string</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><table style="width:100%;border-collapse:collapse;border-spacing:0px 0px;border:none;text-align:left;"><tbody><tr style="vertical-align:top"><td style="width:50%;;"> <table style="padding-right: 2em;"><tbody><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Delink" title="Template:Delink">delink</a><span class="nowrap">}}</span>, <span class="nowrap">{{</span><a href="/wiki/Template:Trim_brackets" title="Template:Trim brackets">trim brackets</a><span class="nowrap">}}</span></td><td> Removes wikilink brackets (wikicode); <i>all</i> or <i>outer only</i>.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Plain_text" title="Template:Plain text">Plain text</a><span class="nowrap">}}</span></td><td> Removes wikicode (formatting and brackets)</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:PAGENAMEBASE" title="Template:PAGENAMEBASE">PAGENAMEBASE</a><span class="nowrap">}}</span></td><td> Trim off any parenthesis text at the end of a string (disambiguation).</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Title_disambig_text" title="Template:Title disambig text">title disambig text</a><span class="nowrap">}}</span></td><td> Returns text in parentheses at the end of a string (disambiguation).</td></tr></tbody></table></td><td> <table><tbody><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Title_year" title="Template:Title year">title year</a><span class="nowrap">}}</span></td><td> Returns the 3-or-4-digit year from a pagename, if any.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Title_decade" title="Template:Title decade">title decade</a><span class="nowrap">}}</span></td><td> Returns the 4-digit decade from a pagename (e.g. "1740" from "Foo 1740s bar"), if any.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Title_number" title="Template:Title number">title number</a><span class="nowrap">}}</span></td><td> Returns any number from a pagename.</td></tr><tr style="vertical-align:top"><td style="width: 12em; text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:WikiProjectbasename" title="Template:WikiProjectbasename">WikiProjectbasename</a><span class="nowrap">}}</span></td><td> Removes "WikiProject" from a pagename.</td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks mw-collapsible mw-collapsed navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Insertion,_replacement_and_length" style="font-size:114%;margin:0 4em">Insertion, replacement and length</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><table style="margin: 0 auto 0; text-align: left;"><tbody><tr style="vertical-align:top"><td> <table style="padding-right: 2em;"><tbody><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Loop" title="Template:Loop">loop</a><span class="nowrap">}}</span></td><td> Repeat character string a specified number of times.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Replace" title="Template:Replace">replace</a><span class="nowrap">}}</span></td><td> Returns the string, after replacing <i>all</i> occurrences of a specified string with another string.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_rep" title="Template:Str rep">str rep</a><span class="nowrap">}}</span></td><td> Returns the string, after replacing the first occurrence of a specified string with another string.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Digits" title="Template:Digits">digits</a><span class="nowrap">}}</span></td><td> Returns the string, after removing all characters that are not digits 0–9</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Nowiki" title="Template:Nowiki">Nowiki</a><span class="nowrap">}}</span></td><td> Displays wikitext as plain text.</td></tr></tbody></table></td><td> <table><tbody><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_len" title="Template:Str len">str len</a><span class="nowrap">}}</span></td><td> Returns a string's length.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_%E2%89%A5_len" title="Template:Str ≥ len">str ≥ len</a><span class="nowrap">}}</span></td><td> Check if a string is "longer or equally long" or "shorter" than a given length.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_%E2%89%A4_len" title="Template:Str ≤ len">str ≤ len</a><span class="nowrap">}}</span></td><td> Check if a string is "shorter or equally long" or "longer" than a given length.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_%E2%89%A0_len" title="Template:Str ≠ len">str ≠ len</a><span class="nowrap">}}</span></td><td> Check if a string is "not equal" or "equal" to a given length.</td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks mw-collapsible mw-collapsed navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Analysis_and_searching" style="font-size:114%;margin:0 4em">Analysis and searching</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><table style="margin: 0 auto 0; text-align: left;"><tbody><tr style="vertical-align:top"><td> <table style="padding-right: 2em;"><tbody><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_startswith" title="Template:Str startswith">str startswith</a><span class="nowrap">}}</span><br /><span class="nowrap">{{</span><a href="/wiki/Template:Str_endswith" title="Template:Str endswith">str endswith</a><span class="nowrap">}}</span></td><td> Check if a string starts or ends with a given string.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_find" title="Template:Str find">str find</a><span class="nowrap">}}</span>, <span class="nowrap">{{</span><a href="/wiki/Template:Strfind_short" title="Template:Strfind short">strfind short</a><span class="nowrap">}}</span></td><td style="vertical-align:middle;"> Returns the numerical location of a given string in a string.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_count" title="Template:Str count">str count</a><span class="nowrap">}}</span></td><td> Count the number of occurrences of a pattern within a string.</td></tr></tbody></table></td><td> <table><tbody><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Array" title="Template:Array">Array</a><span class="nowrap">}}</span></td><td> Array item manipulation and retrieval.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:A_or_an" title="Template:A or an">a or an</a><span class="nowrap">}}</span></td><td> Takes a noun and produces the appropriate indefinite article, based on whether the first letter is a vowel.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:In_string" title="Template:In string">in string</a><span class="nowrap">}}</span></td><td> Returns optional string when given string is not found</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Isnumeric" title="Template:Isnumeric">Isnumeric</a><span class="nowrap">}}</span></td><td> Returns number when true, blank when not numeric.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_letter" title="Template:Str letter">str letter</a><span class="nowrap">}}</span></td><td> Returns the number of letters that begin a string.</td></tr><tr style="vertical-align:top"><td style="text-align: right; padding-right: 0.75em;"> <span class="nowrap">{{</span><a href="/wiki/Template:Str_number" title="Template:Str number">str number</a><span class="nowrap">}}</span></td><td> Returns the number of numbers that begin a string.</td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks mw-collapsible expanded navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Modules_and_built-in_functions" style="font-size:114%;margin:0 4em">Modules and built-in functions</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><div class="div-col" style="text-align:left"> <ul><li><a href="/wiki/Module:String" title="Module:String">Module:String</a>, <a href="/wiki/Module:String2" title="Module:String2">Module:String2</a>, <a href="/wiki/Module:Ustring" title="Module:Ustring">Module:Ustring</a>, <a class="mw-selflink selflink">Module:Text</a>, <a href="/wiki/Template:Navbox_wikitext-handling_templates" title="Template:Navbox wikitext-handling templates">wikitext handling</a>: modules that together contain most necessary string functions.</li> <li><a href="https://www.mediawiki.org/wiki/Help:Magic_words" class="extiw" title="mw:Help:Magic words">Magic words</a>: About <code>{{padleft:|}}</code>, <code>{{lc:|}}</code>, <code>{{formatnum:|}}</code> etc.</li> <li><a href="https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions" class="extiw" title="mw:Help:Extension:ParserFunctions">ParserFunctions</a>: About <code>{{#titleparts:|}}, {{#expr:|}}, {{#ifeq:|}}, </code> etc.</li></ul></div></div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow hlist" colspan="2"><div> <li><a href="/wiki/Category:String_manipulation_templates" title="Category:String manipulation templates">Category:String manipulation templates</a> <ul><li><a href="https://commons.wikimedia.org/wiki/Category:String_manipulation_templates" class="extiw" title="c:Category:String manipulation templates">Commons</a></li> <li><a href="https://www.mediawiki.org/wiki/Category:String_manipulation_templates" class="extiw" title="mw:Category:String manipulation templates">MediaWiki</a></li> <li><a href="https://meta.wikimedia.org/wiki/Category:String_manipulation_templates" class="extiw" title="m:Category:String manipulation templates">Meta-Wiki</a></li> <li><a href="https://www.wikidata.org/wiki/Category:String_manipulation_templates" class="extiw" title="d:Category:String manipulation templates">Wikidata</a></li></ul></li> <li><a href="/wiki/Category:Modules_that_manipulate_strings" title="Category:Modules that manipulate strings">Category:Modules that manipulate strings</a></li> </div></td></tr></tbody></table></div> <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:Text/doc" title="Module:Text/doc">Module:Text/doc</a>. <span class="documentation-toolbar">(<a href="/wiki/Special:EditPage/Module:Text/doc" title="Special:EditPage/Module:Text/doc">edit</a> | <a href="/wiki/Special:PageHistory/Module:Text/doc" title="Special:PageHistory/Module:Text/doc">history</a>)</span><br />Editors can experiment in this module's <a href="/wiki/Module:Text/sandbox" title="Module:Text/sandbox">sandbox</a> <span class="documentation-toolbar">(<a href="/wiki/Special:EditPage/Module:Text/sandbox" title="Special:EditPage/Module:Text/sandbox">edit</a> | <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=Module%3AText&page2=Module%3AText%2Fsandbox">diff</a>)</span> and <a href="/wiki/Module:Text/testcases" title="Module:Text/testcases">testcases</a> <span class="documentation-toolbar">(<a href="/wiki/Special:EditPage/Module:Text/testcases" title="Special:EditPage/Module:Text/testcases">edit</a> | <a href="/wiki/Module_talk:Text/testcases" title="Module talk:Text/testcases">run</a>)</span> pages.<br /> <a href="/wiki/Special:PrefixIndex/Module:Text/" title="Special:PrefixIndex/Module:Text/">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="kd">local</span> <span class="n">yesNo</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:Yesno"</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">Text</span> <span class="o">=</span> <span class="p">{</span> <span class="n">serial</span> <span class="o">=</span> <span class="s2">"2022-07-21"</span><span class="p">,</span> </span><span id="L-3"><a href="#L-3"><span class="linenos" data-line="3"></span></a> <span class="n">suite</span> <span class="o">=</span> <span class="s2">"Text"</span> <span class="p">}</span> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a><span class="cm">--[=[</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a><span class="cm">Text utilities</span> </span><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a><span class="cm">]=]</span> </span><span id="L-7"><a href="#L-7"><span class="linenos" data-line="7"></span></a> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">fiatQuote</span><span class="p">(</span> <span class="n">apply</span><span class="p">,</span> <span class="n">alien</span><span class="p">,</span> <span class="n">advance</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">-- Quote text</span> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a> <span class="c1">-- apply -- string, with text</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a> <span class="c1">-- alien -- string, with language code</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a> <span class="c1">-- advance -- number, with level 1 or 2</span> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">apply</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">apply</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-15"><a href="#L-15"><span class="linenos" data-line="15"></span></a> <span class="n">alien</span> <span class="o">=</span> <span class="n">alien</span> <span class="ow">or</span> <span class="s2">"en"</span> </span><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a> <span class="n">advance</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span><span class="n">advance</span><span class="p">)</span> <span class="ow">or</span> <span class="mi">0</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a> <span class="kd">local</span> <span class="n">suite</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a> <span class="kd">local</span> <span class="n">data</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s1">'Module:Text/data'</span><span class="p">)</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a> <span class="kd">local</span> <span class="n">QuoteLang</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">QuoteLang</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a> <span class="kd">local</span> <span class="n">QuoteType</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">QuoteType</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">slang</span> <span class="o">=</span> <span class="n">alien</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^(%l+)-"</span> <span class="p">)</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a> <span class="n">suite</span> <span class="o">=</span> <span class="n">QuoteLang</span><span class="p">[</span><span class="n">alien</span><span class="p">]</span> <span class="ow">or</span> <span class="n">slang</span> <span class="ow">and</span> <span class="n">QuoteLang</span><span class="p">[</span><span class="n">slang</span><span class="p">]</span> <span class="ow">or</span> <span class="n">QuoteLang</span><span class="p">[</span><span class="s2">"en"</span><span class="p">]</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a> <span class="kr">if</span> <span class="n">suite</span> <span class="kr">then</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a> <span class="kd">local</span> <span class="n">quotes</span> <span class="o">=</span> <span class="n">QuoteType</span><span class="p">[</span> <span class="n">suite</span> <span class="p">]</span> </span><span id="L-25"><a href="#L-25"><span class="linenos" data-line="25"></span></a> <span class="kr">if</span> <span class="n">quotes</span> <span class="kr">then</span> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a> <span class="kd">local</span> <span class="n">space</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a> <span class="kr">if</span> <span class="n">quotes</span><span class="p">[</span> <span class="mi">3</span> <span class="p">]</span> <span class="kr">then</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a> <span class="n">space</span> <span class="o">=</span> <span class="s2">"&#160;"</span> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a> <span class="kr">else</span> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a> <span class="n">space</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a> <span class="kr">end</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a> <span class="n">quotes</span> <span class="o">=</span> <span class="n">quotes</span><span class="p">[</span> <span class="n">advance</span> <span class="p">]</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a> <span class="kr">if</span> <span class="n">quotes</span> <span class="kr">then</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a> <span class="n">r</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">format</span><span class="p">(</span> <span class="s2">"%s%s%s%s%s"</span><span class="p">,</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">char</span><span class="p">(</span> <span class="n">quotes</span><span class="p">[</span> <span class="mi">1</span> <span class="p">]</span> <span class="p">),</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a> <span class="n">space</span><span class="p">,</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a> <span class="n">apply</span><span class="p">,</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> <span class="n">space</span><span class="p">,</span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">char</span><span class="p">(</span> <span class="n">quotes</span><span class="p">[</span> <span class="mi">2</span> <span class="p">]</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a> <span class="kr">end</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a> <span class="kr">else</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">log</span><span class="p">(</span> <span class="s2">"fiatQuote() "</span> <span class="o">..</span> <span class="n">suite</span> <span class="p">)</span> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a> <span class="kr">end</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a> <span class="kr">end</span> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a><span class="kr">end</span> <span class="c1">-- fiatQuote()</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> </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><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">char</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">apply</span><span class="p">,</span> <span class="n">again</span><span class="p">,</span> <span class="n">accept</span> <span class="p">)</span> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a> <span class="c1">-- Create string from codepoints</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a> <span class="c1">-- apply -- table (sequence) with numerical codepoints, or nil</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a> <span class="c1">-- again -- number of repetitions, or nil</span> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a> <span class="c1">-- accept -- true, if no error messages to be appended</span> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a> <span class="c1">-- Returns: string</span> </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">r</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a> <span class="n">apply</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">apply</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="ow">and</span> <span class="n">apply</span> <span class="ow">or</span> <span class="p">{}</span> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a> <span class="n">again</span> <span class="o">=</span> <span class="nb">math.floor</span><span class="p">(</span><span class="nb">tonumber</span><span class="p">(</span><span class="n">again</span><span class="p">)</span> <span class="ow">or</span> <span class="mi">1</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">again</span> <span class="o"><</span> <span class="mi">1</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">return</span> <span class="s2">""</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a> <span class="kr">end</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="kd">local</span> <span class="n">bad</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a> <span class="kd">local</span> <span class="n">codes</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span> <span class="n">apply</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></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="n">v</span><span class="p">)</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">n</span> <span class="ow">or</span> <span class="p">(</span><span class="n">n</span> <span class="o"><</span> <span class="mi">32</span> <span class="ow">and</span> <span class="n">n</span> <span class="o">~=</span> <span class="mi">9</span> <span class="ow">and</span> <span class="n">n</span> <span class="o">~=</span> <span class="mi">10</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">bad</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">v</span><span class="p">))</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a> <span class="kr">else</span> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="nb">math.floor</span><span class="p">(</span><span class="n">n</span><span class="p">))</span> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="kr">end</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="kr">end</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">bad</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">accept</span> <span class="kr">then</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">mw</span><span class="p">.</span><span class="n">html</span><span class="p">.</span><span class="n">create</span><span class="p">(</span> <span class="s2">"span"</span> <span class="p">)</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> <span class="p">:</span><span class="n">addClass</span><span class="p">(</span> <span class="s2">"error"</span> <span class="p">)</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a> <span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="s2">"bad codepoints: "</span> <span class="o">..</span> <span class="nb">table.concat</span><span class="p">(</span> <span class="n">bad</span><span class="p">,</span> <span class="s2">" "</span> <span class="p">))</span> <span class="p">)</span> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a> <span class="kr">end</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a> <span class="kr">end</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">codes</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a> <span class="n">r</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">char</span><span class="p">(</span> <span class="n">unpack</span><span class="p">(</span> <span class="n">codes</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a> <span class="kr">if</span> <span class="n">again</span> <span class="o">></span> <span class="mi">1</span> <span class="kr">then</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="p">:</span><span class="n">rep</span><span class="p">(</span><span class="n">again</span><span class="p">)</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a> <span class="kr">end</span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a> <span class="kr">end</span> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a><span class="kr">end</span> <span class="c1">-- Text.char()</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">trimAndFormat</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">fmt</span><span class="p">)</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a> <span class="kd">local</span> <span class="n">result</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">~=</span> <span class="s1">'table'</span> <span class="kr">then</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="n">args</span><span class="p">}</span> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a> <span class="kr">end</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a> <span class="n">v</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="nb">tostring</span><span class="p">(</span><span class="n">v</span><span class="p">))</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> <span class="kr">if</span> <span class="n">v</span> <span class="o">~=</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">result</span><span class="p">,</span><span class="n">fmt</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">format</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="ow">or</span> <span class="n">v</span><span class="p">)</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> <span class="kr">end</span> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a> <span class="kr">end</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a> <span class="kr">return</span> <span class="n">result</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></span></a><span class="kr">end</span> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">concatParams</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">args</span><span class="p">,</span> <span class="n">apply</span><span class="p">,</span> <span class="n">adapt</span> <span class="p">)</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a> <span class="c1">-- Concat list items into one string</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a> <span class="c1">-- args -- table (sequence) with numKey=string</span> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a> <span class="c1">-- apply -- string (optional); separator (default: "|")</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a> <span class="c1">-- adapt -- string (optional); format including "%s"</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> <span class="c1">-- Returns: string</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> <span class="kd">local</span> <span class="n">collect</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> <span class="kr">return</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">trimAndFormat</span><span class="p">(</span><span class="n">args</span><span class="p">,</span><span class="n">adapt</span><span class="p">),</span> <span class="n">apply</span> <span class="ow">or</span> <span class="s2">"|"</span><span class="p">)</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a><span class="kr">end</span> <span class="c1">-- Text.concatParams()</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">containsCJK</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a> <span class="c1">-- Is any CJK code within?</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="c1">-- s -- string</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="c1">-- Returns: true, if CJK detected</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a> <span class="kd">local</span> <span class="n">patternCJK</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s1">'Module:Text/data'</span><span class="p">).</span><span class="n">PatternCJK</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></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">find</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">patternCJK</span> <span class="p">)</span> <span class="o">~=</span> <span class="kc">nil</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a><span class="kr">end</span> <span class="c1">-- Text.containsCJK()</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">removeDelimited</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">suffix</span><span class="p">)</span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a> <span class="c1">-- Remove all text in s delimited by prefix and suffix (inclusive)</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a> <span class="c1">-- Arguments:</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a> <span class="c1">-- s = string to process</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="c1">-- prefix = initial delimiter</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="c1">-- suffix = ending delimiter</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a> <span class="c1">-- Returns: stripped string</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="n">s</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="n">prefix</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">suffix</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">suffix</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> <span class="kd">local</span> <span class="n">prefixLen</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">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="kd">local</span> <span class="n">suffixLen</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">len</span><span class="p">(</span><span class="n">suffix</span><span class="p">)</span> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a> <span class="kr">if</span> <span class="n">prefixLen</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">suffixLen</span> <span class="o">==</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a> <span class="kr">return</span> <span class="n">s</span> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="kr">end</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="kd">local</span> <span class="n">i</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">prefix</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">s</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="kd">local</span> <span class="n">j</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="kr">while</span> <span class="n">i</span> <span class="kr">do</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="n">r</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="n">suffix</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="n">prefixLen</span><span class="p">)</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="kr">if</span> <span class="n">j</span> <span class="kr">then</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</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">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span><span class="o">..</span><span class="n">r</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span><span class="n">j</span><span class="o">+</span><span class="n">suffixLen</span><span class="p">)</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="kr">else</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</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">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="kr">end</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">r</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a> <span class="kr">end</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a><span class="kr">end</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">getPlain</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">adjust</span> <span class="p">)</span> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> <span class="c1">-- Remove wikisyntax from string, except templates</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="c1">-- adjust -- string</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="c1">-- Returns: string</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">Text</span><span class="p">.</span><span class="n">removeDelimited</span><span class="p">(</span><span class="n">adjust</span><span class="p">,</span><span class="s2">"<!--"</span><span class="p">,</span><span class="s2">"-->"</span><span class="p">)</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">"(</?%l[^>]*>)"</span><span class="p">,</span> <span class="s2">""</span> <span class="p">)</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">"'''"</span><span class="p">,</span> <span class="s2">""</span> <span class="p">)</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">"''"</span><span class="p">,</span> <span class="s2">""</span> <span class="p">)</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">"&nbsp;"</span><span class="p">,</span> <span class="s2">" "</span> <span class="p">)</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a><span class="kr">end</span> <span class="c1">-- Text.getPlain()</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">isLatinRange</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">s</span><span class="p">)</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> <span class="c1">-- Are characters expected to be latin or symbols within latin texts?</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> <span class="c1">-- Arguments:</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="c1">-- s = string to analyze</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="c1">-- Returns: true, if valid for latin only</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> <span class="c1">--- ensure input is always string</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> <span class="kd">local</span> <span class="n">PatternLatin</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s1">'Module:Text/data'</span><span class="p">).</span><span class="n">PatternLatin</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">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="n">PatternLatin</span><span class="p">)</span> <span class="o">~=</span> <span class="kc">nil</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a><span class="kr">end</span> <span class="c1">-- Text.isLatinRange()</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><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">isQuote</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="c1">-- Is this character any quotation mark?</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a> <span class="c1">-- s = single character to analyze</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a> <span class="c1">-- Returns: true, if s is quotation mark</span> </span><span id="L-187"><a href="#L-187"><span class="linenos" data-line="187"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a> <span class="kr">return</span> <span class="kc">false</span> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> <span class="kr">end</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> <span class="kd">local</span> <span class="n">SeekQuote</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s1">'Module:Text/data'</span><span class="p">).</span><span class="n">SeekQuote</span> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></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">find</span><span class="p">(</span> <span class="n">SeekQuote</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="o">~=</span> <span class="kc">nil</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a><span class="kr">end</span> <span class="c1">-- Text.isQuote()</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">listToText</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">args</span><span class="p">,</span> <span class="n">adapt</span> <span class="p">)</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> <span class="c1">-- Format list items similar to mw.text.listToText()</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="c1">-- args -- table (sequence) with numKey=string</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></span></a> <span class="c1">-- adapt -- string (optional); format including "%s"</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> <span class="c1">-- Returns: string</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></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">listToText</span><span class="p">(</span><span class="n">trimAndFormat</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">adapt</span><span class="p">))</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a><span class="kr">end</span> <span class="c1">-- Text.listToText()</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">quote</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">apply</span><span class="p">,</span> <span class="n">alien</span><span class="p">,</span> <span class="n">advance</span> <span class="p">)</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a> <span class="c1">-- Quote text</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a> <span class="c1">-- apply -- string, with text</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="c1">-- alien -- string, with language code, or nil</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> <span class="c1">-- advance -- number, with level 1 or 2, or nil</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a> <span class="c1">-- Returns: quoted string</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> <span class="n">apply</span> <span class="o">=</span> <span class="n">apply</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">apply</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a> <span class="kd">local</span> <span class="n">mode</span><span class="p">,</span> <span class="n">slang</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">alien</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a> <span class="n">slang</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">alien</span> <span class="p">):</span><span class="n">lower</span><span class="p">()</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="kr">else</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> <span class="n">slang</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 class="n">pageLanguage</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">slang</span> <span class="kr">then</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a> <span class="c1">-- TODO FIXME: Introduction expected 2017-04</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a> <span class="n">slang</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">language</span><span class="p">.</span><span class="n">getContentLanguage</span><span class="p">():</span><span class="n">getCode</span><span class="p">()</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a> <span class="kr">end</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a> <span class="kr">end</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> <span class="kr">if</span> <span class="n">advance</span> <span class="o">==</span> <span class="mi">2</span> <span class="kr">then</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a> <span class="n">mode</span> <span class="o">=</span> <span class="mi">2</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> <span class="kr">else</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a> <span class="n">mode</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a> <span class="kr">end</span> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a> <span class="kr">return</span> <span class="n">fiatQuote</span><span class="p">(</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">apply</span> <span class="p">),</span> <span class="n">slang</span><span class="p">,</span> <span class="n">mode</span> <span class="p">)</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a><span class="kr">end</span> <span class="c1">-- Text.quote()</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">quoteUnquoted</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">apply</span><span class="p">,</span> <span class="n">alien</span><span class="p">,</span> <span class="n">advance</span> <span class="p">)</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a> <span class="c1">-- Quote text, if not yet quoted and not empty</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a> <span class="c1">-- apply -- string, with text</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a> <span class="c1">-- alien -- string, with language code, or nil</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a> <span class="c1">-- advance -- number, with level 1 or 2, or nil</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a> <span class="c1">-- Returns: string; possibly quoted</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a> <span class="kd">local</span> <span class="n">r</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">apply</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">apply</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> <span class="p">)</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></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">ustring</span><span class="p">.</span><span class="n">sub</span><span class="p">(</span> <span class="n">r</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-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">~=</span> <span class="s2">""</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">Text</span><span class="p">.</span><span class="n">isQuote</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">advance</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></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">sub</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span> <span class="p">)</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">Text</span><span class="p">.</span><span class="n">isQuote</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">Text</span><span class="p">.</span><span class="n">quote</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">alien</span><span class="p">,</span> <span class="n">advance</span> <span class="p">)</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> <span class="kr">end</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a> <span class="kr">end</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a><span class="kr">end</span> <span class="c1">-- Text.quoteUnquoted()</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">removeDiacritics</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">adjust</span> <span class="p">)</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> <span class="c1">-- Remove all diacritics</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> <span class="c1">-- adjust -- string</span> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a> <span class="c1">-- Returns: string; all latin letters should be ASCII</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a> <span class="c1">-- or basic greek or cyrillic or symbols etc.</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> <span class="kd">local</span> <span class="n">cleanup</span><span class="p">,</span> <span class="n">decomposed</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a> <span class="kd">local</span> <span class="n">PatternCombined</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s1">'Module:Text/data'</span><span class="p">).</span><span class="n">PatternCombined</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> <span class="n">decomposed</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">toNFD</span><span class="p">(</span> <span class="n">adjust</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">adjust</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> <span class="p">)</span> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a> <span class="n">cleanup</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">decomposed</span><span class="p">,</span> <span class="n">PatternCombined</span><span class="p">,</span> <span class="s2">""</span> <span class="p">)</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></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">toNFC</span><span class="p">(</span> <span class="n">cleanup</span> <span class="p">)</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a><span class="kr">end</span> <span class="c1">-- Text.removeDiacritics()</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">sentenceTerminated</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">analyse</span> <span class="p">)</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> <span class="c1">-- Is string terminated by dot, question or exclamation mark?</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> <span class="c1">-- Quotation, link termination and so on granted</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a> <span class="c1">-- analyse -- string</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="c1">-- Returns: true, if sentence terminated</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">r</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">PatternTerminated</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s1">'Module:Text/data'</span><span class="p">).</span><span class="n">PatternTerminated</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></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">analyse</span><span class="p">,</span> <span class="n">PatternTerminated</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a> <span class="kr">else</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a> <span class="kr">end</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a><span class="kr">end</span> <span class="c1">-- Text.sentenceTerminated()</span> </span><span id="L-286"><a href="#L-286"><span class="linenos" data-line="286"></span></a> </span><span id="L-287"><a href="#L-287"><span class="linenos" data-line="287"></span></a> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">ucfirstAll</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">adjust</span><span class="p">)</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a> <span class="c1">-- Capitalize all words</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="c1">-- Arguments:</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="c1">-- adjust = string to adjust</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="c1">-- Returns: string with all first letters in upper case</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="n">adjust</span> <span class="o">=</span> <span class="n">adjust</span> <span class="ow">and</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">adjust</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a> <span class="kd">local</span> <span class="n">r</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">adjust</span><span class="p">,</span><span class="kc">true</span><span class="p">)</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="kd">local</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="kd">local</span> <span class="n">c</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">m</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> <span class="n">m</span> <span class="o">=</span> <span class="p">(</span><span class="n">r</span> <span class="o">~=</span> <span class="n">adjust</span><span class="p">)</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">" "</span><span class="o">..</span><span class="n">r</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="kr">while</span> <span class="n">i</span> <span class="kr">do</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="n">i</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">find</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="s2">"%W%l"</span><span class="p">,</span> <span class="n">i</span> <span class="p">)</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="kr">then</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> <span class="n">c</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">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">sub</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">j</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s%s%s"</span><span class="p">,</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">sub</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">i</span> <span class="p">),</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> <span class="n">c</span><span class="p">,</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">sub</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">2</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">j</span> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a> <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">end</span> <span class="c1">-- while i</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="mi">2</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">if</span> <span class="n">m</span> <span class="kr">then</span> </span><span id="L-314"><a href="#L-314"><span class="linenos" data-line="314"></span></a> <span class="n">r</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">encode</span><span class="p">(</span><span class="n">r</span><span class="p">)</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 class="kr">return</span> <span class="n">r</span> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a><span class="kr">end</span> <span class="c1">-- Text.ucfirstAll()</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><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">uprightNonlatin</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">adjust</span> <span class="p">)</span> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> <span class="c1">-- Ensure non-italics for non-latin text parts</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a> <span class="c1">-- One single greek letter might be granted</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a> <span class="c1">-- adjust -- string</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a> <span class="c1">-- Returns: string with non-latin parts enclosed in <span></span> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a> <span class="kd">local</span> <span class="n">data</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s1">'Module:Text/data'</span><span class="p">)</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> <span class="kd">local</span> <span class="n">PatternLatin</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">PatternLatin</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a> <span class="kd">local</span> <span class="n">RangesLatin</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">RangesLatin</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> <span class="kd">local</span> <span class="n">NumLatinRanges</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">NumLatinRanges</span> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></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">match</span><span class="p">(</span> <span class="n">adjust</span><span class="p">,</span> <span class="n">PatternLatin</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> <span class="c1">-- latin only, horizontal dashes, quotes</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">adjust</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> <span class="kr">else</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> <span class="kd">local</span> <span class="n">c</span> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="kd">local</span> <span class="n">j</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="kd">local</span> <span class="n">k</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> <span class="kd">local</span> <span class="n">m</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="kd">local</span> <span class="n">n</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">len</span><span class="p">(</span> <span class="n">adjust</span> <span class="p">)</span> </span><span id="L-340"><a href="#L-340"><span class="linenos" data-line="340"></span></a> <span class="kd">local</span> <span class="n">span</span> <span class="o">=</span> <span class="s2">"%s%s<span dir='auto' style='font-style:normal'>%s</span>"</span> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> <span class="kd">local</span> <span class="n">flat</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">a</span> <span class="p">)</span> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a> <span class="c1">-- isLatin</span> </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">range</span> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a> <span class="c1">-- NumLatinRanges has to be precomputed because # does not work from loadData</span> </span><span id="L-345"><a href="#L-345"><span class="linenos" data-line="345"></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="n">NumLatinRanges</span> <span class="kr">do</span> </span><span id="L-346"><a href="#L-346"><span class="linenos" data-line="346"></span></a> <span class="n">range</span> <span class="o">=</span> <span class="n">RangesLatin</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a> <span class="kr">if</span> <span class="n">a</span> <span class="o">>=</span> <span class="n">range</span><span class="p">[</span> <span class="mi">1</span> <span class="p">]</span> <span class="ow">and</span> <span class="n">a</span> <span class="o"><=</span> <span class="n">range</span><span class="p">[</span> <span class="mi">2</span> <span class="p">]</span> <span class="kr">then</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a> <span class="kr">return</span> <span class="kc">true</span> </span><span id="L-349"><a href="#L-349"><span class="linenos" data-line="349"></span></a> <span class="kr">end</span> </span><span id="L-350"><a href="#L-350"><span class="linenos" data-line="350"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-351"><a href="#L-351"><span class="linenos" data-line="351"></span></a> <span class="kr">end</span> <span class="c1">-- flat()</span> </span><span id="L-352"><a href="#L-352"><span class="linenos" data-line="352"></span></a> <span class="kd">local</span> <span class="n">focus</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">a</span> <span class="p">)</span> </span><span id="L-353"><a href="#L-353"><span class="linenos" data-line="353"></span></a> <span class="c1">-- char is not ambivalent</span> </span><span id="L-354"><a href="#L-354"><span class="linenos" data-line="354"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="p">(</span> <span class="n">a</span> <span class="o">></span> <span class="mi">64</span> <span class="p">)</span> </span><span id="L-355"><a href="#L-355"><span class="linenos" data-line="355"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-356"><a href="#L-356"><span class="linenos" data-line="356"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">(</span> <span class="n">a</span> <span class="o"><</span> <span class="mi">8192</span> <span class="ow">or</span> <span class="n">a</span> <span class="o">></span> <span class="mi">8212</span> <span class="p">)</span> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a> <span class="kr">else</span> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">(</span> <span class="n">a</span> <span class="o">==</span> <span class="mi">38</span> <span class="ow">or</span> <span class="n">a</span> <span class="o">==</span> <span class="mi">60</span> <span class="p">)</span> <span class="c1">-- '&' '<'</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="kr">return</span> <span class="n">r</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a> <span class="kr">end</span> <span class="c1">-- focus()</span> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> <span class="kd">local</span> <span class="n">form</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">a</span> <span class="p">)</span> </span><span id="L-363"><a href="#L-363"><span class="linenos" data-line="363"></span></a> <span class="kr">return</span> <span class="nb">string.format</span><span class="p">(</span> <span class="n">span</span><span class="p">,</span> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> <span class="n">r</span><span class="p">,</span> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">sub</span><span class="p">(</span> <span class="n">adjust</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">j</span> <span class="o">-</span> <span class="mi">1</span> <span class="p">),</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">sub</span><span class="p">(</span> <span class="n">adjust</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">a</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a> <span class="kr">end</span> <span class="c1">-- form()</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></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="n">n</span> <span class="kr">do</span> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a> <span class="n">c</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">codepoint</span><span class="p">(</span> <span class="n">adjust</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">i</span> <span class="p">)</span> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a> <span class="kr">if</span> <span class="n">focus</span><span class="p">(</span> <span class="n">c</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a> <span class="kr">if</span> <span class="n">flat</span><span class="p">(</span> <span class="n">c</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a> <span class="kr">if</span> <span class="n">j</span> <span class="kr">then</span> </span><span id="L-374"><a href="#L-374"><span class="linenos" data-line="374"></span></a> <span class="kr">if</span> <span class="n">m</span> <span class="kr">then</span> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">m</span> <span class="kr">then</span> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></span></a> <span class="c1">-- single greek letter.</span> </span><span id="L-377"><a href="#L-377"><span class="linenos" data-line="377"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a> <span class="kr">end</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a> <span class="n">m</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a> <span class="kr">end</span> </span><span id="L-381"><a href="#L-381"><span class="linenos" data-line="381"></span></a> <span class="kr">if</span> <span class="n">j</span> <span class="kr">then</span> </span><span id="L-382"><a href="#L-382"><span class="linenos" data-line="382"></span></a> <span class="kd">local</span> <span class="n">nx</span> <span class="o">=</span> <span class="n">i</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-383"><a href="#L-383"><span class="linenos" data-line="383"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a> <span class="kr">for</span> <span class="n">ix</span> <span class="o">=</span> <span class="n">nx</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span> <span class="kr">do</span> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a> <span class="n">c</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">sub</span><span class="p">(</span> <span class="n">adjust</span><span class="p">,</span> <span class="n">ix</span><span class="p">,</span> <span class="n">ix</span> <span class="p">)</span> </span><span id="L-386"><a href="#L-386"><span class="linenos" data-line="386"></span></a> <span class="kr">if</span> <span class="n">c</span> <span class="o">==</span> <span class="s2">" "</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="s2">"("</span> <span class="kr">then</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a> <span class="n">nx</span> <span class="o">=</span> <span class="n">nx</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">c</span> <span class="o">..</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">else</span> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a> <span class="kr">break</span> <span class="c1">-- for ix</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 class="kr">end</span> <span class="c1">-- for ix</span> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">form</span><span class="p">(</span> <span class="n">nx</span> <span class="p">)</span> <span class="o">..</span> <span class="n">s</span> </span><span id="L-394"><a href="#L-394"><span class="linenos" data-line="394"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-395"><a href="#L-395"><span class="linenos" data-line="395"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="n">i</span> </span><span id="L-396"><a href="#L-396"><span class="linenos" data-line="396"></span></a> <span class="kr">end</span> </span><span id="L-397"><a href="#L-397"><span class="linenos" data-line="397"></span></a> <span class="kr">end</span> </span><span id="L-398"><a href="#L-398"><span class="linenos" data-line="398"></span></a> <span class="kr">elseif</span> <span class="ow">not</span> <span class="n">j</span> <span class="kr">then</span> </span><span id="L-399"><a href="#L-399"><span class="linenos" data-line="399"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="n">i</span> </span><span id="L-400"><a href="#L-400"><span class="linenos" data-line="400"></span></a> <span class="kr">if</span> <span class="n">c</span> <span class="o">>=</span> <span class="mi">880</span> <span class="ow">and</span> <span class="n">c</span> <span class="o"><=</span> <span class="mi">1023</span> <span class="kr">then</span> </span><span id="L-401"><a href="#L-401"><span class="linenos" data-line="401"></span></a> <span class="c1">-- single greek letter?</span> </span><span id="L-402"><a href="#L-402"><span class="linenos" data-line="402"></span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-403"><a href="#L-403"><span class="linenos" data-line="403"></span></a> <span class="kr">else</span> </span><span id="L-404"><a href="#L-404"><span class="linenos" data-line="404"></span></a> <span class="n">m</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-405"><a href="#L-405"><span class="linenos" data-line="405"></span></a> <span class="kr">end</span> </span><span id="L-406"><a href="#L-406"><span class="linenos" data-line="406"></span></a> <span class="kr">end</span> </span><span id="L-407"><a href="#L-407"><span class="linenos" data-line="407"></span></a> <span class="kr">elseif</span> <span class="n">m</span> <span class="kr">then</span> </span><span id="L-408"><a href="#L-408"><span class="linenos" data-line="408"></span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">m</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-409"><a href="#L-409"><span class="linenos" data-line="409"></span></a> <span class="kr">end</span> </span><span id="L-410"><a href="#L-410"><span class="linenos" data-line="410"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-411"><a href="#L-411"><span class="linenos" data-line="411"></span></a> <span class="kr">if</span> <span class="n">j</span> <span class="ow">and</span> <span class="p">(</span> <span class="ow">not</span> <span class="n">m</span> <span class="ow">or</span> <span class="n">m</span> <span class="o"><</span> <span class="n">n</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-412"><a href="#L-412"><span class="linenos" data-line="412"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">form</span><span class="p">(</span> <span class="n">n</span> <span class="p">)</span> </span><span id="L-413"><a href="#L-413"><span class="linenos" data-line="413"></span></a> <span class="kr">else</span> </span><span id="L-414"><a href="#L-414"><span class="linenos" data-line="414"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</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">sub</span><span class="p">(</span> <span class="n">adjust</span><span class="p">,</span> <span class="n">k</span> <span class="p">)</span> </span><span id="L-415"><a href="#L-415"><span class="linenos" data-line="415"></span></a> <span class="kr">end</span> </span><span id="L-416"><a href="#L-416"><span class="linenos" data-line="416"></span></a> <span class="kr">end</span> </span><span id="L-417"><a href="#L-417"><span class="linenos" data-line="417"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-418"><a href="#L-418"><span class="linenos" data-line="418"></span></a><span class="kr">end</span> <span class="c1">-- Text.uprightNonlatin()</span> </span><span id="L-419"><a href="#L-419"><span class="linenos" data-line="419"></span></a> </span><span id="L-420"><a href="#L-420"><span class="linenos" data-line="420"></span></a> </span><span id="L-421"><a href="#L-421"><span class="linenos" data-line="421"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">test</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">about</span> <span class="p">)</span> </span><span id="L-422"><a href="#L-422"><span class="linenos" data-line="422"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-423"><a href="#L-423"><span class="linenos" data-line="423"></span></a> <span class="kr">if</span> <span class="n">about</span> <span class="o">==</span> <span class="s2">"quote"</span> <span class="kr">then</span> </span><span id="L-424"><a href="#L-424"><span class="linenos" data-line="424"></span></a> <span class="n">data</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s1">'Module:Text/data'</span><span class="p">)</span> </span><span id="L-425"><a href="#L-425"><span class="linenos" data-line="425"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-426"><a href="#L-426"><span class="linenos" data-line="426"></span></a> <span class="n">r</span><span class="p">.</span><span class="n">QuoteLang</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">QuoteLang</span> </span><span id="L-427"><a href="#L-427"><span class="linenos" data-line="427"></span></a> <span class="n">r</span><span class="p">.</span><span class="n">QuoteType</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">QuoteType</span> </span><span id="L-428"><a href="#L-428"><span class="linenos" data-line="428"></span></a> <span class="kr">end</span> </span><span id="L-429"><a href="#L-429"><span class="linenos" data-line="429"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-430"><a href="#L-430"><span class="linenos" data-line="430"></span></a><span class="kr">end</span> <span class="c1">-- Text.test()</span> </span><span id="L-431"><a href="#L-431"><span class="linenos" data-line="431"></span></a> </span><span id="L-432"><a href="#L-432"><span class="linenos" data-line="432"></span></a><span class="c1">-- Non Unicode-aware version of mw.text.split and mw.text.gsplit</span> </span><span id="L-433"><a href="#L-433"><span class="linenos" data-line="433"></span></a><span class="c1">-- based on [[phab:diffusion/ELUA/browse/master/includes/Engines/LuaCommon/lualib/mw.text.lua]]</span> </span><span id="L-434"><a href="#L-434"><span class="linenos" data-line="434"></span></a><span class="c1">-- These run up to 60 times faster than the Unicode-aware versions</span> </span><span id="L-435"><a href="#L-435"><span class="linenos" data-line="435"></span></a><span class="n">Text</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">text</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">plain</span> <span class="p">)</span> </span><span id="L-436"><a href="#L-436"><span class="linenos" data-line="436"></span></a> <span class="kd">local</span> <span class="n">ret</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-437"><a href="#L-437"><span class="linenos" data-line="437"></span></a> <span class="kr">for</span> <span class="n">m</span> <span class="kr">in</span> <span class="n">Text</span><span class="p">.</span><span class="n">gsplit</span><span class="p">(</span> <span class="n">text</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">plain</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-438"><a href="#L-438"><span class="linenos" data-line="438"></span></a> <span class="n">ret</span><span class="p">[</span><span class="o">#</span><span class="n">ret</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">m</span> </span><span id="L-439"><a href="#L-439"><span class="linenos" data-line="439"></span></a> <span class="kr">end</span> </span><span id="L-440"><a href="#L-440"><span class="linenos" data-line="440"></span></a> <span class="kr">return</span> <span class="n">ret</span> </span><span id="L-441"><a href="#L-441"><span class="linenos" data-line="441"></span></a><span class="kr">end</span> </span><span id="L-442"><a href="#L-442"><span class="linenos" data-line="442"></span></a> </span><span id="L-443"><a href="#L-443"><span class="linenos" data-line="443"></span></a><span class="n">Text</span><span class="p">.</span><span class="n">gsplit</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">text</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">plain</span> <span class="p">)</span> </span><span id="L-444"><a href="#L-444"><span class="linenos" data-line="444"></span></a> <span class="kd">local</span> <span class="n">s</span><span class="p">,</span> <span class="n">l</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">string.len</span><span class="p">(</span> <span class="n">text</span> <span class="p">)</span> </span><span id="L-445"><a href="#L-445"><span class="linenos" data-line="445"></span></a> <span class="kr">return</span> <span class="kr">function</span> <span class="p">()</span> </span><span id="L-446"><a href="#L-446"><span class="linenos" data-line="446"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-447"><a href="#L-447"><span class="linenos" data-line="447"></span></a> <span class="kd">local</span> <span class="n">e</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span> <span class="nb">string.find</span><span class="p">(</span> <span class="n">text</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">plain</span> <span class="p">)</span> </span><span id="L-448"><a href="#L-448"><span class="linenos" data-line="448"></span></a> <span class="kd">local</span> <span class="n">ret</span> </span><span id="L-449"><a href="#L-449"><span class="linenos" data-line="449"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">e</span> <span class="kr">then</span> </span><span id="L-450"><a href="#L-450"><span class="linenos" data-line="450"></span></a> <span class="n">ret</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span> <span class="n">text</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-451"><a href="#L-451"><span class="linenos" data-line="451"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-452"><a href="#L-452"><span class="linenos" data-line="452"></span></a> <span class="kr">elseif</span> <span class="n">n</span> <span class="o"><</span> <span class="n">e</span> <span class="kr">then</span> </span><span id="L-453"><a href="#L-453"><span class="linenos" data-line="453"></span></a> <span class="c1">-- Empty separator!</span> </span><span id="L-454"><a href="#L-454"><span class="linenos" data-line="454"></span></a> <span class="n">ret</span> <span class="o">=</span> <span class="nb">string.sub</span><span class="p">(</span> <span class="n">text</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">e</span> <span class="p">)</span> </span><span id="L-455"><a href="#L-455"><span class="linenos" data-line="455"></span></a> <span class="kr">if</span> <span class="n">e</span> <span class="o"><</span> <span class="n">l</span> <span class="kr">then</span> </span><span id="L-456"><a href="#L-456"><span class="linenos" data-line="456"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">e</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-457"><a href="#L-457"><span class="linenos" data-line="457"></span></a> <span class="kr">else</span> </span><span id="L-458"><a href="#L-458"><span class="linenos" data-line="458"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-459"><a href="#L-459"><span class="linenos" data-line="459"></span></a> <span class="kr">end</span> </span><span id="L-460"><a href="#L-460"><span class="linenos" data-line="460"></span></a> <span class="kr">else</span> </span><span id="L-461"><a href="#L-461"><span class="linenos" data-line="461"></span></a> <span class="n">ret</span> <span class="o">=</span> <span class="n">e</span> <span class="o">></span> <span class="n">s</span> <span class="ow">and</span> <span class="nb">string.sub</span><span class="p">(</span> <span class="n">text</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">e</span> <span class="o">-</span> <span class="mi">1</span> <span class="p">)</span> <span class="ow">or</span> <span class="s1">''</span> </span><span id="L-462"><a href="#L-462"><span class="linenos" data-line="462"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-463"><a href="#L-463"><span class="linenos" data-line="463"></span></a> <span class="kr">end</span> </span><span id="L-464"><a href="#L-464"><span class="linenos" data-line="464"></span></a> <span class="kr">return</span> <span class="n">ret</span> </span><span id="L-465"><a href="#L-465"><span class="linenos" data-line="465"></span></a> <span class="kr">end</span> </span><span id="L-466"><a href="#L-466"><span class="linenos" data-line="466"></span></a> <span class="kr">end</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span> </span><span id="L-467"><a href="#L-467"><span class="linenos" data-line="467"></span></a><span class="kr">end</span> </span><span id="L-468"><a href="#L-468"><span class="linenos" data-line="468"></span></a> </span><span id="L-469"><a href="#L-469"><span class="linenos" data-line="469"></span></a><span class="c1">-- Export</span> </span><span id="L-470"><a href="#L-470"><span class="linenos" data-line="470"></span></a><span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-471"><a href="#L-471"><span class="linenos" data-line="471"></span></a> </span><span id="L-472"><a href="#L-472"><span class="linenos" data-line="472"></span></a><span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">func</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">({</span><span class="s1">'containsCJK'</span><span class="p">,</span><span class="s1">'isLatinRange'</span><span class="p">,</span><span class="s1">'isQuote'</span><span class="p">,</span><span class="s1">'sentenceTerminated'</span><span class="p">})</span> <span class="kr">do</span> </span><span id="L-473"><a href="#L-473"><span class="linenos" data-line="473"></span></a> <span class="n">p</span><span class="p">[</span><span class="n">func</span><span class="p">]</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-474"><a href="#L-474"><span class="linenos" data-line="474"></span></a> <span class="kr">return</span> <span class="n">Text</span><span class="p">[</span><span class="n">func</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">""</span> <span class="p">)</span> <span class="ow">and</span> <span class="s2">"1"</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-475"><a href="#L-475"><span class="linenos" data-line="475"></span></a> <span class="kr">end</span> </span><span id="L-476"><a href="#L-476"><span class="linenos" data-line="476"></span></a><span class="kr">end</span> </span><span id="L-477"><a href="#L-477"><span class="linenos" data-line="477"></span></a> </span><span id="L-478"><a href="#L-478"><span class="linenos" data-line="478"></span></a><span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">func</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">({</span><span class="s1">'getPlain'</span><span class="p">,</span><span class="s1">'removeDiacritics'</span><span class="p">,</span><span class="s1">'ucfirstAll'</span><span class="p">,</span><span class="s1">'uprightNonlatin'</span><span class="p">})</span> <span class="kr">do</span> </span><span id="L-479"><a href="#L-479"><span class="linenos" data-line="479"></span></a> <span class="n">p</span><span class="p">[</span><span class="n">func</span><span class="p">]</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-480"><a href="#L-480"><span class="linenos" data-line="480"></span></a> <span class="kr">return</span> <span class="n">Text</span><span class="p">[</span><span class="n">func</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">""</span> <span class="p">)</span> </span><span id="L-481"><a href="#L-481"><span class="linenos" data-line="481"></span></a> <span class="kr">end</span> </span><span id="L-482"><a href="#L-482"><span class="linenos" data-line="482"></span></a><span class="kr">end</span> </span><span id="L-483"><a href="#L-483"><span class="linenos" data-line="483"></span></a> </span><span id="L-484"><a href="#L-484"><span class="linenos" data-line="484"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">char</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-485"><a href="#L-485"><span class="linenos" data-line="485"></span></a> <span class="kd">local</span> <span class="n">params</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-486"><a href="#L-486"><span class="linenos" data-line="486"></span></a> <span class="kd">local</span> <span class="n">story</span> <span class="o">=</span> <span class="n">params</span><span class="p">[</span> <span class="mi">1</span> <span class="p">]</span> </span><span id="L-487"><a href="#L-487"><span class="linenos" data-line="487"></span></a> <span class="kd">local</span> <span class="n">codes</span><span class="p">,</span> <span class="n">lenient</span><span class="p">,</span> <span class="n">multiple</span> </span><span id="L-488"><a href="#L-488"><span class="linenos" data-line="488"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">story</span> <span class="kr">then</span> </span><span id="L-489"><a href="#L-489"><span class="linenos" data-line="489"></span></a> <span class="n">params</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> </span><span id="L-490"><a href="#L-490"><span class="linenos" data-line="490"></span></a> <span class="n">story</span> <span class="o">=</span> <span class="n">params</span><span class="p">[</span> <span class="mi">1</span> <span class="p">]</span> </span><span id="L-491"><a href="#L-491"><span class="linenos" data-line="491"></span></a> <span class="kr">end</span> </span><span id="L-492"><a href="#L-492"><span class="linenos" data-line="492"></span></a> <span class="kr">if</span> <span class="n">story</span> <span class="kr">then</span> </span><span id="L-493"><a href="#L-493"><span class="linenos" data-line="493"></span></a> <span class="kd">local</span> <span class="n">items</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">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">story</span><span class="p">),</span> <span class="s2">"%s+"</span> <span class="p">)</span> </span><span id="L-494"><a href="#L-494"><span class="linenos" data-line="494"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">items</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-495"><a href="#L-495"><span class="linenos" data-line="495"></span></a> <span class="kd">local</span> <span class="n">j</span> </span><span id="L-496"><a href="#L-496"><span class="linenos" data-line="496"></span></a> <span class="n">lenient</span> <span class="o">=</span> <span class="p">(</span><span class="n">yesNo</span><span class="p">(</span><span class="n">params</span><span class="p">.</span><span class="n">errors</span><span class="p">)</span> <span class="o">==</span> <span class="kc">false</span><span class="p">)</span> </span><span id="L-497"><a href="#L-497"><span class="linenos" data-line="497"></span></a> <span class="n">codes</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-498"><a href="#L-498"><span class="linenos" data-line="498"></span></a> <span class="n">multiple</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">params</span><span class="p">[</span> <span class="s2">"*"</span> <span class="p">]</span> <span class="p">)</span> </span><span id="L-499"><a href="#L-499"><span class="linenos" data-line="499"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span> <span class="n">items</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-500"><a href="#L-500"><span class="linenos" data-line="500"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">((</span><span class="n">v</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">"x"</span> <span class="ow">and</span> <span class="s2">"0"</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">)</span> <span class="o">..</span> <span class="n">v</span><span class="p">)</span> </span><span id="L-501"><a href="#L-501"><span class="linenos" data-line="501"></span></a> <span class="nb">table.insert</span><span class="p">(</span> <span class="n">codes</span><span class="p">,</span> <span class="n">j</span> <span class="ow">or</span> <span class="n">v</span> <span class="p">)</span> </span><span id="L-502"><a href="#L-502"><span class="linenos" data-line="502"></span></a> <span class="kr">end</span> </span><span id="L-503"><a href="#L-503"><span class="linenos" data-line="503"></span></a> <span class="kr">end</span> </span><span id="L-504"><a href="#L-504"><span class="linenos" data-line="504"></span></a> <span class="kr">end</span> </span><span id="L-505"><a href="#L-505"><span class="linenos" data-line="505"></span></a> <span class="kr">return</span> <span class="n">Text</span><span class="p">.</span><span class="n">char</span><span class="p">(</span> <span class="n">codes</span><span class="p">,</span> <span class="n">multiple</span><span class="p">,</span> <span class="n">lenient</span> <span class="p">)</span> </span><span id="L-506"><a href="#L-506"><span class="linenos" data-line="506"></span></a><span class="kr">end</span> </span><span id="L-507"><a href="#L-507"><span class="linenos" data-line="507"></span></a> </span><span id="L-508"><a href="#L-508"><span class="linenos" data-line="508"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">concatParams</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-509"><a href="#L-509"><span class="linenos" data-line="509"></span></a> <span class="kd">local</span> <span class="n">args</span> </span><span id="L-510"><a href="#L-510"><span class="linenos" data-line="510"></span></a> <span class="kd">local</span> <span class="n">template</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">template</span> </span><span id="L-511"><a href="#L-511"><span class="linenos" data-line="511"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">template</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-512"><a href="#L-512"><span class="linenos" data-line="512"></span></a> <span class="n">template</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">template</span> <span class="p">)</span> </span><span id="L-513"><a href="#L-513"><span class="linenos" data-line="513"></span></a> <span class="n">template</span> <span class="o">=</span> <span class="p">(</span> <span class="n">template</span> <span class="o">==</span> <span class="s2">"1"</span> <span class="p">)</span> </span><span id="L-514"><a href="#L-514"><span class="linenos" data-line="514"></span></a> <span class="kr">end</span> </span><span id="L-515"><a href="#L-515"><span class="linenos" data-line="515"></span></a> <span class="kr">if</span> <span class="n">template</span> <span class="kr">then</span> </span><span id="L-516"><a href="#L-516"><span class="linenos" data-line="516"></span></a> <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><span id="L-517"><a href="#L-517"><span class="linenos" data-line="517"></span></a> <span class="kr">else</span> </span><span id="L-518"><a href="#L-518"><span class="linenos" data-line="518"></span></a> <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-519"><a href="#L-519"><span class="linenos" data-line="519"></span></a> <span class="kr">end</span> </span><span id="L-520"><a href="#L-520"><span class="linenos" data-line="520"></span></a> <span class="kr">return</span> <span class="n">Text</span><span class="p">.</span><span class="n">concatParams</span><span class="p">(</span> <span class="n">args</span><span class="p">,</span> </span><span id="L-521"><a href="#L-521"><span class="linenos" data-line="521"></span></a> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">separator</span><span class="p">,</span> </span><span id="L-522"><a href="#L-522"><span class="linenos" data-line="522"></span></a> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">format</span> <span class="p">)</span> </span><span id="L-523"><a href="#L-523"><span class="linenos" data-line="523"></span></a><span class="kr">end</span> </span><span id="L-524"><a href="#L-524"><span class="linenos" data-line="524"></span></a> </span><span id="L-525"><a href="#L-525"><span class="linenos" data-line="525"></span></a> </span><span id="L-526"><a href="#L-526"><span class="linenos" data-line="526"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">listToFormat</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-527"><a href="#L-527"><span class="linenos" data-line="527"></span></a> <span class="kd">local</span> <span class="n">lists</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-528"><a href="#L-528"><span class="linenos" data-line="528"></span></a> <span class="kd">local</span> <span class="n">pformat</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="s2">"format"</span><span class="p">]</span> </span><span id="L-529"><a href="#L-529"><span class="linenos" data-line="529"></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="s2">"sep"</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">";"</span> </span><span id="L-530"><a href="#L-530"><span class="linenos" data-line="530"></span></a> </span><span id="L-531"><a href="#L-531"><span class="linenos" data-line="531"></span></a> <span class="c1">-- Parameter parsen: Listen</span> </span><span id="L-532"><a href="#L-532"><span class="linenos" data-line="532"></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">frame</span><span class="p">.</span><span class="n">args</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-533"><a href="#L-533"><span class="linenos" data-line="533"></span></a> <span class="kd">local</span> <span class="n">knum</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> </span><span id="L-534"><a href="#L-534"><span class="linenos" data-line="534"></span></a> <span class="kr">if</span> <span class="n">knum</span> <span class="kr">then</span> <span class="n">lists</span><span class="p">[</span><span class="n">knum</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> <span class="kr">end</span> </span><span id="L-535"><a href="#L-535"><span class="linenos" data-line="535"></span></a> <span class="kr">end</span> </span><span id="L-536"><a href="#L-536"><span class="linenos" data-line="536"></span></a> </span><span id="L-537"><a href="#L-537"><span class="linenos" data-line="537"></span></a> <span class="c1">-- Listen splitten</span> </span><span id="L-538"><a href="#L-538"><span class="linenos" data-line="538"></span></a> <span class="kd">local</span> <span class="n">maxListLen</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-539"><a href="#L-539"><span class="linenos" data-line="539"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">lists</span> <span class="kr">do</span> </span><span id="L-540"><a href="#L-540"><span class="linenos" data-line="540"></span></a> <span class="n">lists</span><span class="p">[</span><span class="n">i</span><span class="p">]</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">lists</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">sep</span><span class="p">)</span> </span><span id="L-541"><a href="#L-541"><span class="linenos" data-line="541"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">lists</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">></span> <span class="n">maxListLen</span> <span class="kr">then</span> <span class="n">maxListLen</span> <span class="o">=</span> <span class="o">#</span><span class="n">lists</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="kr">end</span> </span><span id="L-542"><a href="#L-542"><span class="linenos" data-line="542"></span></a> <span class="kr">end</span> </span><span id="L-543"><a href="#L-543"><span class="linenos" data-line="543"></span></a> </span><span id="L-544"><a href="#L-544"><span class="linenos" data-line="544"></span></a> <span class="c1">-- Ergebnisstring generieren</span> </span><span id="L-545"><a href="#L-545"><span class="linenos" data-line="545"></span></a> <span class="kd">local</span> <span class="n">result</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-546"><a href="#L-546"><span class="linenos" data-line="546"></span></a> <span class="kd">local</span> <span class="n">result_line</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-547"><a href="#L-547"><span class="linenos" data-line="547"></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="n">maxListLen</span> <span class="kr">do</span> </span><span id="L-548"><a href="#L-548"><span class="linenos" data-line="548"></span></a> <span class="n">result_line</span> <span class="o">=</span> <span class="n">pformat</span> </span><span id="L-549"><a href="#L-549"><span class="linenos" data-line="549"></span></a> <span class="kr">for</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">lists</span> <span class="kr">do</span> </span><span id="L-550"><a href="#L-550"><span class="linenos" data-line="550"></span></a> <span class="n">result_line</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">result_line</span><span class="p">,</span> <span class="s2">"%%s"</span><span class="p">,</span> <span class="n">lists</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">],</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-551"><a href="#L-551"><span class="linenos" data-line="551"></span></a> <span class="kr">end</span> </span><span id="L-552"><a href="#L-552"><span class="linenos" data-line="552"></span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">result</span> <span class="o">..</span> <span class="n">result_line</span> </span><span id="L-553"><a href="#L-553"><span class="linenos" data-line="553"></span></a> <span class="kr">end</span> </span><span id="L-554"><a href="#L-554"><span class="linenos" data-line="554"></span></a> </span><span id="L-555"><a href="#L-555"><span class="linenos" data-line="555"></span></a> <span class="kr">return</span> <span class="n">result</span> </span><span id="L-556"><a href="#L-556"><span class="linenos" data-line="556"></span></a><span class="kr">end</span> </span><span id="L-557"><a href="#L-557"><span class="linenos" data-line="557"></span></a> </span><span id="L-558"><a href="#L-558"><span class="linenos" data-line="558"></span></a> </span><span id="L-559"><a href="#L-559"><span class="linenos" data-line="559"></span></a> </span><span id="L-560"><a href="#L-560"><span class="linenos" data-line="560"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">listToText</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-561"><a href="#L-561"><span class="linenos" data-line="561"></span></a> <span class="kd">local</span> <span class="n">args</span> </span><span id="L-562"><a href="#L-562"><span class="linenos" data-line="562"></span></a> <span class="kd">local</span> <span class="n">template</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">template</span> </span><span id="L-563"><a href="#L-563"><span class="linenos" data-line="563"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">template</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-564"><a href="#L-564"><span class="linenos" data-line="564"></span></a> <span class="n">template</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">template</span> <span class="p">)</span> </span><span id="L-565"><a href="#L-565"><span class="linenos" data-line="565"></span></a> <span class="n">template</span> <span class="o">=</span> <span class="p">(</span> <span class="n">template</span> <span class="o">==</span> <span class="s2">"1"</span> <span class="p">)</span> </span><span id="L-566"><a href="#L-566"><span class="linenos" data-line="566"></span></a> <span class="kr">end</span> </span><span id="L-567"><a href="#L-567"><span class="linenos" data-line="567"></span></a> <span class="kr">if</span> <span class="n">template</span> <span class="kr">then</span> </span><span id="L-568"><a href="#L-568"><span class="linenos" data-line="568"></span></a> <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><span id="L-569"><a href="#L-569"><span class="linenos" data-line="569"></span></a> <span class="kr">else</span> </span><span id="L-570"><a href="#L-570"><span class="linenos" data-line="570"></span></a> <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-571"><a href="#L-571"><span class="linenos" data-line="571"></span></a> <span class="kr">end</span> </span><span id="L-572"><a href="#L-572"><span class="linenos" data-line="572"></span></a> <span class="kr">return</span> <span class="n">Text</span><span class="p">.</span><span class="n">listToText</span><span class="p">(</span> <span class="n">args</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">format</span> <span class="p">)</span> </span><span id="L-573"><a href="#L-573"><span class="linenos" data-line="573"></span></a><span class="kr">end</span> </span><span id="L-574"><a href="#L-574"><span class="linenos" data-line="574"></span></a> </span><span id="L-575"><a href="#L-575"><span class="linenos" data-line="575"></span></a> </span><span id="L-576"><a href="#L-576"><span class="linenos" data-line="576"></span></a> </span><span id="L-577"><a href="#L-577"><span class="linenos" data-line="577"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">quote</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-578"><a href="#L-578"><span class="linenos" data-line="578"></span></a> <span class="kd">local</span> <span class="n">slang</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><span id="L-579"><a href="#L-579"><span class="linenos" data-line="579"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">slang</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-580"><a href="#L-580"><span class="linenos" data-line="580"></span></a> <span class="n">slang</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">slang</span> <span class="p">)</span> </span><span id="L-581"><a href="#L-581"><span class="linenos" data-line="581"></span></a> <span class="kr">if</span> <span class="n">slang</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-582"><a href="#L-582"><span class="linenos" data-line="582"></span></a> <span class="n">slang</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-583"><a href="#L-583"><span class="linenos" data-line="583"></span></a> <span class="kr">end</span> </span><span id="L-584"><a href="#L-584"><span class="linenos" data-line="584"></span></a> <span class="kr">end</span> </span><span id="L-585"><a href="#L-585"><span class="linenos" data-line="585"></span></a> <span class="kr">return</span> <span class="n">Text</span><span class="p">.</span><span class="n">quote</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">""</span><span class="p">,</span> </span><span id="L-586"><a href="#L-586"><span class="linenos" data-line="586"></span></a> <span class="n">slang</span><span class="p">,</span> </span><span id="L-587"><a href="#L-587"><span class="linenos" data-line="587"></span></a> <span class="nb">tonumber</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">3</span><span class="p">]</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-588"><a href="#L-588"><span class="linenos" data-line="588"></span></a><span class="kr">end</span> </span><span id="L-589"><a href="#L-589"><span class="linenos" data-line="589"></span></a> </span><span id="L-590"><a href="#L-590"><span class="linenos" data-line="590"></span></a> </span><span id="L-591"><a href="#L-591"><span class="linenos" data-line="591"></span></a> </span><span id="L-592"><a href="#L-592"><span class="linenos" data-line="592"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">quoteUnquoted</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-593"><a href="#L-593"><span class="linenos" data-line="593"></span></a> <span class="kd">local</span> <span class="n">slang</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><span id="L-594"><a href="#L-594"><span class="linenos" data-line="594"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">slang</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-595"><a href="#L-595"><span class="linenos" data-line="595"></span></a> <span class="n">slang</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">slang</span> <span class="p">)</span> </span><span id="L-596"><a href="#L-596"><span class="linenos" data-line="596"></span></a> <span class="kr">if</span> <span class="n">slang</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-597"><a href="#L-597"><span class="linenos" data-line="597"></span></a> <span class="n">slang</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-598"><a href="#L-598"><span class="linenos" data-line="598"></span></a> <span class="kr">end</span> </span><span id="L-599"><a href="#L-599"><span class="linenos" data-line="599"></span></a> <span class="kr">end</span> </span><span id="L-600"><a href="#L-600"><span class="linenos" data-line="600"></span></a> <span class="kr">return</span> <span class="n">Text</span><span class="p">.</span><span class="n">quoteUnquoted</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">""</span><span class="p">,</span> </span><span id="L-601"><a href="#L-601"><span class="linenos" data-line="601"></span></a> <span class="n">slang</span><span class="p">,</span> </span><span id="L-602"><a href="#L-602"><span class="linenos" data-line="602"></span></a> <span class="nb">tonumber</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">3</span><span class="p">]</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-603"><a href="#L-603"><span class="linenos" data-line="603"></span></a><span class="kr">end</span> </span><span id="L-604"><a href="#L-604"><span class="linenos" data-line="604"></span></a> </span><span id="L-605"><a href="#L-605"><span class="linenos" data-line="605"></span></a> </span><span id="L-606"><a href="#L-606"><span class="linenos" data-line="606"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">zip</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-607"><a href="#L-607"><span class="linenos" data-line="607"></span></a> <span class="kd">local</span> <span class="n">lists</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-608"><a href="#L-608"><span class="linenos" data-line="608"></span></a> <span class="kd">local</span> <span class="n">seps</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-609"><a href="#L-609"><span class="linenos" data-line="609"></span></a> <span class="kd">local</span> <span class="n">defaultsep</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="s2">"sep"</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-610"><a href="#L-610"><span class="linenos" data-line="610"></span></a> <span class="kd">local</span> <span class="n">innersep</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="s2">"isep"</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-611"><a href="#L-611"><span class="linenos" data-line="611"></span></a> <span class="kd">local</span> <span class="n">outersep</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="s2">"osep"</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-612"><a href="#L-612"><span class="linenos" data-line="612"></span></a> </span><span id="L-613"><a href="#L-613"><span class="linenos" data-line="613"></span></a> <span class="c1">-- Parameter parsen</span> </span><span id="L-614"><a href="#L-614"><span class="linenos" data-line="614"></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">frame</span><span class="p">.</span><span class="n">args</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-615"><a href="#L-615"><span class="linenos" data-line="615"></span></a> <span class="kd">local</span> <span class="n">knum</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> </span><span id="L-616"><a href="#L-616"><span class="linenos" data-line="616"></span></a> <span class="kr">if</span> <span class="n">knum</span> <span class="kr">then</span> <span class="n">lists</span><span class="p">[</span><span class="n">knum</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> <span class="kr">else</span> </span><span id="L-617"><a href="#L-617"><span class="linenos" data-line="617"></span></a> <span class="kr">if</span> <span class="nb">string.sub</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"sep"</span> <span class="kr">then</span> </span><span id="L-618"><a href="#L-618"><span class="linenos" data-line="618"></span></a> <span class="kd">local</span> <span class="n">sepnum</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span><span class="nb">string.sub</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="mi">4</span><span class="p">))</span> </span><span id="L-619"><a href="#L-619"><span class="linenos" data-line="619"></span></a> <span class="kr">if</span> <span class="n">sepnum</span> <span class="kr">then</span> <span class="n">seps</span><span class="p">[</span><span class="n">sepnum</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> <span class="kr">end</span> </span><span id="L-620"><a href="#L-620"><span class="linenos" data-line="620"></span></a> <span class="kr">end</span> </span><span id="L-621"><a href="#L-621"><span class="linenos" data-line="621"></span></a> <span class="kr">end</span> </span><span id="L-622"><a href="#L-622"><span class="linenos" data-line="622"></span></a> <span class="kr">end</span> </span><span id="L-623"><a href="#L-623"><span class="linenos" data-line="623"></span></a> <span class="c1">-- sofern keine expliziten Separatoren angegeben sind, den Standardseparator verwenden</span> </span><span id="L-624"><a href="#L-624"><span class="linenos" data-line="624"></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.max</span><span class="p">(</span><span class="o">#</span><span class="n">seps</span><span class="p">,</span> <span class="o">#</span><span class="n">lists</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-625"><a href="#L-625"><span class="linenos" data-line="625"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">seps</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="kr">then</span> <span class="n">seps</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">defaultsep</span> <span class="kr">end</span> </span><span id="L-626"><a href="#L-626"><span class="linenos" data-line="626"></span></a> <span class="kr">end</span> </span><span id="L-627"><a href="#L-627"><span class="linenos" data-line="627"></span></a> </span><span id="L-628"><a href="#L-628"><span class="linenos" data-line="628"></span></a> <span class="c1">-- Listen splitten</span> </span><span id="L-629"><a href="#L-629"><span class="linenos" data-line="629"></span></a> <span class="kd">local</span> <span class="n">maxListLen</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-630"><a href="#L-630"><span class="linenos" data-line="630"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">lists</span> <span class="kr">do</span> </span><span id="L-631"><a href="#L-631"><span class="linenos" data-line="631"></span></a> <span class="n">lists</span><span class="p">[</span><span class="n">i</span><span class="p">]</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">lists</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">seps</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> </span><span id="L-632"><a href="#L-632"><span class="linenos" data-line="632"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">lists</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">></span> <span class="n">maxListLen</span> <span class="kr">then</span> <span class="n">maxListLen</span> <span class="o">=</span> <span class="o">#</span><span class="n">lists</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="kr">end</span> </span><span id="L-633"><a href="#L-633"><span class="linenos" data-line="633"></span></a> <span class="kr">end</span> </span><span id="L-634"><a href="#L-634"><span class="linenos" data-line="634"></span></a> </span><span id="L-635"><a href="#L-635"><span class="linenos" data-line="635"></span></a> <span class="kd">local</span> <span class="n">result</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-636"><a href="#L-636"><span class="linenos" data-line="636"></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="n">maxListLen</span> <span class="kr">do</span> </span><span id="L-637"><a href="#L-637"><span class="linenos" data-line="637"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="o">~=</span> <span class="mi">1</span> <span class="kr">then</span> <span class="n">result</span> <span class="o">=</span> <span class="n">result</span> <span class="o">..</span> <span class="n">outersep</span> <span class="kr">end</span> </span><span id="L-638"><a href="#L-638"><span class="linenos" data-line="638"></span></a> <span class="kr">for</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">lists</span> <span class="kr">do</span> </span><span id="L-639"><a href="#L-639"><span class="linenos" data-line="639"></span></a> <span class="kr">if</span> <span class="n">j</span> <span class="o">~=</span> <span class="mi">1</span> <span class="kr">then</span> <span class="n">result</span> <span class="o">=</span> <span class="n">result</span> <span class="o">..</span> <span class="n">innersep</span> <span class="kr">end</span> </span><span id="L-640"><a href="#L-640"><span class="linenos" data-line="640"></span></a> <span class="n">result</span> <span class="o">=</span> <span class="n">result</span> <span class="o">..</span> <span class="p">(</span><span class="n">lists</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-641"><a href="#L-641"><span class="linenos" data-line="641"></span></a> <span class="kr">end</span> </span><span id="L-642"><a href="#L-642"><span class="linenos" data-line="642"></span></a> <span class="kr">end</span> </span><span id="L-643"><a href="#L-643"><span class="linenos" data-line="643"></span></a> <span class="kr">return</span> <span class="n">result</span> </span><span id="L-644"><a href="#L-644"><span class="linenos" data-line="644"></span></a><span class="kr">end</span> </span><span id="L-645"><a href="#L-645"><span class="linenos" data-line="645"></span></a> </span><span id="L-646"><a href="#L-646"><span class="linenos" data-line="646"></span></a> </span><span id="L-647"><a href="#L-647"><span class="linenos" data-line="647"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">split</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-648"><a href="#L-648"><span class="linenos" data-line="648"></span></a> <span class="kd">local</span> <span class="n">text</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">text</span> <span class="ow">or</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">''</span> </span><span id="L-649"><a href="#L-649"><span class="linenos" data-line="649"></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">pattern</span> <span class="ow">or</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">''</span> </span><span id="L-650"><a href="#L-650"><span class="linenos" data-line="650"></span></a> <span class="kd">local</span> <span class="n">plain</span> <span class="o">=</span> <span class="n">yesNo</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">plain</span> <span class="ow">or</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span> </span><span id="L-651"><a href="#L-651"><span class="linenos" data-line="651"></span></a> <span class="kd">local</span> <span class="n">index</span> <span class="o">=</span> <span class="nb">tonumber</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">index</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">tonumber</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">4</span><span class="p">])</span> <span class="ow">or</span> <span class="mi">1</span> </span><span id="L-652"><a href="#L-652"><span class="linenos" data-line="652"></span></a> <span class="kd">local</span> <span class="n">a</span> <span class="o">=</span> <span class="n">Text</span><span class="p">.</span><span class="n">split</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">plain</span><span class="p">)</span> </span><span id="L-653"><a href="#L-653"><span class="linenos" data-line="653"></span></a> <span class="kr">if</span> <span class="n">index</span> <span class="o"><</span> <span class="mi">0</span> <span class="kr">then</span> <span class="n">index</span> <span class="o">=</span> <span class="o">#</span><span class="n">a</span> <span class="o">+</span> <span class="n">index</span> <span class="o">+</span> <span class="mi">1</span> <span class="kr">end</span> </span><span id="L-654"><a href="#L-654"><span class="linenos" data-line="654"></span></a> <span class="kr">return</span> <span class="n">a</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> </span><span id="L-655"><a href="#L-655"><span class="linenos" data-line="655"></span></a><span class="kr">end</span> </span><span id="L-656"><a href="#L-656"><span class="linenos" data-line="656"></span></a> </span><span id="L-657"><a href="#L-657"><span class="linenos" data-line="657"></span></a> </span><span id="L-658"><a href="#L-658"><span class="linenos" data-line="658"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">failsafe</span><span class="p">()</span> </span><span id="L-659"><a href="#L-659"><span class="linenos" data-line="659"></span></a> <span class="kr">return</span> <span class="n">Text</span><span class="p">.</span><span class="n">serial</span> </span><span id="L-660"><a href="#L-660"><span class="linenos" data-line="660"></span></a><span class="kr">end</span> </span><span id="L-661"><a href="#L-661"><span class="linenos" data-line="661"></span></a> </span><span id="L-662"><a href="#L-662"><span class="linenos" data-line="662"></span></a> </span><span id="L-663"><a href="#L-663"><span class="linenos" data-line="663"></span></a><span class="n">p</span><span class="p">.</span><span class="n">Text</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">()</span> </span><span id="L-664"><a href="#L-664"><span class="linenos" data-line="664"></span></a> <span class="kr">return</span> <span class="n">Text</span> </span><span id="L-665"><a href="#L-665"><span class="linenos" data-line="665"></span></a><span class="kr">end</span> <span class="c1">-- p.Text</span> </span><span id="L-666"><a href="#L-666"><span class="linenos" data-line="666"></span></a> </span><span id="L-667"><a href="#L-667"><span class="linenos" data-line="667"></span></a><span class="kr">return</span> <span class="n">p</span> </span></pre></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐cc877b49b‐ntl4g Cached time: 20241127131228 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, vary‐page‐id, show‐toc] CPU time usage: 0.458 seconds Real time usage: 0.584 seconds Preprocessor visited node count: 1492/1000000 Post‐expand include size: 167292/2097152 bytes Template argument size: 2197/2097152 bytes Highest expansion depth: 12/100 Expensive parser function count: 8/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 14352/5000000 bytes Lua time usage: 0.319/10.000 seconds Lua memory usage: 17868092/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 449.831 1 -total 100.00% 449.831 1 Module:Text/doc 49.31% 221.834 1 Template:String-handling_templates 27.66% 124.442 3 Template:In_lang 17.14% 77.108 15 Template:Aligned_table 10.50% 47.218 1 Template:High_use 4.15% 18.649 1 Template:Lua 3.76% 16.916 1 Template:Div_col 3.29% 14.821 17 Template:Anchor 3.09% 13.887 47 Template:Tl --> </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:Text&oldid=1246857616">https://en.wikipedia.org/w/index.php?title=Module:Text&oldid=1246857616</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">Category</a>: <ul><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 21 September 2024, at 14:01<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Module:Text&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-cc877b49b-ntl4g","wgBackendResponseTime":773,"wgPageParseReport":{"limitreport":{"cputime":"0.458","walltime":"0.584","ppvisitednodes":{"value":1492,"limit":1000000},"postexpandincludesize":{"value":167292,"limit":2097152},"templateargumentsize":{"value":2197,"limit":2097152},"expansiondepth":{"value":12,"limit":100},"expensivefunctioncount":{"value":8,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":14352,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 449.831 1 -total","100.00% 449.831 1 Module:Text/doc"," 49.31% 221.834 1 Template:String-handling_templates"," 27.66% 124.442 3 Template:In_lang"," 17.14% 77.108 15 Template:Aligned_table"," 10.50% 47.218 1 Template:High_use"," 4.15% 18.649 1 Template:Lua"," 3.76% 16.916 1 Template:Div_col"," 3.29% 14.821 17 Template:Anchor"," 3.09% 13.887 47 Template:Tl"]},"scribunto":{"limitreport-timeusage":{"value":"0.319","limit":"10.000"},"limitreport-memusage":{"value":17868092,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-cc877b49b-ntl4g","timestamp":"20241127131228","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>