CINXE.COM
Module:en-utilities: difference between revisions - Wiktionary, the free dictionary
<!DOCTYPE html> <html class="client-nojs" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Module:en-utilities: difference between revisions - Wiktionary, the free dictionary</title> <script>(function(){var className="client-js";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":"80d9c46f-2c35-412a-9201-2b8fb617b566","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Module:en-utilities","wgTitle":"en-utilities","wgCurRevisionId":82720917,"wgRevisionId":82719203,"wgArticleId":10496303,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"], "wgCategories":["English modules","Language-specific utility modules","Templates and modules needing documentation"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Module:en-utilities","wgRelevantArticleId":10496303,"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":10000,"extRevisionSliderTimeOffset":0,"wgDiffOldId":82717460,"wgDiffNewId":82719203,"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition": "interlanguage","wgULSisCompactLinksEnabled":true,"wgVector2022LanguageInHeader":false,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q130540923","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.visualEditor.diffPage.init.styles":"ready","oojs-ui.styles.icons-accessibility":"ready","oojs-ui.styles.icons-editing-advanced":"ready","oojs-ui-core.styles":"ready","oojs-ui.styles.indicators":"ready","mediawiki.widgets.styles":"ready","oojs-ui-core.icons":"ready","ext.RevisionSlider.lazyCss":"ready","mediawiki.interface.helpers.styles":"ready","mediawiki.diff.styles":"ready","ext.pygments":"ready","mediawiki.helplink":"ready", "skins.vector.styles.legacy":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","codex-search-styles":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.visualEditor.diffPage.init","ext.RevisionSlider.lazyJs","mediawiki.diff","ext.pygments.view","site","mediawiki.page.ready","skins.vector.legacy.js","ext.centralNotice.geoIP","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.compactlinks","ext.uls.interface","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=codex-search-styles%7Cext.RevisionSlider.lazyCss%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.visualEditor.diffPage.init.styles%7Cmediawiki.diff.styles%7Cmediawiki.helplink%7Cmediawiki.interface.helpers.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.icons-accessibility%2Cicons-editing-advanced%2Cindicators%7Cskins.vector.styles.legacy%7Cwikibase.client.init&only=styles&skin=vector"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.gadget.LanguagesAndScripts%2CPalette%2CSite&only=styles&skin=vector"> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="noindex,nofollow,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:en-utilities: difference between revisions - 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:en-utilities"> <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:en-utilities"> <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="//login.wikimedia.org"> </head> <body class="mw-article-diff skin-vector-legacy mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject page-Module_en-utilities rootpage-Module_en-utilities skin-vector action-view"><div id="mw-page-base" class="noprint"></div> <div id="mw-head-base" class="noprint"></div> <div id="content" class="mw-body" role="main"> <a id="top"></a> <div id="siteNotice"><!-- CentralNotice --></div> <div class="mw-indicators"> <div id="mw-indicator-mw-helplink" class="mw-indicator"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Diff" target="_blank" class="mw-helplink"><span class="mw-helplink-icon"></span>Help</a></div> </div> <h1 id="firstHeading" class="firstHeading mw-first-heading">Module:en-utilities: difference between revisions</h1> <div id="bodyContent" class="vector-body"> <div id="siteSub" class="noprint">From Wiktionary, the free dictionary</div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="contentSub2"></div> <div id="jump-to-nav"></div> <a class="mw-jump-link" href="#mw-head">Jump to navigation</a> <a class="mw-jump-link" href="#searchInput">Jump to search</a> <div id="mw-content-text" class="mw-body-content"><div class="mw-revslider-container"><span style='width: 100%; text-align: center;' id='ooui-php-1' class='mw-revslider-toggle-button oo-ui-widget oo-ui-widget-enabled oo-ui-buttonElement oo-ui-buttonElement-frameless oo-ui-indicatorElement oo-ui-labelElement oo-ui-buttonWidget' data-ooui='{"_":"OO.ui.ButtonWidget","rel":["nofollow"],"framed":false,"indicator":"down","label":"Browse history interactively","title":"Open revision slider","classes":["mw-revslider-toggle-button"]}'><a role='button' title='Open revision slider' tabindex='0' rel='nofollow' class='oo-ui-buttonElement-button'><span class='oo-ui-iconElement-icon oo-ui-iconElement-noIcon'></span><span class='oo-ui-labelElement-label'>Browse history interactively</span><span class='oo-ui-indicatorElement-indicator oo-ui-indicator-down'></span></a></span><div class="mw-revslider-slider-wrapper" style="display: none;"><div class="mw-revslider-placeholder"><div class="mw-revslider-spinner"><div class="mw-revslider-bounce"></div></div></div></div></div><div class="mw-diff-revision-history-links"><a href="/w/index.php?title=Module:en-utilities&diff=prev&oldid=82717460" class="mw-diff-revision-history-link-previous" title="Module:en-utilities">← Go to previous edit</a><a href="/w/index.php?title=Module:en-utilities&diff=next&oldid=82719203" class="mw-diff-revision-history-link-next" title="Module:en-utilities">Go to next edit →</a></div><div class="mw-diff-table-prefix" dir="ltr" lang="en"><div class="mw-diff-inline-legend oo-ui-element-hidden"><span class="mw-diff-inline-legend-del">Content deleted</span> <span class="mw-diff-inline-legend-ins">Content added</span></div><div class="mw-diffPage-inlineToggle-container"><div id='mw-diffPage-inline-toggle-switch-layout' class='oo-ui-layout oo-ui-labelElement oo-ui-fieldLayout oo-ui-fieldLayout-align-left' data-ooui='{"_":"OO.ui.FieldLayout","fieldWidget":{"tag":"mw-diffPage-inline-toggle-switch"},"$overlay":true,"label":"Inline","title":"Switches between inline format and two-column format"}'><div class='oo-ui-fieldLayout-body'><span class='oo-ui-fieldLayout-header'><label title='Switches between inline format and two-column format' id='ooui-php-2' class='oo-ui-labelElement-label'>Inline</label></span><div class='oo-ui-fieldLayout-field'><div id='mw-diffPage-inline-toggle-switch' title='Switches between inline format and two-column format' aria-checked='false' tabindex='0' role='switch' aria-labelledby='ooui-php-2' class='oo-ui-widget oo-ui-widget-enabled oo-ui-toggleWidget oo-ui-toggleWidget-off oo-ui-toggleSwitchWidget' data-ooui='{"_":"OO.ui.ToggleSwitchWidget","href":"\/w\/index.php?title=Module:en-utilities&curid=10496303&diff=82719203&oldid=82717460&diff-type=inline","value":false,"title":"Switches between inline format and two-column format"}'><span class='oo-ui-toggleSwitchWidget-glow'></span><a href='/w/index.php?title=Module:en-utilities&curid=10496303&diff=82719203&oldid=82717460&diff-type=inline'><span class='oo-ui-toggleSwitchWidget-grip'></span></a></div></div></div></div></div></div><table class="diff diff-type-table diff-contentalign-left diff-editfont-monospace" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" class="diff-otitle diff-side-deleted"><div id="mw-diff-otitle1"><strong><a href="/w/index.php?title=Module:en-utilities&oldid=82717460" title="Module:en-utilities">Revision as of 11:14, 21 November 2024</a> <span class="mw-diff-edit"><a href="/w/index.php?title=Module:en-utilities&action=edit&oldid=82717460" title="Module:en-utilities">view source</a></span><span class="mw-diff-timestamp" data-timestamp="2024-11-21T11:14:17Z"></span></strong></div><div id="mw-diff-otitle2"><a href="/wiki/User:Theknightwho" class="mw-userlink" title="User:Theknightwho" data-mw-revid="82717460"><bdi>Theknightwho</bdi></a> <span class="mw-usertoollinks">(<a href="/wiki/User_talk:Theknightwho" class="mw-usertoollinks-talk" title="User talk:Theknightwho">talk</a> | <a href="/wiki/Special:Contributions/Theknightwho" class="mw-usertoollinks-contribs" title="Special:Contributions/Theknightwho">contribs</a>)</span><div class="mw-diff-usermetadata"><div class="mw-diff-userroles"><a href="/wiki/Wiktionary:Autopatrollers" title="Wiktionary:Autopatrollers">Autopatrollers</a>, <a href="/wiki/Wiktionary:Administrators" title="Wiktionary:Administrators">Administrators</a>, <a href="/wiki/Wiktionary:Template_editors" title="Wiktionary:Template editors">Template editors</a></div><div class="mw-diff-usereditcount"><span>171,677</span> edits</div></div></div><div id="mw-diff-otitle3"> <span class="comment comment--without-parentheses">Handle conversion of "y" to "i" after a vowel for the past participle suffix (e.g. "slay" to "slain").</span></div><div id="mw-diff-otitle5"></div><div id="mw-diff-otitle4"><a href="/w/index.php?title=Module:en-utilities&diff=prev&oldid=82717460" title="Module:en-utilities" id="differences-prevlink">← Go to previous edit</a></div></td> <td colspan="2" class="diff-ntitle diff-side-added"><div id="mw-diff-ntitle1"><strong><a href="/w/index.php?title=Module:en-utilities&oldid=82719203" title="Module:en-utilities">Revision as of 12:19, 21 November 2024</a> <span class="mw-diff-edit"><a href="/w/index.php?title=Module:en-utilities&action=edit&oldid=82719203" title="Module:en-utilities">view source</a></span><span class="mw-diff-timestamp" data-timestamp="2024-11-21T12:19:19Z"></span> </strong></div><div id="mw-diff-ntitle2"><a href="/wiki/User:Theknightwho" class="mw-userlink" title="User:Theknightwho" data-mw-revid="82719203"><bdi>Theknightwho</bdi></a> <span class="mw-usertoollinks">(<a href="/wiki/User_talk:Theknightwho" class="mw-usertoollinks-talk" title="User talk:Theknightwho">talk</a> | <a href="/wiki/Special:Contributions/Theknightwho" class="mw-usertoollinks-contribs" title="Special:Contributions/Theknightwho">contribs</a>)</span><div class="mw-diff-usermetadata"><div class="mw-diff-userroles"><a href="/wiki/Wiktionary:Autopatrollers" title="Wiktionary:Autopatrollers">Autopatrollers</a>, <a href="/wiki/Wiktionary:Administrators" title="Wiktionary:Administrators">Administrators</a>, <a href="/wiki/Wiktionary:Template_editors" title="Wiktionary:Template editors">Template editors</a></div><div class="mw-diff-usereditcount"><span>171,677</span> edits</div></div></div><div id="mw-diff-ntitle3"> <span class="comment comment--without-parentheses">Don't convert final "ie" to "y" after another "y".</span></div><div id="mw-diff-ntitle5"></div><div id="mw-diff-ntitle4"><a href="/w/index.php?title=Module:en-utilities&diff=next&oldid=82719203" title="Module:en-utilities" id="differences-nextlink">Go to next edit →</a></div></td> </tr><tr> <td colspan="2" class="diff-lineno">Line 197:</td> <td colspan="2" class="diff-lineno">Line 197:</td> </tr> <tr> <td class="diff-marker"></td> <td class="diff-context diff-side-deleted"><div> local final2 = sub(str, -2)</div></td> <td class="diff-marker"></td> <td class="diff-context diff-side-added"><div> local final2 = sub(str, -2)</div></td> </tr> <tr> <td class="diff-marker"></td> <td class="diff-context diff-side-deleted"><div> if final2 == "ie" then</div></td> <td class="diff-marker"></td> <td class="diff-context diff-side-added"><div> if final2 == "ie" then</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td class="diff-deletedline diff-side-deleted"><div> -- Replace "ie" with "y".</div></td> <td class="diff-marker" data-marker="+"></td> <td class="diff-addedline diff-side-added"><div> -- Replace "ie" with "y"<ins class="diffchange diffchange-inline">, unless it follows another "y" (e.g</ins>.</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td class="diff-addedline diff-side-added"><div> -- "spulyie" → "spulyieing").</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td class="diff-deletedline diff-side-deleted"><div> return sub(str, 1, -3) .. "y"</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td class="diff-addedline diff-side-added"><div> return ugsub(str, "([^yY%s%p])ie$", "%1y")</div></td> </tr> <tr> <td class="diff-marker"></td> <td class="diff-context diff-side-deleted"><div> end</div></td> <td class="diff-marker"></td> <td class="diff-context diff-side-added"><div> end</div></td> </tr> <tr> <td class="diff-marker"></td> <td class="diff-context diff-side-deleted"><div> local base_stem = sub(str, 1, -2)</div></td> <td class="diff-marker"></td> <td class="diff-context diff-side-added"><div> local base_stem = sub(str, 1, -2)</div></td> </tr> <!-- diff cache key enwiktionary:diff:1.41:old-82717460:rev-82719203:wikidiff2=table:1.14.1:ff290eae --> </table><hr class='diff-hr' id='mw-oldid' /> <h2 class='diff-currentversion-title'>Revision as of 12:19, 21 November 2024</h2> <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;">This module lacks a <a href="/wiki/Help:Documenting_templates_and_modules" title="Help:Documenting templates and modules">documentation subpage</a>. Please <a class="external text" href="https://en.wiktionary.org/w/index.php?title=Module:en-utilities/documentation&action=edit&preload=Template%3Adocumentation%2FpreloadModule">create it</a>.</i></dd> <dd> <i>Useful links</i>: <a href="/wiki/Special:PrefixIndex/Module:en-utilities/" title="Special:PrefixIndex/Module:en-utilities/">subpage list</a> • <a class="external text" href="https://en.wiktionary.org/w/index.php?title=Special%3AWhatLinksHere%2FModule%3Aen-utilities&hideredirs=1&hidetrans=1">links</a> • <a class="external text" href="https://en.wiktionary.org/w/index.php?title=Special%3AWhatLinksHere%2FModule%3Aen-utilities&hidelinks=1&hideredirs=1">transclusions</a> • <a href="/w/index.php?title=Module:en-utilities/testcases&action=edit&redlink=1" class="new" title="Module:en-utilities/testcases (page does not exist)">testcases</a> • <a href="/w/index.php?title=Module:en-utilities/sandbox&action=edit&redlink=1" class="new" title="Module:en-utilities/sandbox (page does not exist)">sandbox</a></dd></dl> <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="kd">local</span> <span class="n">add_suffix</span> <span class="c1">-- Defined below.</span> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a><span class="kd">local</span> <span class="n">find</span> <span class="o">=</span> <span class="nb">string.find</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a><span class="kd">local</span> <span class="n">match</span> <span class="o">=</span> <span class="nb">string.match</span> </span><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a><span class="kd">local</span> <span class="n">reverse</span> <span class="o">=</span> <span class="nb">string.reverse</span> </span><span id="L-7"><a href="#L-7"><span class="linenos" data-line="7"></span></a><span class="kd">local</span> <span class="n">sub</span> <span class="o">=</span> <span class="nb">string.sub</span> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a><span class="kd">local</span> <span class="n">toNFD</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">toNFD</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a><span class="kd">local</span> <span class="n">ugsub</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">gsub</span> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a><span class="kd">local</span> <span class="n">ulower</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">lower</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a><span class="kd">local</span> <span class="n">umatch</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a><span class="kd">local</span> <span class="n">usub</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">sub</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a><span class="kd">local</span> <span class="n">vowels</span> <span class="o">=</span> <span class="s2">"aæᴀᴁɐɑɒ@eᴇǝⱻəɛɘɜɞɤiıɪɨᵻoøœᴏɶɔᴐɵuᴜʉᵾɯꟺʊʋʌyʏ"</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">hyphens</span> <span class="o">=</span> <span class="s2">"%-‐‑‒–—"</span> </span><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a><span class="cm">--[==[</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a><span class="cm">Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]</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">diacritics</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="kr">function</span> <span class="nf">get_diacritics</span><span class="p">()</span> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a> <span class="n">diacritics</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">(</span><span class="s2">"Module:headword/data"</span><span class="p">).</span><span class="n">page</span><span class="p">.</span><span class="n">comb_chars</span><span class="p">.</span><span class="n">diacritics_all</span> <span class="o">..</span> <span class="s2">"+"</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a> <span class="kr">return</span> <span class="n">diacritics</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a> <span class="kr">end</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a> </span><span id="L-25"><a href="#L-25"><span class="linenos" data-line="25"></span></a><span class="c1">-- Normalize a string, so that case and diacritics are ignored. By default, "gu"</span> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a><span class="c1">-- and "qu" are normalized to "g" and "q", because they behave like consonants</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a><span class="c1">-- under certain conditions (e.g. final "y" does not usually have the plural</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a><span class="c1">-- "ies" after a vowel, but it's regular for "quy" to become "quies". The flag</span> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a><span class="c1">-- `not_gu` prevents this happening to "gu", and is needed because terms ending</span> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a><span class="c1">-- "-guy" are almost always compounds of "guy" (→ "guys").</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="kr">function</span> <span class="nf">normalize</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="n">followed_by</span><span class="p">,</span> <span class="n">not_gu</span><span class="p">)</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">followed_by</span> <span class="kr">then</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a> <span class="n">followed_by</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a> <span class="kr">end</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="n">str</span> <span class="o">=</span> <span class="n">ugsub</span><span class="p">(</span><span class="n">toNFD</span><span class="p">(</span><span class="n">str</span><span class="p">)</span> <span class="o">..</span> <span class="n">followed_by</span><span class="p">,</span> <span class="s2">"(["</span> <span class="o">..</span> <span class="p">(</span><span class="n">not_gu</span> <span class="ow">and</span> <span class="s2">""</span> <span class="ow">or</span> <span class="s2">"Gg"</span><span class="p">)</span> <span class="o">..</span> <span class="s2">"Qq])u(["</span><span class="o">..</span> <span class="n">vowels</span> <span class="o">..</span> <span class="s2">"])"</span><span class="p">,</span> <span class="s2">"%1%2"</span><span class="p">)</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a> <span class="kr">return</span> <span class="n">ulower</span><span class="p">(</span><span class="n">ugsub</span><span class="p">(</span><span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">str</span> <span class="o">-</span> <span class="o">#</span><span class="n">followed_by</span><span class="p">),</span> <span class="n">diacritics</span> <span class="ow">or</span> <span class="n">get_diacritics</span><span class="p">(),</span> <span class="s2">""</span><span class="p">))</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a><span class="kr">end</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">epenthetic_e_default</span><span class="p">(</span><span class="n">stem</span><span class="p">)</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a> <span class="kr">return</span> <span class="n">sub</span><span class="p">(</span><span class="n">stem</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">"e"</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a><span class="kr">end</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">epenthetic_e_for_s</span><span class="p">(</span><span class="n">stem</span><span class="p">,</span> <span class="n">term</span><span class="p">)</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a> <span class="c1">-- If the stem is different, it must be from "y" → "i".</span> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a> <span class="kr">if</span> <span class="n">stem</span> <span class="o">~=</span> <span class="n">term</span> <span class="kr">then</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a> <span class="kr">return</span> <span class="kc">true</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> <span class="kr">end</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a> <span class="kd">local</span> <span class="n">final</span> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a> <span class="kr">if</span> <span class="n">match</span><span class="p">(</span><span class="n">stem</span><span class="p">,</span> <span class="s2">"^[^</span><span class="se">\128</span><span class="s2">-</span><span class="se">\255</span><span class="s2">]*$"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a> <span class="n">final</span> <span class="o">=</span> <span class="n">sub</span><span class="p">(</span><span class="n">stem</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</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">else</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="n">stem</span> <span class="o">=</span> <span class="n">ugsub</span><span class="p">(</span><span class="n">toNFD</span><span class="p">(</span><span class="n">stem</span><span class="p">),</span> <span class="n">diacritics</span> <span class="ow">or</span> <span class="n">get_diacritics</span><span class="p">(),</span> <span class="s2">""</span><span class="p">)</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a> <span class="n">final</span> <span class="o">=</span> <span class="n">usub</span><span class="p">(</span><span class="n">stem</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a> <span class="kr">end</span> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a> <span class="c1">-- Epenthetic "e" is added after a sibilant or sibilant-affricate. The vast</span> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a> <span class="c1">-- majority of these are spelled "s", "x", "z", "ch" and "sh", but "dg"</span> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a> <span class="c1">-- (→ "dge") and "ß" (→ "ss") can be found in obsolete spellings, "shh" in</span> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a> <span class="c1">-- onomatopoeia, and "zh", "dj", "jj" (and more) in loanwords.</span> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a> <span class="kr">return</span> <span class="p">(</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"g"</span> <span class="ow">and</span> <span class="n">sub</span><span class="p">(</span><span class="n">stem</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"d"</span> <span class="ow">or</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"h"</span> <span class="ow">and</span> <span class="n">match</span><span class="p">(</span><span class="n">stem</span><span class="p">,</span> <span class="s2">"[csz]h+$"</span><span class="p">)</span> <span class="ow">or</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"j"</span> <span class="ow">and</span> <span class="n">umatch</span><span class="p">(</span><span class="n">stem</span><span class="p">,</span> <span class="s2">"[^"</span> <span class="o">..</span> <span class="n">vowels</span> <span class="o">..</span> <span class="s2">"]j$"</span><span class="p">)</span> <span class="ow">or</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"s"</span> <span class="ow">or</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"x"</span> <span class="ow">or</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"z"</span> <span class="ow">or</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"ß"</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> <span class="p">)</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a><span class="kr">end</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="kd">local</span> <span class="n">suffixes</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a><span class="n">suffixes</span><span class="p">[</span><span class="s2">"s.plural"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="n">final_y_is_i</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="n">epenthetic_e</span> <span class="o">=</span> <span class="n">epenthetic_e_for_s</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a><span class="p">}</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a><span class="n">suffixes</span><span class="p">[</span><span class="s2">"s.verb"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a> <span class="n">final_y_is_i</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a> <span class="n">final_consonant_is_doubled</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a> <span class="n">epenthetic_e</span> <span class="o">=</span> <span class="n">epenthetic_e_for_s</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a><span class="p">}</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a><span class="n">suffixes</span><span class="p">[</span><span class="s2">"ing"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a> <span class="n">final_consonant_is_doubled</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a> <span class="n">remove_silent_e</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a><span class="p">}</span> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a><span class="n">suffixes</span><span class="p">[</span><span class="s2">"d"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a> <span class="n">final_y_is_i</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a> <span class="n">final_consonant_is_doubled</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a> <span class="n">epenthetic_e</span> <span class="o">=</span> <span class="n">epenthetic_e_default</span><span class="p">,</span> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a><span class="p">}</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a><span class="n">suffixes</span><span class="p">[</span><span class="s2">"dst"</span><span class="p">]</span> <span class="o">=</span> <span class="n">suffixes</span><span class="p">[</span><span class="s2">"d"</span><span class="p">]</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a><span class="n">suffixes</span><span class="p">[</span><span class="s2">"st.verb"</span><span class="p">]</span> <span class="o">=</span> <span class="n">suffixes</span><span class="p">[</span><span class="s2">"d"</span><span class="p">]</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a><span class="n">suffixes</span><span class="p">[</span><span class="s2">"th"</span><span class="p">]</span> <span class="o">=</span> <span class="n">suffixes</span><span class="p">[</span><span class="s2">"d"</span><span class="p">]</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="n">suffixes</span><span class="p">[</span><span class="s2">"n"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> <span class="n">final_y_is_i</span> <span class="o">=</span> <span class="kc">true</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">final_y_is_i_after_vowel</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a> <span class="n">final_guy_is_gui</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></span></a> <span class="n">final_consonant_is_doubled</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a> <span class="c1">-- No epenthetic "e" after an "e", or an "i", "r" or "w" preceded by a vowel.</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a> <span class="n">epenthetic_e</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">stem</span><span class="p">)</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a> <span class="kr">return</span> <span class="ow">not</span> <span class="p">(</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a> <span class="n">sub</span><span class="p">(</span><span class="n">stem</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">"e"</span> <span class="ow">or</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a> <span class="n">umatch</span><span class="p">(</span><span class="n">normalize</span><span class="p">(</span><span class="n">stem</span><span class="p">),</span> <span class="s2">"["</span> <span class="o">..</span> <span class="n">vowels</span> <span class="o">..</span> <span class="s2">"][irw]$"</span><span class="p">)</span> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a> <span class="p">)</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a> <span class="kr">end</span><span class="p">,</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a><span class="p">}</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a><span class="n">suffixes</span><span class="p">[</span><span class="s2">"r"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a> <span class="n">final_y_is_i</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> <span class="n">final_ey_is_i</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a> <span class="n">final_guy_is_gui</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> <span class="n">final_consonant_is_doubled</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a> <span class="n">epenthetic_e</span> <span class="o">=</span> <span class="n">epenthetic_e_default</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a><span class="p">}</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="n">suffixes</span><span class="p">[</span><span class="s2">"st.superlative"</span><span class="p">]</span> <span class="o">=</span> <span class="n">suffixes</span><span class="p">[</span><span class="s2">"r"</span><span class="p">]</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a><span class="c1">-- Returns the stem used for suffixes that sometimes convert final "y" into "i",</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a><span class="c1">-- such as "-es" ("-ies"), e.g. "penny" → "penni" ("pennies"). If</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a><span class="c1">-- `final_ey_is_i` is true, final "ey" may also be converted, e.g. "plaguey" →</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a><span class="c1">-- "plagui"; this is needed for "-er" ("-ier") and "-est" ("-iest"). If `not_gu`</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a><span class="c1">-- is true, then normalize() will be called with the `not_gu` flag (see there</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a><span class="c1">-- for more info); this is true in most cases.</span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">convert_final_y_to_i</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="n">not_gu</span><span class="p">,</span> <span class="n">final_ey_is_i</span><span class="p">,</span> <span class="n">final_y_is_i_after_vowel</span><span class="p">)</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a> <span class="kd">local</span> <span class="n">final3</span> <span class="o">=</span> <span class="n">usub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">)</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a> <span class="c1">-- Special case: treat "eey" as "ee" + "y" (e.g. "treey" → "treeiest").</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="c1">-- "oey" and "uey" are usually vowel + "ey", but examples of "oe" + "y" and</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="c1">-- "ue" = "y" do also exist: compare "go" → "goey" → "goier" with "doe" →</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a> <span class="c1">-- "doey" → "doeier"; "flu" → "fluey" → "fluiest" and "flue" → "fluey" →</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a> <span class="c1">-- "flueiest" form a theoretically possible minimal pair.</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a> <span class="kr">if</span> <span class="n">final3</span> <span class="o">==</span> <span class="s2">"eey"</span> <span class="kr">then</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> <span class="kr">return</span> <span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> <span class="o">..</span> <span class="s2">"i"</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> <span class="kr">end</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="kd">local</span> <span class="n">final2</span> <span class="o">=</span> <span class="n">usub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a> <span class="c1">-- If `final_ey_is_i` is true, treat final "-ey" can also be reduced.</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a> <span class="kr">if</span> <span class="n">final_ey_is_i</span> <span class="ow">and</span> <span class="n">final2</span> <span class="o">==</span> <span class="s2">"ey"</span> <span class="kr">then</span> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="c1">-- Remove "ey" to get the base stem.</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="kd">local</span> <span class="n">base_stem</span> <span class="o">=</span> <span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">)</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="c1">-- Special case: allow final "-ey" ("potato-ey" → "potato-iest").</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="kr">if</span> <span class="n">umatch</span><span class="p">(</span><span class="n">final3</span><span class="p">,</span> <span class="s2">"["</span> <span class="o">..</span> <span class="n">hyphens</span> <span class="o">..</span> <span class="s2">"]ey"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="kr">return</span> <span class="n">base_stem</span> <span class="o">..</span> <span class="s2">"i"</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="kr">end</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="c1">-- Final "ey" becomes "i" iff the term is polysyllabic (e.g. not</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="c1">-- "grey"). "ey" is common if the base stem ends in a vowel ("echo →</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="c1">-- "echoey"), so the presence of a vowel anywhere in the base stem is</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="c1">-- sufficient to deem it polysyllabic. ("echoey" → "echo" → "echoiest",</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="c1">-- "beigey" → "beig" → "beigiest", but "grey" → "gr" → "greyest"). The</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a> <span class="c1">-- first "y" in "-yey" can be treated as a vowel as long as it's</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a> <span class="c1">-- preceded by something ("clayey" → "clay" → "clayiest", "cryey" →</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="c1">-- "cry" → "cryiest", but "*yey" → "*y" → "*yeyest"), so it needs to be</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a> <span class="c1">-- treated as a special case.</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> <span class="kd">local</span> <span class="n">normalized</span> <span class="o">=</span> <span class="n">normalize</span><span class="p">(</span><span class="n">base_stem</span><span class="p">,</span> <span class="s2">"ey"</span><span class="p">)</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> <span class="kr">if</span> <span class="n">sub</span><span class="p">(</span><span class="n">normalized</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">"y"</span> <span class="kr">then</span> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> <span class="kr">if</span> <span class="n">umatch</span><span class="p">(</span><span class="n">normalized</span><span class="p">,</span> <span class="s2">"[%w@][yY]$"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> <span class="kr">return</span> <span class="n">base_stem</span> <span class="o">..</span> <span class="s2">"i"</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="kr">end</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="kr">elseif</span> <span class="n">umatch</span><span class="p">(</span><span class="n">normalized</span><span class="p">,</span> <span class="s2">"["</span> <span class="o">..</span> <span class="n">vowels</span> <span class="o">..</span> <span class="s2">"%d]%w*$"</span><span class="p">)</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="kr">return</span> <span class="n">base_stem</span> <span class="o">..</span> <span class="s2">"i"</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="kr">end</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a> <span class="c1">-- Special cases:</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a> <span class="c1">-- Final "quy" ("soliloquy" → "soliloquies").</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="c1">-- Final "guy" iff `not_gu` is false ("roguy" → "roguiest").</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="c1">-- Final "y" after a vowel iff `final_y_is_i_after_vowel` is true ("slay" →</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a> <span class="c1">-- "slain").</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> <span class="c1">-- Final "-y" ("bro-y" → "bro-iest"), accounting for hyphen variation.</span> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="kr">elseif</span> <span class="n">umatch</span><span class="p">(</span><span class="n">final2</span><span class="p">,</span> <span class="s2">"["</span> <span class="o">..</span> <span class="n">hyphens</span> <span class="o">..</span> <span class="s2">"]y"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> <span class="c1">-- Replace final "y" with "i".</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> <span class="kr">return</span> <span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> <span class="o">..</span> <span class="s2">"i"</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="c1">-- Otherwise, final "y" becomes "i" iff it's not preceded by a vowel</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="c1">-- ("shy" → "shiest", "horsy" → "horsies", but "day" → "days", "coy" →</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a> <span class="c1">-- "coyest").</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> <span class="kr">else</span> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a> <span class="c1">-- Remove "y" to get the base stem.</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a> <span class="kd">local</span> <span class="n">base_stem</span> <span class="o">=</span> <span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a> <span class="kr">if</span> <span class="n">umatch</span><span class="p">(</span><span class="n">normalize</span><span class="p">(</span><span class="n">base_stem</span><span class="p">,</span> <span class="s2">"y"</span><span class="p">,</span> <span class="n">not_gu</span><span class="p">),</span> <span class="s2">"[^%s%p"</span> <span class="o">..</span> <span class="p">(</span><span class="n">final_y_is_i_after_vowel</span> <span class="ow">and</span> <span class="s2">""</span> <span class="ow">or</span> <span class="n">vowels</span><span class="p">)</span> <span class="o">..</span> <span class="s2">"]$"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a> <span class="kr">return</span> <span class="n">base_stem</span> <span class="o">..</span> <span class="s2">"i"</span> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a> <span class="kr">end</span> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a> <span class="kr">end</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="kr">return</span> <span class="n">str</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></span></a><span class="kr">end</span> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">double_final_consonant</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="n">final</span><span class="p">)</span> </span><span id="L-187"><a href="#L-187"><span class="linenos" data-line="187"></span></a> <span class="kd">local</span> <span class="n">initial</span> <span class="o">=</span> <span class="n">umatch</span><span class="p">(</span><span class="n">normalize</span><span class="p">(</span><span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">),</span> <span class="n">final</span><span class="p">),</span> <span class="s2">"^.*%f[^%z%s"</span> <span class="o">..</span> <span class="n">hyphens</span> <span class="o">..</span> <span class="s2">"…]([%l%p]*)["</span> <span class="o">..</span> <span class="n">vowels</span> <span class="o">..</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="kr">return</span> <span class="n">initial</span> <span class="ow">and</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">initial</span> <span class="o">==</span> <span class="s2">""</span> <span class="ow">or</span> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> <span class="n">initial</span> <span class="o">==</span> <span class="s2">"y"</span> <span class="ow">or</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> <span class="n">match</span><span class="p">(</span><span class="n">initial</span><span class="p">,</span> <span class="s2">"^.[</span><span class="se">\128</span><span class="s2">-</span><span class="se">\191</span><span class="s2">]*$"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">umatch</span><span class="p">(</span><span class="n">initial</span><span class="p">,</span> <span class="s2">"[^"</span> <span class="o">..</span> <span class="n">vowels</span> <span class="o">..</span> <span class="s2">"]"</span><span class="p">)</span> <span class="ow">or</span> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a> <span class="n">umatch</span><span class="p">(</span><span class="n">initial</span><span class="p">,</span> <span class="s2">"^[^"</span> <span class="o">..</span> <span class="n">vowels</span> <span class="o">..</span> <span class="s2">"]*%f[^%l]$"</span><span class="p">)</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> <span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">str</span> <span class="o">..</span> <span class="n">final</span><span class="p">)</span> <span class="ow">or</span> <span class="n">str</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a><span class="kr">end</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">remove_silent_e</span><span class="p">(</span><span class="n">str</span><span class="p">)</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="kd">local</span> <span class="n">final2</span> <span class="o">=</span> <span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> <span class="kr">if</span> <span class="n">final2</span> <span class="o">==</span> <span class="s2">"ie"</span> <span class="kr">then</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="c1">-- Replace "ie" with "y", unless it follows another "y" (e.g.</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="c1">-- "spulyie" → "spulyieing").</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="n">ugsub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="s2">"([^yY%s%p])ie$"</span><span class="p">,</span> <span class="s2">"%1y"</span><span class="p">)</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> <span class="kr">end</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> <span class="kd">local</span> <span class="n">base_stem</span> <span class="o">=</span> <span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a> <span class="c1">-- Silent "e" occurs after "u" or a consonant (cluster) preceded by a vowel.</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> <span class="kr">return</span> <span class="p">(</span> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="n">final2</span> <span class="o">==</span> <span class="s2">"ue"</span> <span class="ow">or</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="n">umatch</span><span class="p">(</span><span class="n">normalize</span><span class="p">(</span><span class="n">base_stem</span><span class="p">,</span> <span class="s2">"e"</span><span class="p">),</span> <span class="s2">"["</span> <span class="o">..</span> <span class="n">vowels</span> <span class="o">..</span> <span class="s2">"][^"</span> <span class="o">..</span> <span class="n">vowels</span> <span class="o">..</span> <span class="s2">"]+$"</span><span class="p">)</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a> <span class="p">)</span> <span class="ow">and</span> <span class="n">base_stem</span> <span class="ow">or</span> <span class="n">str</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a><span class="kr">end</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">add_suffix</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">suffix</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="kd">local</span> <span class="n">data</span> <span class="o">=</span> <span class="n">suffixes</span><span class="p">[</span><span class="n">suffix</span><span class="p">]</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="n">match</span><span class="p">(</span><span class="n">suffix</span><span class="p">,</span> <span class="s2">"^([^.]*)"</span><span class="p">)</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a> <span class="kd">local</span> <span class="n">final</span><span class="p">,</span> <span class="n">stem</span> <span class="o">=</span> <span class="n">sub</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> <span class="c1">-- Proper nouns don't have a final "y" changed to "i" (e.g. "the Gettys",</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a> <span class="c1">-- "the public Ivys").</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="n">data</span><span class="p">.</span><span class="n">final_y_is_i</span> <span class="ow">and</span> <span class="n">final</span> <span class="o">==</span> <span class="s2">"y"</span> <span class="ow">and</span> <span class="n">pos</span> <span class="o">~=</span> <span class="s2">"proper noun"</span> <span class="kr">then</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a> <span class="n">stem</span> <span class="o">=</span> <span class="n">convert_final_y_to_i</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="ow">not</span> <span class="n">data</span><span class="p">.</span><span class="n">final_guy_is_gui</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">final_ey_is_i</span><span class="p">,</span> <span class="n">data</span><span class="p">.</span><span class="n">final_y_is_i_after_vowel</span><span class="p">)</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="kr">elseif</span> <span class="n">data</span><span class="p">.</span><span class="n">remove_silent_e</span> <span class="ow">and</span> <span class="n">final</span> <span class="o">==</span> <span class="s2">"e"</span> <span class="kr">then</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> <span class="n">stem</span> <span class="o">=</span> <span class="n">remove_silent_e</span><span class="p">(</span><span class="n">term</span><span class="p">)</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> <span class="kr">else</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a> <span class="n">stem</span> <span class="o">=</span> <span class="n">term</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a> <span class="kr">end</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a> <span class="kd">local</span> <span class="n">epenthetic_e</span> <span class="o">=</span> <span class="n">data</span><span class="p">.</span><span class="n">epenthetic_e</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a> <span class="kr">if</span> <span class="n">epenthetic_e</span> <span class="ow">and</span> <span class="n">epenthetic_e</span><span class="p">(</span><span class="n">stem</span><span class="p">,</span> <span class="n">term</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> <span class="n">suffix</span> <span class="o">=</span> <span class="s2">"e"</span> <span class="o">..</span> <span class="n">suffix</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a> <span class="kr">end</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> <span class="kr">if</span> <span class="p">(</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a> <span class="n">data</span><span class="p">.</span><span class="n">final_consonant_is_doubled</span> <span class="ow">and</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a> <span class="n">match</span><span class="p">(</span><span class="n">final</span><span class="p">,</span> <span class="s2">"^[bcdfgjklmnpqrstvz]$"</span><span class="p">)</span> <span class="ow">and</span> <span class="c1">-- Only double regular consonants.</span> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a> <span class="n">umatch</span><span class="p">(</span><span class="n">suffix</span><span class="p">,</span> <span class="s2">"^["</span> <span class="o">..</span> <span class="n">vowels</span> <span class="o">..</span> <span class="s2">"]"</span><span class="p">)</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a> <span class="n">stem</span> <span class="o">=</span> <span class="n">double_final_consonant</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="n">final</span><span class="p">)</span> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a> <span class="kr">end</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a> <span class="kr">return</span> <span class="n">stem</span> <span class="o">..</span> <span class="n">suffix</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a><span class="kr">end</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a><span class="n">add_suffix</span> <span class="o">=</span> <span class="n">export</span><span class="p">.</span><span class="n">add_suffix</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a><span class="cm">--[==[</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a><span class="cm">Pluralize a word in a smart fashion, according to normal English rules.</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a><span class="cm"># If the word ends in a consonant or "qu" + "-y", replace "-y" with "-ies".</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a><span class="cm"># If the word ends in "s", "x", "z", "ch", "sh" or "zh", add "-es".</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a><span class="cm"># Otherwise, add "-s".</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a> </span><span id="L-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a><span class="cm">This handles links correctly:</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a><span class="cm"># If a piped link, change the second part appropriately.</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a><span class="cm"># If a non-piped link and rule #1 above applies, convert to a piped link with the second part containing the plural.</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a><span class="cm"># If a non-piped link and rules #2 or #3 above apply, add the plural outside the link.</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a><span class="cm">]==]</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">pluralize</span><span class="p">(</span><span class="n">str</span><span class="p">)</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> <span class="c1">-- Treat as a link if a "[[" is present and the string ends with "]]".</span> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">find</span><span class="p">(</span><span class="n">str</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 class="ow">and</span> <span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"]]"</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> <span class="kr">return</span> <span class="n">add_suffix</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="s2">"s.plural"</span><span class="p">)</span> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> <span class="kr">end</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> <span class="c1">-- Find the last "[[" (in case there is more than one) by reversing</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> <span class="c1">-- the string.</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> <span class="kd">local</span> <span class="n">str_rev</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="n">str</span><span class="p">)</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> <span class="kd">local</span> <span class="n">open</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">str_rev</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><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> <span class="c1">-- If the last "[[" is followed by a "]]" which isn't at the end,</span> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a> <span class="c1">-- then the final "]]" is just plaintext (e.g. "[[foo]]bar]]").</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">bad_close</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">str_rev</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><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> <span class="c1">-- Note: the bad "]]" will have a lower index than the last "[[" in</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a> <span class="c1">-- the reversed string.</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> <span class="kr">if</span> <span class="n">bad_close</span> <span class="ow">and</span> <span class="n">bad_close</span> <span class="o"><</span> <span class="n">open</span> <span class="kr">then</span> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a> <span class="kr">return</span> <span class="n">add_suffix</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="s2">"s.plural"</span><span class="p">)</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a> <span class="kr">end</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a> <span class="n">open</span> <span class="o">=</span> <span class="o">#</span><span class="n">str</span> <span class="o">-</span> <span class="n">open</span> <span class="o">+</span> <span class="mi">2</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a> <span class="c1">-- Get the target and display text by searching from just after "[[".</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a> <span class="kd">local</span> <span class="n">target</span><span class="p">,</span> <span class="n">display</span> <span class="o">=</span> <span class="n">match</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="s2">"([^|]*)|?(.*)%]%]$"</span><span class="p">,</span> <span class="n">open</span><span class="p">)</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a> <span class="n">display</span> <span class="o">=</span> <span class="n">add_suffix</span><span class="p">(</span><span class="n">display</span> <span class="o">~=</span> <span class="s2">""</span> <span class="ow">and</span> <span class="n">display</span> <span class="ow">or</span> <span class="n">target</span><span class="p">,</span> <span class="s2">"s.plural"</span><span class="p">)</span> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a> <span class="c1">-- If the link target is a substring of the display text, then</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> <span class="c1">-- use a trail (e.g. "[[foo]]" → "[[foo]]s", since "foo" is a substring</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> <span class="c1">-- of "foos").</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a> <span class="kd">local</span> <span class="n">index</span><span class="p">,</span> <span class="n">trail</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">display</span><span class="p">,</span> <span class="n">target</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-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a> <span class="kr">if</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">1</span> <span class="kr">then</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="kr">return</span> <span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">open</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">..</span> <span class="n">target</span> <span class="o">..</span> <span class="s2">"]]"</span> <span class="o">..</span> <span class="n">sub</span><span class="p">(</span><span class="n">display</span><span class="p">,</span> <span class="n">trail</span> <span class="o">+</span> <span class="mi">1</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="c1">-- Otherwise, return a piped link.</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a> <span class="kr">return</span> <span class="n">sub</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">open</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">..</span> <span class="n">target</span> <span class="o">..</span> <span class="s2">"|"</span> <span class="o">..</span> <span class="n">display</span> <span class="o">..</span> <span class="s2">"]]"</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><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a><span class="c1">-- Returns true if `plural` is an expected, regular plural of `term`.</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a><span class="kr">function</span> <span class="nc">export</span><span class="p">.</span><span class="nf">is_regular_plural</span><span class="p">(</span><span class="n">plural</span><span class="p">,</span> <span class="n">term</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="c1">-- Ignore any final punctuation that occurs in both forms, which is common</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a> <span class="c1">-- in abbreviations (e.g. "abbr." → "abbrs.").</span> </span><span id="L-286"><a href="#L-286"><span class="linenos" data-line="286"></span></a> <span class="kd">local</span> <span class="n">final_punc</span> <span class="o">=</span> <span class="n">umatch</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="s2">"%p*$"</span><span class="p">)</span> </span><span id="L-287"><a href="#L-287"><span class="linenos" data-line="287"></span></a> <span class="kd">local</span> <span class="n">final_punc_len</span> <span class="o">=</span> <span class="o">#</span><span class="n">final_punc</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a> <span class="kr">if</span> <span class="n">sub</span><span class="p">(</span><span class="n">plural</span><span class="p">,</span> <span class="o">-</span><span class="n">final_punc_len</span><span class="p">)</span> <span class="o">==</span> <span class="n">final_punc</span> <span class="kr">then</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a> <span class="n">term</span> <span class="o">=</span> <span class="n">sub</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="o">-</span><span class="n">final_punc_len</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a> <span class="n">plural</span> <span class="o">=</span> <span class="n">sub</span><span class="p">(</span><span class="n">plural</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="n">final_punc_len</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="kr">end</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="kr">if</span> <span class="n">plural</span> <span class="o">==</span> <span class="n">term</span> <span class="o">..</span> <span class="s2">"s"</span> <span class="ow">or</span> <span class="n">plural</span> <span class="o">==</span> <span class="n">add_suffix</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="s2">"s.plural"</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="kr">return</span> <span class="kc">true</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="kr">end</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">final</span> <span class="o">=</span> <span class="n">sub</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</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">return</span> <span class="p">(</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="c1">-- Doubled final consonants in "s" and "z".</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"s"</span> <span class="ow">and</span> <span class="n">plural</span> <span class="o">==</span> <span class="n">term</span> <span class="o">..</span> <span class="s2">"ses"</span> <span class="ow">or</span> <span class="c1">-- e.g. "busses"</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"z"</span> <span class="ow">and</span> <span class="n">plural</span> <span class="o">==</span> <span class="n">term</span> <span class="o">..</span> <span class="s2">"zes"</span> <span class="ow">or</span> <span class="c1">-- e.g. "quizzes"</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="c1">-- convert_final_y_to_i() without the `not_gu` flag set, to catch</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="c1">-- "-guy" → "-guies", but not "day" → "daies".</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"y"</span> <span class="ow">and</span> <span class="n">plural</span> <span class="o">==</span> <span class="n">convert_final_y_to_i</span><span class="p">(</span><span class="n">term</span><span class="p">)</span> <span class="o">..</span> <span class="s2">"es"</span> <span class="ow">or</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="c1">-- Capitalized terms like "$DEITY" → "$DEITIES (should we treat this as regular?)</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> <span class="n">final</span> <span class="o">==</span> <span class="s2">"Y"</span> <span class="ow">and</span> <span class="n">ulower</span><span class="p">(</span><span class="n">plural</span><span class="p">)</span> <span class="o">==</span> <span class="n">convert_final_y_to_i</span><span class="p">(</span><span class="n">ulower</span><span class="p">(</span><span class="n">term</span><span class="p">))</span> <span class="o">..</span> <span class="s2">"es"</span> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a> <span class="p">)</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a><span class="kr">end</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a><span class="kr">return</span> <span class="n">export</span> </span></pre></div></div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wiktionary.org/w/index.php?title=Module:en-utilities&oldid=82719203">https://en.wiktionary.org/w/index.php?title=Module:en-utilities&oldid=82719203</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:English_modules" title="Category:English modules">English modules</a></li><li><a href="/wiki/Category:Language-specific_utility_modules" title="Category:Language-specific utility modules">Language-specific utility modules</a></li><li><a href="/wiki/Category:Templates_and_modules_needing_documentation" title="Category:Templates and modules needing documentation">Templates and modules needing documentation</a></li></ul></div></div> </div> </div> <div id="mw-navigation"> <h2>Navigation menu</h2> <div id="mw-head"> <nav id="p-personal" class="mw-portlet mw-portlet-personal vector-user-menu-legacy vector-menu" aria-labelledby="p-personal-label" > <h3 id="p-personal-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Personal tools</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anonuserpage" class="mw-list-item"><span title="The user page for the IP address you are editing as">Not logged in</span></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><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-createaccount" class="mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Module%3Aen-utilities&returntoquery=curid%3D10496303%26diff%3D82719203%26oldid%3D82717460" title="You are encouraged to create an account and log in; however, it is not mandatory"><span>Create account</span></a></li><li id="pt-login" class="mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Module%3Aen-utilities&returntoquery=curid%3D10496303%26diff%3D82719203%26oldid%3D82717460" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span>Log in</span></a></li> </ul> </div> </nav> <div id="left-navigation"> <nav id="p-namespaces" class="mw-portlet mw-portlet-namespaces vector-menu-tabs vector-menu-tabs-legacy vector-menu" aria-labelledby="p-namespaces-label" > <h3 id="p-namespaces-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Namespaces</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-module" class="selected mw-list-item"><a href="/wiki/Module:en-utilities" title="View the module page [c]" accesskey="c"><span>Module</span></a></li><li id="ca-talk" class="new mw-list-item"><a href="/w/index.php?title=Module_talk:en-utilities&action=edit&redlink=1" rel="discussion" class="new" title="Discussion about the content page (page does not exist) [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </nav> <nav id="p-variants" class="mw-portlet mw-portlet-variants emptyPortlet vector-menu-dropdown vector-menu" aria-labelledby="p-variants-label" > <input type="checkbox" id="p-variants-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-variants" class="vector-menu-checkbox" aria-labelledby="p-variants-label" > <label id="p-variants-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">English</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </nav> </div> <div id="right-navigation"> <nav id="p-views" class="mw-portlet mw-portlet-views vector-menu-tabs vector-menu-tabs-legacy vector-menu" aria-labelledby="p-views-label" > <h3 id="p-views-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Views</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected mw-list-item"><a href="/wiki/Module:en-utilities"><span>Read</span></a></li><li id="ca-viewsource" class="mw-list-item"><a href="/w/index.php?title=Module:en-utilities&action=edit&oldid=82719203" title="This page is protected. You can view its source [e]" accesskey="e"><span>View source</span></a></li><li id="ca-history" class="mw-list-item"><a href="/w/index.php?title=Module:en-utilities&action=history" title="Past revisions of this page [h]" accesskey="h"><span>History</span></a></li> </ul> </div> </nav> <nav id="p-cactions" class="mw-portlet mw-portlet-cactions emptyPortlet vector-menu-dropdown vector-menu" aria-labelledby="p-cactions-label" title="More options" > <input type="checkbox" id="p-cactions-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-cactions" class="vector-menu-checkbox" aria-labelledby="p-cactions-label" > <label id="p-cactions-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">More</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </nav> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <h3 >Search</h3> <form action="/w/index.php" id="searchform" class="vector-search-box-form"> <div id="simpleSearch" class="vector-search-box-inner" data-search-loc="header-navigation"> <input class="vector-search-box-input" type="search" name="search" placeholder="Search Wiktionary" aria-label="Search Wiktionary" autocapitalize="none" title="Search Wiktionary [f]" accesskey="f" id="searchInput" > <input type="hidden" name="title" value="Special:Search"> <input id="mw-searchButton" class="searchButton mw-fallbackSearchButton" type="submit" name="fulltext" title="Search the pages for this text" value="Search"> <input id="searchButton" class="searchButton" type="submit" name="go" title="Go to a page with this exact name if it exists" value="Go"> </div> </form> </div> </div> </div> <div id="mw-panel" class="vector-legacy-sidebar"> <div id="p-logo" role="banner"> <a class="mw-wiki-logo" href="/wiki/Wiktionary:Main_Page" title="Visit the main page"></a> </div> <nav id="p-navigation" class="mw-portlet mw-portlet-navigation vector-menu-portal portal vector-menu" aria-labelledby="p-navigation-label" > <h3 id="p-navigation-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Navigation</span> </h3> <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-sitesupport" class="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" title="Support us"><span>Donations</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> </nav> <nav id="p-tb" class="mw-portlet mw-portlet-tb vector-menu-portal portal vector-menu" aria-labelledby="p-tb-label" > <h3 id="p-tb-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Tools</span> </h3> <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:en-utilities" 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:en-utilities" 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:en-utilities&oldid=82719203" 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:en-utilities&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%2Fw%2Findex.php%3Ftitle%3DModule%3Aen-utilities%26curid%3D10496303%26diff%3D82719203%26oldid%3D82717460"><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%2Fw%2Findex.php%3Ftitle%3DModule%3Aen-utilities%26curid%3D10496303%26diff%3D82719203%26oldid%3D82717460"><span>Download QR code</span></a></li> </ul> </div> </nav> <nav id="p-electronpdfservice-sidebar-portlet-heading" class="mw-portlet mw-portlet-electronpdfservice-sidebar-portlet-heading vector-menu-portal portal vector-menu" aria-labelledby="p-electronpdfservice-sidebar-portlet-heading-label" > <h3 id="p-electronpdfservice-sidebar-portlet-heading-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Print/export</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <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> </nav> <nav id="p-wikibase-otherprojects" class="mw-portlet mw-portlet-wikibase-otherprojects vector-menu-portal portal vector-menu" aria-labelledby="p-wikibase-otherprojects-label" > <h3 id="p-wikibase-otherprojects-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">In other projects</span> </h3> <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/Q130540923" title="Link to connected data repository item [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </nav> <nav id="p-lang" class="mw-portlet mw-portlet-lang vector-menu-portal portal vector-menu" aria-labelledby="p-lang-label" > <h3 id="p-lang-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">In other languages</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-hsb mw-list-item"><a href="https://hsb.wiktionary.org/wiki/Modul:en-utilities" title="Modul:en-utilities – Upper Sorbian" lang="hsb" hreflang="hsb" data-title="Modul:en-utilities" data-language-autonym="Hornjoserbsce" data-language-local-name="Upper Sorbian" class="interlanguage-link-target"><span>Hornjoserbsce</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wiktionary.org/wiki/Modul:en-utilities" title="Modul:en-utilities – Uzbek" lang="uz" hreflang="uz" data-title="Modul:en-utilities" 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-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:en-utilities" title="မေႃႇၵျူး:en-utilities – Shan" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:en-utilities" 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:en-utilities" title="มอดูล:en-utilities – Thai" lang="th" hreflang="th" data-title="มอดูล:en-utilities" data-language-autonym="ไทย" data-language-local-name="Thai" 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:En-utilities" title="Module:En-utilities – Chinese" lang="zh" hreflang="zh" data-title="Module:En-utilities" 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/Q130540923#sitelinks-wiktionary" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </nav> </div> </div> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 21 November 2024, at 12:19.</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:en-utilities&curid=10496303&diff=82719203&oldid=82717460&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> <script>(RLQ=window.RLQ||[]).push(function(){mw.log.warn("This page is using the deprecated ResourceLoader module \"codex-search-styles\".\n[1.43] Use a CodexModule with codexComponents to set your specific components used: https://www.mediawiki.org/wiki/Codex#Using_a_limited_subset_of_components");mw.config.set({"wgHostname":"mw-web.codfw.main-7dfb9d98f5-m4sw5","wgBackendResponseTime":339,"wgPageParseReport":{"limitreport":{"cputime":"0.056","walltime":"0.081","ppvisitednodes":{"value":12,"limit":1000000},"postexpandincludesize":{"value":2076,"limit":2097152},"templateargumentsize":{"value":0,"limit":2097152},"expansiondepth":{"value":3,"limit":100},"expensivefunctioncount":{"value":2,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":0,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 76.050 1 Template:documentation","100.00% 76.050 1 -total"]},"scribunto":{"limitreport-timeusage":{"value":"0.042","limit":"10.000"},"limitreport-memusage":{"value":2361835,"limit":104857600}},"cachereport":{"origin":"mw-web.codfw.main-7dfb9d98f5-m4sw5","timestamp":"20241125202400","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>