CINXE.COM
模組:utilities - 維基辭典
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available" lang="yue" dir="ltr"> <head> <meta charset="UTF-8"> <title>模組:utilities - 維基辭典</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available";var cookie=document.cookie.match(/(?:^|; )yuewiktionarymwclientpreferences=([^;]+)/);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":"yue","wgMonthNames":["","1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"wgRequestId":"50a9bb63-de82-4108-a2ae-dbc69409c9ff","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"模組:utilities","wgTitle":"utilities","wgCurRevisionId":26659,"wgRevisionId":26659,"wgArticleId":2695,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageViewLanguage":"yue","wgPageContentLanguage":"yue","wgPageContentModel":"Scribunto","wgRelevantPageName":"模組:utilities","wgRelevantArticleId":2695,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wiktionary","wgCiteReferencePreviewsActive":true,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr", "pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q30885366","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"]};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready", "wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.catfix","ext.gadget.defaultVisibilityToggles","ext.urlShortener.toolbar","ext.centralauth.centralautologin","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","wikibase.client.vector-2022","ext.checkUser.clientHints","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=yue&modules=ext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=yue&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=yue&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:site_name" content="維基辭典"> <meta property="og:title" content="模組:utilities - 維基辭典"> <meta property="og:type" content="website"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//yue.m.wiktionary.org/wiki/%E6%A8%A1%E7%B5%84:utilities"> <link rel="alternate" type="application/x-wiki" title="改" href="/w/index.php?title=%E6%A8%A1%E7%B5%84:utilities&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wiktionary.png"> <link rel="icon" href="/static/favicon/piece.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="維基辭典 (yue)"> <link rel="EditURI" type="application/rsd+xml" href="//yue.wiktionary.org/w/api.php?action=rsd"> <link rel="canonical" href="https://yue.wiktionary.org/wiki/%E6%A8%A1%E7%B5%84:utilities"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.yue"> <link rel="alternate" type="application/atom+xml" title="維基辭典嘅Atom Feed" href="/w/index.php?title=%E7%89%B9%E5%88%A5:%E6%9C%80%E8%BF%91%E4%BF%AE%E6%94%B9&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject mw-editable page-模組_utilities rootpage-模組_utilities skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">跳去內容</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="站點"> <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="主目錄" > <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">主目錄</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">主目錄</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">移去側欄</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">收埋</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> 導覽 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/%E7%B6%AD%E5%9F%BA%E8%BE%AD%E5%85%B8:%E9%A0%AD%E7%89%88" title="睇頭版[z]" accesskey="z"><span>頭版</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/%E7%B6%AD%E5%9F%BA%E8%BE%AD%E5%85%B8:%E7%A4%BE%E5%8D%80%E5%A4%A7%E5%A0%82" title="關於呢個計劃,你可以做乜,應該要點做"><span>社區大堂</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/%E7%B6%AD%E5%9F%BA%E8%BE%AD%E5%85%B8:%E6%9C%80%E8%BF%91%E7%99%BC%E7%94%9F%E5%98%85%E4%BA%8B" title="提供而家發生嘅事嘅背景資料"><span>最近發生嘅事</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E6%9C%80%E8%BF%91%E4%BF%AE%E6%94%B9" title="列出呢個 wiki 中嘅最近修改[r]" accesskey="r"><span>最近修改</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E6%98%AF%E4%BD%86%E4%B8%80%E7%89%88" title="是但載入一版[x]" accesskey="x"><span>是但一版</span></a></li><li id="n-help" class="mw-list-item"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents" title="搵吓點做嘅地方"><span>幫手</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/%E7%B6%AD%E5%9F%BA%E8%BE%AD%E5%85%B8:%E9%A0%AD%E7%89%88" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wiktionary.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="維基辭典" src="/static/images/mobile/copyright/wiktionary-wordmark-yue.svg" style="width: 7.5em; height: 1.6875em;"> <img class="mw-logo-tagline" alt="" src="/static/images/mobile/copyright/wiktionary-tagline-yue.svg" width="120" height="12" style="width: 7.5em; height: 0.75em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/%E7%89%B9%E5%88%A5:%E6%90%9C%E7%B4%A2" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="搵維基辭典[f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>搵嘢</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="搵維基辭典" aria-label="搵維基辭典" autocapitalize="none" title="搵維基辭典[f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="特別:搜索"> </div> <button class="cdx-button cdx-search-input__end-button">搵嘢</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="個人架生"> <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="閱讀設定"> <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="閱讀設定" > <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">閱讀設定</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/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=yue" class=""><span>慷慨解囊</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=%E7%89%B9%E5%88%A5:%E9%96%8B%E6%88%B6&returnto=%E6%A8%A1%E7%B5%84%3Autilities" title="建議你開返個戶口簽到,不過唔做都無所謂。" class=""><span>開戶口</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=%E7%89%B9%E5%88%A5:%E7%B0%BD%E5%88%B0&returnto=%E6%A8%A1%E7%B5%84%3Autilities" title="建議你去登入;但係唔係一定嘅[o]" accesskey="o" class=""><span>簽到</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="多啲選項" > <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="個人架生" > <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">個人架生</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="用戶選單" > <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/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=yue"><span>慷慨解囊</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:%E9%96%8B%E6%88%B6&returnto=%E6%A8%A1%E7%B5%84%3Autilities" title="建議你開返個戶口簽到,不過唔做都無所謂。"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>開戶口</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:%E7%B0%BD%E5%88%B0&returnto=%E6%A8%A1%E7%B5%84%3Autilities" title="建議你去登入;但係唔係一定嘅[o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>簽到</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"> 未簽到編者用嘅版面 <a href="/wiki/%E5%B9%AB%E6%89%8B:%E7%9B%AE%E9%8C%84" aria-label="知多啲有關改嘢"><span>知多啲</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/%E7%89%B9%E5%88%A5:%E6%88%91%E5%98%85%E8%B2%A2%E7%8D%BB" title="A list of edits made from this IP address[y]" accesskey="y"><span>貢獻</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E6%88%91%E5%98%85%E5%82%BE%E5%81%88" title="對於嚟自呢一個IP地址編輯嘅討論[n]" accesskey="n"><span>傾偈</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="站點"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">模組</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">utilities</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="去睇另一種語文嘅文章。有49種語言版本。" > <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-49" 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">49種語言</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.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 南非荷蘭文" lang="af" hreflang="af" data-title="Module:utilities" data-language-autonym="Afrikaans" data-language-local-name="南非荷蘭文" class="interlanguage-link-target"><span>Afrikaans</span></a></li><li class="interlanguage-link interwiki-ang mw-list-item"><a href="https://ang.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 古英文" lang="ang" hreflang="ang" data-title="Module:utilities" data-language-autonym="Ænglisc" data-language-local-name="古英文" class="interlanguage-link-target"><span>Ænglisc</span></a></li><li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wiktionary.org/wiki/%D9%88%D8%AD%D8%AF%D8%A9:utilities" title="وحدة:utilities – 阿拉伯文" lang="ar" hreflang="ar" data-title="وحدة:utilities" data-language-autonym="العربية" data-language-local-name="阿拉伯文" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wiktionary.org/wiki/Modul:utilities" title="Modul:utilities – 亞塞拜然文" lang="az" hreflang="az" data-title="Modul:utilities" data-language-autonym="Azərbaycanca" data-language-local-name="亞塞拜然文" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-bjn mw-list-item"><a href="https://bjn.wiktionary.org/wiki/Modul:utilities" title="Modul:utilities – 班亞爾文" lang="bjn" hreflang="bjn" data-title="Modul:utilities" data-language-autonym="Banjar" data-language-local-name="班亞爾文" class="interlanguage-link-target"><span>Banjar</span></a></li><li class="interlanguage-link interwiki-blk mw-list-item"><a href="https://blk.wiktionary.org/wiki/%E1%80%99%E1%80%B1%E1%80%AC%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0%E1%80%B8:utilities" title="မော်ဂျူး:utilities – Pa'O" lang="blk" hreflang="blk" data-title="မော်ဂျူး:utilities" data-language-autonym="ပအိုဝ်ႏဘာႏသာႏ" data-language-local-name="Pa'O" class="interlanguage-link-target"><span>ပအိုဝ်ႏဘာႏသာႏ</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wiktionary.org/wiki/%E0%A6%AE%E0%A6%A1%E0%A6%BF%E0%A6%89%E0%A6%B2:utilities" title="মডিউল:utilities – 孟加拉文" lang="bn" hreflang="bn" data-title="মডিউল:utilities" data-language-autonym="বাংলা" data-language-local-name="孟加拉文" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wiktionary.org/wiki/M%C3%B2dul:utilitats" title="Mòdul:utilitats – 加泰羅尼亞文" lang="ca" hreflang="ca" data-title="Mòdul:utilitats" data-language-autonym="Català" data-language-local-name="加泰羅尼亞文" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wiktionary.org/wiki/%D9%85%DB%86%D8%AF%DB%8C%D9%88%D9%88%D9%84:utilities" title="مۆدیوول:utilities – 索拉尼庫爾德文" lang="ckb" hreflang="ckb" data-title="مۆدیوول:utilities" data-language-autonym="کوردی" data-language-local-name="索拉尼庫爾德文" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-dv mw-list-item"><a href="https://dv.wiktionary.org/wiki/%DE%89%DE%AE%DE%91%DE%A8%DE%87%DE%AA%DE%8D%DE%B0:utilities" title="މޮޑިއުލް:utilities – 迪維西文" lang="dv" hreflang="dv" data-title="މޮޑިއުލް:utilities" data-language-autonym="ދިވެހިބަސް" data-language-local-name="迪維西文" class="interlanguage-link-target"><span>ދިވެހިބަސް</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 英文" lang="en" hreflang="en" data-title="Module:utilities" data-language-autonym="English" data-language-local-name="英文" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wiktionary.org/wiki/Moodul:utilities" title="Moodul:utilities – 愛沙尼亞文" lang="et" hreflang="et" data-title="Moodul:utilities" data-language-autonym="Eesti" data-language-local-name="愛沙尼亞文" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-fy mw-list-item"><a href="https://fy.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 西弗里西亞文" lang="fy" hreflang="fy" data-title="Module:utilities" data-language-autonym="Frysk" data-language-local-name="西弗里西亞文" class="interlanguage-link-target"><span>Frysk</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wiktionary.org/wiki/%D7%99%D7%97%D7%99%D7%93%D7%94:utilities" title="יחידה:utilities – 希伯來文" lang="he" hreflang="he" data-title="יחידה:utilities" data-language-autonym="עברית" data-language-local-name="希伯來文" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wiktionary.org/wiki/%E0%A4%85%E0%A4%A8%E0%A5%81%E0%A4%96%E0%A4%82%E0%A4%A1:utilities" title="अनुखंड:utilities – 北印度文" lang="hi" hreflang="hi" data-title="अनुखंड:utilities" data-language-autonym="हिन्दी" data-language-local-name="北印度文" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-hsb mw-list-item"><a href="https://hsb.wiktionary.org/wiki/Modul:utilities" title="Modul:utilities – 上索布文" lang="hsb" hreflang="hsb" data-title="Modul:utilities" data-language-autonym="Hornjoserbsce" data-language-local-name="上索布文" class="interlanguage-link-target"><span>Hornjoserbsce</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wiktionary.org/wiki/Modul:utilities" title="Modul:utilities – 匈牙利文" lang="hu" hreflang="hu" data-title="Modul:utilities" data-language-autonym="Magyar" data-language-local-name="匈牙利文" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wiktionary.org/wiki/Modul:utilities" title="Modul:utilities – 印尼文" lang="id" hreflang="id" data-title="Modul:utilities" data-language-autonym="Bahasa Indonesia" data-language-local-name="印尼文" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wiktionary.org/wiki/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:utilities" title="モジュール:utilities – 日文" lang="ja" hreflang="ja" data-title="モジュール:utilities" data-language-autonym="日本語" data-language-local-name="日文" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-jv mw-list-item"><a href="https://jv.wiktionary.org/wiki/Modhul:utilities" title="Modhul:utilities – 爪哇文" lang="jv" hreflang="jv" data-title="Modhul:utilities" data-language-autonym="Jawa" data-language-local-name="爪哇文" class="interlanguage-link-target"><span>Jawa</span></a></li><li class="interlanguage-link interwiki-km mw-list-item"><a href="https://km.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 高棉文" lang="km" hreflang="km" data-title="Module:utilities" data-language-autonym="ភាសាខ្មែរ" data-language-local-name="高棉文" class="interlanguage-link-target"><span>ភាសាខ្មែរ</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wiktionary.org/wiki/%EB%AA%A8%EB%93%88:utilities" title="모듈:utilities – 韓文" lang="ko" hreflang="ko" data-title="모듈:utilities" data-language-autonym="한국어" data-language-local-name="韓文" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-ku mw-list-item"><a href="https://ku.wiktionary.org/wiki/Modul:utilities" title="Modul:utilities – 庫爾德文" lang="ku" hreflang="ku" data-title="Modul:utilities" data-language-autonym="Kurdî" data-language-local-name="庫爾德文" class="interlanguage-link-target"><span>Kurdî</span></a></li><li class="interlanguage-link interwiki-ky mw-list-item"><a href="https://ky.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:utilities" title="Модуль:utilities – 吉爾吉斯文" lang="ky" hreflang="ky" data-title="Модуль:utilities" data-language-autonym="Кыргызча" data-language-local-name="吉爾吉斯文" class="interlanguage-link-target"><span>Кыргызча</span></a></li><li class="interlanguage-link interwiki-lo mw-list-item"><a href="https://lo.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 寮文" lang="lo" hreflang="lo" data-title="Module:utilities" data-language-autonym="ລາວ" data-language-local-name="寮文" class="interlanguage-link-target"><span>ລາວ</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wiktionary.org/wiki/%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:utilities" title="ഘടകം:utilities – 馬來亞拉姆文" lang="ml" hreflang="ml" data-title="ഘടകം:utilities" data-language-autonym="മലയാളം" data-language-local-name="馬來亞拉姆文" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mnw mw-list-item"><a href="https://mnw.wiktionary.org/wiki/%E1%80%99%E1%80%9D%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0:utilities" title="မဝ်ဂျူ:utilities – Mon" lang="mnw" hreflang="mnw" data-title="မဝ်ဂျူ:utilities" data-language-autonym="ဘာသာမန်" data-language-local-name="Mon" class="interlanguage-link-target"><span>ဘာသာမန်</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wiktionary.org/wiki/Modul:utilities" title="Modul:utilities – 馬來文" lang="ms" hreflang="ms" data-title="Modul:utilities" data-language-autonym="Bahasa Melayu" data-language-local-name="馬來文" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-mt mw-list-item"><a href="https://mt.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 馬爾他文" lang="mt" hreflang="mt" data-title="Module:utilities" data-language-autonym="Malti" data-language-local-name="馬爾他文" class="interlanguage-link-target"><span>Malti</span></a></li><li class="interlanguage-link interwiki-my mw-list-item"><a href="https://my.wiktionary.org/wiki/%E1%80%99%E1%80%B1%E1%80%AC%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0%E1%80%B8:utilities" title="မော်ဂျူး:utilities – 緬甸文" lang="my" hreflang="my" data-title="မော်ဂျူး:utilities" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="緬甸文" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-nn mw-list-item"><a href="https://nn.wiktionary.org/wiki/Modul:utilities" title="Modul:utilities – 耐諾斯克挪威文" lang="nn" hreflang="nn" data-title="Modul:utilities" data-language-autonym="Norsk nynorsk" data-language-local-name="耐諾斯克挪威文" class="interlanguage-link-target"><span>Norsk nynorsk</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wiktionary.org/wiki/%E0%A8%AE%E0%A9%8C%E0%A8%A1%E0%A8%BF%E0%A8%8A%E0%A8%B2:utilities" title="ਮੌਡਿਊਲ:utilities – 旁遮普文" lang="pa" hreflang="pa" data-title="ਮੌਡਿਊਲ:utilities" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="旁遮普文" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wiktionary.org/wiki/M%C3%B3dulo:utilities" title="Módulo:utilities – 葡萄牙文" lang="pt" hreflang="pt" data-title="Módulo:utilities" data-language-autonym="Português" data-language-local-name="葡萄牙文" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-sd mw-list-item"><a href="https://sd.wiktionary.org/wiki/%D9%85%D8%A7%DA%8A%D9%8A%D9%88%D9%84:utilities" title="ماڊيول:utilities – 信德文" lang="sd" hreflang="sd" data-title="ماڊيول:utilities" data-language-autonym="سنڌي" data-language-local-name="信德文" class="interlanguage-link-target"><span>سنڌي</span></a></li><li class="interlanguage-link interwiki-shn mw-list-item"><a href="https://shn.wiktionary.org/wiki/%E1%80%99%E1%80%B1%E1%82%83%E1%82%87%E1%81%B5%E1%80%BB%E1%80%B0%E1%80%B8:utilities" title="မေႃႇၵျူး:utilities – 撣文" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:utilities" data-language-autonym="ၽႃႇသႃႇတႆး " data-language-local-name="撣文" class="interlanguage-link-target"><span>ၽႃႇသႃႇတႆး </span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 僧伽羅文" lang="si" hreflang="si" data-title="Module:utilities" data-language-autonym="සිංහල" data-language-local-name="僧伽羅文" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wiktionary.org/wiki/Module:utilities" title="Module:utilities – Simple English" lang="en-simple" hreflang="en-simple" data-title="Module:utilities" 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-sk mw-list-item"><a href="https://sk.wiktionary.org/wiki/Modul:N%C3%A1stroje" title="Modul:Nástroje – 斯洛伐克文" lang="sk" hreflang="sk" data-title="Modul:Nástroje" data-language-autonym="Slovenčina" data-language-local-name="斯洛伐克文" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:utilities" title="Модул:utilities – 塞爾維亞文" lang="sr" hreflang="sr" data-title="Модул:utilities" data-language-autonym="Српски / srpski" data-language-local-name="塞爾維亞文" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 坦米爾文" lang="ta" hreflang="ta" data-title="Module:utilities" data-language-autonym="தமிழ்" data-language-local-name="坦米爾文" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:utilities" title="Модул:utilities – 塔吉克文" lang="tg" hreflang="tg" data-title="Модул:utilities" data-language-autonym="Тоҷикӣ" data-language-local-name="塔吉克文" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wiktionary.org/wiki/%E0%B8%A1%E0%B8%AD%E0%B8%94%E0%B8%B9%E0%B8%A5:utilities" title="มอดูล:utilities – 泰文" lang="th" hreflang="th" data-title="มอดูล:utilities" data-language-autonym="ไทย" data-language-local-name="泰文" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tl mw-list-item"><a href="https://tl.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 塔加路族文" lang="tl" hreflang="tl" data-title="Module:utilities" data-language-autonym="Tagalog" data-language-local-name="塔加路族文" class="interlanguage-link-target"><span>Tagalog</span></a></li><li class="interlanguage-link interwiki-tpi mw-list-item"><a href="https://tpi.wiktionary.org/wiki/Module:utilities" title="Module:utilities – 托比辛文" lang="tpi" hreflang="tpi" data-title="Module:utilities" data-language-autonym="Tok Pisin" data-language-local-name="托比辛文" class="interlanguage-link-target"><span>Tok Pisin</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wiktionary.org/wiki/Mod%C3%BCl:ara%C3%A7lar" title="Modül:araçlar – 土耳其文" lang="tr" hreflang="tr" data-title="Modül:araçlar" data-language-autonym="Türkçe" data-language-local-name="土耳其文" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wiktionary.org/wiki/Modul:utilities" title="Modul:utilities – 烏茲別克文" lang="uz" hreflang="uz" data-title="Modul:utilities" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="烏茲別克文" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wiktionary.org/wiki/M%C3%B4_%C4%91un:utilities" title="Mô đun:utilities – 越南文" lang="vi" hreflang="vi" data-title="Mô đun:utilities" data-language-autonym="Tiếng Việt" data-language-local-name="越南文" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wiktionary.org/wiki/Module:Utilities" title="Module:Utilities – 中文" lang="zh" hreflang="zh" data-title="Module:Utilities" data-language-autonym="中文" data-language-local-name="中文" class="interlanguage-link-target"><span>中文</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wiktionary.org/wiki/%E6%A8%A1%E7%B5%84:utilities" title="模組:utilities – 閩南語" lang="nan" hreflang="nan" data-title="模組:utilities" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="閩南語" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</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/Q30885366#sitelinks-wiktionary" title="改跨語言拎" class="wbc-editpage">改拎</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="空間名"> <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/%E6%A8%A1%E7%B5%84:utilities" title="睇吓模組頁[c]" accesskey="c"><span>模組</span></a></li><li id="ca-talk" class="new vector-tab-noicon mw-list-item"><a href="/w/index.php?title=%E6%A8%A1%E7%B5%84%E8%A8%8E%E8%AB%96:utilities&action=edit&redlink=1" rel="discussion" class="new" title="關於內容頁嘅討論 (頁面未存在)[t]" accesskey="t"><span>討論</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="改語言變體" > <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="外觀"> <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/%E6%A8%A1%E7%B5%84:utilities"><span>閱</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=%E6%A8%A1%E7%B5%84:utilities&action=edit" title="改呢版嘅代碼[e]" accesskey="e"><span>改源碼</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=%E6%A8%A1%E7%B5%84:utilities&action=history" title="呢一頁之前嘅修訂[h]" accesskey="h"><span>睇返紀錄</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="頁面工具"> <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="架撐" > <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">架撐</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">架撐</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">移去側欄</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">收埋</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="多啲選項" > <div class="vector-menu-heading"> 動作 </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/%E6%A8%A1%E7%B5%84:utilities"><span>閱</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=%E6%A8%A1%E7%B5%84:utilities&action=edit" title="改呢版嘅代碼[e]" accesskey="e"><span>改源碼</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=%E6%A8%A1%E7%B5%84:utilities&action=history"><span>睇返紀錄</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> 基本 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E9%82%8A%E5%BA%A6%E9%8F%88%E5%8E%BB%E5%91%A2%E7%89%88/%E6%A8%A1%E7%B5%84:utilities" title="列出所有連接過嚟呢度嘅頁面[j]" accesskey="j"><span>有乜連過來</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E5%A4%96%E9%8F%88%E4%BF%AE%E6%94%B9/%E6%A8%A1%E7%B5%84:utilities" rel="nofollow" title="由呢版連出去嘅版嘅最近修改[k]" accesskey="k"><span>連結頁嘅更改</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=yue" title="上載檔案[u]" accesskey="u"><span>上載檔案</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/%E7%89%B9%E5%88%A5:%E5%B0%88%E9%96%80%E7%89%88" title="所有特別頁嘅一覽[q]" accesskey="q"><span>特別頁</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=%E6%A8%A1%E7%B5%84:utilities&oldid=26659" title="呢一版嘅哩個修訂嘅永久連結"><span>固定連結</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=%E6%A8%A1%E7%B5%84:utilities&action=info" title="多啲同呢版有拏褦嘅資料"><span>頁面資訊</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:UrlShortener&url=https%3A%2F%2Fyue.wiktionary.org%2Fwiki%2F%25E6%25A8%25A1%25E7%25B5%2584%3Autilities"><span>攞短網址</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=%E7%89%B9%E5%88%A5:QrCode&url=https%3A%2F%2Fyue.wiktionary.org%2Fwiki%2F%25E6%25A8%25A1%25E7%25B5%2584%3Autilities"><span>下載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"> 打印/匯出 </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=%E7%89%B9%E5%88%A5:DownloadAsPdf&page=%E6%A8%A1%E7%B5%84%3Autilities&action=show-download-screen"><span>下載PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="javascript:print();" rel="alternate" title="呢一版印得嘅版本[p]" accesskey="p"><span>印得嘅版本</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"> 第啲項目 </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q30885366" title="連到接住資料儲存庫嘅項目[g]" accesskey="g"><span>維基數據項目</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="頁面工具"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="閱讀設定"> <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">閱讀設定</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">移去側欄</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">收埋</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">來自維基辭典</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="yue" dir="ltr"><p><i>呢個模組嘅解說可以喺<a href="/w/index.php?title=%E6%A8%A1%E7%B5%84:utilities/doc&action=edit&redlink=1" class="new" title="模組:utilities/doc (頁面未存在)">模組:utilities/doc</a>度開</i> </p><div class="mw-highlight mw-highlight-lang-lua mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos" data-line="1"></span></a><span class="kd">local</span> <span class="n">codepoint</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><span id="L-2"><a href="#L-2"><span class="linenos" data-line="2"></span></a><span class="kd">local</span> <span class="n">decode</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><span id="L-3"><a href="#L-3"><span class="linenos" data-line="3"></span></a><span class="kd">local</span> <span class="n">trim</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><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a><span class="kd">local</span> <span class="nb">type</span> <span class="o">=</span> <span class="nb">type</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a><span class="kd">local</span> <span class="n">u</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><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a><span class="kd">local</span> <span class="n">unstripNoWiki</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">unstripNoWiki</span> </span><span id="L-7"><a href="#L-7"><span class="linenos" data-line="7"></span></a> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a><span class="kd">local</span> <span class="n">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="s2">"Module:utilities/data"</span><span class="p">)</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a><span class="kd">local</span> <span class="n">export</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a><span class="c1">-- A helper function to escape magic characters in a string.</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a><span class="c1">-- Magic characters: ^$()%.[]*+-?</span> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">pattern_escape</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-15"><a href="#L-15"><span class="linenos" data-line="15"></span></a> <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><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="p">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a> <span class="kr">end</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">text</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"[%^$()%%.[%]*+%-?]"</span><span class="p">,</span> <span class="s2">"%%%0"</span><span class="p">))</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a><span class="kr">end</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a><span class="c1">-- Converts decimal to hexadecimal.</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a><span class="c1">-- Note: About three times as fast as the hex library.</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">dec_to_hex</span><span class="p">(</span><span class="n">dec</span><span class="p">)</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a> <span class="n">dec</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span><span class="n">dec</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="ow">not</span> <span class="n">dec</span> <span class="ow">or</span> <span class="n">dec</span> <span class="o">%</span> <span class="mi">1</span> <span class="o">~=</span> <span class="mi">0</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="nb">error</span><span class="p">(</span><span class="s2">"Input should be a decimal integer."</span><span class="p">)</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a> <span class="kr">end</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="s2">"%x"</span><span class="p">):</span><span class="n">format</span><span class="p">(</span><span class="n">dec</span><span class="p">):</span><span class="n">upper</span><span class="p">()</span> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a><span class="kr">end</span> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a><span class="c1">-- A helper function to resolve HTML entities into plaintext.</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a><span class="kr">do</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a> <span class="kd">local</span> <span class="n">entities</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">get_named_entity</span><span class="p">(</span><span class="n">entity</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">entities</span> <span class="o">=</span> <span class="n">entities</span> <span class="ow">or</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s2">"Module:data/entities"</span><span class="p">)</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a> <span class="kr">return</span> <span class="n">entities</span><span class="p">[</span><span class="n">entity</span><span class="p">]</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> <span class="kr">end</span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a> <span class="c1">-- Catches entities with capital X, which aren't supported by default.</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">get_numbered_entity</span><span class="p">(</span><span class="n">entity</span><span class="p">)</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> <span class="n">entity</span> <span class="o">=</span> <span class="n">entity</span><span class="p">:</span><span class="n">lower</span><span class="p">()</span> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a> <span class="kd">local</span> <span class="n">ret</span> <span class="o">=</span> <span class="n">decode</span><span class="p">(</span><span class="n">entity</span><span class="p">)</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a> <span class="kr">if</span> <span class="n">ret</span> <span class="o">~=</span> <span class="n">entity</span> <span class="kr">then</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">ret</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a> <span class="kr">end</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> <span class="kr">end</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a> <span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">get_entities</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">text</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"&([^#&;]+);"</span><span class="p">,</span> <span class="n">get_named_entity</span><span class="p">)</span> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"&#[Xx]?%x+;"</span><span class="p">,</span> <span class="n">get_numbered_entity</span><span class="p">)</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="p">)</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a> <span class="kr">end</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a><span class="kr">end</span> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a><span class="c1">-- A helper function to convert plaintext into HTML entities where these match the characters given in set.</span> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a><span class="c1">-- By default, this resolves any pre-existing entities into plaintext first, to allow mixed input and to avoid accidental double-conversion. This can be turned off with the raw parameter.</span> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">make_entities</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">set</span><span class="p">,</span> <span class="n">raw</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">text</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">raw</span> <span class="ow">and</span> <span class="n">export</span><span class="p">.</span><span class="n">get_entities</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> <span class="ow">or</span> <span class="n">text</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a> <span class="n">set</span> <span class="o">=</span> <span class="n">set</span> <span class="ow">or</span> <span class="s2">"<>&</span><span class="se">\"</span><span class="s2">'</span><span class="se">\194\160</span><span class="s2">"</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="p">(</span><span class="n">text</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"[%z</span><span class="se">\1</span><span class="s2">-</span><span class="se">\127\194</span><span class="s2">-</span><span class="se">\244</span><span class="s2">][</span><span class="se">\128</span><span class="s2">-</span><span class="se">\191</span><span class="s2">]*"</span><span class="p">,</span> <span class="kr">function</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a> <span class="kr">if</span> <span class="n">set</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="n">m</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="kr">then</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="kr">return</span> <span class="s2">"&#x"</span> <span class="o">..</span> <span class="n">export</span><span class="p">.</span><span class="n">dec_to_hex</span><span class="p">(</span><span class="n">codepoint</span><span class="p">(</span><span class="n">m</span><span class="p">))</span> <span class="o">..</span> <span class="s2">";"</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a> <span class="kr">end</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a> <span class="kr">end</span><span class="p">))</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a><span class="kr">end</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a><span class="kr">do</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">check_level</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"Heading levels must be numbers."</span><span class="p">)</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="kr">elseif</span> <span class="n">lvl</span> <span class="o"><</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">lvl</span> <span class="o">></span> <span class="mi">6</span> <span class="ow">or</span> <span class="n">lvl</span> <span class="o">%</span> <span class="mi">1</span> <span class="o">~=</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"Heading levels must be integers between 1 and 6."</span><span class="p">)</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="kr">end</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> <span class="kr">return</span> <span class="n">lvl</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> <span class="kr">end</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a> <span class="c1">-- A helper function which iterates over the headings in `text`, which should be the content of a page or (main) section.</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a> <span class="c1">-- Each iteration returns three values: `sec` (the section title), `lvl` (the section level) and `loc` (the index of the section in the given text, from the first equals sign). The section title will be automatically trimmed, and any HTML entities will be resolved.</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a> <span class="c1">-- The optional parameter `a` (which should be an integer between 1 and 6) can be used to ensure that only headings of the specified level are iterated over. If `b` is also given, then they are treated as a range.</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a> <span class="c1">-- The optional parameters `a` and `b` can be used to specify a range, so that only headings with levels in that range are returned. If only `a` is given</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a> <span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">find_headings</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a> <span class="n">a</span> <span class="o">=</span> <span class="n">a</span> <span class="ow">and</span> <span class="n">check_level</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">nil</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span> <span class="ow">and</span> <span class="n">check_level</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="ow">or</span> <span class="n">a</span> <span class="ow">or</span> <span class="kc">nil</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a> <span class="kd">local</span> <span class="n">start</span><span class="p">,</span> <span class="n">loc</span><span class="p">,</span> <span class="n">lvl</span><span class="p">,</span> <span class="n">sec</span> <span class="o">=</span> <span class="mi">1</span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a> <span class="kr">return</span> <span class="kr">function</span><span class="p">()</span> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a> <span class="kr">repeat</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a> <span class="n">loc</span><span class="p">,</span> <span class="n">lvl</span><span class="p">,</span> <span class="n">sec</span><span class="p">,</span> <span class="n">start</span> <span class="o">=</span> <span class="n">text</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"()%f[^%z</span><span class="se">\n\r</span><span class="s2">](==?=?=?=?=?)([^</span><span class="se">\n\r</span><span class="s2">]+)%2[</span><span class="se">\t</span><span class="s2"> ]*%f[%z</span><span class="se">\n\r</span><span class="s2">]()"</span><span class="p">,</span> <span class="n">start</span><span class="p">)</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a> <span class="n">lvl</span> <span class="o">=</span> <span class="n">lvl</span> <span class="ow">and</span> <span class="o">#</span><span class="n">lvl</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a> <span class="kr">until</span> <span class="ow">not</span> <span class="p">(</span><span class="n">sec</span> <span class="ow">and</span> <span class="n">a</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">lvl</span> <span class="o">>=</span> <span class="n">a</span> <span class="ow">and</span> <span class="n">lvl</span> <span class="o"><=</span> <span class="n">b</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">return</span> <span class="n">sec</span> <span class="ow">and</span> <span class="n">trim</span><span class="p">(</span><span class="n">export</span><span class="p">.</span><span class="n">get_entities</span><span class="p">(</span><span class="n">sec</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">lvl</span><span class="p">,</span> <span class="n">loc</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a> <span class="kr">end</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><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">get_section</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">level</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="ow">not</span> <span class="p">(</span><span class="n">content</span> <span class="ow">and</span> <span class="n">name</span><span class="p">)</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="kr">return</span> <span class="kc">nil</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> <span class="kr">elseif</span> <span class="n">name</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"[</span><span class="se">\n\r</span><span class="s2">]"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"Heading name cannot contain a newline."</span><span class="p">)</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a> <span class="kr">end</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></span></a> <span class="n">level</span> <span class="o">=</span> <span class="n">level</span> <span class="ow">and</span> <span class="n">check_level</span><span class="p">(</span><span class="n">level</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">nil</span> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a> <span class="n">name</span> <span class="o">=</span> <span class="n">trim</span><span class="p">(</span><span class="n">export</span><span class="p">.</span><span class="n">get_entities</span><span class="p">(</span><span class="n">name</span><span class="p">))</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a> <span class="kd">local</span> <span class="n">start</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a> <span class="kr">for</span> <span class="n">sec</span><span class="p">,</span> <span class="n">lvl</span><span class="p">,</span> <span class="n">loc</span> <span class="kr">in</span> <span class="n">export</span><span class="p">.</span><span class="n">find_headings</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">level</span> <span class="ow">and</span> <span class="mi">1</span> <span class="ow">or</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">level</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a> <span class="kr">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">lvl</span> <span class="o"><=</span> <span class="n">level</span> <span class="kr">then</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a> <span class="kr">return</span> <span class="n">content</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">loc</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a> <span class="kr">elseif</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">level</span> <span class="ow">or</span> <span class="n">lvl</span> <span class="o">==</span> <span class="n">level</span><span class="p">)</span> <span class="ow">and</span> <span class="n">sec</span> <span class="o">==</span> <span class="n">name</span> <span class="kr">then</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a> <span class="n">start</span><span class="p">,</span> <span class="n">level</span> <span class="o">=</span> <span class="n">loc</span><span class="p">,</span> <span class="n">lvl</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> <span class="kr">end</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> <span class="kr">end</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="n">start</span> <span class="ow">and</span> <span class="n">content</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span><span class="n">start</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><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a> <span class="c1">-- A helper function to return the content of a page section.</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> <span class="c1">-- `content` is raw wikitext, `name` is the requested section, and `level` is an optional parameter that specifies the required section heading level. If `level` is not supplied, then the first section called `name` is returned.</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a> <span class="c1">-- `name` can either be a string or table of section names. If a table, each name represents a section that has the next as a subsection. For example, {"Spanish", "Noun"} will return the first matching section called "Noun" under a section called "Spanish". These do not have to be at adjacent levels ("Noun" might be L4, while "Spanish" is L2). If `level` is given, it refers to the last name in the table (i.e. the name of the section to be returned).</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a> <span class="c1">-- The returned section includes all of its subsections.</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> <span class="c1">-- If no matching section is found, returns nil.</span> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">get_section</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">names</span><span class="p">,</span> <span class="n">level</span><span class="p">)</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">names</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="kr">return</span> <span class="n">get_section</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">names</span><span class="p">,</span> <span class="n">level</span><span class="p">)</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a> <span class="kr">end</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> <span class="kd">local</span> <span class="n">names_len</span> <span class="o">=</span> <span class="o">#</span><span class="n">names</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="kr">if</span> <span class="n">names_len</span> <span class="o">></span> <span class="mi">6</span> <span class="kr">then</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"Not possible specify more than 5 subsections: headings only go up to level 6."</span><span class="p">)</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a> <span class="kr">end</span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a> <span class="kr">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">name</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">names</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a> <span class="n">content</span> <span class="o">=</span> <span class="n">get_section</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">i</span> <span class="o">==</span> <span class="n">names_len</span> <span class="ow">and</span> <span class="n">level</span> <span class="ow">or</span> <span class="kc">nil</span><span class="p">)</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a> <span class="kr">end</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="kr">return</span> <span class="n">content</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="kr">end</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a><span class="kr">end</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a><span class="c1">-- A function which returns the number of the page section which contains the current #invoke.</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a><span class="kr">do</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="kr">function</span> <span class="nf">_section</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="n">frame</span><span class="p">:</span><span class="n">extensionTag</span><span class="p">(</span><span class="s2">"nowiki"</span><span class="p">,</span> <span class="s2">"HEADING</span><span class="se">\1</span><span class="s2">"</span> <span class="o">..</span> <span class="n">offset</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">return</span> <span class="n">h</span> <span class="o">-</span> <span class="n">offset</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a> <span class="kr">end</span> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> </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="mi">0</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">get_current_section</span><span class="p">()</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">frame</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">getCurrentFrame</span><span class="p">()</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="c1">-- Headings have to be unique, or they get assigned an old value.</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="kd">local</span> <span class="n">h</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">preprocess</span><span class="p">(</span><span class="s2">"="</span> <span class="o">..</span> <span class="n">u</span><span class="p">(</span><span class="mh">0xF0000</span> <span class="o">+</span> <span class="n">i</span><span class="p">)</span> <span class="o">..</span> <span class="s2">"="</span><span class="p">,</span> <span class="s2">""</span><span class="p">):</span><span class="n">match</span><span class="p">(</span><span class="s2">"%d+"</span><span class="p">))</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="c1">-- For some reason, [[Special:ExpandTemplates]] doesn't generate the strip marker, so if that happens we simply abort early.</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">h</span> <span class="kr">then</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="kr">return</span> <span class="mi">0</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="kr">end</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></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">frame</span><span class="p">:</span><span class="n">extensionTag</span><span class="p">(</span><span class="s2">"nowiki"</span><span class="p">):</span><span class="n">match</span><span class="p">(</span><span class="s2">"[%dA-F]+"</span><span class="p">),</span> <span class="mi">16</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">while</span> <span class="n">n</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">do</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">n</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a> <span class="kd">local</span> <span class="n">offset</span> <span class="o">=</span> <span class="n">unstripNoWiki</span><span class="p">((</span><span class="s2">"</span><span class="se">\127</span><span class="s2">'</span><span class="se">\"</span><span class="s2">`UNIQ--nowiki-%08X-QINU`</span><span class="se">\"</span><span class="s2">'</span><span class="se">\127</span><span class="s2">"</span><span class="p">):</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">))</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> <span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"HEADING</span><span class="se">\1</span><span class="s2">(%d+)"</span><span class="p">)</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> <span class="kr">if</span> <span class="n">offset</span> <span class="kr">then</span> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> <span class="kr">return</span> <span class="n">_section</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="n">offset</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> <span class="kr">end</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="kr">end</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="kr">return</span> <span class="n">_section</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a> <span class="kr">end</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a><span class="kr">end</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a><span class="c1">-- A function which returns the name of the L2 language section which contains the current #invoke.</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">get_current_L2</span><span class="p">()</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="kd">local</span> <span class="n">section</span> <span class="o">=</span> <span class="n">export</span><span class="p">.</span><span class="n">get_current_section</span><span class="p">()</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a> <span class="kr">if</span> <span class="n">section</span> <span class="o">==</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="kr">end</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> <span class="kd">local</span> <span class="n">page_L2s</span><span class="p">,</span> <span class="n">L2</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s2">"Module:headword/data"</span><span class="p">).</span><span class="n">page_L2s</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> <span class="kr">repeat</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="n">L2</span> <span class="o">=</span> <span class="n">page_L2s</span><span class="p">[</span><span class="n">section</span><span class="p">]</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="kr">if</span> <span class="n">L2</span> <span class="kr">then</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a> <span class="kr">return</span> <span class="n">L2</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> <span class="kr">end</span> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a> <span class="n">section</span> <span class="o">=</span> <span class="n">section</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a> <span class="kr">until</span> <span class="n">section</span> <span class="o">==</span> <span class="mi">0</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a><span class="kr">end</span> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a><span class="c1">-- A helper function to strip wiki markup, giving the plaintext of what is displayed on the page.</span> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">get_plaintext</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></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="se">\1</span><span class="s2">"</span><span class="p">)</span> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></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="se">\2</span><span class="s2">"</span><span class="p">)</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a> </span><span id="L-187"><a href="#L-187"><span class="linenos" data-line="187"></span></a> <span class="c1">-- Remove strip markers and HTML tags.</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">unstrip</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"<[^<></span><span class="se">\1\2</span><span class="s2">]+>"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> <span class="c1">-- Parse internal links for the display text, and remove categories.</span> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:links"</span><span class="p">).</span><span class="n">remove_links</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a> <span class="c1">-- Remove files.</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">falsePositive</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">({</span><span class="s2">"File"</span><span class="p">,</span> <span class="s2">"Image"</span><span class="p">})</span> <span class="kr">do</span> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"</span><span class="se">\1</span><span class="s2">"</span> <span class="o">..</span> <span class="n">falsePositive</span> <span class="o">..</span> <span class="s2">":[^</span><span class="se">\1\2</span><span class="s2">]+</span><span class="se">\2</span><span class="s2">"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="kr">end</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="c1">-- Parse external links for the display text.</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"%[(https?://[^%[%]]+)%]"</span><span class="p">,</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></span></a> <span class="kr">function</span><span class="p">(</span><span class="n">capture</span><span class="p">)</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> <span class="kr">return</span> <span class="n">capture</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"https?://[^%s%]]+%s([^%]]+)"</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> <span class="kr">end</span><span class="p">)</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"</span><span class="se">\1</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"[["</span><span class="p">)</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"</span><span class="se">\2</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"]]"</span><span class="p">)</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a> <span class="c1">-- Any remaining square brackets aren't involved in links, but must be escaped to avoid creating new links.</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"[%[%]]"</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">nowiki</span><span class="p">)</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="c1">-- Strip bold, italics and soft hyphens.</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></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">"%1%2"</span><span class="p">)</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></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">"%1%2"</span><span class="p">)</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></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-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a> <span class="c1">-- Get any HTML entities.</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="c1">-- Note: don't decode URL percent encoding, as it shouldn't be used in display text and may cause problems if % is used.</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">export</span><span class="p">.</span><span class="n">get_entities</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a> <span class="kr">return</span> <span class="n">trim</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a><span class="kr">end</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">plain_gsub</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">replacement</span><span class="p">)</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> <span class="kd">local</span> <span class="n">invoked</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> <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><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a> <span class="n">invoked</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a> <span class="kr">if</span> <span class="n">text</span><span class="p">.</span><span class="n">args</span> <span class="kr">then</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a> <span class="kd">local</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">text</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a> <span class="kd">local</span> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a> <span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="n">allow_empty</span> <span class="o">=</span> <span class="kc">true</span> <span class="p">},</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> <span class="p">}</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:parameters"</span><span class="p">).</span><span class="n">process</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">params</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="s2">"utilities"</span><span class="p">,</span> <span class="s2">"plain_gsub"</span><span class="p">)</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a> <span class="n">replacement</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">3</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">else</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"If the first argument to plain_gsub is a table, it should be a frame object."</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">end</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="kr">else</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="p">(</span> <span class="nb">type</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">or</span> <span class="nb">type</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The second argument to plain_gsub should be a string or a number."</span><span class="p">)</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> <span class="kr">end</span> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="p">(</span> <span class="nb">type</span><span class="p">(</span><span class="n">replacement</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">or</span> <span class="nb">type</span><span class="p">(</span><span class="n">replacement</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The third argument to plain_gsub should be a string or a number."</span><span class="p">)</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> <span class="kr">end</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> <span class="kr">end</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">export</span><span class="p">.</span><span class="n">pattern_escape</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a> <span class="kd">local</span> <span class="n">gsub</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:string utilities"</span><span class="p">).</span><span class="n">gsub</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a> <span class="kr">if</span> <span class="n">invoked</span> <span class="kr">then</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">gsub</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">replacement</span><span class="p">))</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a> <span class="kr">else</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> <span class="kr">return</span> <span class="n">gsub</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">replacement</span><span class="p">)</span> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a> <span class="kr">end</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a><span class="kr">end</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a><span class="cm">--[[</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a><span class="cm">Format the categories with the appropriate sort key. CATEGORIES is a list of</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a><span class="cm">categories.</span> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a><span class="cm"> -- LANG is an object encapsulating a language; if nil, the object for</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a><span class="cm"> language code 'und' (undetermined) will be used.</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a><span class="cm"> -- SORT_KEY is placed in the category invocation, and indicates how the</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a><span class="cm"> page will sort in the respective category. Normally this should be nil,</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a><span class="cm"> and a default sort key based on the subpage name (the part after the</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a><span class="cm"> colon) will be used.</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a><span class="cm"> -- SORT_BASE lets you override the default sort key used when SORT_KEY is</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a><span class="cm"> nil. Normally, this should be nil, and a language-specific default sort</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a><span class="cm"> key is computed from the subpage name (e.g. for Russian this converts</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a><span class="cm"> Cyrillic ё to a string consisting of Cyrillic е followed by U+10FFFF,</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a><span class="cm"> so that effectively ё sorts after е instead of the default Wikimedia</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a><span class="cm"> sort, which (I think) is based on Unicode sort order and puts ё after я,</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a><span class="cm"> the last letter of the Cyrillic alphabet.</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a><span class="cm"> -- FORCE_OUTPUT forces normal output in all namespaces. Normally, nothing</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a><span class="cm"> is output if the page isn't in the main, Appendix:, Reconstruction: or</span> </span><span id="L-286"><a href="#L-286"><span class="linenos" data-line="286"></span></a><span class="cm"> Citations: namespaces.</span> </span><span id="L-287"><a href="#L-287"><span class="linenos" data-line="287"></span></a><span class="cm"> -- SC is a script object; if nil, the default will be used from the sort</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a><span class="cm"> base.</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a><span class="cm">]]</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">format_categories</span><span class="p">(</span><span class="n">categories</span><span class="p">,</span> <span class="n">lang</span><span class="p">,</span> <span class="n">sort_key</span><span class="p">,</span> <span class="n">sort_base</span><span class="p">,</span> <span class="n">force_output</span><span class="p">,</span> <span class="n">sc</span><span class="p">)</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">lang</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">lang</span><span class="p">.</span><span class="n">getCode</span> <span class="kr">then</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The second argument to format_categories should be a language object."</span><span class="p">)</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="kr">end</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> </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">title_obj</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">getCurrentTitle</span><span class="p">()</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="kd">local</span> <span class="n">allowedNamespaces</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="p">[</span><span class="mi">100</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="p">[</span><span class="mi">110</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="p">[</span><span class="mi">114</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> <span class="p">[</span><span class="mi">118</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span> <span class="c1">-- (main), Appendix, Thesaurus, Citations, Reconstruction</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> <span class="p">}</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="kr">if</span> <span class="n">force_output</span> <span class="ow">or</span> <span class="n">allowedNamespaces</span><span class="p">[</span><span class="n">title_obj</span><span class="p">.</span><span class="n">namespace</span><span class="p">]</span> <span class="ow">or</span> <span class="n">title_obj</span><span class="p">.</span><span class="n">prefixedText</span> <span class="o">==</span> <span class="s2">"Wiktionary:Sandbox"</span> <span class="kr">then</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="kd">local</span> <span class="n">headword_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="s2">"Module:headword/data"</span><span class="p">)</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="kd">local</span> <span class="n">pagename</span> <span class="o">=</span> <span class="n">headword_data</span><span class="p">.</span><span class="n">pagename</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="kd">local</span> <span class="n">pagename_defaultsort</span> <span class="o">=</span> <span class="n">headword_data</span><span class="p">.</span><span class="n">pagename_defaultsort</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a> <span class="c1">-- Generate a default sort key.</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a> <span class="kr">if</span> <span class="n">sort_key</span> <span class="o">~=</span> <span class="s2">"-"</span> <span class="kr">then</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">lang</span> <span class="kr">then</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> <span class="n">lang</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:languages"</span><span class="p">).</span><span class="n">getByCode</span><span class="p">(</span><span class="s2">"und"</span><span class="p">)</span> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a> <span class="kr">end</span> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a> <span class="n">sort_base</span> <span class="o">=</span> <span class="n">lang</span><span class="p">:</span><span class="n">makeSortKey</span><span class="p">(</span><span class="n">sort_base</span> <span class="ow">or</span> <span class="n">pagename</span><span class="p">,</span> <span class="n">sc</span><span class="p">)</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="kr">if</span> <span class="n">sort_key</span> <span class="ow">and</span> <span class="n">sort_key</span> <span class="o">~=</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> <span class="kr">if</span> <span class="n">lang</span><span class="p">:</span><span class="n">getCode</span><span class="p">()</span> <span class="o">~=</span> <span class="s2">"und"</span> <span class="kr">then</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">sort_key</span><span class="p">:</span><span class="n">uupper</span><span class="p">()</span> <span class="o">==</span> <span class="n">sort_base</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="nb">table.insert</span><span class="p">(</span><span class="n">categories</span><span class="p">,</span> <span class="n">lang</span><span class="p">:</span><span class="n">getNonEtymologicalName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" terms with redundant sortkeys"</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">else</span> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">categories</span><span class="p">,</span> <span class="n">lang</span><span class="p">:</span><span class="n">getNonEtymologicalName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" terms with non-redundant non-automated sortkeys"</span><span class="p">)</span> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a> <span class="kr">end</span> </span><span id="L-318"><a href="#L-318"><span class="linenos" data-line="318"></span></a> <span class="kr">end</span> </span><span id="L-319"><a href="#L-319"><span class="linenos" data-line="319"></span></a> <span class="kr">else</span> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a> <span class="n">sort_key</span> <span class="o">=</span> <span class="n">sort_base</span> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> <span class="kr">end</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a> <span class="c1">-- If the sort key is empty, remove it.</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a> <span class="kr">if</span> <span class="n">sort_key</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a> <span class="n">sort_key</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a> <span class="kr">end</span> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a> <span class="c1">-- If the sort key is "-", bypass the process of generating a sort key altogether. This is desirable when categorising (e.g.) translation requests, as the pages to be categorised are always in English/Translingual.</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a> <span class="kr">else</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> <span class="n">sort_key</span> <span class="o">=</span> <span class="n">sort_base</span> <span class="ow">and</span> <span class="n">sort_base</span><span class="p">:</span><span class="n">uupper</span><span class="p">()</span> <span class="ow">or</span> <span class="n">pagename_defaultsort</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a> <span class="kr">end</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a> <span class="kd">local</span> <span class="n">out_categories</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> <span class="kr">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">cat</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">categories</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> <span class="n">out_categories</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"[[Category:"</span> <span class="o">..</span> <span class="n">cat</span> <span class="o">..</span> <span class="p">(</span><span class="n">sort_key</span> <span class="ow">and</span> <span class="s2">"|"</span> <span class="o">..</span> <span class="n">sort_key</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">)</span> <span class="o">..</span> <span class="s2">"]]"</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> <span class="kr">end</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="kr">return</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">out_categories</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="kr">else</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> <span class="kr">return</span> <span class="s2">""</span> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="kr">end</span> </span><span id="L-340"><a href="#L-340"><span class="linenos" data-line="340"></span></a><span class="kr">end</span> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">catfix</span><span class="p">(</span><span class="n">lang</span><span class="p">,</span> <span class="n">sc</span><span class="p">)</span> </span><span id="L-343"><a href="#L-343"><span class="linenos" data-line="343"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">lang</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">lang</span><span class="p">.</span><span class="n">getCanonicalName</span> <span class="kr">then</span> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s1">'The first argument to the function "catfix" should be a language object from [[Module:languages]] or [[Module:etymology languages]].'</span><span class="p">)</span> </span><span id="L-345"><a href="#L-345"><span class="linenos" data-line="345"></span></a> <span class="kr">end</span> </span><span id="L-346"><a href="#L-346"><span class="linenos" data-line="346"></span></a> <span class="kr">if</span> <span class="n">sc</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">sc</span><span class="p">.</span><span class="n">getCode</span> <span class="kr">then</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s1">'The second argument to the function "catfix" should be a script object from [[Module:scripts]].'</span><span class="p">)</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a> <span class="kr">end</span> </span><span id="L-349"><a href="#L-349"><span class="linenos" data-line="349"></span></a> <span class="kd">local</span> <span class="n">canonicalName</span> <span class="o">=</span> <span class="n">lang</span><span class="p">:</span><span class="n">getCanonicalName</span><span class="p">()</span> </span><span id="L-350"><a href="#L-350"><span class="linenos" data-line="350"></span></a> <span class="kd">local</span> <span class="n">nonEtymologicalName</span> <span class="o">=</span> <span class="n">lang</span><span class="p">:</span><span class="n">getNonEtymologicalName</span><span class="p">()</span> </span><span id="L-351"><a href="#L-351"><span class="linenos" data-line="351"></span></a> </span><span id="L-352"><a href="#L-352"><span class="linenos" data-line="352"></span></a> <span class="c1">-- To add script classes to links on pages created by category boilerplate templates.</span> </span><span id="L-353"><a href="#L-353"><span class="linenos" data-line="353"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">sc</span> <span class="kr">then</span> </span><span id="L-354"><a href="#L-354"><span class="linenos" data-line="354"></span></a> <span class="n">sc</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">catfix_scripts</span><span class="p">[</span><span class="n">lang</span><span class="p">:</span><span class="n">getCode</span><span class="p">()]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">catfix_scripts</span><span class="p">[</span><span class="n">lang</span><span class="p">:</span><span class="n">getNonEtymologicalCode</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">sc</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">sc</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:scripts"</span><span class="p">).</span><span class="n">getByCode</span><span class="p">(</span><span class="n">sc</span><span class="p">)</span> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a> <span class="kr">end</span> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> <span class="kr">end</span> </span><span id="L-359"><a href="#L-359"><span class="linenos" data-line="359"></span></a> </span><span id="L-360"><a href="#L-360"><span class="linenos" data-line="360"></span></a> <span class="kd">local</span> <span class="n">catfix_class</span> <span class="o">=</span> <span class="s2">"CATFIX-"</span> <span class="o">..</span> <span class="n">mw</span><span class="p">.</span><span class="n">uri</span><span class="p">.</span><span class="n">anchorEncode</span><span class="p">(</span><span class="n">canonicalName</span><span class="p">)</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a> <span class="kr">if</span> <span class="n">nonEtymologicalName</span> <span class="o">~=</span> <span class="n">canonicalName</span> <span class="kr">then</span> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> <span class="n">catfix_class</span> <span class="o">=</span> <span class="n">catfix_class</span> <span class="o">..</span> <span class="s2">" CATFIX-"</span> <span class="o">..</span> <span class="n">mw</span><span class="p">.</span><span class="n">uri</span><span class="p">.</span><span class="n">anchorEncode</span><span class="p">(</span><span class="n">nonEtymologicalName</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">end</span> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> <span class="kr">return</span> <span class="s2">"<span id=</span><span class="se">\"</span><span class="s2">catfix</span><span class="se">\"</span><span class="s2"> style=</span><span class="se">\"</span><span class="s2">display:none;</span><span class="se">\"</span><span class="s2"> class=</span><span class="se">\"</span><span class="s2">"</span> <span class="o">..</span> <span class="n">catfix_class</span> <span class="o">..</span> <span class="s2">"</span><span class="se">\"</span><span class="s2">>"</span> <span class="o">..</span> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:script utilities"</span><span class="p">).</span><span class="n">tag_text</span><span class="p">(</span><span class="s2">"&nbsp;"</span><span class="p">,</span> <span class="n">lang</span><span class="p">,</span> <span class="n">sc</span><span class="p">,</span> <span class="kc">nil</span><span class="p">)</span> <span class="o">..</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> <span class="s2">"</span>"</span> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a><span class="kr">end</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">catfix_template</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a> <span class="kd">local</span> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="n">alias_of</span> <span class="o">=</span> <span class="s2">"sc"</span> <span class="p">},</span> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a> <span class="p">[</span><span class="s2">"sc"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span> </span><span id="L-374"><a href="#L-374"><span class="linenos" data-line="374"></span></a> <span class="p">}</span> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></span></a> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:parameters"</span><span class="p">).</span><span class="n">process</span><span class="p">(</span><span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="s2">"utilities"</span><span class="p">,</span> <span class="s2">"catfix_template"</span><span class="p">)</span> </span><span id="L-377"><a href="#L-377"><span class="linenos" data-line="377"></span></a> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a> <span class="kd">local</span> <span class="n">lang</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:languages"</span><span class="p">).</span><span class="n">getByCode</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="mi">1</span><span class="p">,</span> <span class="s2">"allow etym"</span><span class="p">)</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a> <span class="kd">local</span> <span class="n">sc</span> <span class="o">=</span> <span class="n">args</span><span class="p">.</span><span class="n">sc</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">sc</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="n">sc</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:scripts"</span><span class="p">).</span><span class="n">getByCode</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span> <span class="s2">"sc"</span><span class="p">)</span> </span><span id="L-383"><a href="#L-383"><span class="linenos" data-line="383"></span></a> <span class="kr">end</span> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a> <span class="kr">return</span> <span class="n">export</span><span class="p">.</span><span class="n">catfix</span><span class="p">(</span><span class="n">lang</span><span class="p">,</span> <span class="n">sc</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">end</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">make_id</span><span class="p">(</span><span class="n">lang</span><span class="p">,</span> <span class="n">str</span><span class="p">)</span> </span><span id="L-389"><a href="#L-389"><span class="linenos" data-line="389"></span></a> <span class="cm">--[[ If called with invoke, first argument is a frame object.</span> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a><span class="cm"> If called by a module, first argument is a language object. ]]</span> </span><span id="L-391"><a href="#L-391"><span class="linenos" data-line="391"></span></a> <span class="kd">local</span> <span class="n">invoked</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-392"><a href="#L-392"><span class="linenos" data-line="392"></span></a> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">lang</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-394"><a href="#L-394"><span class="linenos" data-line="394"></span></a> <span class="kr">if</span> <span class="n">lang</span><span class="p">.</span><span class="n">args</span> <span class="kr">then</span> </span><span id="L-395"><a href="#L-395"><span class="linenos" data-line="395"></span></a> <span class="n">invoked</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-396"><a href="#L-396"><span class="linenos" data-line="396"></span></a> </span><span id="L-397"><a href="#L-397"><span class="linenos" data-line="397"></span></a> <span class="kd">local</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">lang</span> </span><span id="L-398"><a href="#L-398"><span class="linenos" data-line="398"></span></a> </span><span id="L-399"><a href="#L-399"><span class="linenos" data-line="399"></span></a> <span class="kd">local</span> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-400"><a href="#L-400"><span class="linenos" data-line="400"></span></a> <span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span> </span><span id="L-401"><a href="#L-401"><span class="linenos" data-line="401"></span></a> <span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span> </span><span id="L-402"><a href="#L-402"><span class="linenos" data-line="402"></span></a> <span class="p">}</span> </span><span id="L-403"><a href="#L-403"><span class="linenos" data-line="403"></span></a> </span><span id="L-404"><a href="#L-404"><span class="linenos" data-line="404"></span></a> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:parameters"</span><span class="p">).</span><span class="n">process</span><span class="p">(</span><span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="s2">"utilities"</span><span class="p">,</span> <span class="s2">"make_id"</span><span class="p">)</span> </span><span id="L-405"><a href="#L-405"><span class="linenos" data-line="405"></span></a> </span><span id="L-406"><a href="#L-406"><span class="linenos" data-line="406"></span></a> <span class="kd">local</span> <span class="n">langCode</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-407"><a href="#L-407"><span class="linenos" data-line="407"></span></a> <span class="n">str</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> </span><span id="L-408"><a href="#L-408"><span class="linenos" data-line="408"></span></a> </span><span id="L-409"><a href="#L-409"><span class="linenos" data-line="409"></span></a> <span class="kd">local</span> <span class="n">m_languages</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:languages"</span><span class="p">)</span> </span><span id="L-410"><a href="#L-410"><span class="linenos" data-line="410"></span></a> <span class="n">lang</span> <span class="o">=</span> <span class="n">m_languages</span><span class="p">.</span><span class="n">getByCode</span><span class="p">(</span><span class="n">langCode</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">"allow etym"</span><span class="p">)</span> </span><span id="L-411"><a href="#L-411"><span class="linenos" data-line="411"></span></a> <span class="kr">elseif</span> <span class="ow">not</span> <span class="n">lang</span><span class="p">.</span><span class="n">getCanonicalName</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="nb">error</span><span class="p">(</span><span class="s2">"The first argument to make_id should be a language object."</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">end</span> </span><span id="L-414"><a href="#L-414"><span class="linenos" data-line="414"></span></a> <span class="kr">end</span> </span><span id="L-415"><a href="#L-415"><span class="linenos" data-line="415"></span></a> </span><span id="L-416"><a href="#L-416"><span class="linenos" data-line="416"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="p">(</span> <span class="nb">type</span><span class="p">(</span><span class="n">str</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">or</span> <span class="nb">type</span><span class="p">(</span><span class="n">str</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-417"><a href="#L-417"><span class="linenos" data-line="417"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The second argument to make_id should be a string or a number."</span><span class="p">)</span> </span><span id="L-418"><a href="#L-418"><span class="linenos" data-line="418"></span></a> <span class="kr">end</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 class="kd">local</span> <span class="n">id</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:senseid"</span><span class="p">).</span><span class="n">anchor</span><span class="p">(</span><span class="n">lang</span><span class="p">,</span> <span class="n">str</span><span class="p">)</span> </span><span id="L-421"><a href="#L-421"><span class="linenos" data-line="421"></span></a> </span><span id="L-422"><a href="#L-422"><span class="linenos" data-line="422"></span></a> <span class="kr">if</span> <span class="n">invoked</span> <span class="kr">then</span> </span><span id="L-423"><a href="#L-423"><span class="linenos" data-line="423"></span></a> <span class="kr">return</span> <span class="s1">'<li class="senseid" id="'</span> <span class="o">..</span> <span class="n">id</span> <span class="o">..</span> <span class="s1">'">'</span> </span><span id="L-424"><a href="#L-424"><span class="linenos" data-line="424"></span></a> <span class="kr">else</span> </span><span id="L-425"><a href="#L-425"><span class="linenos" data-line="425"></span></a> <span class="kr">return</span> <span class="n">id</span> </span><span id="L-426"><a href="#L-426"><span class="linenos" data-line="426"></span></a> <span class="kr">end</span> </span><span id="L-427"><a href="#L-427"><span class="linenos" data-line="427"></span></a><span class="kr">end</span> </span><span id="L-428"><a href="#L-428"><span class="linenos" data-line="428"></span></a> </span><span id="L-429"><a href="#L-429"><span class="linenos" data-line="429"></span></a><span class="c1">-- Given a type (as a string) and an arbitrary number of entities, checks whether all of those entities are language, family, script, writing system or Wikimedia language objects. Useful for error handling in functions that require one of these kinds of object.</span> </span><span id="L-430"><a href="#L-430"><span class="linenos" data-line="430"></span></a><span class="c1">-- If noErr is set, the function returns false instead of throwing an error, which allows customised error handling to be done in the calling function.</span> </span><span id="L-431"><a href="#L-431"><span class="linenos" data-line="431"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">check_object</span><span class="p">(</span><span class="n">typ</span><span class="p">,</span> <span class="n">noErr</span><span class="p">,</span> <span class="p">...)</span> </span><span id="L-432"><a href="#L-432"><span class="linenos" data-line="432"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">fail</span><span class="p">(</span><span class="n">message</span><span class="p">)</span> </span><span id="L-433"><a href="#L-433"><span class="linenos" data-line="433"></span></a> <span class="kr">if</span> <span class="n">noErr</span> <span class="kr">then</span> </span><span id="L-434"><a href="#L-434"><span class="linenos" data-line="434"></span></a> <span class="kr">return</span> <span class="kc">false</span> </span><span id="L-435"><a href="#L-435"><span class="linenos" data-line="435"></span></a> <span class="kr">else</span> </span><span id="L-436"><a href="#L-436"><span class="linenos" data-line="436"></span></a> <span class="nb">error</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="mi">3</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">end</span> </span><span id="L-438"><a href="#L-438"><span class="linenos" data-line="438"></span></a> <span class="kr">end</span> </span><span id="L-439"><a href="#L-439"><span class="linenos" data-line="439"></span></a> </span><span id="L-440"><a href="#L-440"><span class="linenos" data-line="440"></span></a> <span class="kd">local</span> <span class="n">objs</span> <span class="o">=</span> <span class="p">{...}</span> </span><span id="L-441"><a href="#L-441"><span class="linenos" data-line="441"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">objs</span> <span class="o">==</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-442"><a href="#L-442"><span class="linenos" data-line="442"></span></a> <span class="kr">return</span> <span class="n">fail</span><span class="p">(</span><span class="s2">"Must provide at least one object to check."</span><span class="p">)</span> </span><span id="L-443"><a href="#L-443"><span class="linenos" data-line="443"></span></a> <span class="kr">end</span> </span><span id="L-444"><a href="#L-444"><span class="linenos" data-line="444"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">obj</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">{...}</span> <span class="kr">do</span> </span><span id="L-445"><a href="#L-445"><span class="linenos" data-line="445"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="ow">or</span> <span class="nb">type</span><span class="p">(</span><span class="n">obj</span><span class="p">.</span><span class="n">hasType</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"function"</span> <span class="kr">then</span> </span><span id="L-446"><a href="#L-446"><span class="linenos" data-line="446"></span></a> <span class="kr">return</span> <span class="n">fail</span><span class="p">(</span><span class="s2">"Function expected a "</span> <span class="o">..</span> <span class="n">typ</span> <span class="o">..</span> <span class="s2">" object, but received a "</span> <span class="o">..</span> <span class="nb">type</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">..</span> <span class="s2">" instead."</span><span class="p">)</span> </span><span id="L-447"><a href="#L-447"><span class="linenos" data-line="447"></span></a> <span class="kr">elseif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">typ</span> <span class="o">==</span> <span class="s2">"object"</span> <span class="ow">or</span> <span class="n">obj</span><span class="p">:</span><span class="n">hasType</span><span class="p">(</span><span class="n">typ</span><span class="p">))</span> <span class="kr">then</span> </span><span id="L-448"><a href="#L-448"><span class="linenos" data-line="448"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">wrong_type</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">{</span><span class="s2">"family"</span><span class="p">,</span> <span class="s2">"language"</span><span class="p">,</span> <span class="s2">"script"</span><span class="p">,</span> <span class="s2">"Wikimedia language"</span><span class="p">,</span> <span class="s2">"writing system"</span><span class="p">}</span> <span class="kr">do</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="n">obj</span><span class="p">:</span><span class="n">hasType</span><span class="p">(</span><span class="n">wrong_type</span><span class="p">)</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="kr">return</span> <span class="n">fail</span><span class="p">(</span><span class="s2">"Function expected a "</span> <span class="o">..</span> <span class="n">typ</span> <span class="o">..</span> <span class="s2">" object, but received a "</span> <span class="o">..</span> <span class="n">wrong_type</span> <span class="o">..</span> <span class="s2">" object instead."</span><span class="p">)</span> </span><span id="L-451"><a href="#L-451"><span class="linenos" data-line="451"></span></a> <span class="kr">end</span> </span><span id="L-452"><a href="#L-452"><span class="linenos" data-line="452"></span></a> <span class="kr">end</span> </span><span id="L-453"><a href="#L-453"><span class="linenos" data-line="453"></span></a> <span class="kr">return</span> <span class="n">fail</span><span class="p">(</span><span class="s2">"Function expected a "</span> <span class="o">..</span> <span class="n">typ</span> <span class="o">..</span> <span class="s2">" object, but received another type of object instead."</span><span class="p">)</span> </span><span id="L-454"><a href="#L-454"><span class="linenos" data-line="454"></span></a> <span class="kr">end</span> </span><span id="L-455"><a href="#L-455"><span class="linenos" data-line="455"></span></a> <span class="kr">end</span> </span><span id="L-456"><a href="#L-456"><span class="linenos" data-line="456"></span></a> <span class="kr">return</span> <span class="kc">true</span> </span><span id="L-457"><a href="#L-457"><span class="linenos" data-line="457"></span></a><span class="kr">end</span> </span><span id="L-458"><a href="#L-458"><span class="linenos" data-line="458"></span></a> </span><span id="L-459"><a href="#L-459"><span class="linenos" data-line="459"></span></a><span class="kr">return</span> <span class="n">export</span> </span></pre></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐lsb4r Cached time: 20241125014003 Cache expiry: 2592000 Reduced expiry: false Complications: [] CPU time usage: 0.002 seconds Real time usage: 0.002 seconds Preprocessor visited node count: 1/1000000 Post‐expand include size: 0/2097152 bytes Template argument size: 0/2097152 bytes Highest expansion depth: 1/100 Expensive parser function count: 0/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 0/5000000 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 0.000 1 -total --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">由「<a dir="ltr" href="https://yue.wiktionary.org/w/index.php?title=模組:utilities&oldid=26659">https://yue.wiktionary.org/w/index.php?title=模組:utilities&oldid=26659</a>」收</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> 呢一頁嘅最後修改係響2024年3月3號 (禮拜日) 00:45。</li> <li id="footer-info-copyright">全部文字根據<a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-ShareAlike 牌照</a>嘅條款發佈; 可能會有附加嘅條款。 睇下<a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">使用條款</a>嘅細節。</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">私隱政策</a></li> <li id="footer-places-about"><a href="/wiki/%E7%B6%AD%E5%9F%BA%E8%BE%AD%E5%85%B8:%E9%97%9C%E6%96%BC">關於維基辭典</a></li> <li id="footer-places-disclaimers"><a href="/wiki/%E7%B6%AD%E5%9F%BA%E8%BE%AD%E5%85%B8:%E4%B8%80%E8%88%AC%E5%85%8D%E8%B2%AC%E8%81%B2%E6%98%8E">免責聲明</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">行為準則</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">開發人員</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/yue.wiktionary.org">統計</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie聲明</a></li> <li id="footer-places-mobileview"><a href="//yue.m.wiktionary.org/w/index.php?title=%E6%A8%A1%E7%B5%84:utilities&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">流動版</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-lsb4r","wgBackendResponseTime":341,"wgPageParseReport":{"limitreport":{"cputime":"0.002","walltime":"0.002","ppvisitednodes":{"value":1,"limit":1000000},"postexpandincludesize":{"value":0,"limit":2097152},"templateargumentsize":{"value":0,"limit":2097152},"expansiondepth":{"value":1,"limit":100},"expensivefunctioncount":{"value":0,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":0,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 0.000 1 -total"]},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-lsb4r","timestamp":"20241125014003","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>