CINXE.COM
Module:links - Wiktionary, the free dictionary
<!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-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Module:links - Wiktionary, the free dictionary</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-available";var cookie=document.cookie.match(/(?:^|; )enwiktionarymwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat" :"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"bcb9db17-b7f4-44b3-a486-1b6c4d3a9f40","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Module:links","wgTitle":"links","wgCurRevisionId":82311458,"wgRevisionId":82311458,"wgArticleId":3935515,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Templates and modules needing documentation","Internal link modules"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Module:links","wgRelevantArticleId":3935515,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":["templateeditor"],"wgRestrictionMove":["templateeditor"],"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":50000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q30564329","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"]};RLSTATE={"ext.gadget.LanguagesAndScripts":"ready","ext.gadget.Palette":"ready","ext.gadget.Site":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready", "skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.LegacyScripts","ext.gadget.DocTabs","ext.gadget.RevdelInfo","ext.gadget.PagePreviews","ext.gadget.Edittools","ext.gadget.defaultVisibilityToggles","ext.gadget.UnsupportedTitles","ext.gadget.WiktGadgetPrefs","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=en&modules=ext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.gadget.LanguagesAndScripts%2CPalette%2CSite&only=styles&skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:site_name" content="Wiktionary"> <meta property="og:title" content="Module:links - Wiktionary, the free dictionary"> <meta property="og:type" content="website"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wiktionary.org/wiki/Module:links"> <link rel="apple-touch-icon" href="/static/apple-touch/wiktionary/en.png"> <link rel="icon" href="/static/favicon/wiktionary/en.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wiktionary (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wiktionary.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wiktionary.org/wiki/Module:links"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wiktionary Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject page-Module_links rootpage-Module_links skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-text" class="mw-list-item"><a href="/wiki/Wiktionary:Main_Page"><span>Main Page</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wiktionary:Community_portal" title="About the project, what you can do, where to find things"><span>Community portal</span></a></li><li id="n-requestedarticles" class="mw-list-item"><a href="/wiki/Wiktionary:Requested_entries"><span>Requested entries</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Load a random page [x]" accesskey="x"><span>Random entry</span></a></li><li id="n-help" class="mw-list-item"><a href="https://en.wiktionary.org/wiki/Help:Contents" title="The place to find out"><span>Help</span></a></li><li id="n-Glossary" class="mw-list-item"><a href="/wiki/Appendix:Glossary"><span>Glossary</span></a></li><li id="n-contact" class="mw-list-item"><a href="/wiki/Wiktionary:Contact_us"><span>Contact us</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Wiktionary:Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/enwiktionary.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wiktionary" src="/static/images/mobile/copyright/wiktionary-wordmark-en.svg" style="width: 6.6875em; height: 1.1875em;"> <img class="mw-logo-tagline" alt="The Free Dictionary" src="/static/images/mobile/copyright/wiktionary-tagline-en.svg" width="110" height="15" style="width: 6.875em; height: 0.9375em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wiktionary [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wiktionary" aria-label="Search Wiktionary" autocapitalize="none" title="Search Wiktionary [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wiktionary.org&uselang=en" class=""><span>Donations</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Module%3Alinks" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Module%3Alinks" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="More options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wiktionary.org&uselang=en"><span>Donations</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Module%3Alinks" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Module%3Alinks" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Beginning</div> </a> </li> <li id="toc-Functions" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Functions"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Functions</span> </div> </a> <button aria-controls="toc-Functions-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Functions subsection</span> </button> <ul id="toc-Functions-sublist" class="vector-toc-list"> <li id="toc-export.split_on_slashes" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.split_on_slashes"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>export.split_on_slashes</span> </div> </a> <ul id="toc-export.split_on_slashes-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.get_fragment" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.get_fragment"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2</span> <span>export.get_fragment</span> </div> </a> <ul id="toc-export.get_fragment-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.get_link_page" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.get_link_page"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.3</span> <span>export.get_link_page</span> </div> </a> <ul id="toc-export.get_link_page-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.language_link" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.language_link"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.4</span> <span>export.language_link</span> </div> </a> <ul id="toc-export.language_link-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.plain_link" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.plain_link"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.5</span> <span>export.plain_link</span> </div> </a> <ul id="toc-export.plain_link-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.embedded_language_links" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.embedded_language_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.6</span> <span>export.embedded_language_links</span> </div> </a> <ul id="toc-export.embedded_language_links-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.mark" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.mark"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.7</span> <span>export.mark</span> </div> </a> <ul id="toc-export.mark-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.format_link_annotations" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.format_link_annotations"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.8</span> <span>export.format_link_annotations</span> </div> </a> <ul id="toc-export.format_link_annotations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.full_link" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.full_link"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.9</span> <span>export.full_link</span> </div> </a> <ul id="toc-export.full_link-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.remove_links" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.remove_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.10</span> <span>export.remove_links</span> </div> </a> <ul id="toc-export.remove_links-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-export.section_link" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#export.section_link"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.11</span> <span>export.section_link</span> </div> </a> <ul id="toc-export.section_link-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Changes" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Changes"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Changes</span> </div> </a> <ul id="toc-Changes-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Contents_of_data_module" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Contents_of_data_module"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Contents of data module</span> </div> </a> <ul id="toc-Contents_of_data_module-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">Module</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">links</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 55 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-55" 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">55 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-af mw-list-item"><a href="https://af.wiktionary.org/wiki/Module:links" title="Module:links – Afrikaans" lang="af" hreflang="af" data-title="Module:links" data-language-autonym="Afrikaans" data-language-local-name="Afrikaans" 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:links" title="Module:links – Old English" lang="ang" hreflang="ang" data-title="Module:links" data-language-autonym="Ænglisc" data-language-local-name="Old English" 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:links" title="وحدة:links – Arabic" lang="ar" hreflang="ar" data-title="وحدة:links" data-language-autonym="العربية" data-language-local-name="Arabic" 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:links" title="Modul:links – Azerbaijani" lang="az" hreflang="az" data-title="Modul:links" data-language-autonym="Azərbaycanca" data-language-local-name="Azerbaijani" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-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:links" title="মডিউল:links – Bangla" lang="bn" hreflang="bn" data-title="মডিউল:links" data-language-autonym="বাংলা" data-language-local-name="Bangla" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-bjn mw-list-item"><a href="https://bjn.wiktionary.org/wiki/Modul:links" title="Modul:links – Banjar" lang="bjn" hreflang="bjn" data-title="Modul:links" data-language-autonym="Banjar" data-language-local-name="Banjar" class="interlanguage-link-target"><span>Banjar</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wiktionary.org/wiki/%E6%A8%A1%E7%B5%84:links" title="模組:links – Minnan" lang="nan" hreflang="nan" data-title="模組:links" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="Minnan" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wiktionary.org/wiki/M%C3%B2dul:enlla%C3%A7" title="Mòdul:enllaç – Catalan" lang="ca" hreflang="ca" data-title="Mòdul:enllaç" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</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:links" title="މޮޑިއުލް:links – Divehi" lang="dv" hreflang="dv" data-title="މޮޑިއުލް:links" data-language-autonym="ދިވެހިބަސް" data-language-local-name="Divehi" class="interlanguage-link-target"><span>ދިވެހިބަސް</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wiktionary.org/wiki/Moodul:links" title="Moodul:links – Estonian" lang="et" hreflang="et" data-title="Moodul:links" data-language-autonym="Eesti" data-language-local-name="Estonian" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wiktionary.org/wiki/Modulu:links" title="Modulu:links – Basque" lang="eu" hreflang="eu" data-title="Modulu:links" data-language-autonym="Euskara" data-language-local-name="Basque" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wiktionary.org/wiki/%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:links" title="پودمان:links – Persian" lang="fa" hreflang="fa" data-title="پودمان:links" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fy mw-list-item"><a href="https://fy.wiktionary.org/wiki/Module:links" title="Module:links – Western Frisian" lang="fy" hreflang="fy" data-title="Module:links" data-language-autonym="Frysk" data-language-local-name="Western Frisian" class="interlanguage-link-target"><span>Frysk</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:links" title="모듈:links – Korean" lang="ko" hreflang="ko" data-title="모듈:links" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wiktionary.org/wiki/%E0%A4%85%E0%A4%A8%E0%A5%81%E0%A4%96%E0%A4%82%E0%A4%A1:links" title="अनुखंड:links – Hindi" lang="hi" hreflang="hi" data-title="अनुखंड:links" data-language-autonym="हिन्दी" data-language-local-name="Hindi" 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:links" title="Modul:links – Upper Sorbian" lang="hsb" hreflang="hsb" data-title="Modul:links" data-language-autonym="Hornjoserbsce" data-language-local-name="Upper Sorbian" class="interlanguage-link-target"><span>Hornjoserbsce</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wiktionary.org/wiki/Modul:links" title="Modul:links – Indonesian" lang="id" hreflang="id" data-title="Modul:links" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesian" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-jv mw-list-item"><a href="https://jv.wiktionary.org/wiki/Modhul:links" title="Modhul:links – Javanese" lang="jv" hreflang="jv" data-title="Modhul:links" data-language-autonym="Jawa" data-language-local-name="Javanese" class="interlanguage-link-target"><span>Jawa</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:links" title="Модуль:links – Kyrgyz" lang="ky" hreflang="ky" data-title="Модуль:links" data-language-autonym="Кыргызча" data-language-local-name="Kyrgyz" 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:links" title="Module:links – Lao" lang="lo" hreflang="lo" data-title="Module:links" data-language-autonym="ລາວ" data-language-local-name="Lao" class="interlanguage-link-target"><span>ລາວ</span></a></li><li class="interlanguage-link interwiki-jbo mw-list-item"><a href="https://jbo.wiktionary.org/wiki/Module:links" title="Module:links – Lojban" lang="jbo" hreflang="jbo" data-title="Module:links" data-language-autonym="La .lojban." data-language-local-name="Lojban" class="interlanguage-link-target"><span>La .lojban.</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wiktionary.org/wiki/Modul:links" title="Modul:links – Hungarian" lang="hu" hreflang="hu" data-title="Modul:links" data-language-autonym="Magyar" data-language-local-name="Hungarian" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-mg mw-list-item"><a href="https://mg.wiktionary.org/wiki/Module:links" title="Module:links – Malagasy" lang="mg" hreflang="mg" data-title="Module:links" data-language-autonym="Malagasy" data-language-local-name="Malagasy" class="interlanguage-link-target"><span>Malagasy</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:links" title="ഘടകം:links – Malayalam" lang="ml" hreflang="ml" data-title="ഘടകം:links" data-language-autonym="മലയാളം" data-language-local-name="Malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mt mw-list-item"><a href="https://mt.wiktionary.org/wiki/Module:links" title="Module:links – Maltese" lang="mt" hreflang="mt" data-title="Module:links" data-language-autonym="Malti" data-language-local-name="Maltese" class="interlanguage-link-target"><span>Malti</span></a></li><li class="interlanguage-link interwiki-mnw mw-list-item"><a href="https://mnw.wiktionary.org/wiki/%E1%80%99%E1%80%9D%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0:links" title="မဝ်ဂျူ:links – Mon" lang="mnw" hreflang="mnw" data-title="မဝ်ဂျူ:links" 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:links" title="Modul:links – Malay" lang="ms" hreflang="ms" data-title="Modul:links" data-language-autonym="Bahasa Melayu" data-language-local-name="Malay" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-mni mw-list-item"><a href="https://mni.wiktionary.org/wiki/Module:links" title="Module:links – Manipuri" lang="mni" hreflang="mni" data-title="Module:links" data-language-autonym="ꯃꯤꯇꯩ ꯂꯣꯟ" data-language-local-name="Manipuri" class="interlanguage-link-target"><span>ꯃꯤꯇꯩ ꯂꯣꯟ</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wiktionary.org/wiki/Module:links" title="Module:links – Mongolian" lang="mn" hreflang="mn" data-title="Module:links" data-language-autonym="Монгол" data-language-local-name="Mongolian" class="interlanguage-link-target"><span>Монгол</span></a></li><li class="interlanguage-link interwiki-my mw-list-item"><a href="https://my.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:links" title="မော်ဂျူး:links – Burmese" lang="my" hreflang="my" data-title="မော်ဂျူး:links" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="Burmese" class="interlanguage-link-target"><span>မြန်မာဘာသာ</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:links" title="モジュール:links – Japanese" lang="ja" hreflang="ja" data-title="モジュール:links" data-language-autonym="日本語" data-language-local-name="Japanese" 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:links" title="Modul:links – Norwegian Nynorsk" lang="nn" hreflang="nn" data-title="Modul:links" data-language-autonym="Norsk nynorsk" data-language-local-name="Norwegian Nynorsk" class="interlanguage-link-target"><span>Norsk nynorsk</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wiktionary.org/wiki/Modul:links" title="Modul:links – Uzbek" lang="uz" hreflang="uz" data-title="Modul:links" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="Uzbek" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wiktionary.org/wiki/%E0%A8%AE%E0%A9%8C%E0%A8%A1%E0%A8%BF%E0%A8%8A%E0%A8%B2:links" title="ਮੌਡਿਊਲ:links – Punjabi" lang="pa" hreflang="pa" data-title="ਮੌਡਿਊਲ:links" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="Punjabi" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</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:links" title="မော်ဂျူး:links – Pa'O" lang="blk" hreflang="blk" data-title="မော်ဂျူး:links" data-language-autonym="ပအိုဝ်ႏဘာႏသာႏ" data-language-local-name="Pa'O" class="interlanguage-link-target"><span>ပအိုဝ်ႏဘာႏသာႏ</span></a></li><li class="interlanguage-link interwiki-km mw-list-item"><a href="https://km.wiktionary.org/wiki/Module:links" title="Module:links – Khmer" lang="km" hreflang="km" data-title="Module:links" data-language-autonym="ភាសាខ្មែរ" data-language-local-name="Khmer" class="interlanguage-link-target"><span>ភាសាខ្មែរ</span></a></li><li class="interlanguage-link interwiki-tpi mw-list-item"><a href="https://tpi.wiktionary.org/wiki/Module:links" title="Module:links – Tok Pisin" lang="tpi" hreflang="tpi" data-title="Module:links" data-language-autonym="Tok Pisin" data-language-local-name="Tok Pisin" class="interlanguage-link-target"><span>Tok Pisin</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wiktionary.org/wiki/M%C3%B3dulo:links" title="Módulo:links – Portuguese" lang="pt" hreflang="pt" data-title="Módulo:links" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wiktionary.org/wiki/Module:links" title="Module:links – Sinhala" lang="si" hreflang="si" data-title="Module:links" data-language-autonym="සිංහල" data-language-local-name="Sinhala" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wiktionary.org/wiki/Module:links" title="Module:links – Simple English" lang="en-simple" hreflang="en-simple" data-title="Module:links" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sd mw-list-item"><a href="https://sd.wiktionary.org/wiki/%D9%85%D8%A7%DA%8A%D9%8A%D9%88%D9%84:links" title="ماڊيول:links – Sindhi" lang="sd" hreflang="sd" data-title="ماڊيول:links" data-language-autonym="سنڌي" data-language-local-name="Sindhi" class="interlanguage-link-target"><span>سنڌي</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wiktionary.org/wiki/Modul:Odkazy" title="Modul:Odkazy – Slovak" lang="sk" hreflang="sk" data-title="Modul:Odkazy" data-language-autonym="Slovenčina" data-language-local-name="Slovak" class="interlanguage-link-target"><span>Slovenčina</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:links" title="مۆدیوول:links – Central Kurdish" lang="ckb" hreflang="ckb" data-title="مۆدیوول:links" data-language-autonym="کوردی" data-language-local-name="Central Kurdish" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:links" title="Модул:links – Serbian" lang="sr" hreflang="sr" data-title="Модул:links" data-language-autonym="Српски / srpski" data-language-local-name="Serbian" 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:links" title="Module:links – Tamil" lang="ta" hreflang="ta" data-title="Module:links" data-language-autonym="தமிழ்" data-language-local-name="Tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-shn mw-list-item"><a href="https://shn.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:links" title="မေႃႇၵျူး:links – Shan" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:links" data-language-autonym="ၽႃႇသႃႇတႆး " data-language-local-name="Shan" class="interlanguage-link-target"><span>ၽႃႇသႃႇတႆး </span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wiktionary.org/wiki/%E0%B8%A1%E0%B8%AD%E0%B8%94%E0%B8%B9%E0%B8%A5:links" title="มอดูล:links – Thai" lang="th" hreflang="th" data-title="มอดูล:links" data-language-autonym="ไทย" data-language-local-name="Thai" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-ti mw-list-item"><a href="https://ti.wiktionary.org/wiki/%E1%88%9E%E1%8B%B5%E1%8B%A9%E1%88%8D:links" title="ሞድዩል:links – Tigrinya" lang="ti" hreflang="ti" data-title="ሞድዩል:links" data-language-autonym="ትግርኛ" data-language-local-name="Tigrinya" 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:links" title="Модул:links – Tajik" lang="tg" hreflang="tg" data-title="Модул:links" data-language-autonym="Тоҷикӣ" data-language-local-name="Tajik" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wiktionary.org/wiki/Mod%C3%BCl:ba%C4%9Flant%C4%B1lar" title="Modül:bağlantılar – Turkish" lang="tr" hreflang="tr" data-title="Modül:bağlantılar" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wiktionary.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:links" title="Модуль:links – Ukrainian" lang="uk" hreflang="uk" data-title="Модуль:links" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-ur mw-list-item"><a href="https://ur.wiktionary.org/wiki/%D9%85%D8%A7%DA%88%DB%8C%D9%88%D9%84:links" title="ماڈیول:links – Urdu" lang="ur" hreflang="ur" data-title="ماڈیول:links" data-language-autonym="اردو" data-language-local-name="Urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wiktionary.org/wiki/M%C3%B4_%C4%91un:links" title="Mô đun:links – Vietnamese" lang="vi" hreflang="vi" data-title="Mô đun:links" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamese" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-yue mw-list-item"><a href="https://yue.wiktionary.org/wiki/%E6%A8%A1%E7%B5%84:links" title="模組:links – Cantonese" lang="yue" hreflang="yue" data-title="模組:links" data-language-autonym="粵語" data-language-local-name="Cantonese" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wiktionary.org/wiki/Module:Links" title="Module:Links – Chinese" lang="zh" hreflang="zh" data-title="Module:Links" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q30564329#sitelinks-wiktionary" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-module" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Module:links" title="View the module page [c]" accesskey="c"><span>Module</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Module_talk:links" rel="discussion" title="Discussion about the content page [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Module:links"><span>Read</span></a></li><li id="ca-viewsource" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:links&action=edit" title="This page is protected. You can view its source [e]" accesskey="e"><span>View source</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:links&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Module:links"><span>Read</span></a></li><li id="ca-more-viewsource" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:links&action=edit"><span>View source</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:links&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Module:links" title="A list of all wiki pages that link here [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Module:links" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=en" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Module:links&oldid=82311458" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Module:links&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wiktionary.org%2Fwiki%2FModule%3Alinks"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wiktionary.org%2Fwiki%2FModule%3Alinks"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-electronpdfservice-sidebar-portlet-heading" class="vector-menu mw-portlet mw-portlet-electronpdfservice-sidebar-portlet-heading" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="electron-print_pdf" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Module%3Alinks&action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="javascript:print();" rel="alternate" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q30564329" title="Link to connected data repository item [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wiktionary, the free dictionary</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="documentation" style="display:block; clear:both"> <hr /> <dl class="plainlinks" style="font-size: smaller;"><dd><i style="font-size: larger;">The following <a href="/wiki/Help:Documenting_templates_and_modules" title="Help:Documenting templates and modules">documentation</a> is located at <a href="/wiki/Module:links/documentation" title="Module:links/documentation">Module:links/documentation</a>. <sup>[<a class="external text" href="https://en.wiktionary.org/w/index.php?title=Module:links/documentation&action=edit">edit</a>]</sup></i></dd><dd> <i>Useful links</i>: <a href="/wiki/Special:PrefixIndex/Module:links/" title="Special:PrefixIndex/Module:links/">subpage list</a> • <a class="external text" href="https://en.wiktionary.org/w/index.php?title=Special%3AWhatLinksHere%2FModule%3Alinks&hideredirs=1&hidetrans=1">links</a> • <a class="external text" href="https://en.wiktionary.org/w/index.php?title=Special%3AWhatLinksHere%2FModule%3Alinks&hidelinks=1&hideredirs=1">transclusions</a> • <a href="/wiki/Module:links/testcases" title="Module:links/testcases">testcases</a> • <a href="/w/index.php?title=Module:links/sandbox&action=edit&redlink=1" class="new" title="Module:links/sandbox (page does not exist)">sandbox</a></dd></dl> <p>This module provides many useful utility functions for creating and processing wikilinks within Wiktionary. It is used by the linking templates <code style="white-space:pre-wrap">{{<a href="/wiki/Template:mention#top" title="Template:mention">m</a>}}</code> and <code style="white-space:pre-wrap">{{<a href="/wiki/Template:link#top" title="Template:link">l</a>}}</code> through the functions in <a href="/wiki/Module:links/templates" title="Module:links/templates">Module:links/templates</a>. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Functions">Functions</h2></div> <div class="mw-heading mw-heading3"><h3 id="export.split_on_slashes">export.split_on_slashes</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">split_on_slashes</span><span class="p">(</span><span class="n">text</span><span class="p">)</span></code> </p><p>Takes an input and splits on a double slash (taking account of escaping backslashes). </p> <div class="mw-heading mw-heading3"><h3 id="export.get_fragment">export.get_fragment</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">get_fragment</span><span class="p">(</span><span class="n">text</span><span class="p">)</span></code> </p><p>Takes a link target and outputs the actual target and the fragment (if any). </p> <div class="mw-heading mw-heading3"><h3 id="export.get_link_page">export.get_link_page</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">get_link_page</span><span class="p">(</span><span class="n">target</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="n">plain</span><span class="p">)</span></code> </p><p><strong class="error">This function lacks documentation. Please add a description of its usages, inputs and outputs, or its difference from similar functions, or make it local to remove it from the function list.</strong> </p> <div class="mw-heading mw-heading3"><h3 id="export.language_link">export.language_link</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">language_link</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code> </p> Creates a basic link to the given term. It links to the language section (such as <code>==English==</code>), but it does not add language and script wrappers, so any code that uses this function should call the <code class="n"><a href="/wiki/Module:script_utilities#tag_text" title="Module:script utilities">tag_text</a></code> from <a href="/wiki/Module:script_utilities" title="Module:script utilities">Module:script utilities</a> to add such wrappers itself at some point. The first argument, <code class="n">data</code>, may contain the following items, a subset of the items used in the <code class="n">data</code> argument of <code class="n">full_link</code>. If any other items are included, they are ignored. <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="p">{</span> <span class="n">term</span> <span class="o">=</span> <span class="n">entry_to_link_to</span><span class="p">,</span> <span class="n">alt</span> <span class="o">=</span> <span class="n">link_text_or_displayed_text</span><span class="p">,</span> <span class="n">lang</span> <span class="o">=</span> <span class="n">language_object</span><span class="p">,</span> <span class="n">id</span> <span class="o">=</span> <span class="n">sense_id</span><span class="p">,</span> <span class="p">}</span> </pre></div> <dl><dt><code class="n">term</code></dt> <dd>Text to turn into a link. This is generally the name of a page. The text can contain wikilinks already embedded in it. These are processed individually just like a single link would be. The <code class="n">alt</code> argument is ignored in this case.</dd> <dt><code class="n">alt</code> (<i>optional</i>)</dt> <dd>The alternative display for the link, if different from the linked page. If this is <code style="white-space:pre-wrap;" class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kc">nil</span></code>, the <code class="n">text</code> argument is used instead (much like regular wikilinks). If <code class="n">text</code> contains wikilinks in it, this argument is ignored and has no effect. (Links in which the alt is ignored are tracked with the tracking template <a href="/wiki/Special:WhatLinksHere/Wiktionary:Tracking/links/alt-ignored" title="Special:WhatLinksHere/Wiktionary:Tracking/links/alt-ignored">links/alt-ignored</a>.)</dd> <dt><code class="n">lang</code></dt> <dd>The <a href="/wiki/Module:languages#Language_objects" title="Module:languages">language object</a> for the term being linked. If this argument is defined, the function will determine the language's canonical name (see <a href="/wiki/Template:language_data_documentation" title="Template:language data documentation">Template:language data documentation</a>), and point the link or links in the <code class="n">term</code> to the language's section of an entry, or to a language-specific senseid if the <code class="n">id</code> argument is defined.</dd> <dt><code class="n">id</code> (<i>optional</i>)</dt> <dd>Sense id string. If this argument is defined, the link will point to a language-specific sense id (<a href="/wiki/identifier#English:_HTML" title="identifier">identifier</a>) created by the template <code style="white-space:pre-wrap">{{<a href="/wiki/Template:senseid#top" title="Template:senseid">senseid</a>}}</code>. A sense id consists of the language's canonical name, a hyphen (<code>-</code>), and the string that was supplied as the <code class="n">id</code> argument. This is useful when a term has more than one sense in a language. If the <code class="n">term</code> argument contains wikilinks, this argument is ignored. (Links in which the sense id is ignored are tracked with the tracking template <a href="/wiki/Special:WhatLinksHere/Wiktionary:Tracking/links/id-ignored" title="Special:WhatLinksHere/Wiktionary:Tracking/links/id-ignored">links/id-ignored</a>.) The second argument is as follows:</dd> <dt><code class="n">allow_self_link</code></dt> <dd>If <code style="white-space:pre-wrap;" class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kc">true</span></code>, the function will also generate links to the current page. The default (<code style="white-space:pre-wrap;" class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kc">false</span></code>) will not generate a link but generate a bolded "self link" instead. The following special options are processed for each link (both simple text and with embedded wikilinks):</dd></dl> <ul><li>The target page name will be processed to generate the correct entry name. This is done by the <a href="/wiki/Module:languages#makeEntryName" title="Module:languages">makeEntryName</a> function in <a href="/wiki/Module:languages" title="Module:languages">Module:languages</a>, using the <code class="n">entry_name</code> replacements in the language's data file (see <a href="/wiki/Template:language_data_documentation" title="Template:language data documentation">Template:language data documentation</a> for more information). This function is generally used to automatically strip dictionary-only diacritics that are not part of the normal written form of a language.</li> <li>If the text starts with <code class="n">*</code>, then the term is considered a reconstructed term, and a link to the Reconstruction: namespace will be created. If the text contains embedded wikilinks, then <code class="n">*</code> is automatically applied to each one individually, while preserving the displayed form of each link as it was given. This allows linking to phrases containing multiple reconstructed terms, while only showing the * once at the beginning.</li> <li>If the text starts with <code class="n">:</code>, then the link is treated as "raw" and the above steps are skipped. This can be used in rare cases where the page name begins with <code class="n">*</code> or if diacritics should not be stripped. For example: <ul><li><code style="white-space:pre-wrap">{{<a href="/wiki/Template:link#top" title="Template:link">l</a>|en|*nix}}</code> links to the nonexistent page <a href="/w/index.php?title=Reconstruction:English/nix&action=edit&redlink=1" class="new" title="Reconstruction:English/nix (page does not exist)">Reconstruction:English/nix</a> (<code class="n">*</code> is interpreted as a reconstruction), but <code style="white-space:pre-wrap">{{<a href="/wiki/Template:link#top" title="Template:link">l</a>|en|:*nix}}</code> links to <a href="/wiki/*nix" title="*nix">*nix</a>.</li> <li><code style="white-space:pre-wrap">{{<a href="/wiki/Template:link#top" title="Template:link">l</a>|sl|Franche-Comté}}</code> links to the nonexistent page <a href="/w/index.php?title=Franche-Comte&action=edit&redlink=1" class="new" title="Franche-Comte (page does not exist)">Franche-Comte</a> (<code>é</code> is converted to <code>e</code> by <code class="n">makeEntryName</code>), but <code style="white-space:pre-wrap">{{<a href="/wiki/Template:link#top" title="Template:link">l</a>|sl|:Franche-Comté}}</code> links to <a href="/wiki/Franche-Comt%C3%A9" title="Franche-Comté">Franche-Comté</a>.</li></ul></li></ul> <div class="mw-heading mw-heading3"><h3 id="export.plain_link">export.plain_link</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">plain_link</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code> </p><p><strong class="error">This function lacks documentation. Please add a description of its usages, inputs and outputs, or its difference from similar functions, or make it local to remove it from the function list.</strong> </p> <div class="mw-heading mw-heading3"><h3 id="export.embedded_language_links">export.embedded_language_links</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">embedded_language_links</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code> </p><p>Replace any links with links to the correct section, but don't link the whole text if no embedded links are found. Returns the display text form. </p> <div class="mw-heading mw-heading3"><h3 id="export.mark">export.mark</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">mark</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">item_type</span><span class="p">,</span> <span class="n">face</span><span class="p">,</span> <span class="n">lang</span><span class="p">)</span></code> </p><p><strong class="error">This function lacks documentation. Please add a description of its usages, inputs and outputs, or its difference from similar functions, or make it local to remove it from the function list.</strong> </p> <div class="mw-heading mw-heading3"><h3 id="export.format_link_annotations">export.format_link_annotations</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">format_link_annotations</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">face</span><span class="p">)</span></code> </p><p>Formats the annotations that are displayed with a link created by <code style="white-space:pre-wrap;" class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="n">full_link</span></code>. Annotations are the extra bits of information that are displayed following the linked term, and include things such as gender, transliteration, gloss and so on. </p> <ul><li>The first argument is a table possessing some or all of the following keys: <dl><dd><dl><dt><code class="n">genders</code></dt> <dd>Table containing a list of gender specifications in the style of <a href="/wiki/Module:gender_and_number" title="Module:gender and number">Module:gender and number</a>.</dd> <dt><code class="n">tr</code></dt> <dd>Transliteration.</dd> <dt><code class="n">gloss</code></dt> <dd>Gloss that translates the term in the link, or gives some other descriptive information.</dd> <dt><code class="n">pos</code></dt> <dd>Part of speech of the linked term. If the given argument matches one of the templates in <a href="/w/index.php?title=Category:Part_of_speech_tags&action=edit&redlink=1" class="new" title="Category:Part of speech tags (page does not exist)">Category:Part of speech tags</a>, then call that to show a part-of-speech tag. Otherwise, just show the given text as it is.</dd> <dt><code class="n">lit</code></dt> <dd>Literal meaning of the term, if the usual meaning is figurative or idiomatic.</dd></dl></dd> <dd>Any of the above values can be omitted from the <code class="n">info</code> argument. If a completely empty table is given (with no annotations at all), then an empty string is returned.</dd></dl></li> <li>The second argument is a string. Valid values are listed in <a href="/wiki/Module:script_utilities/data" title="Module:script utilities/data">Module:script utilities/data</a> "data.translit" table.</li></ul> <div class="mw-heading mw-heading3"><h3 id="export.full_link">export.full_link</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">full_link</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">face</span><span class="p">,</span> <span class="n">allow_self_link</span><span class="p">,</span> <span class="n">show_qualifiers</span><span class="p">)</span></code> </p> Creates a full link, with annotations (see <code class="n"><a href="#format_link_annotations">format_link_annotations</a></code>), in the style of <code style="white-space:pre-wrap">{{<a href="/wiki/Template:link#top" title="Template:link">l</a>}}</code> or <code style="white-space:pre-wrap">{{<a href="/wiki/Template:mention#top" title="Template:mention">m</a>}}</code>. The first argument, <code class="n">data</code>, must be a table. It contains the various elements that can be supplied as parameters to <code style="white-space:pre-wrap">{{<a href="/wiki/Template:link#top" title="Template:link">l</a>}}</code> or <code style="white-space:pre-wrap">{{<a href="/wiki/Template:mention#top" title="Template:mention">m</a>}}</code>: <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="p">{</span> <span class="n">term</span> <span class="o">=</span> <span class="n">entry_to_link_to</span><span class="p">,</span> <span class="n">alt</span> <span class="o">=</span> <span class="n">link_text_or_displayed_text</span><span class="p">,</span> <span class="n">lang</span> <span class="o">=</span> <span class="n">language_object</span><span class="p">,</span> <span class="n">sc</span> <span class="o">=</span> <span class="n">script_object</span><span class="p">,</span> <span class="n">track_sc</span> <span class="o">=</span> <span class="n">boolean</span><span class="p">,</span> <span class="n">no_nonstandard_sc_cat</span> <span class="o">=</span> <span class="n">boolean</span><span class="p">,</span> <span class="n">fragment</span> <span class="o">=</span> <span class="n">link_fragment</span> <span class="n">id</span> <span class="o">=</span> <span class="n">sense_id</span><span class="p">,</span> <span class="n">genders</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"gender1"</span><span class="p">,</span> <span class="s2">"gender2"</span><span class="p">,</span> <span class="p">...</span> <span class="p">},</span> <span class="n">tr</span> <span class="o">=</span> <span class="n">transliteration</span><span class="p">,</span> <span class="n">ts</span> <span class="o">=</span> <span class="n">transcription</span><span class="p">,</span> <span class="n">gloss</span> <span class="o">=</span> <span class="n">gloss</span><span class="p">,</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">part_of_speech_tag</span><span class="p">,</span> <span class="n">lit</span> <span class="o">=</span> <span class="n">literal_translation</span><span class="p">,</span> <span class="n">no_alt_ast</span> <span class="o">=</span> <span class="n">boolean</span><span class="p">,</span> <span class="n">accel</span> <span class="o">=</span> <span class="p">{</span><span class="n">accelerated_creation_tags</span><span class="p">},</span> <span class="n">interwiki</span> <span class="o">=</span> <span class="n">interwiki</span><span class="p">,</span> <span class="n">q</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"left_qualifier1"</span><span class="p">,</span> <span class="s2">"left_qualifier2"</span><span class="p">,</span> <span class="p">...}</span> <span class="ow">or</span> <span class="s2">"left_qualifier"</span><span class="p">,</span> <span class="n">qq</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"right_qualifier1"</span><span class="p">,</span> <span class="s2">"right_qualifier2"</span><span class="p">,</span> <span class="p">...}</span> <span class="ow">or</span> <span class="s2">"right_qualifier"</span><span class="p">,</span> <span class="n">refs</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"formatted_ref1"</span><span class="p">,</span> <span class="s2">"formatted_ref2"</span><span class="p">,</span> <span class="p">...}</span> <span class="ow">or</span> <span class="p">{</span> <span class="p">{</span><span class="n">text</span> <span class="o">=</span> <span class="s2">"text"</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"name"</span><span class="p">,</span> <span class="n">group</span> <span class="o">=</span> <span class="s2">"group"</span><span class="p">},</span> <span class="p">...</span> <span class="p">},</span> <span class="p">}</span> </pre></div> Any one of the items in the <code class="n">data</code> table may be <code style="white-space:pre-wrap;" class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kc">nil</span></code>, but an error will be shown if neither <code class="n">term</code> nor <code class="n">alt</code> nor <code class="n">tr</code> is present. Thus, calling <code style="white-space:pre-wrap;" class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="n">full_link</span><span class="p">{</span> <span class="n">term</span> <span class="o">=</span> <span class="n">term</span><span class="p">,</span> <span class="n">lang</span> <span class="o">=</span> <span class="n">lang</span><span class="p">,</span> <span class="n">sc</span> <span class="o">=</span> <span class="n">sc</span> <span class="p">}</span></code>, where <code class="n">term</code> is an entry name, <code class="n">lang</code> is a <a href="/wiki/Module:languages#Language_objects" title="Module:languages">language object</a> from <a href="/wiki/Module:languages" title="Module:languages">Module:languages</a>, and <code class="n">sc</code> is a <a href="/wiki/Module:scripts#Script_objects" title="Module:scripts">script object</a> from <a href="/wiki/Module:scripts" title="Module:scripts">Module:scripts</a>, will give a plain link similar to the one produced by the template <code style="white-space:pre-wrap">{{<a href="/wiki/Template:link#top" title="Template:link">l</a>}}</code>, and calling <code style="white-space:pre-wrap;" class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="n">full_link</span><span class="p">(</span> <span class="p">{</span> <span class="n">term</span> <span class="o">=</span> <span class="n">term</span><span class="p">,</span> <span class="n">lang</span> <span class="o">=</span> <span class="n">lang</span><span class="p">,</span> <span class="n">sc</span> <span class="o">=</span> <span class="n">sc</span> <span class="p">},</span> <span class="s2">"term"</span> <span class="p">)</span></code> will give a link similar to the one produced by the template <code style="white-space:pre-wrap">{{<a href="/wiki/Template:mention#top" title="Template:mention">m</a>}}</code>. The function will: <ul><li>Try to determine the script, based on the characters found in the term or alt argument, if the script was not given. If a script is given and <code class="n">track_sc</code> is <code style="white-space:pre-wrap;" class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kc">true</span></code>, it will check whether the input script is the same as the one which would have been automatically generated and add the category <a href="/w/index.php?title=Category:Terms_with_redundant_script_codes&action=edit&redlink=1" class="new" title="Category:Terms with redundant script codes (page does not exist)">Category:Terms with redundant script codes</a> if yes, or <a href="/w/index.php?title=Category:Terms_with_non-redundant_manual_script_codes&action=edit&redlink=1" class="new" title="Category:Terms with non-redundant manual script codes (page does not exist)">Category:Terms with non-redundant manual script codes</a> if no. This should be used when the input script object is directly determined by a template's <code class="n">sc=</code> parameter.</li> <li>Call <code class="n"><a href="#language_link">language_link</a></code> on the term or alt forms, to remove diacritics in the page name, process any embedded wikilinks and create links to Reconstruction or Appendix pages when necessary.</li> <li>Call <code class="n"><a href="/wiki/Module:script_utilities#tag_text" title="Module:script utilities">Module:script utilities#tag_text</a></code> to add the appropriate language and script tags to the term, and to italicize terms written in the Latin script if necessary. Accelerated creation tags, as used by <a href="/wiki/Wiktionary:ACCEL" class="mw-redirect" title="Wiktionary:ACCEL">WT:ACCEL</a>, are included.</li> <li>Generate a transliteration, based on the alt or term arguments, if the script is not Latin and no transliteration was provided.</li> <li>Add the annotations (transliteration, gender, gloss etc.) after the link.</li> <li>If <code class="n">no_alt_ast</code> is specified, then the alt text does not need to contain an asterisk if the language is reconstructed. This should only be used by modules which really need to allow links to reconstructions that don't display asterisks (e.g. number boxes).</li> <li>If <code class="n">show_qualifiers</code> is specified, left and right qualifiers and references will be displayed. (This is for compatibility reasons, since a fair amount of code stores qualifiers and/or references in these fields and displays them itself, expecting <code style="white-space:pre-wrap;" class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="n">full_link</span><span class="p">()</span></code> to ignore them.</li></ul> <div class="mw-heading mw-heading3"><h3 id="export.remove_links">export.remove_links</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">remove_links</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">tag</span><span class="p">)</span></code> </p><p>Replaces all wikilinks with their displayed text, and removes any categories. This function can be invoked either from a template or from another module. -- Strips links: deletes category links, the targets of piped links, and any double square brackets involved in links (other than file links, which are untouched). If <code>tag</code> is set, then any links removed will be given pseudo-HTML tags, which allow the substitution functions in <a href="/wiki/Module:languages" title="Module:languages">Module:languages</a> to properly subdivide the text in order to reduce the chance of substitution failures in modules which scrape pages like <a href="/wiki/Module:zh-translit" title="Module:zh-translit">Module:zh-translit</a>. -- FIXME: This is quite hacky. We probably want this to be integrated into <a href="/wiki/Module:languages" title="Module:languages">Module:languages</a>, but we can't do that until we know that nothing is pushing pipe linked transliterations through it for languages which don't have link_tr set. </p> <ul><li><code>[[page|displayed text]]</code> → <code>displayed text</code></li> <li><code>[[page and displayed text]]</code> → <code>page and displayed text</code></li> <li><code>[[Category:English lemmas|WORD]]</code> → <i>(nothing)</i></li></ul> <div class="mw-heading mw-heading3"><h3 id="export.section_link">export.section_link</h3></div> <p><code class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">section_link</span><span class="p">(</span><span class="n">link</span><span class="p">)</span></code> </p><p><strong class="error">This function lacks documentation. Please add a description of its usages, inputs and outputs, or its difference from similar functions, or make it local to remove it from the function list.</strong> </p> <div class="mw-heading mw-heading2"><h2 id="Changes">Changes</h2></div> <ul><li><a href="/wiki/Special:Diff/22341645" title="Special:Diff/22341645">2013-09-13</a>: <a href="/w/index.php?title=Category:Terms_with_manual_transliterations_different_from_the_automated_ones&action=edit&redlink=1" class="new" title="Category:Terms with manual transliterations different from the automated ones (page does not exist)">Category:Terms with manual transliterations different from the automated ones</a> and <a href="/w/index.php?title=Category:Terms_with_redundant_transliterations&action=edit&redlink=1" class="new" title="Category:Terms with redundant transliterations (page does not exist)">Category:Terms with redundant transliterations</a> or their subcategories begin to be added</li> <li><a href="/wiki/Special:Diff/49120467" title="Special:Diff/49120467">2018-03-08</a>: <code>ts</code> (transcription) annotation added; accepted as field of table in first parameter of <code>full_link</code> and as field of table in second parameter of <code>format_link_annotations</code>, and as second parameter (<code>itemType</code>) of <code>mark</code></li></ul> <div class="mw-heading mw-heading2"><h2 id="Contents_of_data_module">Contents of data module</h2></div> <dl><dt><span id="Unsupported_titles">Unsupported titles</span></dt> <dd></dd></dl> <ul><li><a href="/wiki/Unsupported_titles/Space" title="Unsupported titles/Space">] [</a></li> <li><a href="/wiki/Unsupported_titles/%60amp%60amp;" title="Unsupported titles/`amp`amp;">&amp;</a></li> <li><span class="Polyt"><a href="/wiki/Unsupported_titles/Ancient_Greek_dish" title="Unsupported titles/Ancient Greek dish">λοπαδοτεμαχοσελαχογαλεοκρανιολειψανοδριμυποτριμματοσιλφιοκαραβομελιτοκατακεχυμενοκιχλεπικοσσυφοφαττοπεριστεραλεκτρυονοπτοκεφαλλιοκιγκλοπελειολαγῳοσιραιοβαφητραγανοπτερύγων</a></span></li> <li><span class="Thai"><a href="/wiki/Unsupported_titles/Thai_name_of_Bangkok" title="Unsupported titles/Thai name of Bangkok">กรุงเทพมหานคร อมรรัตนโกสินทร์ มหินทรายุธยา มหาดิลกภพ นพรัตนราชธานีบูรีรมย์ อุดมราชนิเวศน์มหาสถาน อมรพิมานอวตารสถิต สักกะทัตติยวิษณุกรรมประสิทธิ์</a></span></li> <li><span class="Ogam"><a href="/wiki/Unsupported_titles/Ogham_space" title="Unsupported titles/Ogham space">] [</a></span></li> <li><span class="Hani"><a href="/w/index.php?title=Unsupported_titles/Ideographic_space&action=edit&redlink=1" class="new" title="Unsupported titles/Ideographic space (page does not exist)">] [</a></span></li></ul> <br style="clear: both;" /></div> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos" data-line="1"></span></a><span class="kd">local</span> <span class="n">export</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-2"><a href="#L-2"><span class="linenos" data-line="2"></span></a> </span><span id="L-3"><a href="#L-3"><span class="linenos" data-line="3"></span></a><span class="cm">--[=[</span> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a><span class="cm"> [[Unsupported titles]], pages with high memory usage,</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a><span class="cm"> extraction modules and part-of-speech names are listed</span> </span><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a><span class="cm"> at [[Module:links/data]].</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="cm"> Other modules used:</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a><span class="cm"> [[Module:script utilities]]</span> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a><span class="cm"> [[Module:scripts]]</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a><span class="cm"> [[Module:languages]] and its submodules</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a><span class="cm"> [[Module:gender and number]]</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a><span class="cm"> [[Module:debug/track]]</span> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a><span class="cm">]=]</span> </span><span id="L-15"><a href="#L-15"><span class="linenos" data-line="15"></span></a><span class="kd">local</span> <span class="n">m_str_utils</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><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a><span class="kd">local</span> <span class="n">pron_qualifier_module</span> <span class="o">=</span> <span class="s2">"Module:pron qualifier"</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a><span class="kd">local</span> <span class="n">anchor_encode</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:fun"</span><span class="p">).</span><span class="n">memoize</span><span class="p">(</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="kc">true</span><span class="p">)</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a><span class="kd">local</span> <span class="n">concat</span> <span class="o">=</span> <span class="nb">table.concat</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a><span class="kd">local</span> <span class="n">decode_entities</span> <span class="o">=</span> <span class="n">m_str_utils</span><span class="p">.</span><span class="n">decode_entities</span> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a><span class="kd">local</span> <span class="n">decode_uri</span> <span class="o">=</span> <span class="n">m_str_utils</span><span class="p">.</span><span class="n">decode_uri</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a><span class="kd">local</span> <span class="n">find</span> <span class="o">=</span> <span class="nb">string.find</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a><span class="kd">local</span> <span class="n">encode_entities</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:string/encode entities"</span><span class="p">)</span> <span class="c1">-- Can't yet replace, as the [[Module:string utilities]] version no longer has automatic double-encoding prevention, which requires changes here to account for.</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a><span class="kd">local</span> <span class="n">insert</span> <span class="o">=</span> <span class="nb">table.insert</span> </span><span id="L-25"><a href="#L-25"><span class="linenos" data-line="25"></span></a><span class="kd">local</span> <span class="nb">ipairs</span> <span class="o">=</span> <span class="nb">ipairs</span> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a><span class="kd">local</span> <span class="n">load_data</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a><span class="kd">local</span> <span class="n">match</span> <span class="o">=</span> <span class="nb">string.match</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a><span class="kd">local</span> <span class="n">new_title</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">new</span> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a><span class="kd">local</span> <span class="nb">pairs</span> <span class="o">=</span> <span class="nb">pairs</span> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a><span class="kd">local</span> <span class="n">remove</span> <span class="o">=</span> <span class="nb">table.remove</span> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a><span class="kd">local</span> <span class="n">shallowcopy</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:table"</span><span class="p">).</span><span class="n">shallowcopy</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a><span class="kd">local</span> <span class="n">split</span> <span class="o">=</span> <span class="n">m_str_utils</span><span class="p">.</span><span class="n">split</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">sub</span> <span class="o">=</span> <span class="nb">string.sub</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a><span class="kd">local</span> <span class="n">toNFC</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">toNFC</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a><span class="kd">local</span> <span class="nb">tostring</span> <span class="o">=</span> <span class="nb">tostring</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a><span class="kd">local</span> <span class="n">trim</span> <span class="c1">-- defined below</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></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-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a><span class="kd">local</span> <span class="n">ulower</span> <span class="o">=</span> <span class="n">m_str_utils</span><span class="p">.</span><span class="n">lower</span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a><span class="kd">local</span> <span class="n">umatch</span> <span class="o">=</span> <span class="n">m_str_utils</span><span class="p">.</span><span class="n">match</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a><span class="kd">local</span> <span class="n">unstrip</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><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a><span class="kd">local</span> <span class="n">u</span> <span class="o">=</span> <span class="n">m_str_utils</span><span class="p">.</span><span class="n">char</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> </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">TEMP_UNDERSCORE</span> <span class="o">=</span> <span class="n">u</span><span class="p">(</span><span class="mh">0xFFF0</span><span class="p">)</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">track</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">code</span><span class="p">)</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a> <span class="kd">local</span> <span class="n">tracking_page</span> <span class="o">=</span> <span class="s2">"links/"</span> <span class="o">..</span> <span class="n">page</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> <span class="kr">if</span> <span class="n">code</span> <span class="kr">then</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:debug/track"</span><span class="p">){</span><span class="n">tracking_page</span><span class="p">,</span> <span class="n">tracking_page</span> <span class="o">..</span> <span class="s2">"/"</span> <span class="o">..</span> <span class="n">code</span><span class="p">}</span> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a> <span class="kr">else</span> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:debug/track"</span><span class="p">)(</span><span class="n">tracking_page</span><span class="p">)</span> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a> <span class="kr">end</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="kr">return</span> <span class="kc">true</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><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a><span class="kr">do</span> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a> <span class="kd">local</span> <span class="n">_trim</span> <span class="o">=</span> <span class="n">m_str_utils</span><span class="p">.</span><span class="n">trim</span> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a> <span class="c1">-- Unconditionally trimmed charset.</span> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a> <span class="kd">local</span> <span class="n">always_trim</span> <span class="o">=</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a> <span class="s2">"</span><span class="se">\194\128</span><span class="s2">-</span><span class="se">\194\159</span><span class="s2">"</span> <span class="o">..</span> <span class="c1">-- U+0080-009F (C1 control characters)</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> <span class="s2">"</span><span class="se">\194\173</span><span class="s2">"</span> <span class="o">..</span> <span class="c1">-- U+00AD (soft hyphen)</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a> <span class="s2">"</span><span class="se">\226\128\170</span><span class="s2">-</span><span class="se">\226\128\174</span><span class="s2">"</span> <span class="o">..</span> <span class="c1">-- U+202A-202E (directionality formatting characters)</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="s2">"</span><span class="se">\226\129\166</span><span class="s2">-</span><span class="se">\226\129\169</span><span class="s2">"</span> <span class="c1">-- U+2066-2069 (directionality formatting characters)</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a> <span class="c1">-- Standard trimmed charset.</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a> <span class="kd">local</span> <span class="n">standard_trim</span> <span class="o">=</span> <span class="s2">"%s"</span> <span class="o">..</span> <span class="c1">-- (default whitespace charset)</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> <span class="s2">"</span><span class="se">\226\128\139</span><span class="s2">-</span><span class="se">\226\128\141</span><span class="s2">"</span> <span class="o">..</span> <span class="c1">-- U+200B-200D (zero-width spaces)</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a> <span class="n">always_trim</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> <span class="c1">-- If there are non-whitespace characters, trim all characters in `standard_trim`.</span> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="c1">-- Otherwise, only trim the characters in `always_trim`.</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="n">trim</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="kr">if</span> <span class="n">text</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="kr">return</span> <span class="n">text</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> <span class="kr">end</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> <span class="kd">local</span> <span class="n">trimmed</span> <span class="o">=</span> <span class="n">_trim</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">standard_trim</span><span class="p">)</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a> <span class="kr">if</span> <span class="n">trimmed</span> <span class="o">~=</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a> <span class="kr">return</span> <span class="n">trimmed</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a> <span class="kr">end</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></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 class="n">always_trim</span><span class="p">)</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a> <span class="kr">end</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a><span class="kr">end</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">escape</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">str</span><span class="p">)</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">rep</span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a> <span class="kr">repeat</span> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a> <span class="n">text</span><span class="p">,</span> <span class="n">rep</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">\\\\</span><span class="s2">(</span><span class="se">\\</span><span class="s2">*"</span> <span class="o">..</span> <span class="n">str</span> <span class="o">..</span> <span class="s2">")"</span><span class="p">,</span> <span class="s2">"</span><span class="se">\5</span><span class="s2">%1"</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">until</span> <span class="n">rep</span> <span class="o">==</span> <span class="mi">0</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></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="se">\\</span><span class="s2">"</span> <span class="o">..</span> <span class="n">str</span><span class="p">,</span> <span class="s2">"</span><span class="se">\6</span><span class="s2">"</span><span class="p">))</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a><span class="kr">end</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">unescape</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">str</span><span class="p">)</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">text</span> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"</span><span class="se">\5</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">)</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"</span><span class="se">\6</span><span class="s2">"</span><span class="p">,</span> <span class="n">str</span><span class="p">))</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a><span class="kr">end</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a><span class="c1">-- Remove bold, italics, soft hyphens, strip markers and HTML tags.</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">remove_formatting</span><span class="p">(</span><span class="n">str</span><span class="p">)</span> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a> <span class="n">str</span> <span class="o">=</span> <span class="n">str</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></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-102"><a href="#L-102"><span class="linenos" data-line="102"></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-103"><a href="#L-103"><span class="linenos" data-line="103"></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-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">unstrip</span><span class="p">(</span><span class="n">str</span><span class="p">)</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></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-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a><span class="kr">end</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a><span class="cm">--[==[Takes an input and splits on a double slash (taking account of escaping backslashes).]==]</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">split_on_slashes</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">split</span><span class="p">(</span><span class="n">escape</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"//"</span><span class="p">),</span> <span class="s2">"//"</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="ow">or</span> <span class="p">{}</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> <span class="kr">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> <span class="n">text</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">unescape</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="s2">"//"</span><span class="p">)</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a> <span class="kr">if</span> <span class="n">v</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> <span class="n">text</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a> <span class="kr">end</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> <span class="kr">end</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a> <span class="kr">return</span> <span class="n">text</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a><span class="kr">end</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a><span class="c1">-- Does the work of export.get_fragment, but can be called directly to avoid unnecessary checks for embedded links.</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">get_fragment</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">escape</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"#"</span><span class="p">)</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a> <span class="c1">-- Replace numeric character references with the corresponding character (&#39; → '),</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> <span class="c1">-- as they contain #, which causes the numeric character reference to be</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="c1">-- misparsed (wa'a → wa&#39;a → pagename wa&, fragment 39;a).</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">decode_entities</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a> <span class="kd">local</span> <span class="n">target</span><span class="p">,</span> <span class="n">fragment</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">"^(..-)#(.+)$"</span><span class="p">)</span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">target</span> <span class="ow">or</span> <span class="n">text</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">unescape</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="s2">"#"</span><span class="p">)</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a> <span class="n">fragment</span> <span class="o">=</span> <span class="n">fragment</span> <span class="ow">and</span> <span class="n">unescape</span><span class="p">(</span><span class="n">fragment</span><span class="p">,</span> <span class="s2">"#"</span><span class="p">)</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">target</span><span class="p">,</span> <span class="n">fragment</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><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a><span class="cm">--[==[Takes a link target and outputs the actual target and the fragment (if any).]==]</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">get_fragment</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> <span class="c1">-- If there are no embedded links, process input.</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> <span class="kd">local</span> <span class="n">open</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"[["</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">open</span> <span class="kr">then</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">get_fragment</span><span class="p">(</span><span class="n">text</span><span class="p">)</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 class="kd">local</span> <span class="n">close</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"]]"</span><span class="p">,</span> <span class="n">open</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">close</span> <span class="kr">then</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="kr">return</span> <span class="n">get_fragment</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="c1">-- If there is one, but it's redundant (i.e. encloses everything with no pipe), remove and process.</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="kr">elseif</span> <span class="n">open</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">close</span> <span class="o">==</span> <span class="o">#</span><span class="n">text</span> <span class="o">-</span> <span class="mi">1</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"|"</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="kr">return</span> <span class="n">get_fragment</span><span class="p">(</span><span class="n">sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">))</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="kr">end</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="c1">-- Otherwise, return the input.</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="n">text</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><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a><span class="kd">local</span> <span class="n">pos_tags</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">get_link_page</span><span class="p">(</span><span class="n">target</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="n">plain</span><span class="p">)</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">target</span> <span class="kr">then</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> <span class="kr">end</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">remove_formatting</span><span class="p">(</span><span class="n">target</span><span class="p">)</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="c1">-- Check if the target is an interwiki link.</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="kr">if</span> <span class="n">target</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">":"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">target</span> <span class="o">~=</span> <span class="s2">":"</span> <span class="kr">then</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a> <span class="c1">-- If this is an a link to another namespace or an interwiki link, ensure there's an initial colon and then return what we have (so that it works as a conventional link, and doesn't do anything weird like add the term to a category.)</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="kd">local</span> <span class="n">prefix</span> <span class="o">=</span> <span class="n">target</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">ulower</span><span class="p">)</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a> <span class="kr">if</span> <span class="p">(</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a> <span class="n">load_data</span><span class="p">(</span><span class="s2">"Module:data/namespaces"</span><span class="p">)[</span><span class="n">prefix</span><span class="p">]</span> <span class="ow">or</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="n">load_data</span><span class="p">(</span><span class="s2">"Module:data/interwikis"</span><span class="p">)[</span><span class="n">prefix</span><span class="p">]</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a> <span class="kr">return</span> <span class="s2">":"</span> <span class="o">..</span> <span class="n">target</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">""</span><span class="p">),</span> <span class="kc">nil</span><span class="p">,</span> <span class="p">{}</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> <span class="kr">end</span> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="c1">-- Convert any escaped colons</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">target</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">:"</span><span class="p">,</span> <span class="s2">":"</span><span class="p">)</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> <span class="kr">end</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="c1">-- Check if the term is reconstructed and remove any asterisk. Otherwise, handle the escapes.</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a> <span class="kd">local</span> <span class="n">reconstructed</span><span class="p">,</span> <span class="n">escaped</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">plain</span> <span class="kr">then</span> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a> <span class="n">target</span><span class="p">,</span> <span class="n">reconstructed</span> <span class="o">=</span> <span class="n">target</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">"%1"</span><span class="p">)</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a> <span class="kr">end</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a> <span class="n">target</span><span class="p">,</span> <span class="n">escaped</span> <span class="o">=</span> <span class="n">target</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"^(</span><span class="se">\\</span><span class="s2">-)</span><span class="se">\\</span><span class="s2">%*"</span><span class="p">,</span> <span class="s2">"%1*"</span><span class="p">)</span> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:utilities"</span><span class="p">).</span><span class="n">check_object</span><span class="p">(</span><span class="s2">"script"</span><span class="p">,</span> <span class="kc">true</span><span class="p">,</span> <span class="n">sc</span><span class="p">)</span> <span class="ow">or</span> <span class="n">sc</span><span class="p">:</span><span class="n">getCode</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"None"</span> <span class="kr">then</span> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a> <span class="n">sc</span> <span class="o">=</span> <span class="n">lang</span><span class="p">:</span><span class="n">findBestScript</span><span class="p">(</span><span class="n">target</span><span class="p">)</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="kr">end</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></span></a> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a> <span class="c1">-- Remove carets if they are used to capitalize parts of transliterations (unless they have been escaped).</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a> <span class="kr">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">sc</span><span class="p">:</span><span class="n">hasCapitalization</span><span class="p">())</span> <span class="ow">and</span> <span class="n">sc</span><span class="p">:</span><span class="n">isTransliterated</span><span class="p">()</span> <span class="ow">and</span> <span class="n">target</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"%^"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-187"><a href="#L-187"><span class="linenos" data-line="187"></span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">escape</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="s2">"^"</span><span class="p">)</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></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-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">unescape</span><span class="p">(</span><span class="n">target</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 class="kr">end</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a> <span class="c1">-- Get the entry name for the language.</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">lang</span><span class="p">:</span><span class="n">makeEntryName</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">sc</span><span class="p">)</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> <span class="c1">-- If the link contains unexpanded template parameters, then don't create a link.</span> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a> <span class="kr">if</span> <span class="n">target</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s2">"{{{"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> <span class="kr">end</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="kr">if</span> <span class="n">target</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"/"</span> <span class="kr">then</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></span></a> <span class="kr">return</span> <span class="s2">":"</span> <span class="o">..</span> <span class="n">target</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> <span class="kr">elseif</span> <span class="n">target</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s2">"^Reconstruction:"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a> <span class="kr">return</span> <span class="n">target</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="c1">-- Link to appendix for reconstructed terms and terms in appendix-only languages. Plain links interpret * literally, however.</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="kr">elseif</span> <span class="n">reconstructed</span> <span class="o">==</span> <span class="mi">1</span> <span class="kr">then</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a> <span class="kr">if</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"und"</span> <span class="kr">then</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> <span class="kr">else</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a> <span class="n">target</span> <span class="o">=</span> <span class="s2">"Reconstruction:"</span> <span class="o">..</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">"/"</span> <span class="o">..</span> <span class="n">target</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="kr">end</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> <span class="c1">-- Reconstructed languages and substrates require an initial *.</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a> <span class="kr">elseif</span> <span class="n">lang</span><span class="p">:</span><span class="n">hasType</span><span class="p">(</span><span class="s2">"reconstructed"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFamilyCode</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"qfa-sub"</span> <span class="kr">then</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> <span class="kd">local</span> <span class="n">check</span> <span class="o">=</span> <span class="n">target</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"^:*([^:]*):"</span><span class="p">)</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a> <span class="n">check</span> <span class="o">=</span> <span class="n">check</span> <span class="ow">and</span> <span class="n">ulower</span><span class="p">(</span><span class="n">check</span><span class="p">)</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a> <span class="kr">if</span> <span class="p">(</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a> <span class="n">load_data</span><span class="p">(</span><span class="s2">"Module:data/namespaces"</span><span class="p">)[</span><span class="n">check</span><span class="p">]</span> <span class="ow">or</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="n">load_data</span><span class="p">(</span><span class="s2">"Module:data/interwikis"</span><span class="p">)[</span><span class="n">check</span><span class="p">]</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> <span class="kr">return</span> <span class="n">target</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a> <span class="kr">else</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The specified language "</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-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a> <span class="o">..</span> <span class="s2">" is unattested, while the given term does not begin with '*' to indicate that it is reconstructed."</span><span class="p">)</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a> <span class="kr">end</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a> <span class="kr">elseif</span> <span class="n">lang</span><span class="p">:</span><span class="n">hasType</span><span class="p">(</span><span class="s2">"appendix-constructed"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> <span class="n">target</span> <span class="o">=</span> <span class="s2">"Appendix:"</span> <span class="o">..</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">"/"</span> <span class="o">..</span> <span class="n">target</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a> <span class="kr">end</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">return</span> <span class="n">target</span><span class="p">,</span> <span class="n">escaped</span> <span class="o">></span> <span class="mi">0</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a><span class="kr">end</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="c1">-- Make a link from a given link's parts</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">make_link</span><span class="p">(</span><span class="n">link</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="n">id</span><span class="p">,</span> <span class="n">isolated</span><span class="p">,</span> <span class="n">plain</span><span class="p">,</span> <span class="n">cats</span><span class="p">,</span> <span class="n">no_alt_ast</span><span class="p">)</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> <span class="c1">-- Convert percent encoding to plaintext.</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">decode_uri</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">,</span> <span class="s2">"PATH"</span><span class="p">)</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="o">=</span> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="ow">and</span> <span class="n">decode_uri</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">fragment</span><span class="p">,</span> <span class="s2">"PATH"</span><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="c1">-- Find fragments (if one isn't already set).</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a> <span class="c1">-- Prevents {{l|en|word#Etymology 2|word}} from linking to [[word#Etymology 2#English]].</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a> <span class="c1">-- # can be escaped as \#.</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a> <span class="kr">if</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="ow">and</span> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">,</span> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="o">=</span> <span class="n">get_fragment</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">target</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">end</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a> <span class="c1">-- Create a default display form.</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="kd">local</span> <span class="n">auto_display</span> <span class="o">=</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a> <span class="c1">-- Process the target</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> <span class="kd">local</span> <span class="n">escaped</span> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">,</span> <span class="n">escaped</span> <span class="o">=</span> <span class="n">export</span><span class="p">.</span><span class="n">get_link_page</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">target</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="n">plain</span><span class="p">)</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> <span class="c1">-- If the display is the target and the reconstruction * has been escaped, remove the escaping backslash.</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> <span class="kr">if</span> <span class="n">escaped</span> <span class="kr">then</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> <span class="n">auto_display</span> <span class="o">=</span> <span class="n">auto_display</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">([^</span><span class="se">\\</span><span class="s2">]*%*)"</span><span class="p">,</span> <span class="s2">"%1"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> <span class="kr">end</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> <span class="c1">-- Process the display form.</span> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a> <span class="kr">if</span> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="kr">then</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a> <span class="kd">local</span> <span class="n">orig_display</span> <span class="o">=</span> <span class="n">link</span><span class="p">.</span><span class="n">display</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">=</span> <span class="n">lang</span><span class="p">:</span><span class="n">makeDisplayText</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">display</span><span class="p">,</span> <span class="n">sc</span><span class="p">,</span> <span class="kc">true</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">if</span> <span class="n">cats</span> <span class="kr">then</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> <span class="n">auto_display</span> <span class="o">=</span> <span class="n">lang</span><span class="p">:</span><span class="n">makeDisplayText</span><span class="p">(</span><span class="n">auto_display</span><span class="p">,</span> <span class="n">sc</span><span class="p">)</span> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a> <span class="c1">-- If the alt text is the same as what would have been automatically generated, then the alt parameter is redundant (e.g. {{l|en|foo|foo}}, {{l|en|w:foo|foo}}, but not {{l|en|w:foo|w:foo}}).</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a> <span class="c1">-- If they're different, but the alt text could have been entered as the term parameter without it affecting the target page, then the target parameter is redundant (e.g. {{l|ru|фу|фу́}}).</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a> <span class="c1">-- If `no_alt_ast` is true, use pcall to catch the error which will be thrown if this is a reconstructed lang and the alt text doesn't have *.</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a> <span class="kr">if</span> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">==</span> <span class="n">auto_display</span> <span class="kr">then</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">cats</span><span class="p">,</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" links with redundant alt parameters"</span><span class="p">)</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a> <span class="kr">else</span> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a> <span class="kd">local</span> <span class="n">ok</span><span class="p">,</span> <span class="n">check</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> <span class="kr">if</span> <span class="n">no_alt_ast</span> <span class="kr">then</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> <span class="n">ok</span><span class="p">,</span> <span class="n">check</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span><span class="n">export</span><span class="p">.</span><span class="n">get_link_page</span><span class="p">,</span> <span class="n">orig_display</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="n">plain</span><span class="p">)</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a> <span class="kr">else</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a> <span class="n">ok</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="n">check</span> <span class="o">=</span> <span class="n">export</span><span class="p">.</span><span class="n">get_link_page</span><span class="p">(</span><span class="n">orig_display</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="n">plain</span><span class="p">)</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a> <span class="kr">end</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a> <span class="kr">if</span> <span class="n">ok</span> <span class="ow">and</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="o">==</span> <span class="n">check</span> <span class="kr">then</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">cats</span><span class="p">,</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" links with redundant target parameters"</span><span class="p">)</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a> <span class="kr">end</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a> <span class="kr">end</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a> <span class="kr">end</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a> <span class="kr">else</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">=</span> <span class="n">lang</span><span class="p">:</span><span class="n">makeDisplayText</span><span class="p">(</span><span class="n">auto_display</span><span class="p">,</span> <span class="n">sc</span><span class="p">)</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a> <span class="kr">end</span> </span><span id="L-286"><a href="#L-286"><span class="linenos" data-line="286"></span></a> </span><span id="L-287"><a href="#L-287"><span class="linenos" data-line="287"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="kr">then</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a> <span class="kr">return</span> <span class="n">link</span><span class="p">.</span><span class="n">display</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a> <span class="kr">end</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="c1">-- If the target is the same as the current page, there is no sense id</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="c1">-- and either the language code is "und" or the current L2 is the current</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="c1">-- language then return a "self-link" like the software does.</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="kr">if</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="o">==</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">getCurrentTitle</span><span class="p">().</span><span class="n">prefixedText</span> <span class="kr">then</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a> <span class="kd">local</span> <span class="n">fragment</span><span class="p">,</span> <span class="n">current_L2</span> <span class="o">=</span> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span><span class="p">,</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:pages"</span><span class="p">).</span><span class="n">get_current_L2</span><span class="p">()</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="kr">if</span> <span class="p">(</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="n">fragment</span> <span class="ow">and</span> <span class="n">fragment</span> <span class="o">==</span> <span class="n">current_L2</span> <span class="ow">or</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> <span class="ow">not</span> <span class="p">(</span><span class="n">id</span> <span class="ow">or</span> <span class="n">fragment</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"und"</span> <span class="ow">or</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">==</span> <span class="n">current_L2</span><span class="p">)</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="kr">return</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">mw</span><span class="p">.</span><span class="n">html</span><span class="p">.</span><span class="n">create</span><span class="p">(</span><span class="s2">"strong"</span><span class="p">)</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="p">:</span><span class="n">addClass</span><span class="p">(</span><span class="s2">"selflink"</span><span class="p">)</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="p">:</span><span class="n">wikitext</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">display</span><span class="p">))</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="kr">end</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> <span class="kr">end</span> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a> <span class="c1">-- Add fragment. Do not add a section link to "Undetermined", as such sections do not exist and are invalid.</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> <span class="c1">-- TabbedLanguages handles links without a section by linking to the "last visited" section, but adding</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> <span class="c1">-- "Undetermined" would break that feature. For localized prefixes that make syntax error, please use the</span> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a> <span class="c1">-- format: ["xyz"] = true.</span> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a> <span class="kd">local</span> <span class="n">prefix</span> <span class="o">=</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"^:*([^:]+):"</span><span class="p">)</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="n">prefix</span> <span class="ow">and</span> <span class="n">ulower</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> </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">prefix</span> <span class="o">~=</span> <span class="s2">"category"</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">prefix</span> <span class="ow">and</span> <span class="n">load_data</span><span class="p">(</span><span class="s2">"Module:data/interwikis"</span><span class="p">)[</span><span class="n">prefix</span><span class="p">])</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="kr">if</span> <span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="ow">or</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"#"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">plain</span> <span class="kr">then</span> </span><span id="L-315"><a href="#L-315"><span class="linenos" data-line="315"></span></a> <span class="n">track</span><span class="p">(</span><span class="s2">"fragment"</span><span class="p">,</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">())</span> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> <span class="kr">if</span> <span class="n">cats</span> <span class="kr">then</span> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">cats</span><span class="p">,</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" links with manual fragments"</span><span class="p">)</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">end</span> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="kr">then</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a> <span class="kr">if</span> <span class="n">id</span> <span class="kr">then</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="o">=</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"und"</span> <span class="ow">and</span> <span class="n">anchor_encode</span><span class="p">(</span><span class="n">id</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:anchors"</span><span class="p">).</span><span class="n">language_anchor</span><span class="p">(</span><span class="n">lang</span><span class="p">,</span> <span class="n">id</span><span class="p">)</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a> <span class="kr">elseif</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">()</span> <span class="o">~=</span> <span class="s2">"und"</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s2">"^Appendix:"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s2">"^Reconstruction:"</span><span class="p">))</span> <span class="kr">then</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="o">=</span> <span class="n">anchor_encode</span><span class="p">(</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">())</span> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a> <span class="kr">end</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a> <span class="kr">end</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> <span class="kr">end</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> <span class="c1">-- Put inward-facing square brackets around a link to isolated spacing character(s).</span> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a> <span class="kr">if</span> <span class="n">isolated</span> <span class="ow">and</span> <span class="o">#</span><span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">></span> <span class="mi">0</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">umatch</span><span class="p">(</span><span class="n">decode_entities</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">display</span><span class="p">),</span> <span class="s2">"%S"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">=</span> <span class="s2">"&#x5D;"</span> <span class="o">..</span> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">..</span> <span class="s2">"&#x5B;"</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> <span class="kr">end</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"^(:?)(.*)"</span><span class="p">,</span> <span class="kr">function</span><span class="p">(</span><span class="n">m1</span><span class="p">,</span> <span class="n">m2</span><span class="p">)</span> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="kr">return</span> <span class="n">m1</span> <span class="o">..</span> <span class="n">encode_entities</span><span class="p">(</span><span class="n">m2</span><span class="p">,</span> <span class="s2">"#%&+/:<=>@[</span><span class="se">\\</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">end</span><span class="p">)</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="o">=</span> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="ow">and</span> <span class="n">encode_entities</span><span class="p">(</span><span class="n">remove_formatting</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">fragment</span><span class="p">),</span> <span class="s2">"#%&+/:<=>@[</span><span class="se">\\</span><span class="s2">]_{|}"</span><span class="p">)</span> </span><span id="L-340"><a href="#L-340"><span class="linenos" data-line="340"></span></a> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> <span class="kr">return</span> <span class="s2">"[["</span> <span class="o">..</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="o">..</span> <span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="ow">and</span> <span class="s2">"#"</span> <span class="o">..</span> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">)</span> <span class="o">..</span> <span class="s2">"|"</span> <span class="o">..</span> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">..</span> <span class="s2">"]]"</span> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a><span class="kr">end</span> </span><span id="L-343"><a href="#L-343"><span class="linenos" data-line="343"></span></a> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a> </span><span id="L-345"><a href="#L-345"><span class="linenos" data-line="345"></span></a><span class="c1">-- Split a link into its parts</span> </span><span id="L-346"><a href="#L-346"><span class="linenos" data-line="346"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">parse_link</span><span class="p">(</span><span class="n">linktext</span><span class="p">)</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a> <span class="kd">local</span> <span class="n">link</span> <span class="o">=</span> <span class="p">{</span><span class="n">target</span> <span class="o">=</span> <span class="n">linktext</span><span class="p">}</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a> </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">target</span> <span class="o">=</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span> </span><span id="L-350"><a href="#L-350"><span class="linenos" data-line="350"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">,</span> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">=</span> <span class="n">target</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"^(..-)|(.+)$"</span><span class="p">)</span> </span><span id="L-351"><a href="#L-351"><span class="linenos" data-line="351"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="kr">then</span> </span><span id="L-352"><a href="#L-352"><span class="linenos" data-line="352"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span> </span><span id="L-353"><a href="#L-353"><span class="linenos" data-line="353"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">=</span> <span class="n">target</span> </span><span id="L-354"><a href="#L-354"><span class="linenos" data-line="354"></span></a> <span class="kr">end</span> </span><span id="L-355"><a href="#L-355"><span class="linenos" data-line="355"></span></a> </span><span id="L-356"><a href="#L-356"><span class="linenos" data-line="356"></span></a> <span class="c1">-- There's no point in processing these, as they aren't real links.</span> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a> <span class="kd">local</span> <span class="n">target_lower</span> <span class="o">=</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">:</span><span class="n">lower</span><span class="p">()</span> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">false_positive</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">({</span><span class="s2">"category"</span><span class="p">,</span> <span class="s2">"cat"</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-359"><a href="#L-359"><span class="linenos" data-line="359"></span></a> <span class="kr">if</span> <span class="n">target_lower</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"^"</span> <span class="o">..</span> <span class="n">false_positive</span> <span class="o">..</span> <span class="s2">":"</span><span class="p">)</span> <span class="kr">then</span> <span class="kr">return</span> <span class="kc">nil</span> <span class="kr">end</span> </span><span id="L-360"><a href="#L-360"><span class="linenos" data-line="360"></span></a> <span class="kr">end</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">display</span> <span class="o">=</span> <span class="n">decode_entities</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">display</span><span class="p">)</span> </span><span id="L-363"><a href="#L-363"><span class="linenos" data-line="363"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">,</span> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="o">=</span> <span class="n">get_fragment</span><span class="p">(</span><span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">)</span> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a> <span class="c1">-- So that make_link does not look for a fragment again.</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="kr">then</span> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">fragment</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> <span class="kr">end</span> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></span></a> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a> <span class="kr">return</span> <span class="n">link</span> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a><span class="kr">end</span> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a><span class="c1">-- Find embedded links and ensure they link to the correct section.</span> </span><span id="L-374"><a href="#L-374"><span class="linenos" data-line="374"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">process_embedded_links</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">plain</span><span class="p">)</span> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a> <span class="c1">-- Process the non-linked text.</span> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">makeDisplayText</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-377"><a href="#L-377"><span class="linenos" data-line="377"></span></a> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a> <span class="c1">-- If the text begins with * and another character, then act as if each link begins with *. However, don't do this if the * is contained within a link at the start. E.g. `|*[[foo]]` would set all_reconstructed to true, while `|[[*foo]]` would not.</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a> <span class="kd">local</span> <span class="n">all_reconstructed</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">plain</span> <span class="kr">then</span> </span><span id="L-381"><a href="#L-381"><span class="linenos" data-line="381"></span></a> <span class="c1">-- anchor_encode removes links etc.</span> </span><span id="L-382"><a href="#L-382"><span class="linenos" data-line="382"></span></a> <span class="kr">if</span> <span class="n">anchor_encode</span><span class="p">(</span><span class="n">text</span><span class="p">):</span><span class="n">sub</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"*"</span> <span class="kr">then</span> </span><span id="L-383"><a href="#L-383"><span class="linenos" data-line="383"></span></a> <span class="n">all_reconstructed</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a> <span class="kr">end</span> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a> <span class="c1">-- Otherwise, handle any escapes.</span> </span><span id="L-386"><a href="#L-386"><span class="linenos" data-line="386"></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">\\</span><span class="s2">-)</span><span class="se">\\</span><span class="s2">%*"</span><span class="p">,</span> <span class="s2">"%1*"</span><span class="p">)</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a> <span class="kr">end</span> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a> </span><span id="L-389"><a href="#L-389"><span class="linenos" data-line="389"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span> <span class="kr">then</span> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a> <span class="n">track</span><span class="p">(</span><span class="s2">"alt-ignored"</span><span class="p">)</span> </span><span id="L-391"><a href="#L-391"><span class="linenos" data-line="391"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">log</span><span class="p">(</span><span class="s2">"(from Module:links)"</span><span class="p">,</span> <span class="s2">"text with embedded wikilinks:"</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> </span><span id="L-392"><a href="#L-392"><span class="linenos" data-line="392"></span></a> <span class="s2">"ignored alt:"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">,</span> <span class="s2">"lang:"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">())</span> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">cats</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="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" links with ignored alt parameters"</span><span class="p">)</span> </span><span id="L-395"><a href="#L-395"><span class="linenos" data-line="395"></span></a> <span class="kr">end</span> </span><span id="L-396"><a href="#L-396"><span class="linenos" data-line="396"></span></a> <span class="kr">end</span> </span><span id="L-397"><a href="#L-397"><span class="linenos" data-line="397"></span></a> </span><span id="L-398"><a href="#L-398"><span class="linenos" data-line="398"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">id</span> <span class="kr">then</span> </span><span id="L-399"><a href="#L-399"><span class="linenos" data-line="399"></span></a> <span class="n">track</span><span class="p">(</span><span class="s2">"id-ignored"</span><span class="p">)</span> </span><span id="L-400"><a href="#L-400"><span class="linenos" data-line="400"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">log</span><span class="p">(</span><span class="s2">"(from Module:links)"</span><span class="p">,</span> <span class="s2">"text with embedded wikilinks:"</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> </span><span id="L-401"><a href="#L-401"><span class="linenos" data-line="401"></span></a> <span class="s2">"ignored id:"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">id</span><span class="p">,</span> <span class="s2">"lang:"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">())</span> </span><span id="L-402"><a href="#L-402"><span class="linenos" data-line="402"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">cats</span> <span class="kr">then</span> </span><span id="L-403"><a href="#L-403"><span class="linenos" data-line="403"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" links with ignored id parameters"</span><span class="p">)</span> </span><span id="L-404"><a href="#L-404"><span class="linenos" data-line="404"></span></a> <span class="kr">end</span> </span><span id="L-405"><a href="#L-405"><span class="linenos" data-line="405"></span></a> <span class="kr">end</span> </span><span id="L-406"><a href="#L-406"><span class="linenos" data-line="406"></span></a> </span><span id="L-407"><a href="#L-407"><span class="linenos" data-line="407"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">process_link</span><span class="p">(</span><span class="n">space1</span><span class="p">,</span> <span class="n">linktext</span><span class="p">,</span> <span class="n">space2</span><span class="p">)</span> </span><span id="L-408"><a href="#L-408"><span class="linenos" data-line="408"></span></a> <span class="kd">local</span> <span class="n">capture</span> <span class="o">=</span> <span class="s2">"[["</span> <span class="o">..</span> <span class="n">linktext</span> <span class="o">..</span> <span class="s2">"]]"</span> </span><span id="L-409"><a href="#L-409"><span class="linenos" data-line="409"></span></a> </span><span id="L-410"><a href="#L-410"><span class="linenos" data-line="410"></span></a> <span class="kd">local</span> <span class="n">link</span> <span class="o">=</span> <span class="n">parse_link</span><span class="p">(</span><span class="n">linktext</span><span class="p">)</span> </span><span id="L-411"><a href="#L-411"><span class="linenos" data-line="411"></span></a> </span><span id="L-412"><a href="#L-412"><span class="linenos" data-line="412"></span></a> <span class="c1">--Return unprocessed false positives untouched (e.g. categories).</span> </span><span id="L-413"><a href="#L-413"><span class="linenos" data-line="413"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">link</span> <span class="kr">then</span> <span class="kr">return</span> <span class="n">capture</span> <span class="kr">end</span> </span><span id="L-414"><a href="#L-414"><span class="linenos" data-line="414"></span></a> </span><span id="L-415"><a href="#L-415"><span class="linenos" data-line="415"></span></a> <span class="kr">if</span> <span class="n">all_reconstructed</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s2">"^%*"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-416"><a href="#L-416"><span class="linenos" data-line="416"></span></a> <span class="n">link</span><span class="p">.</span><span class="n">target</span> <span class="o">=</span> <span class="s2">"*"</span> <span class="o">..</span> <span class="n">link</span><span class="p">.</span><span class="n">target</span> </span><span id="L-417"><a href="#L-417"><span class="linenos" data-line="417"></span></a> <span class="kr">end</span> </span><span id="L-418"><a href="#L-418"><span class="linenos" data-line="418"></span></a> </span><span id="L-419"><a href="#L-419"><span class="linenos" data-line="419"></span></a> <span class="n">linktext</span> <span class="o">=</span> <span class="n">make_link</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">id</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="n">plain</span><span class="p">)</span> </span><span id="L-420"><a href="#L-420"><span class="linenos" data-line="420"></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">\3</span><span class="s2">"</span><span class="p">)</span> </span><span id="L-421"><a href="#L-421"><span class="linenos" data-line="421"></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">\4</span><span class="s2">"</span><span class="p">)</span> </span><span id="L-422"><a href="#L-422"><span class="linenos" data-line="422"></span></a> </span><span id="L-423"><a href="#L-423"><span class="linenos" data-line="423"></span></a> <span class="kr">return</span> <span class="n">space1</span> <span class="o">..</span> <span class="n">linktext</span> <span class="o">..</span> <span class="n">space2</span> </span><span id="L-424"><a href="#L-424"><span class="linenos" data-line="424"></span></a> <span class="kr">end</span> </span><span id="L-425"><a href="#L-425"><span class="linenos" data-line="425"></span></a> </span><span id="L-426"><a href="#L-426"><span class="linenos" data-line="426"></span></a> <span class="c1">-- Use chars 1 and 2 as temporary substitutions, so that we can use charsets. These are converted to chars 3 and 4 by process_link, which means we can convert any remaining chars 1 and 2 back to square brackets (i.e. those not part of a link).</span> </span><span id="L-427"><a href="#L-427"><span class="linenos" data-line="427"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> </span><span id="L-428"><a href="#L-428"><span class="linenos" data-line="428"></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-429"><a href="#L-429"><span class="linenos" data-line="429"></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-430"><a href="#L-430"><span class="linenos" data-line="430"></span></a> <span class="c1">-- If the script uses ^ to capitalize transliterations, make sure that any carets preceding links are on the inside, so that they get processed with the following text.</span> </span><span id="L-431"><a href="#L-431"><span class="linenos" data-line="431"></span></a> <span class="kr">if</span> <span class="n">text</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"%^"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">:</span><span class="n">hasCapitalization</span><span class="p">()</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">:</span><span class="n">isTransliterated</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-432"><a href="#L-432"><span class="linenos" data-line="432"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">escape</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"^"</span><span class="p">)</span> </span><span id="L-433"><a href="#L-433"><span class="linenos" data-line="433"></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="se">\1</span><span class="s2">%^"</span><span class="p">)</span> </span><span id="L-434"><a href="#L-434"><span class="linenos" data-line="434"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">unescape</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"^"</span><span class="p">)</span> </span><span id="L-435"><a href="#L-435"><span class="linenos" data-line="435"></span></a> <span class="kr">end</span> </span><span id="L-436"><a href="#L-436"><span class="linenos" data-line="436"></span></a> <span class="n">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">(%s*)([^</span><span class="se">\1\2</span><span class="s2">]-)(%s*)</span><span class="se">\2</span><span class="s2">"</span><span class="p">,</span> <span class="n">process_link</span><span class="p">)</span> </span><span id="L-437"><a href="#L-437"><span class="linenos" data-line="437"></span></a> </span><span id="L-438"><a href="#L-438"><span class="linenos" data-line="438"></span></a> <span class="c1">-- Remove the extra * at the beginning of a language link if it's immediately followed by a link whose display begins with * too.</span> </span><span id="L-439"><a href="#L-439"><span class="linenos" data-line="439"></span></a> <span class="kr">if</span> <span class="n">all_reconstructed</span> <span class="kr">then</span> </span><span id="L-440"><a href="#L-440"><span class="linenos" data-line="440"></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">\3</span><span class="s2">([^|</span><span class="se">\1</span><span class="s2">-</span><span class="se">\4</span><span class="s2">]+)|%*"</span><span class="p">,</span> <span class="s2">"</span><span class="se">\3</span><span class="s2">%1|*"</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">end</span> </span><span id="L-442"><a href="#L-442"><span class="linenos" data-line="442"></span></a> </span><span id="L-443"><a href="#L-443"><span class="linenos" data-line="443"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">text</span> </span><span id="L-444"><a href="#L-444"><span class="linenos" data-line="444"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"[</span><span class="se">\1\3</span><span class="s2">]"</span><span class="p">,</span> <span class="s2">"[["</span><span class="p">)</span> </span><span id="L-445"><a href="#L-445"><span class="linenos" data-line="445"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"[</span><span class="se">\2\4</span><span class="s2">]"</span><span class="p">,</span> <span class="s2">"]]"</span><span class="p">))</span> </span><span id="L-446"><a href="#L-446"><span class="linenos" data-line="446"></span></a><span class="kr">end</span> </span><span id="L-447"><a href="#L-447"><span class="linenos" data-line="447"></span></a> </span><span id="L-448"><a href="#L-448"><span class="linenos" data-line="448"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">handle_redundant_wikilink</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> </span><span id="L-449"><a href="#L-449"><span class="linenos" data-line="449"></span></a> <span class="kd">local</span> <span class="n">text</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span> </span><span id="L-450"><a href="#L-450"><span class="linenos" data-line="450"></span></a> <span class="kr">if</span> <span class="p">(</span> <span class="c1">-- Filters out anything but "[[...]]" with no intermediate "[[" or "]]".</span> </span><span id="L-451"><a href="#L-451"><span class="linenos" data-line="451"></span></a> <span class="ow">not</span> <span class="n">match</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"^()%[%["</span><span class="p">)</span> <span class="ow">or</span> <span class="c1">-- Faster than sub(text, 1, 2) ~= "[[".</span> </span><span id="L-452"><a href="#L-452"><span class="linenos" data-line="452"></span></a> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"[["</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="ow">or</span> </span><span id="L-453"><a href="#L-453"><span class="linenos" data-line="453"></span></a> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"]]"</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="o">~=</span> <span class="o">#</span><span class="n">text</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-454"><a href="#L-454"><span class="linenos" data-line="454"></span></a> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-455"><a href="#L-455"><span class="linenos" data-line="455"></span></a> <span class="kr">return</span> </span><span id="L-456"><a href="#L-456"><span class="linenos" data-line="456"></span></a> <span class="kr">end</span> </span><span id="L-457"><a href="#L-457"><span class="linenos" data-line="457"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">)</span> </span><span id="L-458"><a href="#L-458"><span class="linenos" data-line="458"></span></a> <span class="c1">-- A pipe at the start of an embedded link is treated as part of the target (e.g. [[|foo]]: "|foo").</span> </span><span id="L-459"><a href="#L-459"><span class="linenos" data-line="459"></span></a> <span class="c1">-- FIXME: This should be handled via a proper escape sequence.</span> </span><span id="L-460"><a href="#L-460"><span class="linenos" data-line="460"></span></a> <span class="kd">local</span> <span class="n">pipe</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"|"</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-461"><a href="#L-461"><span class="linenos" data-line="461"></span></a> <span class="kd">local</span> <span class="n">term</span> <span class="o">=</span> <span class="n">pipe</span> <span class="ow">and</span> <span class="n">sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">pipe</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="ow">or</span> <span class="n">text</span> </span><span id="L-462"><a href="#L-462"><span class="linenos" data-line="462"></span></a> <span class="kd">local</span> <span class="n">title</span> <span class="o">=</span> <span class="n">new_title</span><span class="p">(</span><span class="n">term</span><span class="p">)</span> </span><span id="L-463"><a href="#L-463"><span class="linenos" data-line="463"></span></a> <span class="kr">if</span> <span class="n">title</span> <span class="kr">then</span> </span><span id="L-464"><a href="#L-464"><span class="linenos" data-line="464"></span></a> <span class="kd">local</span> <span class="n">namespace</span> <span class="o">=</span> <span class="n">title</span><span class="p">.</span><span class="n">namespace</span> </span><span id="L-465"><a href="#L-465"><span class="linenos" data-line="465"></span></a> <span class="c1">-- Categories and files are false-positives.</span> </span><span id="L-466"><a href="#L-466"><span class="linenos" data-line="466"></span></a> <span class="kr">if</span> <span class="n">namespace</span> <span class="o">==</span> <span class="mi">6</span> <span class="ow">or</span> <span class="n">namespace</span> <span class="o">==</span> <span class="mi">14</span> <span class="kr">then</span> </span><span id="L-467"><a href="#L-467"><span class="linenos" data-line="467"></span></a> <span class="kr">return</span> </span><span id="L-468"><a href="#L-468"><span class="linenos" data-line="468"></span></a> <span class="kr">end</span> </span><span id="L-469"><a href="#L-469"><span class="linenos" data-line="469"></span></a> <span class="kr">end</span> </span><span id="L-470"><a href="#L-470"><span class="linenos" data-line="470"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span> <span class="o">=</span> <span class="n">term</span><span class="p">,</span> <span class="n">pipe</span> <span class="ow">and</span> <span class="n">pipe</span> <span class="o">~=</span> <span class="o">#</span><span class="n">text</span> <span class="ow">and</span> <span class="n">sub</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">pipe</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">nil</span> </span><span id="L-471"><a href="#L-471"><span class="linenos" data-line="471"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">cats</span> <span class="kr">then</span> </span><span id="L-472"><a href="#L-472"><span class="linenos" data-line="472"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" links with redundant wikilinks"</span><span class="p">)</span> </span><span id="L-473"><a href="#L-473"><span class="linenos" data-line="473"></span></a> <span class="kr">end</span> </span><span id="L-474"><a href="#L-474"><span class="linenos" data-line="474"></span></a><span class="kr">end</span> </span><span id="L-475"><a href="#L-475"><span class="linenos" data-line="475"></span></a> </span><span id="L-476"><a href="#L-476"><span class="linenos" data-line="476"></span></a><span class="cm">--[==[Creates a basic link to the given term. It links to the language section (such as <code>==English==</code>), but it does not add language and script wrappers, so any code that uses this function should call the <code class="n">[[Module:script utilities#tag_text|tag_text]]</code> from [[Module:script utilities]] to add such wrappers itself at some point.</span> </span><span id="L-477"><a href="#L-477"><span class="linenos" data-line="477"></span></a><span class="cm">The first argument, <code class="n">data</code>, may contain the following items, a subset of the items used in the <code class="n">data</code> argument of <code class="n">full_link</code>. If any other items are included, they are ignored.</span> </span><span id="L-478"><a href="#L-478"><span class="linenos" data-line="478"></span></a><span class="cm">{ {</span> </span><span id="L-479"><a href="#L-479"><span class="linenos" data-line="479"></span></a><span class="cm"> term = entry_to_link_to,</span> </span><span id="L-480"><a href="#L-480"><span class="linenos" data-line="480"></span></a><span class="cm"> alt = link_text_or_displayed_text,</span> </span><span id="L-481"><a href="#L-481"><span class="linenos" data-line="481"></span></a><span class="cm"> lang = language_object,</span> </span><span id="L-482"><a href="#L-482"><span class="linenos" data-line="482"></span></a><span class="cm"> id = sense_id,</span> </span><span id="L-483"><a href="#L-483"><span class="linenos" data-line="483"></span></a><span class="cm">} }</span> </span><span id="L-484"><a href="#L-484"><span class="linenos" data-line="484"></span></a><span class="cm">; <code class="n">term</code></span> </span><span id="L-485"><a href="#L-485"><span class="linenos" data-line="485"></span></a><span class="cm">: Text to turn into a link. This is generally the name of a page. The text can contain wikilinks already embedded in it. These are processed individually just like a single link would be. The <code class="n">alt</code> argument is ignored in this case.</span> </span><span id="L-486"><a href="#L-486"><span class="linenos" data-line="486"></span></a><span class="cm">; <code class="n">alt</code> (''optional'')</span> </span><span id="L-487"><a href="#L-487"><span class="linenos" data-line="487"></span></a><span class="cm">: The alternative display for the link, if different from the linked page. If this is {{code|lua|nil}}, the <code class="n">text</code> argument is used instead (much like regular wikilinks). If <code class="n">text</code> contains wikilinks in it, this argument is ignored and has no effect. (Links in which the alt is ignored are tracked with the tracking template {{whatlinkshere|tracking=links/alt-ignored}}.)</span> </span><span id="L-488"><a href="#L-488"><span class="linenos" data-line="488"></span></a><span class="cm">; <code class="n">lang</code></span> </span><span id="L-489"><a href="#L-489"><span class="linenos" data-line="489"></span></a><span class="cm">: The [[Module:languages#Language objects|language object]] for the term being linked. If this argument is defined, the function will determine the language's canonical name (see [[Template:language data documentation]]), and point the link or links in the <code class="n">term</code> to the language's section of an entry, or to a language-specific senseid if the <code class="n">id</code> argument is defined.</span> </span><span id="L-490"><a href="#L-490"><span class="linenos" data-line="490"></span></a><span class="cm">; <code class="n">id</code> (''optional'')</span> </span><span id="L-491"><a href="#L-491"><span class="linenos" data-line="491"></span></a><span class="cm">: Sense id string. If this argument is defined, the link will point to a language-specific sense id ({{ll|en|identifier|id=HTML}}) created by the template {{temp|senseid}}. A sense id consists of the language's canonical name, a hyphen (<code>-</code>), and the string that was supplied as the <code class="n">id</code> argument. This is useful when a term has more than one sense in a language. If the <code class="n">term</code> argument contains wikilinks, this argument is ignored. (Links in which the sense id is ignored are tracked with the tracking template {{whatlinkshere|tracking=links/id-ignored}}.)</span> </span><span id="L-492"><a href="#L-492"><span class="linenos" data-line="492"></span></a><span class="cm">The second argument is as follows:</span> </span><span id="L-493"><a href="#L-493"><span class="linenos" data-line="493"></span></a><span class="cm">; <code class="n">allow_self_link</code></span> </span><span id="L-494"><a href="#L-494"><span class="linenos" data-line="494"></span></a><span class="cm">: If {{code|lua|true}}, the function will also generate links to the current page. The default ({{code|lua|false}}) will not generate a link but generate a bolded "self link" instead.</span> </span><span id="L-495"><a href="#L-495"><span class="linenos" data-line="495"></span></a><span class="cm">The following special options are processed for each link (both simple text and with embedded wikilinks):</span> </span><span id="L-496"><a href="#L-496"><span class="linenos" data-line="496"></span></a><span class="cm">* The target page name will be processed to generate the correct entry name. This is done by the [[Module:languages#makeEntryName|makeEntryName]] function in [[Module:languages]], using the <code class="n">entry_name</code> replacements in the language's data file (see [[Template:language data documentation]] for more information). This function is generally used to automatically strip dictionary-only diacritics that are not part of the normal written form of a language.</span> </span><span id="L-497"><a href="#L-497"><span class="linenos" data-line="497"></span></a><span class="cm">* If the text starts with <code class="n">*</code>, then the term is considered a reconstructed term, and a link to the Reconstruction: namespace will be created. If the text contains embedded wikilinks, then <code class="n">*</code> is automatically applied to each one individually, while preserving the displayed form of each link as it was given. This allows linking to phrases containing multiple reconstructed terms, while only showing the * once at the beginning.</span> </span><span id="L-498"><a href="#L-498"><span class="linenos" data-line="498"></span></a><span class="cm">* If the text starts with <code class="n">:</code>, then the link is treated as "raw" and the above steps are skipped. This can be used in rare cases where the page name begins with <code class="n">*</code> or if diacritics should not be stripped. For example:</span> </span><span id="L-499"><a href="#L-499"><span class="linenos" data-line="499"></span></a><span class="cm">** {{temp|l|en|*nix}} links to the nonexistent page [[Reconstruction:English/nix]] (<code class="n">*</code> is interpreted as a reconstruction), but {{temp|l|en|:*nix}} links to [[*nix]].</span> </span><span id="L-500"><a href="#L-500"><span class="linenos" data-line="500"></span></a><span class="cm">** {{temp|l|sl|Franche-Comté}} links to the nonexistent page [[Franche-Comte]] (<code>é</code> is converted to <code>e</code> by <code class="n">makeEntryName</code>), but {{temp|l|sl|:Franche-Comté}} links to [[Franche-Comté]].]==]</span> </span><span id="L-501"><a href="#L-501"><span class="linenos" data-line="501"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">language_link</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> </span><span id="L-502"><a href="#L-502"><span class="linenos" data-line="502"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-503"><a href="#L-503"><span class="linenos" data-line="503"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The first argument to the function language_link must be a table. See Module:links/documentation for more information."</span><span class="p">)</span> </span><span id="L-504"><a href="#L-504"><span class="linenos" data-line="504"></span></a> <span class="c1">-- Do we have a redundant wikilink? If so, remove it.</span> </span><span id="L-505"><a href="#L-505"><span class="linenos" data-line="505"></span></a> <span class="kr">elseif</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span> <span class="kr">then</span> </span><span id="L-506"><a href="#L-506"><span class="linenos" data-line="506"></span></a> <span class="n">handle_redundant_wikilink</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> </span><span id="L-507"><a href="#L-507"><span class="linenos" data-line="507"></span></a> <span class="c1">-- Nothing to process, return nil.</span> </span><span id="L-508"><a href="#L-508"><span class="linenos" data-line="508"></span></a> <span class="kr">elseif</span> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span> <span class="kr">then</span> </span><span id="L-509"><a href="#L-509"><span class="linenos" data-line="509"></span></a> <span class="kr">return</span> <span class="kc">nil</span> </span><span id="L-510"><a href="#L-510"><span class="linenos" data-line="510"></span></a> <span class="kr">end</span> </span><span id="L-511"><a href="#L-511"><span class="linenos" data-line="511"></span></a> </span><span id="L-512"><a href="#L-512"><span class="linenos" data-line="512"></span></a> <span class="kd">local</span> <span class="n">text</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span> </span><span id="L-513"><a href="#L-513"><span class="linenos" data-line="513"></span></a> </span><span id="L-514"><a href="#L-514"><span class="linenos" data-line="514"></span></a> <span class="c1">-- If we don't have a script, get one.</span> </span><span id="L-515"><a href="#L-515"><span class="linenos" data-line="515"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span> <span class="kr">then</span> </span><span id="L-516"><a href="#L-516"><span class="linenos" data-line="516"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">sc</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">findBestScript</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">alt</span> <span class="ow">or</span> <span class="n">text</span><span class="p">)</span> </span><span id="L-517"><a href="#L-517"><span class="linenos" data-line="517"></span></a> <span class="kr">end</span> </span><span id="L-518"><a href="#L-518"><span class="linenos" data-line="518"></span></a> </span><span id="L-519"><a href="#L-519"><span class="linenos" data-line="519"></span></a> <span class="c1">-- Do we have embedded wikilinks? If so, they need to be processed individually.</span> </span><span id="L-520"><a href="#L-520"><span class="linenos" data-line="520"></span></a> <span class="kr">if</span> <span class="n">text</span> <span class="kr">then</span> </span><span id="L-521"><a href="#L-521"><span class="linenos" data-line="521"></span></a> <span class="kd">local</span> <span class="n">open</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"[["</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-522"><a href="#L-522"><span class="linenos" data-line="522"></span></a> <span class="kr">if</span> <span class="n">open</span> <span class="ow">and</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"]]"</span><span class="p">,</span> <span class="n">open</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-523"><a href="#L-523"><span class="linenos" data-line="523"></span></a> <span class="kr">return</span> <span class="n">process_embedded_links</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span> </span><span id="L-524"><a href="#L-524"><span class="linenos" data-line="524"></span></a> <span class="kr">end</span> </span><span id="L-525"><a href="#L-525"><span class="linenos" data-line="525"></span></a> <span class="kr">end</span> </span><span id="L-526"><a href="#L-526"><span class="linenos" data-line="526"></span></a> </span><span id="L-527"><a href="#L-527"><span class="linenos" data-line="527"></span></a> <span class="c1">-- If not, make a link using the parameters.</span> </span><span id="L-528"><a href="#L-528"><span class="linenos" data-line="528"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> <span class="ow">and</span> <span class="n">trim</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-529"><a href="#L-529"><span class="linenos" data-line="529"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">alt</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span> <span class="ow">and</span> <span class="n">trim</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">)</span> </span><span id="L-530"><a href="#L-530"><span class="linenos" data-line="530"></span></a> <span class="kr">return</span> <span class="n">make_link</span><span class="p">({</span><span class="n">target</span> <span class="o">=</span> <span class="n">text</span><span class="p">,</span> <span class="n">display</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">,</span> <span class="n">fragment</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">fragment</span><span class="p">},</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">id</span><span class="p">,</span> <span class="kc">true</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">no_alt_ast</span><span class="p">)</span> </span><span id="L-531"><a href="#L-531"><span class="linenos" data-line="531"></span></a><span class="kr">end</span> </span><span id="L-532"><a href="#L-532"><span class="linenos" data-line="532"></span></a> </span><span id="L-533"><a href="#L-533"><span class="linenos" data-line="533"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">plain_link</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> </span><span id="L-534"><a href="#L-534"><span class="linenos" data-line="534"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-535"><a href="#L-535"><span class="linenos" data-line="535"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The first argument to the function language_link must be a table. See Module:links/documentation for more information."</span><span class="p">)</span> </span><span id="L-536"><a href="#L-536"><span class="linenos" data-line="536"></span></a> <span class="c1">-- Do we have a redundant wikilink? If so, remove it.</span> </span><span id="L-537"><a href="#L-537"><span class="linenos" data-line="537"></span></a> <span class="kr">elseif</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span> <span class="kr">then</span> </span><span id="L-538"><a href="#L-538"><span class="linenos" data-line="538"></span></a> <span class="n">handle_redundant_wikilink</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> </span><span id="L-539"><a href="#L-539"><span class="linenos" data-line="539"></span></a> <span class="c1">-- Only have alt (or nothing), just return it.</span> </span><span id="L-540"><a href="#L-540"><span class="linenos" data-line="540"></span></a> <span class="kr">else</span> </span><span id="L-541"><a href="#L-541"><span class="linenos" data-line="541"></span></a> <span class="kr">return</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span> </span><span id="L-542"><a href="#L-542"><span class="linenos" data-line="542"></span></a> <span class="kr">end</span> </span><span id="L-543"><a href="#L-543"><span class="linenos" data-line="543"></span></a> </span><span id="L-544"><a href="#L-544"><span class="linenos" data-line="544"></span></a> <span class="c1">-- Make sure the language is "und".</span> </span><span id="L-545"><a href="#L-545"><span class="linenos" data-line="545"></span></a> <span class="kd">local</span> <span class="n">lang</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span> </span><span id="L-546"><a href="#L-546"><span class="linenos" data-line="546"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">lang</span> <span class="ow">or</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-547"><a href="#L-547"><span class="linenos" data-line="547"></span></a> <span class="n">data</span><span class="p">.</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="s2">"und"</span><span class="p">)</span> </span><span id="L-548"><a href="#L-548"><span class="linenos" data-line="548"></span></a> <span class="kr">end</span> </span><span id="L-549"><a href="#L-549"><span class="linenos" data-line="549"></span></a> </span><span id="L-550"><a href="#L-550"><span class="linenos" data-line="550"></span></a> <span class="kd">local</span> <span class="n">text</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span> </span><span id="L-551"><a href="#L-551"><span class="linenos" data-line="551"></span></a> </span><span id="L-552"><a href="#L-552"><span class="linenos" data-line="552"></span></a> <span class="c1">-- If we don't have a script, get one.</span> </span><span id="L-553"><a href="#L-553"><span class="linenos" data-line="553"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span> <span class="kr">then</span> </span><span id="L-554"><a href="#L-554"><span class="linenos" data-line="554"></span></a> <span class="n">data</span><span class="p">.</span><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">findBestScriptWithoutLang</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">alt</span> <span class="ow">or</span> <span class="n">text</span><span class="p">)</span> </span><span id="L-555"><a href="#L-555"><span class="linenos" data-line="555"></span></a> <span class="kr">end</span> </span><span id="L-556"><a href="#L-556"><span class="linenos" data-line="556"></span></a> </span><span id="L-557"><a href="#L-557"><span class="linenos" data-line="557"></span></a> <span class="c1">-- Do we have embedded wikilinks? If so, they need to be processed individually.</span> </span><span id="L-558"><a href="#L-558"><span class="linenos" data-line="558"></span></a> <span class="kd">local</span> <span class="n">open</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"[["</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-559"><a href="#L-559"><span class="linenos" data-line="559"></span></a> <span class="kr">if</span> <span class="n">open</span> <span class="ow">and</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"]]"</span><span class="p">,</span> <span class="n">open</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-560"><a href="#L-560"><span class="linenos" data-line="560"></span></a> <span class="kr">return</span> <span class="n">process_embedded_links</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span> </span><span id="L-561"><a href="#L-561"><span class="linenos" data-line="561"></span></a> <span class="kr">end</span> </span><span id="L-562"><a href="#L-562"><span class="linenos" data-line="562"></span></a> </span><span id="L-563"><a href="#L-563"><span class="linenos" data-line="563"></span></a> <span class="c1">-- If not, make a link using the parameters.</span> </span><span id="L-564"><a href="#L-564"><span class="linenos" data-line="564"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">trim</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-565"><a href="#L-565"><span class="linenos" data-line="565"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">alt</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span> <span class="ow">and</span> <span class="n">trim</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">)</span> </span><span id="L-566"><a href="#L-566"><span class="linenos" data-line="566"></span></a> <span class="kr">return</span> <span class="n">make_link</span><span class="p">({</span><span class="n">target</span> <span class="o">=</span> <span class="n">text</span><span class="p">,</span> <span class="n">display</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">,</span> <span class="n">fragment</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">fragment</span><span class="p">},</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">id</span><span class="p">,</span> <span class="kc">true</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-567"><a href="#L-567"><span class="linenos" data-line="567"></span></a><span class="kr">end</span> </span><span id="L-568"><a href="#L-568"><span class="linenos" data-line="568"></span></a> </span><span id="L-569"><a href="#L-569"><span class="linenos" data-line="569"></span></a><span class="cm">--[==[Replace any links with links to the correct section, but don't link the whole text if no embedded links are found. Returns the display text form.]==]</span> </span><span id="L-570"><a href="#L-570"><span class="linenos" data-line="570"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">embedded_language_links</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> </span><span id="L-571"><a href="#L-571"><span class="linenos" data-line="571"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-572"><a href="#L-572"><span class="linenos" data-line="572"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The first argument to the function language_link must be a table. See Module:links/documentation for more information."</span><span class="p">)</span> </span><span id="L-573"><a href="#L-573"><span class="linenos" data-line="573"></span></a> <span class="kr">end</span> </span><span id="L-574"><a href="#L-574"><span class="linenos" data-line="574"></span></a> </span><span id="L-575"><a href="#L-575"><span class="linenos" data-line="575"></span></a> <span class="kd">local</span> <span class="n">text</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span> </span><span id="L-576"><a href="#L-576"><span class="linenos" data-line="576"></span></a> </span><span id="L-577"><a href="#L-577"><span class="linenos" data-line="577"></span></a> <span class="c1">-- If we don't have a script, get one.</span> </span><span id="L-578"><a href="#L-578"><span class="linenos" data-line="578"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span> <span class="kr">then</span> </span><span id="L-579"><a href="#L-579"><span class="linenos" data-line="579"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">sc</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">findBestScript</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-580"><a href="#L-580"><span class="linenos" data-line="580"></span></a> <span class="kr">end</span> </span><span id="L-581"><a href="#L-581"><span class="linenos" data-line="581"></span></a> </span><span id="L-582"><a href="#L-582"><span class="linenos" data-line="582"></span></a> <span class="c1">-- Do we have embedded wikilinks? If so, they need to be processed individually.</span> </span><span id="L-583"><a href="#L-583"><span class="linenos" data-line="583"></span></a> <span class="kd">local</span> <span class="n">open</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"[["</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> </span><span id="L-584"><a href="#L-584"><span class="linenos" data-line="584"></span></a> <span class="kr">if</span> <span class="n">open</span> <span class="ow">and</span> <span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="s2">"]]"</span><span class="p">,</span> <span class="n">open</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-585"><a href="#L-585"><span class="linenos" data-line="585"></span></a> <span class="kr">return</span> <span class="n">process_embedded_links</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span> </span><span id="L-586"><a href="#L-586"><span class="linenos" data-line="586"></span></a> <span class="kr">end</span> </span><span id="L-587"><a href="#L-587"><span class="linenos" data-line="587"></span></a> </span><span id="L-588"><a href="#L-588"><span class="linenos" data-line="588"></span></a> <span class="c1">-- If not, return the display text.</span> </span><span id="L-589"><a href="#L-589"><span class="linenos" data-line="589"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">trim</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> </span><span id="L-590"><a href="#L-590"><span class="linenos" data-line="590"></span></a> <span class="c1">-- FIXME: Double-escape any percent-signs, because we don't want to treat non-linked text as having percent-encoded characters. This is a hack: percent-decoding should come out of [[Module:languages]] and only dealt with in this module, as it's specific to links.</span> </span><span id="L-591"><a href="#L-591"><span class="linenos" data-line="591"></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="s2">"%%25"</span><span class="p">)</span> </span><span id="L-592"><a href="#L-592"><span class="linenos" data-line="592"></span></a> <span class="kr">return</span> <span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">makeDisplayText</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">,</span> <span class="kc">true</span><span class="p">))</span> </span><span id="L-593"><a href="#L-593"><span class="linenos" data-line="593"></span></a><span class="kr">end</span> </span><span id="L-594"><a href="#L-594"><span class="linenos" data-line="594"></span></a> </span><span id="L-595"><a href="#L-595"><span class="linenos" data-line="595"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">mark</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">item_type</span><span class="p">,</span> <span class="n">face</span><span class="p">,</span> <span class="n">lang</span><span class="p">)</span> </span><span id="L-596"><a href="#L-596"><span class="linenos" data-line="596"></span></a> <span class="kd">local</span> <span class="n">tag</span> <span class="o">=</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-597"><a href="#L-597"><span class="linenos" data-line="597"></span></a> </span><span id="L-598"><a href="#L-598"><span class="linenos" data-line="598"></span></a> <span class="kr">if</span> <span class="n">item_type</span> <span class="o">==</span> <span class="s2">"gloss"</span> <span class="kr">then</span> </span><span id="L-599"><a href="#L-599"><span class="linenos" data-line="599"></span></a> <span class="n">tag</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'<span class="mention-gloss-double-quote">“</span><span class="mention-gloss">'</span><span class="p">,</span> </span><span id="L-600"><a href="#L-600"><span class="linenos" data-line="600"></span></a> <span class="s1">'</span><span class="mention-gloss-double-quote">”</span>'</span> <span class="p">}</span> </span><span id="L-601"><a href="#L-601"><span class="linenos" data-line="601"></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">"string"</span> <span class="ow">and</span> <span class="n">text</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s2">"^''[^'].*''$"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-602"><a href="#L-602"><span class="linenos" data-line="602"></span></a> <span class="c1">-- Temporary tracking for mention glosses that are entirely italicized or bolded, which is probably</span> </span><span id="L-603"><a href="#L-603"><span class="linenos" data-line="603"></span></a> <span class="c1">-- wrong. (Note that this will also find bolded mention glosses since they use triple apostrophes.)</span> </span><span id="L-604"><a href="#L-604"><span class="linenos" data-line="604"></span></a> <span class="n">track</span><span class="p">(</span><span class="s2">"italicized-mention-gloss"</span><span class="p">,</span> <span class="n">lang</span> <span class="ow">and</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">()</span> <span class="ow">or</span> <span class="kc">nil</span><span class="p">)</span> </span><span id="L-605"><a href="#L-605"><span class="linenos" data-line="605"></span></a> <span class="kr">end</span> </span><span id="L-606"><a href="#L-606"><span class="linenos" data-line="606"></span></a> <span class="kr">elseif</span> <span class="n">item_type</span> <span class="o">==</span> <span class="s2">"tr"</span> <span class="kr">then</span> </span><span id="L-607"><a href="#L-607"><span class="linenos" data-line="607"></span></a> <span class="kr">if</span> <span class="n">face</span> <span class="o">==</span> <span class="s2">"term"</span> <span class="kr">then</span> </span><span id="L-608"><a href="#L-608"><span class="linenos" data-line="608"></span></a> <span class="n">tag</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'<span lang="'</span> <span class="o">..</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">()</span> <span class="o">..</span> <span class="s1">'" class="tr mention-tr Latn">'</span><span class="p">,</span> </span><span id="L-609"><a href="#L-609"><span class="linenos" data-line="609"></span></a> <span class="s1">'</span>'</span> <span class="p">}</span> </span><span id="L-610"><a href="#L-610"><span class="linenos" data-line="610"></span></a> <span class="kr">else</span> </span><span id="L-611"><a href="#L-611"><span class="linenos" data-line="611"></span></a> <span class="n">tag</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'<span lang="'</span> <span class="o">..</span> <span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">()</span> <span class="o">..</span> <span class="s1">'" class="tr Latn">'</span><span class="p">,</span> <span class="s1">'</span>'</span> <span class="p">}</span> </span><span id="L-612"><a href="#L-612"><span class="linenos" data-line="612"></span></a> <span class="kr">end</span> </span><span id="L-613"><a href="#L-613"><span class="linenos" data-line="613"></span></a> <span class="kr">elseif</span> <span class="n">item_type</span> <span class="o">==</span> <span class="s2">"ts"</span> <span class="kr">then</span> </span><span id="L-614"><a href="#L-614"><span class="linenos" data-line="614"></span></a> <span class="c1">-- \226\129\160 = word joiner (zero-width non-breaking space) U+2060</span> </span><span id="L-615"><a href="#L-615"><span class="linenos" data-line="615"></span></a> <span class="n">tag</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'<span class="ts mention-ts Latn">/</span><span class="se">\226\129\160</span><span class="s1">'</span><span class="p">,</span> <span class="s1">'</span><span class="se">\226\129\160</span><span class="s1">/</span>'</span> <span class="p">}</span> </span><span id="L-616"><a href="#L-616"><span class="linenos" data-line="616"></span></a> <span class="kr">elseif</span> <span class="n">item_type</span> <span class="o">==</span> <span class="s2">"pos"</span> <span class="kr">then</span> </span><span id="L-617"><a href="#L-617"><span class="linenos" data-line="617"></span></a> <span class="n">tag</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'<span class="ann-pos">'</span><span class="p">,</span> <span class="s1">'</span>'</span> <span class="p">}</span> </span><span id="L-618"><a href="#L-618"><span class="linenos" data-line="618"></span></a> <span class="kr">elseif</span> <span class="n">item_type</span> <span class="o">==</span> <span class="s2">"annotations"</span> <span class="kr">then</span> </span><span id="L-619"><a href="#L-619"><span class="linenos" data-line="619"></span></a> <span class="n">tag</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'<span class="mention-gloss-paren annotation-paren">(</span>'</span><span class="p">,</span> </span><span id="L-620"><a href="#L-620"><span class="linenos" data-line="620"></span></a> <span class="s1">'<span class="mention-gloss-paren annotation-paren">)</span>'</span> <span class="p">}</span> </span><span id="L-621"><a href="#L-621"><span class="linenos" data-line="621"></span></a> <span class="kr">end</span> </span><span id="L-622"><a href="#L-622"><span class="linenos" data-line="622"></span></a> </span><span id="L-623"><a href="#L-623"><span class="linenos" data-line="623"></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">"string"</span> <span class="kr">then</span> </span><span id="L-624"><a href="#L-624"><span class="linenos" data-line="624"></span></a> <span class="kr">return</span> <span class="n">tag</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">..</span> <span class="n">text</span> <span class="o">..</span> <span class="n">tag</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> </span><span id="L-625"><a href="#L-625"><span class="linenos" data-line="625"></span></a> <span class="kr">else</span> </span><span id="L-626"><a href="#L-626"><span class="linenos" data-line="626"></span></a> <span class="kr">return</span> <span class="s2">""</span> </span><span id="L-627"><a href="#L-627"><span class="linenos" data-line="627"></span></a> <span class="kr">end</span> </span><span id="L-628"><a href="#L-628"><span class="linenos" data-line="628"></span></a><span class="kr">end</span> </span><span id="L-629"><a href="#L-629"><span class="linenos" data-line="629"></span></a> </span><span id="L-630"><a href="#L-630"><span class="linenos" data-line="630"></span></a><span class="cm">--[==[Formats the annotations that are displayed with a link created by {{code|lua|full_link}}. Annotations are the extra bits of information that are displayed following the linked term, and include things such as gender, transliteration, gloss and so on. </span> </span><span id="L-631"><a href="#L-631"><span class="linenos" data-line="631"></span></a><span class="cm">* The first argument is a table possessing some or all of the following keys:</span> </span><span id="L-632"><a href="#L-632"><span class="linenos" data-line="632"></span></a><span class="cm">*:; <code class="n">genders</code></span> </span><span id="L-633"><a href="#L-633"><span class="linenos" data-line="633"></span></a><span class="cm">*:: Table containing a list of gender specifications in the style of [[Module:gender and number]].</span> </span><span id="L-634"><a href="#L-634"><span class="linenos" data-line="634"></span></a><span class="cm">*:; <code class="n">tr</code></span> </span><span id="L-635"><a href="#L-635"><span class="linenos" data-line="635"></span></a><span class="cm">*:: Transliteration.</span> </span><span id="L-636"><a href="#L-636"><span class="linenos" data-line="636"></span></a><span class="cm">*:; <code class="n">gloss</code></span> </span><span id="L-637"><a href="#L-637"><span class="linenos" data-line="637"></span></a><span class="cm">*:: Gloss that translates the term in the link, or gives some other descriptive information.</span> </span><span id="L-638"><a href="#L-638"><span class="linenos" data-line="638"></span></a><span class="cm">*:; <code class="n">pos</code></span> </span><span id="L-639"><a href="#L-639"><span class="linenos" data-line="639"></span></a><span class="cm">*:: Part of speech of the linked term. If the given argument matches one of the templates in [[:Category:Part of speech tags]], then call that to show a part-of-speech tag. Otherwise, just show the given text as it is.</span> </span><span id="L-640"><a href="#L-640"><span class="linenos" data-line="640"></span></a><span class="cm">*:; <code class="n">lit</code></span> </span><span id="L-641"><a href="#L-641"><span class="linenos" data-line="641"></span></a><span class="cm">*:: Literal meaning of the term, if the usual meaning is figurative or idiomatic.</span> </span><span id="L-642"><a href="#L-642"><span class="linenos" data-line="642"></span></a><span class="cm">*:Any of the above values can be omitted from the <code class="n">info</code> argument. If a completely empty table is given (with no annotations at all), then an empty string is returned.</span> </span><span id="L-643"><a href="#L-643"><span class="linenos" data-line="643"></span></a><span class="cm">* The second argument is a string. Valid values are listed in [[Module:script utilities/data]] "data.translit" table.]==]</span> </span><span id="L-644"><a href="#L-644"><span class="linenos" data-line="644"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">format_link_annotations</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">face</span><span class="p">)</span> </span><span id="L-645"><a href="#L-645"><span class="linenos" data-line="645"></span></a> <span class="kd">local</span> <span class="n">output</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-646"><a href="#L-646"><span class="linenos" data-line="646"></span></a> </span><span id="L-647"><a href="#L-647"><span class="linenos" data-line="647"></span></a> <span class="c1">-- Interwiki link</span> </span><span id="L-648"><a href="#L-648"><span class="linenos" data-line="648"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">interwiki</span> <span class="kr">then</span> </span><span id="L-649"><a href="#L-649"><span class="linenos" data-line="649"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">interwiki</span><span class="p">)</span> </span><span id="L-650"><a href="#L-650"><span class="linenos" data-line="650"></span></a> <span class="kr">end</span> </span><span id="L-651"><a href="#L-651"><span class="linenos" data-line="651"></span></a> </span><span id="L-652"><a href="#L-652"><span class="linenos" data-line="652"></span></a> <span class="c1">-- Genders</span> </span><span id="L-653"><a href="#L-653"><span class="linenos" data-line="653"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">genders</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-654"><a href="#L-654"><span class="linenos" data-line="654"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">genders</span> <span class="o">=</span> <span class="p">{</span> <span class="n">data</span><span class="p">.</span><span class="n">genders</span> <span class="p">}</span> </span><span id="L-655"><a href="#L-655"><span class="linenos" data-line="655"></span></a> <span class="kr">end</span> </span><span id="L-656"><a href="#L-656"><span class="linenos" data-line="656"></span></a> </span><span id="L-657"><a href="#L-657"><span class="linenos" data-line="657"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">genders</span> <span class="ow">and</span> <span class="o">#</span><span class="n">data</span><span class="p">.</span><span class="n">genders</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-658"><a href="#L-658"><span class="linenos" data-line="658"></span></a> <span class="kd">local</span> <span class="n">m_gen</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:gender and number"</span><span class="p">)</span> </span><span id="L-659"><a href="#L-659"><span class="linenos" data-line="659"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="s2">"&nbsp;"</span> <span class="o">..</span> <span class="n">m_gen</span><span class="p">.</span><span class="n">format_list</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">genders</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">))</span> </span><span id="L-660"><a href="#L-660"><span class="linenos" data-line="660"></span></a> <span class="kr">end</span> </span><span id="L-661"><a href="#L-661"><span class="linenos" data-line="661"></span></a> </span><span id="L-662"><a href="#L-662"><span class="linenos" data-line="662"></span></a> <span class="kd">local</span> <span class="n">annotations</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-663"><a href="#L-663"><span class="linenos" data-line="663"></span></a> </span><span id="L-664"><a href="#L-664"><span class="linenos" data-line="664"></span></a> <span class="c1">-- Transliteration and transcription</span> </span><span id="L-665"><a href="#L-665"><span class="linenos" data-line="665"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">ts</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">ts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-666"><a href="#L-666"><span class="linenos" data-line="666"></span></a> <span class="kd">local</span> <span class="n">kind</span> </span><span id="L-667"><a href="#L-667"><span class="linenos" data-line="667"></span></a> <span class="kr">if</span> <span class="n">face</span> <span class="o">==</span> <span class="s2">"term"</span> <span class="kr">then</span> </span><span id="L-668"><a href="#L-668"><span class="linenos" data-line="668"></span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">face</span> </span><span id="L-669"><a href="#L-669"><span class="linenos" data-line="669"></span></a> <span class="kr">else</span> </span><span id="L-670"><a href="#L-670"><span class="linenos" data-line="670"></span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">"default"</span> </span><span id="L-671"><a href="#L-671"><span class="linenos" data-line="671"></span></a> <span class="kr">end</span> </span><span id="L-672"><a href="#L-672"><span class="linenos" data-line="672"></span></a> </span><span id="L-673"><a href="#L-673"><span class="linenos" data-line="673"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">ts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-674"><a href="#L-674"><span class="linenos" data-line="674"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">annotations</span><span class="p">,</span> </span><span id="L-675"><a href="#L-675"><span class="linenos" data-line="675"></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_translit</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> </span><span id="L-676"><a href="#L-676"><span class="linenos" data-line="676"></span></a> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">export</span><span class="p">.</span><span class="n">mark</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">ts</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">"ts"</span><span class="p">))</span> </span><span id="L-677"><a href="#L-677"><span class="linenos" data-line="677"></span></a> <span class="kr">elseif</span> <span class="n">data</span><span class="p">.</span><span class="n">ts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-678"><a href="#L-678"><span class="linenos" data-line="678"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">annotations</span><span class="p">,</span> <span class="n">export</span><span class="p">.</span><span class="n">mark</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">ts</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">"ts"</span><span class="p">))</span> </span><span id="L-679"><a href="#L-679"><span class="linenos" data-line="679"></span></a> <span class="kr">else</span> </span><span id="L-680"><a href="#L-680"><span class="linenos" data-line="680"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">annotations</span><span class="p">,</span> </span><span id="L-681"><a href="#L-681"><span class="linenos" data-line="681"></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_translit</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> <span class="n">kind</span><span class="p">))</span> </span><span id="L-682"><a href="#L-682"><span class="linenos" data-line="682"></span></a> <span class="kr">end</span> </span><span id="L-683"><a href="#L-683"><span class="linenos" data-line="683"></span></a> <span class="kr">end</span> </span><span id="L-684"><a href="#L-684"><span class="linenos" data-line="684"></span></a> </span><span id="L-685"><a href="#L-685"><span class="linenos" data-line="685"></span></a> <span class="c1">-- Gloss/translation</span> </span><span id="L-686"><a href="#L-686"><span class="linenos" data-line="686"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">gloss</span> <span class="kr">then</span> </span><span id="L-687"><a href="#L-687"><span class="linenos" data-line="687"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">annotations</span><span class="p">,</span> <span class="n">export</span><span class="p">.</span><span class="n">mark</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">gloss</span><span class="p">,</span> <span class="s2">"gloss"</span><span class="p">))</span> </span><span id="L-688"><a href="#L-688"><span class="linenos" data-line="688"></span></a> <span class="kr">end</span> </span><span id="L-689"><a href="#L-689"><span class="linenos" data-line="689"></span></a> </span><span id="L-690"><a href="#L-690"><span class="linenos" data-line="690"></span></a> <span class="c1">-- Part of speech</span> </span><span id="L-691"><a href="#L-691"><span class="linenos" data-line="691"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">pos</span> <span class="kr">then</span> </span><span id="L-692"><a href="#L-692"><span class="linenos" data-line="692"></span></a> <span class="c1">-- debug category for pos= containing transcriptions</span> </span><span id="L-693"><a href="#L-693"><span class="linenos" data-line="693"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">pos</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s2">"/[^><]*/"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-694"><a href="#L-694"><span class="linenos" data-line="694"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">pos</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">pos</span> <span class="o">..</span> <span class="s2">"[[Category:links likely containing transcriptions in pos]]"</span> </span><span id="L-695"><a href="#L-695"><span class="linenos" data-line="695"></span></a> <span class="kr">end</span> </span><span id="L-696"><a href="#L-696"><span class="linenos" data-line="696"></span></a> </span><span id="L-697"><a href="#L-697"><span class="linenos" data-line="697"></span></a> <span class="n">pos_tags</span> <span class="o">=</span> <span class="n">pos_tags</span> <span class="ow">or</span> <span class="n">load_data</span><span class="p">(</span><span class="s2">"Module:links/data"</span><span class="p">).</span><span class="n">pos_tags</span> </span><span id="L-698"><a href="#L-698"><span class="linenos" data-line="698"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">annotations</span><span class="p">,</span> <span class="n">export</span><span class="p">.</span><span class="n">mark</span><span class="p">(</span><span class="n">pos_tags</span><span class="p">[</span><span class="n">data</span><span class="p">.</span><span class="n">pos</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">pos</span><span class="p">,</span> <span class="s2">"pos"</span><span class="p">))</span> </span><span id="L-699"><a href="#L-699"><span class="linenos" data-line="699"></span></a> <span class="kr">end</span> </span><span id="L-700"><a href="#L-700"><span class="linenos" data-line="700"></span></a> </span><span id="L-701"><a href="#L-701"><span class="linenos" data-line="701"></span></a> <span class="c1">-- Literal/sum-of-parts meaning</span> </span><span id="L-702"><a href="#L-702"><span class="linenos" data-line="702"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">lit</span> <span class="kr">then</span> </span><span id="L-703"><a href="#L-703"><span class="linenos" data-line="703"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">annotations</span><span class="p">,</span> <span class="s2">"literally "</span> <span class="o">..</span> <span class="n">export</span><span class="p">.</span><span class="n">mark</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">lit</span><span class="p">,</span> <span class="s2">"gloss"</span><span class="p">))</span> </span><span id="L-704"><a href="#L-704"><span class="linenos" data-line="704"></span></a> <span class="kr">end</span> </span><span id="L-705"><a href="#L-705"><span class="linenos" data-line="705"></span></a> </span><span id="L-706"><a href="#L-706"><span class="linenos" data-line="706"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">annotations</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-707"><a href="#L-707"><span class="linenos" data-line="707"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">export</span><span class="p">.</span><span class="n">mark</span><span class="p">(</span><span class="n">concat</span><span class="p">(</span><span class="n">annotations</span><span class="p">,</span> <span class="s2">", "</span><span class="p">),</span> <span class="s2">"annotations"</span><span class="p">))</span> </span><span id="L-708"><a href="#L-708"><span class="linenos" data-line="708"></span></a> <span class="kr">end</span> </span><span id="L-709"><a href="#L-709"><span class="linenos" data-line="709"></span></a> </span><span id="L-710"><a href="#L-710"><span class="linenos" data-line="710"></span></a> <span class="kr">return</span> <span class="n">concat</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> </span><span id="L-711"><a href="#L-711"><span class="linenos" data-line="711"></span></a><span class="kr">end</span> </span><span id="L-712"><a href="#L-712"><span class="linenos" data-line="712"></span></a> </span><span id="L-713"><a href="#L-713"><span class="linenos" data-line="713"></span></a><span class="c1">-- Add any left or right regular or accent qualifiers, labels or references to a formatted term. `data` is the object</span> </span><span id="L-714"><a href="#L-714"><span class="linenos" data-line="714"></span></a><span class="c1">-- specifying the term, which should optionally contain:</span> </span><span id="L-715"><a href="#L-715"><span class="linenos" data-line="715"></span></a><span class="c1">-- * a language object in `lang`; required if any accent qualifiers or labels are given;</span> </span><span id="L-716"><a href="#L-716"><span class="linenos" data-line="716"></span></a><span class="c1">-- * left regular qualifiers in `q` (an array of strings or a single string); an empty array or blank string will be</span> </span><span id="L-717"><a href="#L-717"><span class="linenos" data-line="717"></span></a><span class="c1">-- ignored;</span> </span><span id="L-718"><a href="#L-718"><span class="linenos" data-line="718"></span></a><span class="c1">-- * right regular qualifiers in `qq` (an array of strings or a single string); an empty array or blank string will be</span> </span><span id="L-719"><a href="#L-719"><span class="linenos" data-line="719"></span></a><span class="c1">-- ignored;</span> </span><span id="L-720"><a href="#L-720"><span class="linenos" data-line="720"></span></a><span class="c1">-- * left accent qualifiers in `a` (an array of strings); an empty array will be ignored;</span> </span><span id="L-721"><a href="#L-721"><span class="linenos" data-line="721"></span></a><span class="c1">-- * right accent qualifiers in `aa` (an array of strings); an empty array will be ignored;</span> </span><span id="L-722"><a href="#L-722"><span class="linenos" data-line="722"></span></a><span class="c1">-- * left labels in `l` (an array of strings); an empty array will be ignored;</span> </span><span id="L-723"><a href="#L-723"><span class="linenos" data-line="723"></span></a><span class="c1">-- * right labels in `ll` (an array of strings); an empty array will be ignored;</span> </span><span id="L-724"><a href="#L-724"><span class="linenos" data-line="724"></span></a><span class="c1">-- * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text`</span> </span><span id="L-725"><a href="#L-725"><span class="linenos" data-line="725"></span></a><span class="c1">-- (formatted reference text) and optionally `name` and/or `group`.</span> </span><span id="L-726"><a href="#L-726"><span class="linenos" data-line="726"></span></a><span class="c1">-- `formatted` is the formatted version of the term itself.</span> </span><span id="L-727"><a href="#L-727"><span class="linenos" data-line="727"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">add_qualifiers_and_refs_to_term</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">formatted</span><span class="p">)</span> </span><span id="L-728"><a href="#L-728"><span class="linenos" data-line="728"></span></a> <span class="kd">local</span> <span class="n">q</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">q</span> </span><span id="L-729"><a href="#L-729"><span class="linenos" data-line="729"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">q</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-730"><a href="#L-730"><span class="linenos" data-line="730"></span></a> <span class="n">q</span> <span class="o">=</span> <span class="p">{</span><span class="n">q</span><span class="p">}</span> </span><span id="L-731"><a href="#L-731"><span class="linenos" data-line="731"></span></a> <span class="kr">end</span> </span><span id="L-732"><a href="#L-732"><span class="linenos" data-line="732"></span></a> <span class="kd">local</span> <span class="n">qq</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">qq</span> </span><span id="L-733"><a href="#L-733"><span class="linenos" data-line="733"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">qq</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-734"><a href="#L-734"><span class="linenos" data-line="734"></span></a> <span class="n">qq</span> <span class="o">=</span> <span class="p">{</span><span class="n">qq</span><span class="p">}</span> </span><span id="L-735"><a href="#L-735"><span class="linenos" data-line="735"></span></a> <span class="kr">end</span> </span><span id="L-736"><a href="#L-736"><span class="linenos" data-line="736"></span></a> <span class="kr">if</span> <span class="n">q</span> <span class="ow">and</span> <span class="n">q</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">qq</span> <span class="ow">and</span> <span class="n">qq</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">a</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">aa</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">aa</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">l</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">l</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> </span><span id="L-737"><a href="#L-737"><span class="linenos" data-line="737"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">ll</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">ll</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">refs</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">refs</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-738"><a href="#L-738"><span class="linenos" data-line="738"></span></a> <span class="n">formatted</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="n">pron_qualifier_module</span><span class="p">).</span><span class="n">format_qualifiers</span> <span class="p">{</span> </span><span id="L-739"><a href="#L-739"><span class="linenos" data-line="739"></span></a> <span class="n">lang</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> </span><span id="L-740"><a href="#L-740"><span class="linenos" data-line="740"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">formatted</span><span class="p">,</span> </span><span id="L-741"><a href="#L-741"><span class="linenos" data-line="741"></span></a> <span class="n">q</span> <span class="o">=</span> <span class="n">q</span><span class="p">,</span> </span><span id="L-742"><a href="#L-742"><span class="linenos" data-line="742"></span></a> <span class="n">qq</span> <span class="o">=</span> <span class="n">qq</span><span class="p">,</span> </span><span id="L-743"><a href="#L-743"><span class="linenos" data-line="743"></span></a> <span class="n">a</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">a</span><span class="p">,</span> </span><span id="L-744"><a href="#L-744"><span class="linenos" data-line="744"></span></a> <span class="n">aa</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">aa</span><span class="p">,</span> </span><span id="L-745"><a href="#L-745"><span class="linenos" data-line="745"></span></a> <span class="n">l</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">l</span><span class="p">,</span> </span><span id="L-746"><a href="#L-746"><span class="linenos" data-line="746"></span></a> <span class="n">ll</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">ll</span><span class="p">,</span> </span><span id="L-747"><a href="#L-747"><span class="linenos" data-line="747"></span></a> <span class="n">refs</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">refs</span><span class="p">,</span> </span><span id="L-748"><a href="#L-748"><span class="linenos" data-line="748"></span></a> <span class="p">}</span> </span><span id="L-749"><a href="#L-749"><span class="linenos" data-line="749"></span></a> <span class="kr">end</span> </span><span id="L-750"><a href="#L-750"><span class="linenos" data-line="750"></span></a> </span><span id="L-751"><a href="#L-751"><span class="linenos" data-line="751"></span></a> <span class="kr">return</span> <span class="n">formatted</span> </span><span id="L-752"><a href="#L-752"><span class="linenos" data-line="752"></span></a><span class="kr">end</span> </span><span id="L-753"><a href="#L-753"><span class="linenos" data-line="753"></span></a> </span><span id="L-754"><a href="#L-754"><span class="linenos" data-line="754"></span></a> </span><span id="L-755"><a href="#L-755"><span class="linenos" data-line="755"></span></a><span class="cm">--[==[Creates a full link, with annotations (see <code class="n">[[#format_link_annotations|format_link_annotations]]</code>), in the style of {{temp|l}} or {{temp|m}}.</span> </span><span id="L-756"><a href="#L-756"><span class="linenos" data-line="756"></span></a><span class="cm">The first argument, <code class="n">data</code>, must be a table. It contains the various elements that can be supplied as parameters to {{temp|l}} or {{temp|m}}:</span> </span><span id="L-757"><a href="#L-757"><span class="linenos" data-line="757"></span></a><span class="cm">{ {</span> </span><span id="L-758"><a href="#L-758"><span class="linenos" data-line="758"></span></a><span class="cm"> term = entry_to_link_to,</span> </span><span id="L-759"><a href="#L-759"><span class="linenos" data-line="759"></span></a><span class="cm"> alt = link_text_or_displayed_text,</span> </span><span id="L-760"><a href="#L-760"><span class="linenos" data-line="760"></span></a><span class="cm"> lang = language_object,</span> </span><span id="L-761"><a href="#L-761"><span class="linenos" data-line="761"></span></a><span class="cm"> sc = script_object,</span> </span><span id="L-762"><a href="#L-762"><span class="linenos" data-line="762"></span></a><span class="cm"> track_sc = boolean,</span> </span><span id="L-763"><a href="#L-763"><span class="linenos" data-line="763"></span></a><span class="cm"> no_nonstandard_sc_cat = boolean,</span> </span><span id="L-764"><a href="#L-764"><span class="linenos" data-line="764"></span></a><span class="cm"> fragment = link_fragment</span> </span><span id="L-765"><a href="#L-765"><span class="linenos" data-line="765"></span></a><span class="cm"> id = sense_id,</span> </span><span id="L-766"><a href="#L-766"><span class="linenos" data-line="766"></span></a><span class="cm"> genders = { "gender1", "gender2", ... },</span> </span><span id="L-767"><a href="#L-767"><span class="linenos" data-line="767"></span></a><span class="cm"> tr = transliteration,</span> </span><span id="L-768"><a href="#L-768"><span class="linenos" data-line="768"></span></a><span class="cm"> ts = transcription,</span> </span><span id="L-769"><a href="#L-769"><span class="linenos" data-line="769"></span></a><span class="cm"> gloss = gloss,</span> </span><span id="L-770"><a href="#L-770"><span class="linenos" data-line="770"></span></a><span class="cm"> pos = part_of_speech_tag,</span> </span><span id="L-771"><a href="#L-771"><span class="linenos" data-line="771"></span></a><span class="cm"> lit = literal_translation,</span> </span><span id="L-772"><a href="#L-772"><span class="linenos" data-line="772"></span></a><span class="cm"> no_alt_ast = boolean,</span> </span><span id="L-773"><a href="#L-773"><span class="linenos" data-line="773"></span></a><span class="cm"> accel = {accelerated_creation_tags},</span> </span><span id="L-774"><a href="#L-774"><span class="linenos" data-line="774"></span></a><span class="cm"> interwiki = interwiki,</span> </span><span id="L-775"><a href="#L-775"><span class="linenos" data-line="775"></span></a><span class="cm"> q = { "left_qualifier1", "left_qualifier2", ...} or "left_qualifier",</span> </span><span id="L-776"><a href="#L-776"><span class="linenos" data-line="776"></span></a><span class="cm"> qq = { "right_qualifier1", "right_qualifier2", ...} or "right_qualifier",</span> </span><span id="L-777"><a href="#L-777"><span class="linenos" data-line="777"></span></a><span class="cm"> refs = { "formatted_ref1", "formatted_ref2", ...} or { {text = "text", name = "name", group = "group"}, ... },</span> </span><span id="L-778"><a href="#L-778"><span class="linenos" data-line="778"></span></a><span class="cm">} }</span> </span><span id="L-779"><a href="#L-779"><span class="linenos" data-line="779"></span></a><span class="cm">Any one of the items in the <code class="n">data</code> table may be {{code|lua|nil}}, but an error will be shown if neither <code class="n">term</code> nor <code class="n">alt</code> nor <code class="n">tr</code> is present.</span> </span><span id="L-780"><a href="#L-780"><span class="linenos" data-line="780"></span></a><span class="cm">Thus, calling {{code|lua|2=full_link{ term = term, lang = lang, sc = sc } }}, where <code class="n">term</code> is an entry name, <code class="n">lang</code> is a [[Module:languages#Language objects|language object]] from [[Module:languages]], and <code class="n">sc</code> is a [[Module:scripts#Script objects|script object]] from [[Module:scripts]], will give a plain link similar to the one produced by the template {{temp|l}}, and calling {{code|lua|2=full_link( { term = term, lang = lang, sc = sc }, "term" )}} will give a link similar to the one produced by the template {{temp|m}}.</span> </span><span id="L-781"><a href="#L-781"><span class="linenos" data-line="781"></span></a><span class="cm">The function will:</span> </span><span id="L-782"><a href="#L-782"><span class="linenos" data-line="782"></span></a><span class="cm">* Try to determine the script, based on the characters found in the term or alt argument, if the script was not given. If a script is given and <code class="n">track_sc</code> is {{code|lua|true}}, it will check whether the input script is the same as the one which would have been automatically generated and add the category [[:Category:Terms with redundant script codes]] if yes, or [[:Category:Terms with non-redundant manual script codes]] if no. This should be used when the input script object is directly determined by a template's <code class="n">sc=</code> parameter.</span> </span><span id="L-783"><a href="#L-783"><span class="linenos" data-line="783"></span></a><span class="cm">* Call <code class="n">[[#language_link|language_link]]</code> on the term or alt forms, to remove diacritics in the page name, process any embedded wikilinks and create links to Reconstruction or Appendix pages when necessary.</span> </span><span id="L-784"><a href="#L-784"><span class="linenos" data-line="784"></span></a><span class="cm">* Call <code class="n">[[Module:script utilities#tag_text]]</code> to add the appropriate language and script tags to the term, and to italicize terms written in the Latin script if necessary. Accelerated creation tags, as used by [[WT:ACCEL]], are included.</span> </span><span id="L-785"><a href="#L-785"><span class="linenos" data-line="785"></span></a><span class="cm">* Generate a transliteration, based on the alt or term arguments, if the script is not Latin and no transliteration was provided.</span> </span><span id="L-786"><a href="#L-786"><span class="linenos" data-line="786"></span></a><span class="cm">* Add the annotations (transliteration, gender, gloss etc.) after the link.</span> </span><span id="L-787"><a href="#L-787"><span class="linenos" data-line="787"></span></a><span class="cm">* If <code class="n">no_alt_ast</code> is specified, then the alt text does not need to contain an asterisk if the language is reconstructed. This should only be used by modules which really need to allow links to reconstructions that don't display asterisks (e.g. number boxes).</span> </span><span id="L-788"><a href="#L-788"><span class="linenos" data-line="788"></span></a><span class="cm">* If <code class="n">show_qualifiers</code> is specified, left and right qualifiers and references will be displayed. (This is for compatibility reasons, since a fair amount of code stores qualifiers and/or references in these fields and displays them itself, expecting {{code|lua|full_link()}} to ignore them.]==]</span> </span><span id="L-789"><a href="#L-789"><span class="linenos" data-line="789"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">full_link</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">face</span><span class="p">,</span> <span class="n">allow_self_link</span><span class="p">,</span> <span class="n">show_qualifiers</span><span class="p">)</span> </span><span id="L-790"><a href="#L-790"><span class="linenos" data-line="790"></span></a> <span class="c1">-- Prevent data from being destructively modified.</span> </span><span id="L-791"><a href="#L-791"><span class="linenos" data-line="791"></span></a> <span class="kd">local</span> <span class="n">data</span> <span class="o">=</span> <span class="n">shallowcopy</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> </span><span id="L-792"><a href="#L-792"><span class="linenos" data-line="792"></span></a> </span><span id="L-793"><a href="#L-793"><span class="linenos" data-line="793"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-794"><a href="#L-794"><span class="linenos" data-line="794"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The first argument to the function full_link must be a table. "</span> </span><span id="L-795"><a href="#L-795"><span class="linenos" data-line="795"></span></a> <span class="o">..</span> <span class="s2">"See Module:links/documentation for more information."</span><span class="p">)</span> </span><span id="L-796"><a href="#L-796"><span class="linenos" data-line="796"></span></a> <span class="kr">end</span> </span><span id="L-797"><a href="#L-797"><span class="linenos" data-line="797"></span></a> </span><span id="L-798"><a href="#L-798"><span class="linenos" data-line="798"></span></a> <span class="kd">local</span> <span class="n">terms</span> <span class="o">=</span> <span class="p">{</span><span class="kc">true</span><span class="p">}</span> </span><span id="L-799"><a href="#L-799"><span class="linenos" data-line="799"></span></a> </span><span id="L-800"><a href="#L-800"><span class="linenos" data-line="800"></span></a> <span class="c1">-- Generate multiple forms if applicable.</span> </span><span id="L-801"><a href="#L-801"><span class="linenos" data-line="801"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">param</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">{</span><span class="s2">"term"</span><span class="p">,</span> <span class="s2">"alt"</span><span class="p">}</span> <span class="kr">do</span> </span><span id="L-802"><a href="#L-802"><span class="linenos" data-line="802"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">])</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">and</span> <span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">]:</span><span class="n">find</span><span class="p">(</span><span class="s2">"//"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-803"><a href="#L-803"><span class="linenos" data-line="803"></span></a> <span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="o">=</span> <span class="n">export</span><span class="p">.</span><span class="n">split_on_slashes</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">])</span> </span><span id="L-804"><a href="#L-804"><span class="linenos" data-line="804"></span></a> <span class="kr">elseif</span> <span class="nb">type</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">])</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s2">"//"</span><span class="p">))</span> <span class="kr">then</span> </span><span id="L-805"><a href="#L-805"><span class="linenos" data-line="805"></span></a> <span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">generateForms</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">])</span> </span><span id="L-806"><a href="#L-806"><span class="linenos" data-line="806"></span></a> <span class="kr">else</span> </span><span id="L-807"><a href="#L-807"><span class="linenos" data-line="807"></span></a> <span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-808"><a href="#L-808"><span class="linenos" data-line="808"></span></a> <span class="kr">end</span> </span><span id="L-809"><a href="#L-809"><span class="linenos" data-line="809"></span></a> <span class="kr">end</span> </span><span id="L-810"><a href="#L-810"><span class="linenos" data-line="810"></span></a> </span><span id="L-811"><a href="#L-811"><span class="linenos" data-line="811"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">param</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">{</span><span class="s2">"sc"</span><span class="p">,</span> <span class="s2">"tr"</span><span class="p">,</span> <span class="s2">"ts"</span><span class="p">}</span> <span class="kr">do</span> </span><span id="L-812"><a href="#L-812"><span class="linenos" data-line="812"></span></a> <span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">]}</span> </span><span id="L-813"><a href="#L-813"><span class="linenos" data-line="813"></span></a> <span class="kr">end</span> </span><span id="L-814"><a href="#L-814"><span class="linenos" data-line="814"></span></a> </span><span id="L-815"><a href="#L-815"><span class="linenos" data-line="815"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">param</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">{</span><span class="s2">"term"</span><span class="p">,</span> <span class="s2">"alt"</span><span class="p">,</span> <span class="s2">"sc"</span><span class="p">,</span> <span class="s2">"tr"</span><span class="p">,</span> <span class="s2">"ts"</span><span class="p">}</span> <span class="kr">do</span> </span><span id="L-816"><a href="#L-816"><span class="linenos" data-line="816"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">param</span><span class="p">])</span> <span class="kr">do</span> </span><span id="L-817"><a href="#L-817"><span class="linenos" data-line="817"></span></a> <span class="n">terms</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-818"><a href="#L-818"><span class="linenos" data-line="818"></span></a> <span class="kr">end</span> </span><span id="L-819"><a href="#L-819"><span class="linenos" data-line="819"></span></a> <span class="kr">end</span> </span><span id="L-820"><a href="#L-820"><span class="linenos" data-line="820"></span></a> </span><span id="L-821"><a href="#L-821"><span class="linenos" data-line="821"></span></a> <span class="c1">-- Create the link</span> </span><span id="L-822"><a href="#L-822"><span class="linenos" data-line="822"></span></a> <span class="kd">local</span> <span class="n">output</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-823"><a href="#L-823"><span class="linenos" data-line="823"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">cats</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-824"><a href="#L-824"><span class="linenos" data-line="824"></span></a> <span class="kd">local</span> <span class="n">link</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-825"><a href="#L-825"><span class="linenos" data-line="825"></span></a> <span class="kd">local</span> <span class="n">annotations</span> </span><span id="L-826"><a href="#L-826"><span class="linenos" data-line="826"></span></a> </span><span id="L-827"><a href="#L-827"><span class="linenos" data-line="827"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">terms</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-828"><a href="#L-828"><span class="linenos" data-line="828"></span></a> <span class="c1">-- Is there any text to show?</span> </span><span id="L-829"><a href="#L-829"><span class="linenos" data-line="829"></span></a> <span class="kr">if</span> <span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="kr">then</span> </span><span id="L-830"><a href="#L-830"><span class="linenos" data-line="830"></span></a> <span class="c1">-- Try to detect the script if it was not provided</span> </span><span id="L-831"><a href="#L-831"><span class="linenos" data-line="831"></span></a> <span class="kd">local</span> <span class="n">display_term</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> </span><span id="L-832"><a href="#L-832"><span class="linenos" data-line="832"></span></a> <span class="kd">local</span> <span class="n">best</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">findBestScript</span><span class="p">(</span><span class="n">display_term</span><span class="p">)</span> </span><span id="L-833"><a href="#L-833"><span class="linenos" data-line="833"></span></a> <span class="c1">-- no_nonstandard_sc_cat is intended for use in [[Module:interproject]]</span> </span><span id="L-834"><a href="#L-834"><span class="linenos" data-line="834"></span></a> <span class="kr">if</span> <span class="p">(</span> </span><span id="L-835"><a href="#L-835"><span class="linenos" data-line="835"></span></a> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">no_nonstandard_sc_cat</span> <span class="ow">and</span> </span><span id="L-836"><a href="#L-836"><span class="linenos" data-line="836"></span></a> <span class="n">best</span><span class="p">:</span><span class="n">getCode</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"None"</span> <span class="ow">and</span> </span><span id="L-837"><a href="#L-837"><span class="linenos" data-line="837"></span></a> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:scripts"</span><span class="p">).</span><span class="n">findBestScriptWithoutLang</span><span class="p">(</span><span class="n">display_term</span><span class="p">):</span><span class="n">getCode</span><span class="p">()</span> <span class="o">~=</span> <span class="s2">"None"</span> </span><span id="L-838"><a href="#L-838"><span class="linenos" data-line="838"></span></a> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-839"><a href="#L-839"><span class="linenos" data-line="839"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" terms in nonstandard scripts"</span><span class="p">)</span> </span><span id="L-840"><a href="#L-840"><span class="linenos" data-line="840"></span></a> <span class="kr">end</span> </span><span id="L-841"><a href="#L-841"><span class="linenos" data-line="841"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-842"><a href="#L-842"><span class="linenos" data-line="842"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">best</span> </span><span id="L-843"><a href="#L-843"><span class="linenos" data-line="843"></span></a> <span class="c1">-- Track uses of sc parameter.</span> </span><span id="L-844"><a href="#L-844"><span class="linenos" data-line="844"></span></a> <span class="kr">elseif</span> <span class="n">data</span><span class="p">.</span><span class="n">track_sc</span> <span class="kr">then</span> </span><span id="L-845"><a href="#L-845"><span class="linenos" data-line="845"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span><span class="n">getCode</span><span class="p">()</span> <span class="o">==</span> <span class="n">best</span><span class="p">:</span><span class="n">getCode</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-846"><a href="#L-846"><span class="linenos" data-line="846"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" terms with redundant script codes"</span><span class="p">)</span> </span><span id="L-847"><a href="#L-847"><span class="linenos" data-line="847"></span></a> <span class="kr">else</span> </span><span id="L-848"><a href="#L-848"><span class="linenos" data-line="848"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" terms with non-redundant manual script codes"</span><span class="p">)</span> </span><span id="L-849"><a href="#L-849"><span class="linenos" data-line="849"></span></a> <span class="kr">end</span> </span><span id="L-850"><a href="#L-850"><span class="linenos" data-line="850"></span></a> <span class="kr">end</span> </span><span id="L-851"><a href="#L-851"><span class="linenos" data-line="851"></span></a> </span><span id="L-852"><a href="#L-852"><span class="linenos" data-line="852"></span></a> <span class="c1">-- If using a discouraged character sequence, add to maintenance category</span> </span><span id="L-853"><a href="#L-853"><span class="linenos" data-line="853"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span><span class="n">hasNormalizationFixes</span><span class="p">()</span> <span class="o">==</span> <span class="kc">true</span> <span class="kr">then</span> </span><span id="L-854"><a href="#L-854"><span class="linenos" data-line="854"></span></a> <span class="kr">if</span> <span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span><span class="n">fixDiscouragedSequences</span><span class="p">(</span><span class="n">toNFC</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> <span class="o">~=</span> <span class="n">toNFC</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> <span class="ow">or</span> <span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span><span class="n">fixDiscouragedSequences</span><span class="p">(</span><span class="n">toNFC</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> <span class="o">~=</span> <span class="n">toNFC</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span> <span class="kr">then</span> </span><span id="L-855"><a href="#L-855"><span class="linenos" data-line="855"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="s2">"Pages using discouraged character sequences"</span><span class="p">)</span> </span><span id="L-856"><a href="#L-856"><span class="linenos" data-line="856"></span></a> <span class="kr">end</span> </span><span id="L-857"><a href="#L-857"><span class="linenos" data-line="857"></span></a> <span class="kr">end</span> </span><span id="L-858"><a href="#L-858"><span class="linenos" data-line="858"></span></a> </span><span id="L-859"><a href="#L-859"><span class="linenos" data-line="859"></span></a> <span class="kd">local</span> <span class="n">class</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-860"><a href="#L-860"><span class="linenos" data-line="860"></span></a> </span><span id="L-861"><a href="#L-861"><span class="linenos" data-line="861"></span></a> <span class="c1">-- Encode certain characters to avoid various delimiter-related issues at various stages. We need to encode < and ></span> </span><span id="L-862"><a href="#L-862"><span class="linenos" data-line="862"></span></a> <span class="c1">-- because they end up forming part of CSS class names inside of <span ...> and will interfere with finding the end</span> </span><span id="L-863"><a href="#L-863"><span class="linenos" data-line="863"></span></a> <span class="c1">-- of the HTML tag. I first tried converting them to URL encoding, i.e. %3C and %3E; they then appear in the URL as</span> </span><span id="L-864"><a href="#L-864"><span class="linenos" data-line="864"></span></a> <span class="c1">-- %253C and %253E, which get mapped back to %3C and %3E when passed to [[Module:accel]]. But mapping them to &lt;</span> </span><span id="L-865"><a href="#L-865"><span class="linenos" data-line="865"></span></a> <span class="c1">-- and &gt; somehow works magically without any further work; they appear in the URL as < and >, and get passed to</span> </span><span id="L-866"><a href="#L-866"><span class="linenos" data-line="866"></span></a> <span class="c1">-- [[Module:accel]] as < and >. I have no idea who along the chain of calls is doing the encoding and decoding. If</span> </span><span id="L-867"><a href="#L-867"><span class="linenos" data-line="867"></span></a> <span class="c1">-- someone knows, please modify this comment appropriately!</span> </span><span id="L-868"><a href="#L-868"><span class="linenos" data-line="868"></span></a> <span class="kd">local</span> <span class="n">encode_accel_char_map</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-869"><a href="#L-869"><span class="linenos" data-line="869"></span></a> <span class="p">[</span><span class="s2">"%"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"."</span><span class="p">,</span> </span><span id="L-870"><a href="#L-870"><span class="linenos" data-line="870"></span></a> <span class="p">[</span><span class="s2">" "</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"_"</span><span class="p">,</span> </span><span id="L-871"><a href="#L-871"><span class="linenos" data-line="871"></span></a> <span class="p">[</span><span class="s2">"_"</span><span class="p">]</span> <span class="o">=</span> <span class="n">TEMP_UNDERSCORE</span><span class="p">,</span> </span><span id="L-872"><a href="#L-872"><span class="linenos" data-line="872"></span></a> <span class="p">[</span><span class="s2">"<"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"&lt;"</span><span class="p">,</span> </span><span id="L-873"><a href="#L-873"><span class="linenos" data-line="873"></span></a> <span class="p">[</span><span class="s2">">"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"&gt;"</span><span class="p">,</span> </span><span id="L-874"><a href="#L-874"><span class="linenos" data-line="874"></span></a> <span class="p">}</span> </span><span id="L-875"><a href="#L-875"><span class="linenos" data-line="875"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">encode_accel_param_chars</span><span class="p">(</span><span class="n">param</span><span class="p">)</span> </span><span id="L-876"><a href="#L-876"><span class="linenos" data-line="876"></span></a> <span class="kd">local</span> <span class="n">retval</span> <span class="o">=</span> <span class="n">param</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">encode_accel_char_map</span><span class="p">)</span> <span class="c1">-- discard second return value</span> </span><span id="L-877"><a href="#L-877"><span class="linenos" data-line="877"></span></a> <span class="kr">return</span> <span class="n">retval</span> </span><span id="L-878"><a href="#L-878"><span class="linenos" data-line="878"></span></a> <span class="kr">end</span> </span><span id="L-879"><a href="#L-879"><span class="linenos" data-line="879"></span></a> </span><span id="L-880"><a href="#L-880"><span class="linenos" data-line="880"></span></a> <span class="kd">local</span> <span class="kr">function</span> <span class="nf">encode_accel_param</span><span class="p">(</span><span class="n">prefix</span><span class="p">,</span> <span class="n">param</span><span class="p">)</span> </span><span id="L-881"><a href="#L-881"><span class="linenos" data-line="881"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">param</span> <span class="kr">then</span> </span><span id="L-882"><a href="#L-882"><span class="linenos" data-line="882"></span></a> <span class="kr">return</span> <span class="s2">""</span> </span><span id="L-883"><a href="#L-883"><span class="linenos" data-line="883"></span></a> <span class="kr">end</span> </span><span id="L-884"><a href="#L-884"><span class="linenos" data-line="884"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">param</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-885"><a href="#L-885"><span class="linenos" data-line="885"></span></a> <span class="kd">local</span> <span class="n">filled_params</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-886"><a href="#L-886"><span class="linenos" data-line="886"></span></a> <span class="c1">-- There may be gaps in the sequence, especially for translit params.</span> </span><span id="L-887"><a href="#L-887"><span class="linenos" data-line="887"></span></a> <span class="kd">local</span> <span class="n">maxindex</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-888"><a href="#L-888"><span class="linenos" data-line="888"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">param</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-889"><a href="#L-889"><span class="linenos" data-line="889"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="ow">and</span> <span class="n">k</span> <span class="o">></span> <span class="n">maxindex</span> <span class="kr">then</span> </span><span id="L-890"><a href="#L-890"><span class="linenos" data-line="890"></span></a> <span class="n">maxindex</span> <span class="o">=</span> <span class="n">k</span> </span><span id="L-891"><a href="#L-891"><span class="linenos" data-line="891"></span></a> <span class="kr">end</span> </span><span id="L-892"><a href="#L-892"><span class="linenos" data-line="892"></span></a> <span class="kr">end</span> </span><span id="L-893"><a href="#L-893"><span class="linenos" data-line="893"></span></a> <span class="kr">for</span> <span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">maxindex</span> <span class="kr">do</span> </span><span id="L-894"><a href="#L-894"><span class="linenos" data-line="894"></span></a> <span class="n">filled_params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">param</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-895"><a href="#L-895"><span class="linenos" data-line="895"></span></a> <span class="kr">end</span> </span><span id="L-896"><a href="#L-896"><span class="linenos" data-line="896"></span></a> <span class="c1">-- [[Module:accel]] splits these up again.</span> </span><span id="L-897"><a href="#L-897"><span class="linenos" data-line="897"></span></a> <span class="n">param</span> <span class="o">=</span> <span class="n">concat</span><span class="p">(</span><span class="n">filled_params</span><span class="p">,</span> <span class="s2">"*~!"</span><span class="p">)</span> </span><span id="L-898"><a href="#L-898"><span class="linenos" data-line="898"></span></a> <span class="kr">end</span> </span><span id="L-899"><a href="#L-899"><span class="linenos" data-line="899"></span></a> <span class="c1">-- This is decoded again by [[WT:ACCEL]].</span> </span><span id="L-900"><a href="#L-900"><span class="linenos" data-line="900"></span></a> <span class="kr">return</span> <span class="n">prefix</span> <span class="o">..</span> <span class="n">encode_accel_param_chars</span><span class="p">(</span><span class="n">param</span><span class="p">)</span> </span><span id="L-901"><a href="#L-901"><span class="linenos" data-line="901"></span></a> <span class="kr">end</span> </span><span id="L-902"><a href="#L-902"><span class="linenos" data-line="902"></span></a> </span><span id="L-903"><a href="#L-903"><span class="linenos" data-line="903"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">accel</span> <span class="kr">then</span> </span><span id="L-904"><a href="#L-904"><span class="linenos" data-line="904"></span></a> <span class="kd">local</span> <span class="n">form</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">.</span><span class="n">form</span> <span class="ow">and</span> <span class="n">encode_accel_param_chars</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">.</span><span class="n">form</span><span class="p">)</span> <span class="o">..</span> <span class="s2">"-form-of"</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-905"><a href="#L-905"><span class="linenos" data-line="905"></span></a> <span class="kd">local</span> <span class="n">gender</span> <span class="o">=</span> <span class="n">encode_accel_param</span><span class="p">(</span><span class="s2">"gender-"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">.</span><span class="n">gender</span><span class="p">)</span> </span><span id="L-906"><a href="#L-906"><span class="linenos" data-line="906"></span></a> <span class="kd">local</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">encode_accel_param</span><span class="p">(</span><span class="s2">"pos-"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">.</span><span class="n">pos</span><span class="p">)</span> </span><span id="L-907"><a href="#L-907"><span class="linenos" data-line="907"></span></a> <span class="kd">local</span> <span class="n">translit</span> <span class="o">=</span> <span class="n">encode_accel_param</span><span class="p">(</span><span class="s2">"transliteration-"</span><span class="p">,</span> </span><span id="L-908"><a href="#L-908"><span class="linenos" data-line="908"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">.</span><span class="n">translit</span> <span class="ow">or</span> <span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">~=</span> <span class="s2">"-"</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">or</span> <span class="kc">nil</span><span class="p">))</span> </span><span id="L-909"><a href="#L-909"><span class="linenos" data-line="909"></span></a> <span class="kd">local</span> <span class="n">target</span> <span class="o">=</span> <span class="n">encode_accel_param</span><span class="p">(</span><span class="s2">"target-"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">.</span><span class="n">target</span><span class="p">)</span> </span><span id="L-910"><a href="#L-910"><span class="linenos" data-line="910"></span></a> <span class="kd">local</span> <span class="n">lemma</span> <span class="o">=</span> <span class="n">encode_accel_param</span><span class="p">(</span><span class="s2">"origin-"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">.</span><span class="n">lemma</span><span class="p">)</span> </span><span id="L-911"><a href="#L-911"><span class="linenos" data-line="911"></span></a> <span class="kd">local</span> <span class="n">lemma_translit</span> <span class="o">=</span> <span class="n">encode_accel_param</span><span class="p">(</span><span class="s2">"origin_transliteration-"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">.</span><span class="n">lemma_translit</span><span class="p">)</span> </span><span id="L-912"><a href="#L-912"><span class="linenos" data-line="912"></span></a> <span class="kd">local</span> <span class="n">no_store</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">.</span><span class="n">no_store</span> <span class="ow">and</span> <span class="s2">"form-of-nostore"</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-913"><a href="#L-913"><span class="linenos" data-line="913"></span></a> </span><span id="L-914"><a href="#L-914"><span class="linenos" data-line="914"></span></a> <span class="kd">local</span> <span class="n">accel</span> <span class="o">=</span> </span><span id="L-915"><a href="#L-915"><span class="linenos" data-line="915"></span></a> <span class="n">form</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> </span><span id="L-916"><a href="#L-916"><span class="linenos" data-line="916"></span></a> <span class="n">gender</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> </span><span id="L-917"><a href="#L-917"><span class="linenos" data-line="917"></span></a> <span class="n">pos</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> </span><span id="L-918"><a href="#L-918"><span class="linenos" data-line="918"></span></a> <span class="n">translit</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> </span><span id="L-919"><a href="#L-919"><span class="linenos" data-line="919"></span></a> <span class="n">target</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> </span><span id="L-920"><a href="#L-920"><span class="linenos" data-line="920"></span></a> <span class="n">lemma</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> </span><span id="L-921"><a href="#L-921"><span class="linenos" data-line="921"></span></a> <span class="n">lemma_translit</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> </span><span id="L-922"><a href="#L-922"><span class="linenos" data-line="922"></span></a> <span class="n">no_store</span> <span class="o">..</span> <span class="s2">" "</span> </span><span id="L-923"><a href="#L-923"><span class="linenos" data-line="923"></span></a> </span><span id="L-924"><a href="#L-924"><span class="linenos" data-line="924"></span></a> <span class="n">class</span> <span class="o">=</span> <span class="s2">"form-of lang-"</span> <span class="o">..</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" "</span> <span class="o">..</span> <span class="n">accel</span> </span><span id="L-925"><a href="#L-925"><span class="linenos" data-line="925"></span></a> <span class="kr">end</span> </span><span id="L-926"><a href="#L-926"><span class="linenos" data-line="926"></span></a> </span><span id="L-927"><a href="#L-927"><span class="linenos" data-line="927"></span></a> <span class="c1">-- Only make a link if the term has been given, otherwise just show the alt text without a link</span> </span><span id="L-928"><a href="#L-928"><span class="linenos" data-line="928"></span></a> <span class="kd">local</span> <span class="n">term_data</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-929"><a href="#L-929"><span class="linenos" data-line="929"></span></a> <span class="n">term</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> </span><span id="L-930"><a href="#L-930"><span class="linenos" data-line="930"></span></a> <span class="n">alt</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> </span><span id="L-931"><a href="#L-931"><span class="linenos" data-line="931"></span></a> <span class="n">lang</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> </span><span id="L-932"><a href="#L-932"><span class="linenos" data-line="932"></span></a> <span class="n">sc</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> </span><span id="L-933"><a href="#L-933"><span class="linenos" data-line="933"></span></a> <span class="n">fragment</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">fragment</span><span class="p">,</span> </span><span id="L-934"><a href="#L-934"><span class="linenos" data-line="934"></span></a> <span class="n">id</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">id</span><span class="p">,</span> </span><span id="L-935"><a href="#L-935"><span class="linenos" data-line="935"></span></a> <span class="n">genders</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">genders</span><span class="p">,</span> </span><span id="L-936"><a href="#L-936"><span class="linenos" data-line="936"></span></a> <span class="n">tr</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> </span><span id="L-937"><a href="#L-937"><span class="linenos" data-line="937"></span></a> <span class="n">ts</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">ts</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> </span><span id="L-938"><a href="#L-938"><span class="linenos" data-line="938"></span></a> <span class="n">gloss</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">gloss</span><span class="p">,</span> </span><span id="L-939"><a href="#L-939"><span class="linenos" data-line="939"></span></a> <span class="n">pos</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">pos</span><span class="p">,</span> </span><span id="L-940"><a href="#L-940"><span class="linenos" data-line="940"></span></a> <span class="n">lit</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lit</span><span class="p">,</span> </span><span id="L-941"><a href="#L-941"><span class="linenos" data-line="941"></span></a> <span class="n">accel</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">accel</span><span class="p">,</span> </span><span id="L-942"><a href="#L-942"><span class="linenos" data-line="942"></span></a> <span class="n">interwiki</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">interwiki</span><span class="p">,</span> </span><span id="L-943"><a href="#L-943"><span class="linenos" data-line="943"></span></a> <span class="n">cats</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> </span><span id="L-944"><a href="#L-944"><span class="linenos" data-line="944"></span></a> <span class="n">no_alt_ast</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">no_alt_ast</span> </span><span id="L-945"><a href="#L-945"><span class="linenos" data-line="945"></span></a> <span class="p">}</span> </span><span id="L-946"><a href="#L-946"><span class="linenos" data-line="946"></span></a> <span class="n">link</span> <span class="o">=</span> <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><span id="L-947"><a href="#L-947"><span class="linenos" data-line="947"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="ow">and</span> <span class="n">export</span><span class="p">.</span><span class="n">language_link</span><span class="p">(</span><span class="n">term_data</span><span class="p">)</span> </span><span id="L-948"><a href="#L-948"><span class="linenos" data-line="948"></span></a> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">face</span><span class="p">,</span> <span class="n">class</span><span class="p">)</span> </span><span id="L-949"><a href="#L-949"><span class="linenos" data-line="949"></span></a> <span class="kr">else</span> </span><span id="L-950"><a href="#L-950"><span class="linenos" data-line="950"></span></a> <span class="cm">--[[ No term to show.</span> </span><span id="L-951"><a href="#L-951"><span class="linenos" data-line="951"></span></a><span class="cm"> Is there at least a transliteration we can work from? ]]</span> </span><span id="L-952"><a href="#L-952"><span class="linenos" data-line="952"></span></a> <span class="n">link</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:script utilities"</span><span class="p">).</span><span class="n">request_script</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> </span><span id="L-953"><a href="#L-953"><span class="linenos" data-line="953"></span></a> <span class="c1">-- No link to show, and no transliteration either. Show a term request (unless it's a substrate, as they rarely take terms).</span> </span><span id="L-954"><a href="#L-954"><span class="linenos" data-line="954"></span></a> <span class="kr">if</span> <span class="p">(</span><span class="n">link</span> <span class="o">==</span> <span class="s2">""</span> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"-"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFamilyCode</span><span class="p">()</span> <span class="o">~=</span> <span class="s2">"qfa-sub"</span> <span class="kr">then</span> </span><span id="L-955"><a href="#L-955"><span class="linenos" data-line="955"></span></a> <span class="c1">-- If there are multiple terms, break the loop instead.</span> </span><span id="L-956"><a href="#L-956"><span class="linenos" data-line="956"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="o">></span> <span class="mi">1</span> <span class="kr">then</span> </span><span id="L-957"><a href="#L-957"><span class="linenos" data-line="957"></span></a> <span class="n">remove</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> </span><span id="L-958"><a href="#L-958"><span class="linenos" data-line="958"></span></a> <span class="kr">break</span> </span><span id="L-959"><a href="#L-959"><span class="linenos" data-line="959"></span></a> <span class="kr">elseif</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">getCurrentTitle</span><span class="p">().</span><span class="n">nsText</span> <span class="o">~=</span> <span class="s2">"Template"</span> <span class="kr">then</span> </span><span id="L-960"><a href="#L-960"><span class="linenos" data-line="960"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" term requests"</span><span class="p">)</span> </span><span id="L-961"><a href="#L-961"><span class="linenos" data-line="961"></span></a> <span class="kr">end</span> </span><span id="L-962"><a href="#L-962"><span class="linenos" data-line="962"></span></a> <span class="n">link</span> <span class="o">=</span> <span class="s2">"<small>[Term?]</small>"</span> </span><span id="L-963"><a href="#L-963"><span class="linenos" data-line="963"></span></a> <span class="kr">end</span> </span><span id="L-964"><a href="#L-964"><span class="linenos" data-line="964"></span></a> <span class="kr">end</span> </span><span id="L-965"><a href="#L-965"><span class="linenos" data-line="965"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="n">link</span><span class="p">)</span> </span><span id="L-966"><a href="#L-966"><span class="linenos" data-line="966"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="o"><</span> <span class="o">#</span><span class="n">terms</span> <span class="kr">then</span> <span class="n">insert</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="s2">"<span class=</span><span class="se">\"</span><span class="s2">Zsym mention</span><span class="se">\"</span><span class="s2"> style=</span><span class="se">\"</span><span class="s2">font-size:100%;</span><span class="se">\"</span><span class="s2">>/</span>"</span><span class="p">)</span> <span class="kr">end</span> </span><span id="L-967"><a href="#L-967"><span class="linenos" data-line="967"></span></a> <span class="kr">end</span> </span><span id="L-968"><a href="#L-968"><span class="linenos" data-line="968"></span></a> </span><span id="L-969"><a href="#L-969"><span class="linenos" data-line="969"></span></a> <span class="c1">-- TODO: Currently only handles the first transliteration, pending consensus on how to handle multiple translits for multiple forms, as this is not always desirable (e.g. traditional/simplified Chinese).</span> </span><span id="L-970"><a href="#L-970"><span class="linenos" data-line="970"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">""</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"-"</span> <span class="kr">then</span> </span><span id="L-971"><a href="#L-971"><span class="linenos" data-line="971"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-972"><a href="#L-972"><span class="linenos" data-line="972"></span></a> </span><span id="L-973"><a href="#L-973"><span class="linenos" data-line="973"></span></a> <span class="kr">else</span> </span><span id="L-974"><a href="#L-974"><span class="linenos" data-line="974"></span></a> <span class="kd">local</span> <span class="n">phonetic_extraction</span> <span class="o">=</span> <span class="n">load_data</span><span class="p">(</span><span class="s2">"Module:links/data"</span><span class="p">).</span><span class="n">phonetic_extraction</span> </span><span id="L-975"><a href="#L-975"><span class="linenos" data-line="975"></span></a> <span class="n">phonetic_extraction</span> <span class="o">=</span> <span class="n">phonetic_extraction</span><span class="p">[</span><span class="n">data</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">phonetic_extraction</span><span class="p">[</span><span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">()]</span> </span><span id="L-976"><a href="#L-976"><span class="linenos" data-line="976"></span></a> </span><span id="L-977"><a href="#L-977"><span class="linenos" data-line="977"></span></a> <span class="kr">if</span> <span class="n">phonetic_extraction</span> <span class="kr">then</span> </span><span id="L-978"><a href="#L-978"><span class="linenos" data-line="978"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="nb">require</span><span class="p">(</span><span class="n">phonetic_extraction</span><span class="p">).</span><span class="n">getTranslit</span><span class="p">(</span><span class="n">export</span><span class="p">.</span><span class="n">remove_links</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> </span><span id="L-979"><a href="#L-979"><span class="linenos" data-line="979"></span></a> </span><span id="L-980"><a href="#L-980"><span class="linenos" data-line="980"></span></a> <span class="kr">elseif</span> <span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span><span class="n">isTransliterated</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-981"><a href="#L-981"><span class="linenos" data-line="981"></span></a> <span class="c1">-- Track whenever there is manual translit. The categories below like 'terms with redundant transliterations'</span> </span><span id="L-982"><a href="#L-982"><span class="linenos" data-line="982"></span></a> <span class="c1">-- aren't sufficient because they only work with reference to automatic translit and won't operate at all in</span> </span><span id="L-983"><a href="#L-983"><span class="linenos" data-line="983"></span></a> <span class="c1">-- languages without any automatic translit, like Persian and Hebrew.</span> </span><span id="L-984"><a href="#L-984"><span class="linenos" data-line="984"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-985"><a href="#L-985"><span class="linenos" data-line="985"></span></a> <span class="n">track</span><span class="p">(</span><span class="s2">"manual-tr"</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullCode</span><span class="p">())</span> </span><span id="L-986"><a href="#L-986"><span class="linenos" data-line="986"></span></a> <span class="kr">end</span> </span><span id="L-987"><a href="#L-987"><span class="linenos" data-line="987"></span></a> </span><span id="L-988"><a href="#L-988"><span class="linenos" data-line="988"></span></a> <span class="c1">-- Try to generate a transliteration.</span> </span><span id="L-989"><a href="#L-989"><span class="linenos" data-line="989"></span></a> <span class="kd">local</span> <span class="n">text</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">alt</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">term</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-990"><a href="#L-990"><span class="linenos" data-line="990"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">link_tr</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="kr">then</span> </span><span id="L-991"><a href="#L-991"><span class="linenos" data-line="991"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">export</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 class="kc">true</span><span class="p">)</span> </span><span id="L-992"><a href="#L-992"><span class="linenos" data-line="992"></span></a> <span class="kr">end</span> </span><span id="L-993"><a href="#L-993"><span class="linenos" data-line="993"></span></a> </span><span id="L-994"><a href="#L-994"><span class="linenos" data-line="994"></span></a> <span class="kd">local</span> <span class="n">automated_tr</span><span class="p">,</span> <span class="n">tr_categories</span> </span><span id="L-995"><a href="#L-995"><span class="linenos" data-line="995"></span></a> <span class="n">automated_tr</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">tr_fail</span><span class="p">,</span> <span class="n">tr_categories</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">transliterate</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> </span><span id="L-996"><a href="#L-996"><span class="linenos" data-line="996"></span></a> </span><span id="L-997"><a href="#L-997"><span class="linenos" data-line="997"></span></a> <span class="kr">if</span> <span class="n">automated_tr</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">tr_fail</span> <span class="kr">then</span> </span><span id="L-998"><a href="#L-998"><span class="linenos" data-line="998"></span></a> <span class="kd">local</span> <span class="n">manual_tr</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> </span><span id="L-999"><a href="#L-999"><span class="linenos" data-line="999"></span></a> </span><span id="L-1000"><a href="#L-1000"><span class="linenos" data-line="1000"></span></a> <span class="kr">if</span> <span class="n">manual_tr</span> <span class="kr">then</span> </span><span id="L-1001"><a href="#L-1001"><span class="linenos" data-line="1001"></span></a> <span class="kr">if</span> <span class="p">(</span><span class="n">export</span><span class="p">.</span><span class="n">remove_links</span><span class="p">(</span><span class="n">manual_tr</span><span class="p">)</span> <span class="o">==</span> <span class="n">export</span><span class="p">.</span><span class="n">remove_links</span><span class="p">(</span><span class="n">automated_tr</span><span class="p">))</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">tr_fail</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-1002"><a href="#L-1002"><span class="linenos" data-line="1002"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" terms with redundant transliterations"</span><span class="p">)</span> </span><span id="L-1003"><a href="#L-1003"><span class="linenos" data-line="1003"></span></a> <span class="kr">elseif</span> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">tr_fail</span> <span class="kr">then</span> </span><span id="L-1004"><a href="#L-1004"><span class="linenos" data-line="1004"></span></a> <span class="c1">-- Prevents Arabic root categories from flooding the tracking categories.</span> </span><span id="L-1005"><a href="#L-1005"><span class="linenos" data-line="1005"></span></a> <span class="kr">if</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">getCurrentTitle</span><span class="p">().</span><span class="n">nsText</span> <span class="o">~=</span> <span class="s2">"Category"</span> <span class="kr">then</span> </span><span id="L-1006"><a href="#L-1006"><span class="linenos" data-line="1006"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">getFullName</span><span class="p">()</span> <span class="o">..</span> <span class="s2">" terms with non-redundant manual transliterations"</span><span class="p">)</span> </span><span id="L-1007"><a href="#L-1007"><span class="linenos" data-line="1007"></span></a> <span class="kr">end</span> </span><span id="L-1008"><a href="#L-1008"><span class="linenos" data-line="1008"></span></a> <span class="kr">end</span> </span><span id="L-1009"><a href="#L-1009"><span class="linenos" data-line="1009"></span></a> <span class="kr">end</span> </span><span id="L-1010"><a href="#L-1010"><span class="linenos" data-line="1010"></span></a> </span><span id="L-1011"><a href="#L-1011"><span class="linenos" data-line="1011"></span></a> <span class="kr">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">manual_tr</span><span class="p">)</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">overrideManualTranslit</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="kr">then</span> </span><span id="L-1012"><a href="#L-1012"><span class="linenos" data-line="1012"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">automated_tr</span> </span><span id="L-1013"><a href="#L-1013"><span class="linenos" data-line="1013"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">category</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">tr_categories</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-1014"><a href="#L-1014"><span class="linenos" data-line="1014"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span> </span><span id="L-1015"><a href="#L-1015"><span class="linenos" data-line="1015"></span></a> <span class="kr">end</span> </span><span id="L-1016"><a href="#L-1016"><span class="linenos" data-line="1016"></span></a> <span class="kr">end</span> </span><span id="L-1017"><a href="#L-1017"><span class="linenos" data-line="1017"></span></a> <span class="kr">end</span> </span><span id="L-1018"><a href="#L-1018"><span class="linenos" data-line="1018"></span></a> <span class="kr">end</span> </span><span id="L-1019"><a href="#L-1019"><span class="linenos" data-line="1019"></span></a> <span class="kr">end</span> </span><span id="L-1020"><a href="#L-1020"><span class="linenos" data-line="1020"></span></a> </span><span id="L-1021"><a href="#L-1021"><span class="linenos" data-line="1021"></span></a> <span class="c1">-- Link to the transliteration entry for languages that require this</span> </span><span id="L-1022"><a href="#L-1022"><span class="linenos" data-line="1022"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">and</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">link_tr</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span><span class="n">match</span><span class="p">(</span><span class="s2">"%[%[(.-)%]%]"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">tr_fail</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-1023"><a href="#L-1023"><span class="linenos" data-line="1023"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">export</span><span class="p">.</span><span class="n">language_link</span><span class="p">{</span> </span><span id="L-1024"><a href="#L-1024"><span class="linenos" data-line="1024"></span></a> <span class="n">lang</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> </span><span id="L-1025"><a href="#L-1025"><span class="linenos" data-line="1025"></span></a> <span class="n">term</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> </span><span id="L-1026"><a href="#L-1026"><span class="linenos" data-line="1026"></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="s2">"Latn"</span><span class="p">)</span> </span><span id="L-1027"><a href="#L-1027"><span class="linenos" data-line="1027"></span></a> <span class="p">}</span> </span><span id="L-1028"><a href="#L-1028"><span class="linenos" data-line="1028"></span></a> <span class="kr">elseif</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">:</span><span class="n">link_tr</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="ow">or</span> <span class="n">data</span><span class="p">.</span><span class="n">tr_fail</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-1029"><a href="#L-1029"><span class="linenos" data-line="1029"></span></a> <span class="c1">-- Remove the pseudo-HTML tags added by remove_links.</span> </span><span id="L-1030"><a href="#L-1030"><span class="linenos" data-line="1030"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"</?link>"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-1031"><a href="#L-1031"><span class="linenos" data-line="1031"></span></a> <span class="kr">end</span> </span><span id="L-1032"><a href="#L-1032"><span class="linenos" data-line="1032"></span></a> <span class="kr">if</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">umatch</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">"[^%s%p]"</span><span class="p">)</span> <span class="kr">then</span> <span class="n">data</span><span class="p">.</span><span class="n">tr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> <span class="kr">end</span> </span><span id="L-1033"><a href="#L-1033"><span class="linenos" data-line="1033"></span></a> </span><span id="L-1034"><a href="#L-1034"><span class="linenos" data-line="1034"></span></a> <span class="n">insert</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="n">export</span><span class="p">.</span><span class="n">format_link_annotations</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">face</span><span class="p">))</span> </span><span id="L-1035"><a href="#L-1035"><span class="linenos" data-line="1035"></span></a> </span><span id="L-1036"><a href="#L-1036"><span class="linenos" data-line="1036"></span></a> <span class="kd">local</span> <span class="n">categories</span> <span class="o">=</span> <span class="o">#</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span> <span class="o">></span> <span class="mi">0</span> <span class="ow">and</span> <span class="nb">require</span><span class="p">(</span><span class="s2">"Module:utilities"</span><span class="p">).</span><span class="n">format_categories</span><span class="p">(</span><span class="n">data</span><span class="p">.</span><span class="n">cats</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">lang</span><span class="p">,</span> <span class="s2">"-"</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">sc</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-1037"><a href="#L-1037"><span class="linenos" data-line="1037"></span></a> </span><span id="L-1038"><a href="#L-1038"><span class="linenos" data-line="1038"></span></a> <span class="n">output</span> <span class="o">=</span> <span class="n">concat</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> </span><span id="L-1039"><a href="#L-1039"><span class="linenos" data-line="1039"></span></a> <span class="kr">if</span> <span class="n">show_qualifiers</span> <span class="kr">then</span> </span><span id="L-1040"><a href="#L-1040"><span class="linenos" data-line="1040"></span></a> <span class="n">output</span> <span class="o">=</span> <span class="n">add_qualifiers_and_refs_to_term</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">output</span><span class="p">)</span> </span><span id="L-1041"><a href="#L-1041"><span class="linenos" data-line="1041"></span></a> <span class="kr">end</span> </span><span id="L-1042"><a href="#L-1042"><span class="linenos" data-line="1042"></span></a> <span class="kr">return</span> <span class="n">output</span> <span class="o">..</span> <span class="n">categories</span> </span><span id="L-1043"><a href="#L-1043"><span class="linenos" data-line="1043"></span></a><span class="kr">end</span> </span><span id="L-1044"><a href="#L-1044"><span class="linenos" data-line="1044"></span></a> </span><span id="L-1045"><a href="#L-1045"><span class="linenos" data-line="1045"></span></a><span class="cm">--[==[Replaces all wikilinks with their displayed text, and removes any categories. This function can be invoked either from a template or from another module.</span> </span><span id="L-1046"><a href="#L-1046"><span class="linenos" data-line="1046"></span></a><span class="cm">-- Strips links: deletes category links, the targets of piped links, and any double square brackets involved in links (other than file links, which are untouched). If `tag` is set, then any links removed will be given pseudo-HTML tags, which allow the substitution functions in [[Module:languages]] to properly subdivide the text in order to reduce the chance of substitution failures in modules which scrape pages like [[Module:zh-translit]].</span> </span><span id="L-1047"><a href="#L-1047"><span class="linenos" data-line="1047"></span></a><span class="cm">-- FIXME: This is quite hacky. We probably want this to be integrated into [[Module:languages]], but we can't do that until we know that nothing is pushing pipe linked transliterations through it for languages which don't have link_tr set.</span> </span><span id="L-1048"><a href="#L-1048"><span class="linenos" data-line="1048"></span></a><span class="cm">* <code><nowiki>[[page|displayed text]]</nowiki></code> &rarr; <code><nowiki>displayed text</nowiki></code></span> </span><span id="L-1049"><a href="#L-1049"><span class="linenos" data-line="1049"></span></a><span class="cm">* <code><nowiki>[[page and displayed text]]</nowiki></code> &rarr; <code><nowiki>page and displayed text</nowiki></code></span> </span><span id="L-1050"><a href="#L-1050"><span class="linenos" data-line="1050"></span></a><span class="cm">* <code><nowiki>[[Category:English lemmas|WORD]]</nowiki></code> &rarr; ''(nothing)'']==]</span> </span><span id="L-1051"><a href="#L-1051"><span class="linenos" data-line="1051"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">remove_links</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">tag</span><span class="p">)</span> </span><span id="L-1052"><a href="#L-1052"><span class="linenos" data-line="1052"></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-1053"><a href="#L-1053"><span class="linenos" data-line="1053"></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-1054"><a href="#L-1054"><span class="linenos" data-line="1054"></span></a> <span class="kr">end</span> </span><span id="L-1055"><a href="#L-1055"><span class="linenos" data-line="1055"></span></a> </span><span id="L-1056"><a href="#L-1056"><span class="linenos" data-line="1056"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">text</span> <span class="ow">or</span> <span class="n">text</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-1057"><a href="#L-1057"><span class="linenos" data-line="1057"></span></a> <span class="kr">return</span> <span class="s2">""</span> </span><span id="L-1058"><a href="#L-1058"><span class="linenos" data-line="1058"></span></a> <span class="kr">end</span> </span><span id="L-1059"><a href="#L-1059"><span class="linenos" data-line="1059"></span></a> </span><span id="L-1060"><a href="#L-1060"><span class="linenos" data-line="1060"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> </span><span id="L-1061"><a href="#L-1061"><span class="linenos" data-line="1061"></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-1062"><a href="#L-1062"><span class="linenos" data-line="1062"></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-1063"><a href="#L-1063"><span class="linenos" data-line="1063"></span></a> </span><span id="L-1064"><a href="#L-1064"><span class="linenos" data-line="1064"></span></a> <span class="c1">-- Parse internal links for the display text.</span> </span><span id="L-1065"><a href="#L-1065"><span class="linenos" data-line="1065"></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="se">\1\2</span><span class="s2">]-)(</span><span class="se">\2</span><span class="s2">)"</span><span class="p">,</span> </span><span id="L-1066"><a href="#L-1066"><span class="linenos" data-line="1066"></span></a> <span class="kr">function</span><span class="p">(</span><span class="n">c1</span><span class="p">,</span> <span class="n">c2</span><span class="p">,</span> <span class="n">c3</span><span class="p">)</span> </span><span id="L-1067"><a href="#L-1067"><span class="linenos" data-line="1067"></span></a> <span class="c1">-- Don't remove files.</span> </span><span id="L-1068"><a href="#L-1068"><span class="linenos" data-line="1068"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">false_positive</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-1069"><a href="#L-1069"><span class="linenos" data-line="1069"></span></a> <span class="kr">if</span> <span class="n">c2</span><span class="p">:</span><span class="n">lower</span><span class="p">():</span><span class="n">match</span><span class="p">(</span><span class="s2">"^"</span> <span class="o">..</span> <span class="n">false_positive</span> <span class="o">..</span> <span class="s2">":"</span><span class="p">)</span> <span class="kr">then</span> <span class="kr">return</span> <span class="n">c1</span> <span class="o">..</span> <span class="n">c2</span> <span class="o">..</span> <span class="n">c3</span> <span class="kr">end</span> </span><span id="L-1070"><a href="#L-1070"><span class="linenos" data-line="1070"></span></a> <span class="kr">end</span> </span><span id="L-1071"><a href="#L-1071"><span class="linenos" data-line="1071"></span></a> <span class="c1">-- Remove categories completely.</span> </span><span id="L-1072"><a href="#L-1072"><span class="linenos" data-line="1072"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">false_positive</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">({</span><span class="s2">"category"</span><span class="p">,</span> <span class="s2">"cat"</span><span class="p">})</span> <span class="kr">do</span> </span><span id="L-1073"><a href="#L-1073"><span class="linenos" data-line="1073"></span></a> <span class="kr">if</span> <span class="n">c2</span><span class="p">:</span><span class="n">lower</span><span class="p">():</span><span class="n">match</span><span class="p">(</span><span class="s2">"^"</span> <span class="o">..</span> <span class="n">false_positive</span> <span class="o">..</span> <span class="s2">":"</span><span class="p">)</span> <span class="kr">then</span> <span class="kr">return</span> <span class="s2">""</span> <span class="kr">end</span> </span><span id="L-1074"><a href="#L-1074"><span class="linenos" data-line="1074"></span></a> <span class="kr">end</span> </span><span id="L-1075"><a href="#L-1075"><span class="linenos" data-line="1075"></span></a> <span class="c1">-- In piped links, remove all text before the pipe, unless it's the final character (i.e. the pipe trick), in which case just remove the pipe.</span> </span><span id="L-1076"><a href="#L-1076"><span class="linenos" data-line="1076"></span></a> <span class="n">c2</span> <span class="o">=</span> <span class="n">c2</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"^[^|]*|(.+)"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c2</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"([^|]+)|$"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c2</span> </span><span id="L-1077"><a href="#L-1077"><span class="linenos" data-line="1077"></span></a> <span class="kr">if</span> <span class="n">tag</span> <span class="kr">then</span> </span><span id="L-1078"><a href="#L-1078"><span class="linenos" data-line="1078"></span></a> <span class="kr">return</span> <span class="s2">"<link>"</span> <span class="o">..</span> <span class="n">c2</span> <span class="o">..</span> <span class="s2">"</link>"</span> </span><span id="L-1079"><a href="#L-1079"><span class="linenos" data-line="1079"></span></a> <span class="kr">else</span> </span><span id="L-1080"><a href="#L-1080"><span class="linenos" data-line="1080"></span></a> <span class="kr">return</span> <span class="n">c2</span> </span><span id="L-1081"><a href="#L-1081"><span class="linenos" data-line="1081"></span></a> <span class="kr">end</span> </span><span id="L-1082"><a href="#L-1082"><span class="linenos" data-line="1082"></span></a> <span class="kr">end</span><span class="p">)</span> </span><span id="L-1083"><a href="#L-1083"><span class="linenos" data-line="1083"></span></a> </span><span id="L-1084"><a href="#L-1084"><span class="linenos" data-line="1084"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="n">text</span> </span><span id="L-1085"><a href="#L-1085"><span class="linenos" data-line="1085"></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-1086"><a href="#L-1086"><span class="linenos" data-line="1086"></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-1087"><a href="#L-1087"><span class="linenos" data-line="1087"></span></a> </span><span id="L-1088"><a href="#L-1088"><span class="linenos" data-line="1088"></span></a> <span class="kr">return</span> <span class="n">text</span> </span><span id="L-1089"><a href="#L-1089"><span class="linenos" data-line="1089"></span></a><span class="kr">end</span> </span><span id="L-1090"><a href="#L-1090"><span class="linenos" data-line="1090"></span></a> </span><span id="L-1091"><a href="#L-1091"><span class="linenos" data-line="1091"></span></a><span class="cm">--[=[</span> </span><span id="L-1092"><a href="#L-1092"><span class="linenos" data-line="1092"></span></a><span class="cm">This decodes old section encodings.</span> </span><span id="L-1093"><a href="#L-1093"><span class="linenos" data-line="1093"></span></a><span class="cm">For example, Norwegian_Bokm.C3.A5l → Norwegian_Bokmål.</span> </span><span id="L-1094"><a href="#L-1094"><span class="linenos" data-line="1094"></span></a><span class="cm">It isn't picky about whether the section encodings represent the UTF-8 encoding</span> </span><span id="L-1095"><a href="#L-1095"><span class="linenos" data-line="1095"></span></a><span class="cm">of a real Unicode character, so it will mangle section names that contain</span> </span><span id="L-1096"><a href="#L-1096"><span class="linenos" data-line="1096"></span></a><span class="cm">a period followed by two uppercase hex characters. At least such section names</span> </span><span id="L-1097"><a href="#L-1097"><span class="linenos" data-line="1097"></span></a><span class="cm">are probably pretty rare.</span> </span><span id="L-1098"><a href="#L-1098"><span class="linenos" data-line="1098"></span></a> </span><span id="L-1099"><a href="#L-1099"><span class="linenos" data-line="1099"></span></a><span class="cm">Wiktionary adds an additional id="" attribute for sections</span> </span><span id="L-1100"><a href="#L-1100"><span class="linenos" data-line="1100"></span></a><span class="cm">using a legacy encoding, if it is different from the modern minimally modified attribute.</span> </span><span id="L-1101"><a href="#L-1101"><span class="linenos" data-line="1101"></span></a><span class="cm">It is like percent encoding (URI or URL encoding) except with "." instead of "%".</span> </span><span id="L-1102"><a href="#L-1102"><span class="linenos" data-line="1102"></span></a><span class="cm">See [[mw:Manual:$wgFragmentMode]] and the code that does the encoding at</span> </span><span id="L-1103"><a href="#L-1103"><span class="linenos" data-line="1103"></span></a><span class="cm">https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/core/+/7bf779524ab1fd8e1d74f79ea4840564d48eea4d/includes/parser/Sanitizer.php#893</span> </span><span id="L-1104"><a href="#L-1104"><span class="linenos" data-line="1104"></span></a><span class="cm">]=]</span> </span><span id="L-1105"><a href="#L-1105"><span class="linenos" data-line="1105"></span></a> </span><span id="L-1106"><a href="#L-1106"><span class="linenos" data-line="1106"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">section_link</span><span class="p">(</span><span class="n">link</span><span class="p">)</span> </span><span id="L-1107"><a href="#L-1107"><span class="linenos" data-line="1107"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">link</span><span class="p">)</span> <span class="o">~=</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-1108"><a href="#L-1108"><span class="linenos" data-line="1108"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The first argument to section_link was a "</span> <span class="o">..</span> <span class="nb">type</span><span class="p">(</span><span class="n">link</span><span class="p">)</span> <span class="o">..</span> <span class="s2">", but it should be a string."</span><span class="p">)</span> </span><span id="L-1109"><a href="#L-1109"><span class="linenos" data-line="1109"></span></a> <span class="kr">end</span> </span><span id="L-1110"><a href="#L-1110"><span class="linenos" data-line="1110"></span></a> </span><span id="L-1111"><a href="#L-1111"><span class="linenos" data-line="1111"></span></a> <span class="n">link</span> <span class="o">=</span> <span class="n">link</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">" "</span><span class="p">)</span> </span><span id="L-1112"><a href="#L-1112"><span class="linenos" data-line="1112"></span></a> <span class="kd">local</span> <span class="n">target</span><span class="p">,</span> <span class="n">section</span> <span class="o">=</span> <span class="n">link</span><span class="p">:</span><span class="n">match</span><span class="p">(</span><span class="s2">"(.-)#(.*)"</span><span class="p">)</span> </span><span id="L-1113"><a href="#L-1113"><span class="linenos" data-line="1113"></span></a> </span><span id="L-1114"><a href="#L-1114"><span class="linenos" data-line="1114"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">target</span> <span class="kr">then</span> </span><span id="L-1115"><a href="#L-1115"><span class="linenos" data-line="1115"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s2">"The function “section_link” could not find a number sign marking a section name."</span><span class="p">)</span> </span><span id="L-1116"><a href="#L-1116"><span class="linenos" data-line="1116"></span></a> <span class="kr">end</span> </span><span id="L-1117"><a href="#L-1117"><span class="linenos" data-line="1117"></span></a> </span><span id="L-1118"><a href="#L-1118"><span class="linenos" data-line="1118"></span></a> <span class="kr">return</span> <span class="n">export</span><span class="p">.</span><span class="n">plain_link</span><span class="p">{</span> </span><span id="L-1119"><a href="#L-1119"><span class="linenos" data-line="1119"></span></a> <span class="n">term</span> <span class="o">=</span> <span class="n">target</span><span class="p">,</span> </span><span id="L-1120"><a href="#L-1120"><span class="linenos" data-line="1120"></span></a> <span class="n">fragment</span> <span class="o">=</span> <span class="n">section</span><span class="p">,</span> </span><span id="L-1121"><a href="#L-1121"><span class="linenos" data-line="1121"></span></a> <span class="n">alt</span> <span class="o">=</span> <span class="n">link</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">" §&nbsp;"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-1122"><a href="#L-1122"><span class="linenos" data-line="1122"></span></a> <span class="p">}</span> </span><span id="L-1123"><a href="#L-1123"><span class="linenos" data-line="1123"></span></a><span class="kr">end</span> </span><span id="L-1124"><a href="#L-1124"><span class="linenos" data-line="1124"></span></a> </span><span id="L-1125"><a href="#L-1125"><span class="linenos" data-line="1125"></span></a><span class="kr">return</span> <span class="n">export</span> </span></pre></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐78f4c97c5d‐vxpww Cached time: 20241129010059 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.227 seconds Real time usage: 0.734 seconds Preprocessor visited node count: 377/1000000 Post‐expand include size: 70040/2097152 bytes Template argument size: 99/2097152 bytes Highest expansion depth: 8/100 Expensive parser function count: 27/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 10341/5000000 bytes Lua time usage: 0.183/10.000 seconds Lua memory usage: 5088239/104857600 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 700.369 1 -total 100.00% 700.369 1 Template:documentation 84.81% 593.996 1 Template:module_documentation 8.68% 60.766 1 Template:ll 6.15% 43.061 13 Template:temp 2.59% 18.106 9 Template:code 0.37% 2.604 2 Template:whatlinkshere --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1&useformat=desktop" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wiktionary.org/w/index.php?title=Module:links&oldid=82311458">https://en.wiktionary.org/w/index.php?title=Module:links&oldid=82311458</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Special:Categories" title="Special:Categories">Categories</a>: <ul><li><a href="/wiki/Category:Templates_and_modules_needing_documentation" title="Category:Templates and modules needing documentation">Templates and modules needing documentation</a></li><li><a href="/wiki/Category:Internal_link_modules" title="Category:Internal link modules">Internal link modules</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 7 October 2024, at 17:13.</li> <li id="footer-info-copyright">Definitions and other text are available under the <a rel="nofollow" class="external text" href="//creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike License</a>; additional terms may apply. By using this site, you agree to the <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">Terms of Use</a> and <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy Policy.</a></li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wiktionary:About">About Wiktionary</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wiktionary:General_disclaimer">Disclaimers</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wiktionary.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wiktionary.org/w/index.php?title=Module:links&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-78f4c97c5d-vxpww","wgBackendResponseTime":879,"wgPageParseReport":{"limitreport":{"cputime":"0.227","walltime":"0.734","ppvisitednodes":{"value":377,"limit":1000000},"postexpandincludesize":{"value":70040,"limit":2097152},"templateargumentsize":{"value":99,"limit":2097152},"expansiondepth":{"value":8,"limit":100},"expensivefunctioncount":{"value":27,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":10341,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 700.369 1 -total","100.00% 700.369 1 Template:documentation"," 84.81% 593.996 1 Template:module_documentation"," 8.68% 60.766 1 Template:ll"," 6.15% 43.061 13 Template:temp"," 2.59% 18.106 9 Template:code"," 0.37% 2.604 2 Template:whatlinkshere"]},"scribunto":{"limitreport-timeusage":{"value":"0.183","limit":"10.000"},"limitreport-memusage":{"value":5088239,"limit":104857600}},"cachereport":{"origin":"mw-web.codfw.main-78f4c97c5d-vxpww","timestamp":"20241129010059","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>