CINXE.COM
Modul:TemplatePar – Wikipedia
<!DOCTYPE html> <html class="client-nojs" lang="de" dir="ltr"> <head> <meta charset="UTF-8"> <title>Modul:TemplatePar – Wikipedia</title> <script>(function(){var className="client-js";var cookie=document.cookie.match(/(?:^|; )dewikimwclientpreferences=([^;]+)/);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":[",\t.",".\t,"],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"wgRequestId":"6221e3ab-3444-4cdc-af65-bbe3ab4c39ef","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Modul:TemplatePar","wgTitle":"TemplatePar","wgCurRevisionId":232032714,"wgRevisionId":232032714,"wgArticleId":7658768,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"], "wgCategories":["Wikipedia:Lua/Modul/Global via WikiData/Mutter"],"wgPageViewLanguage":"de","wgPageContentLanguage":"de","wgPageContentModel":"Scribunto","wgRelevantPageName":"Modul:TemplatePar","wgRelevantArticleId":7658768,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":["sysop"],"wgRestrictionMove":["sysop"],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":1}}},"wgStableRevisionId":232032714,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":60000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":true,"wgVector2022LanguageInHeader":false, "wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q15393417","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.citeRef":"ready","ext.gadget.defaultPlainlinks":"ready","ext.gadget.dewikiCommonHide":"ready","ext.gadget.dewikiCommonLayout":"ready","ext.gadget.dewikiCommonStyle":"ready","ext.gadget.NavFrame":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.pygments":"ready","skins.vector.styles.legacy":"ready","ext.flaggedRevs.basic":"ready","mediawiki.codex.messagebox.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","codex-search-styles":"ready", "ext.uls.interlanguage":"ready","wikibase.client.init":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","skins.vector.legacy.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.flaggedRevs.advanced","ext.gadget.WikiMiniAtlas","ext.gadget.OpenStreetMap","ext.gadget.CommonsDirekt","ext.gadget.donateLink","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.checkUser.clientHints"];</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=de&modules=codex-search-styles%7Cext.flaggedRevs.basic%7Cext.pygments%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cmediawiki.codex.messagebox.styles%7Cskins.vector.styles.legacy%7Cwikibase.client.init&only=styles&skin=vector"> <script async="" src="/w/load.php?lang=de&modules=startup&only=scripts&raw=1&skin=vector"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=de&modules=ext.gadget.NavFrame%2CciteRef%2CdefaultPlainlinks%2CdewikiCommonHide%2CdewikiCommonLayout%2CdewikiCommonStyle&only=styles&skin=vector"> <link rel="stylesheet" href="/w/load.php?lang=de&modules=site.styles&only=styles&skin=vector"> <meta name="generator" content="MediaWiki 1.44.0-wmf.18"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Modul:TemplatePar – Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//de.m.wikipedia.org/wiki/Modul:TemplatePar"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (de)"> <link rel="EditURI" type="application/rsd+xml" href="//de.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://de.wikipedia.org/wiki/Modul:TemplatePar"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de"> <link rel="alternate" type="application/atom+xml" title="Atom-Feed für „Wikipedia“" href="/w/index.php?title=Spezial:Letzte_%C3%84nderungen&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="login.wikimedia.org"> </head> <body class="skin-vector-legacy mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject page-Modul_TemplatePar rootpage-Modul_TemplatePar 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> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">Modul</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">TemplatePar</span></h1> <div id="bodyContent" class="vector-body"> <div id="siteSub" class="noprint">aus Wikipedia, der freien Enzyklopädie</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">Zur Navigation springen</a> <a class="mw-jump-link" href="#searchInput">Zur Suche springen</a> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><table class="wikitable" style="border:#000080 2px solid; float:right; text-align:center;"> <tbody><tr> <td rowspan="2"><a href="/wiki/Wikipedia:Lua/Modul/TemplatePar" title="Wikipedia:Lua/Modul/TemplatePar">Vorlagenprogrammierung</a> </td> <td rowspan="2"><a href="/wiki/Wikipedia_Diskussion:Lua/Modul/TemplatePar" title="Wikipedia Diskussion:Lua/Modul/TemplatePar">Diskussionen</a> </td> <td colspan="3"><b><a href="/wiki/Hilfe:Lua" title="Hilfe:Lua">Lua</a></b> </td> <td rowspan="2"><a href="/wiki/Wikipedia:Lua/Modul/TemplatePar/test" title="Wikipedia:Lua/Modul/TemplatePar/test">Test</a> </td> <td colspan="2">Unterseiten </td></tr> <tr> <td><a class="mw-selflink selflink">Modul</a> </td> <td><a href="/wiki/Wikipedia:Lua/Modul/TemplatePar/de" title="Wikipedia:Lua/Modul/TemplatePar/de">Deutsch</a> </td> <td><a href="/wiki/Wikipedia:Lua/Modul/TemplatePar/en" title="Wikipedia:Lua/Modul/TemplatePar/en">English</a> <p class="mw-empty-elt"> </p> </td> <td><a class="external text" href="https://de.wikipedia.org/w/index.php?title=Spezial:Prefixindex&prefix=TemplatePar&namespace=828">Modul:</a> </td> <td><a class="external text" href="https://de.wikipedia.org/w/index.php?title=Spezial:Prefixindex&prefix=Lua/Modul/TemplatePar&namespace=4">Dokumentation</a> </td></tr></tbody></table> <div style="border: #000080 2px solid; border-radius: 6px; clear: both; display: table; margin: 0.5em 0em 1em 0em; padding: 0.5em; vertical-align: middle;"> <div class="noviewer nomobile" style="display: table-cell; padding-bottom: 0.2em; padding-left: 0.5em; padding-right: 1em; padding-top: 0.2em;" aria-hidden="true" role="presentation"><span typeof="mw:File"><a href="/wiki/Datei:Lua-Logo.svg" class="mw-file-description" title="Lua-Logo"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Lua-Logo.svg/24px-Lua-Logo.svg.png" decoding="async" width="24" height="24" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Lua-Logo.svg/36px-Lua-Logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Lua-Logo.svg/48px-Lua-Logo.svg.png 2x" data-file-width="947" data-file-height="947" /></a></span></div> <div style="display: table-cell; padding-left: 0.5em;"> <p>Diese Seite enthält Code in der <a href="/wiki/Hilfe:Lua" title="Hilfe:Lua">Programmiersprache Lua</a>. <span class="plainlinks" style="margin-left:2em; margin-right:1em;"><a class="external text" href="https://templatecount.toolforge.org/?lang=de&namespace=828&name=TemplatePar">Einbindungszahl</a></span> <a class="external text" href="https://de.wikipedia.org/w/index.php?title=Spezial:Suche&search=hastemplate%3A%22Modul%3ATemplatePar%22+">Cirrus</a> </p> </div> </div><div style="clear:both;"></div><div style="clear:both; margin-bottom:1em; margin-top:1em; padding:0.5em; width:97%; background:#7FFF00; border:3px #006400 solid;">Dies ist die (produktive) <b>Mutterversion</b> eines global benutzten Lua-Moduls.<br /> Wenn die <i>serial</i>-Information nicht übereinstimmt, müsste eine Kopie hiervon in das lokale Wiki geschrieben werden.</div> <div>Versionsbezeichnung auf WikiData: <code style="white-space:nowrap">2023-03-20</code></div> <div style="clear:both;"></div> <hr /><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">TemplatePar</span> <span class="o">=</span> <span class="p">{</span> <span class="n">serial</span> <span class="o">=</span> <span class="s2">"2023-03-20"</span><span class="p">,</span> </span><span id="L-2"><a href="#L-2"><span class="linenos" data-line="2"></span></a> <span class="n">suite</span> <span class="o">=</span> <span class="s2">"TemplatePar"</span><span class="p">,</span> </span><span id="L-3"><a href="#L-3"><span class="linenos" data-line="3"></span></a> <span class="n">item</span> <span class="o">=</span> <span class="mi">15393417</span><span class="p">,</span> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a> <span class="n">globals</span> <span class="o">=</span> <span class="p">{</span> <span class="n">DateTime</span> <span class="o">=</span> <span class="mi">20652535</span><span class="p">,</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a> <span class="n">FileMedia</span> <span class="o">=</span> <span class="mi">24765326</span><span class="p">,</span> </span><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a> <span class="n">Multilingual</span> <span class="o">=</span> <span class="mi">47541920</span><span class="p">,</span> </span><span id="L-7"><a href="#L-7"><span class="linenos" data-line="7"></span></a> <span class="n">TemplUtl</span> <span class="o">=</span> <span class="mi">52364930</span><span class="p">,</span> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a> <span class="n">URLutil</span> <span class="o">=</span> <span class="mi">10859193</span> <span class="p">}</span> <span class="p">}</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a><span class="cm">--[=[</span> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a><span class="cm">Template parameter utility</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a><span class="cm">* assert</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a><span class="cm">* check</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a><span class="cm">* count</span> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a><span class="cm">* countNotEmpty</span> </span><span id="L-15"><a href="#L-15"><span class="linenos" data-line="15"></span></a><span class="cm">* downcase()</span> </span><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a><span class="cm">* duplicates</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a><span class="cm">* match</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a><span class="cm">* valid</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a><span class="cm">* verify()</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a><span class="cm">* TemplatePar()</span> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a><span class="cm">* failsafe()</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a><span class="cm">]=]</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a> </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="kd">local</span> <span class="n">Local</span> <span class="o">=</span> <span class="p">{</span> <span class="n">frame</span> <span class="o">=</span> <span class="kc">false</span> <span class="p">}</span> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a><span class="kd">local</span> <span class="n">Failsafe</span> <span class="o">=</span> <span class="n">TemplatePar</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a><span class="kd">local</span> <span class="n">GlobalMod</span> <span class="o">=</span> <span class="n">Local</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a><span class="c1">-- Module globals</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a><span class="n">Local</span><span class="p">.</span><span class="n">messagePrefix</span> <span class="o">=</span> <span class="s2">"lua-module-TemplatePar-"</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a><span class="n">Local</span><span class="p">.</span><span class="n">L10nDef</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a><span class="n">Local</span><span class="p">.</span><span class="n">L10nDef</span><span class="p">.</span><span class="n">en</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="n">badPattern</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar pattern syntax error"</span><span class="p">,</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a> <span class="n">dupOpt</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar repeated optional parameter"</span><span class="p">,</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a> <span class="n">dupRule</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar conflict key/pattern"</span><span class="p">,</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> <span class="n">empty</span> <span class="o">=</span> <span class="s2">"Error in template * undefined value for mandatory"</span><span class="p">,</span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a> <span class="n">invalid</span> <span class="o">=</span> <span class="s2">"Error in template * invalid parameter"</span><span class="p">,</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a> <span class="n">invalidPar</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar invalid parameter"</span><span class="p">,</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a> <span class="n">minmax</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar min > max"</span><span class="p">,</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> <span class="n">missing</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar missing library"</span><span class="p">,</span> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a> <span class="n">multiSpell</span> <span class="o">=</span> <span class="s2">"Error in template * multiple spelling of parameter"</span><span class="p">,</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a> <span class="n">noMSGnoCAT</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar neither message nor category"</span><span class="p">,</span> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a> <span class="n">noname</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar missing parameter name"</span><span class="p">,</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a> <span class="n">notFound</span> <span class="o">=</span> <span class="s2">"Error in template * missing page"</span><span class="p">,</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> <span class="n">tooLong</span> <span class="o">=</span> <span class="s2">"Error in template * parameter too long"</span><span class="p">,</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a> <span class="n">tooShort</span> <span class="o">=</span> <span class="s2">"Error in template * parameter too short"</span><span class="p">,</span> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a> <span class="n">unavailable</span> <span class="o">=</span> <span class="s2">"Error in template * parameter name missing"</span><span class="p">,</span> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a> <span class="n">undefined</span> <span class="o">=</span> <span class="s2">"Error in template * mandatory parameter missing"</span><span class="p">,</span> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a> <span class="n">unknown</span> <span class="o">=</span> <span class="s2">"Error in template * unknown parameter name"</span><span class="p">,</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="n">unknownRule</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar unknown rule"</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a><span class="p">}</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a><span class="n">Local</span><span class="p">.</span><span class="n">patterns</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a> <span class="p">[</span> <span class="s2">"ASCII"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[ -~]*$"</span><span class="p">,</span> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a> <span class="p">[</span> <span class="s2">"ASCII+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[ -~]+$"</span><span class="p">,</span> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a> <span class="p">[</span> <span class="s2">"ASCII+1"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[!-~]+$"</span><span class="p">,</span> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a> <span class="p">[</span> <span class="s2">"n"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[%-]?[0-9]*$"</span><span class="p">,</span> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a> <span class="p">[</span> <span class="s2">"n>0"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[0-9]*[1-9][0-9]*$"</span><span class="p">,</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a> <span class="p">[</span> <span class="s2">"N+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[%-]?[1-9][0-9]*$"</span><span class="p">,</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> <span class="p">[</span> <span class="s2">"N>0"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[1-9][0-9]*$"</span><span class="p">,</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a> <span class="p">[</span> <span class="s2">"x"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[0-9A-Fa-f]*$"</span><span class="p">,</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="p">[</span> <span class="s2">"x+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[0-9A-Fa-f]+$"</span><span class="p">,</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a> <span class="p">[</span> <span class="s2">"X"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[0-9A-F]*$"</span><span class="p">,</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a> <span class="p">[</span> <span class="s2">"X+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[0-9A-F]+$"</span><span class="p">,</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a> <span class="p">[</span> <span class="s2">"0,0"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[%-]?[0-9]*,?[0-9]*$"</span><span class="p">,</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> <span class="p">[</span> <span class="s2">"0,0+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[%-]?[0-9]+,[0-9]+$"</span><span class="p">,</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a> <span class="p">[</span> <span class="s2">"0,0+?"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[%-]?[0-9]+,?[0-9]*$"</span><span class="p">,</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a> <span class="p">[</span> <span class="s2">"0.0"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[%-]?[0-9]*[%.]?[0-9]*$"</span><span class="p">,</span> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> <span class="p">[</span> <span class="s2">"0.0+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[%-]?[0-9]+%.[0-9]+$"</span><span class="p">,</span> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="p">[</span> <span class="s2">"0.0+?"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[%-]?[0-9]+[%.]?[0-9]*$"</span><span class="p">,</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="p">[</span> <span class="s2">".0+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[%-]?[0-9]*[%.]?[0-9]+$"</span><span class="p">,</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="p">[</span> <span class="s2">"ID"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[A-Za-z]?[A-Za-z_0-9]*$"</span><span class="p">,</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="p">[</span> <span class="s2">"ID+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[A-Za-z][A-Za-z_0-9]*$"</span><span class="p">,</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> <span class="p">[</span> <span class="s2">"ABC"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[A-Z]*$"</span><span class="p">,</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> <span class="p">[</span> <span class="s2">"ABC+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[A-Z]+$"</span><span class="p">,</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a> <span class="p">[</span> <span class="s2">"Abc"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[A-Z]*[a-z]*$"</span><span class="p">,</span> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a> <span class="p">[</span> <span class="s2">"Abc+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[A-Z][a-z]+$"</span><span class="p">,</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a> <span class="p">[</span> <span class="s2">"abc"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[a-z]*$"</span><span class="p">,</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a> <span class="p">[</span> <span class="s2">"abc+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[a-z]+$"</span><span class="p">,</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a> <span class="p">[</span> <span class="s2">"aBc+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[a-z]+[A-Z][A-Za-z]*$"</span><span class="p">,</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a> <span class="p">[</span> <span class="s2">"w"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^%S*$"</span><span class="p">,</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a> <span class="p">[</span> <span class="s2">"w+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^%S+$"</span><span class="p">,</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a> <span class="p">[</span> <span class="s2">"base64"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[A-Za-z0-9%+/]*$"</span><span class="p">,</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a> <span class="p">[</span> <span class="s2">"base64+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"^[A-Za-z0-9%+/]+$"</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 class="s2">"aa"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"[%a%a].*[%a%a]"</span><span class="p">,</span> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a> <span class="p">[</span> <span class="s2">"pagename"</span> <span class="p">]</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"^[^#<>%%[%%]|{}%c-%c%c]+$"</span><span class="p">,</span> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a> <span class="mi">1</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">127</span> <span class="p">),</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a> <span class="p">[</span> <span class="s2">"ref"</span> <span class="p">]</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%c'%c`UNIQ%s%sref%s%s%sQINU`%c'%c"</span><span class="p">,</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a> <span class="mi">127</span><span class="p">,</span> <span class="mi">34</span><span class="p">,</span> <span class="s2">"%-"</span><span class="p">,</span> <span class="s2">"%-"</span><span class="p">,</span> <span class="s2">"%-"</span><span class="p">,</span> <span class="s2">"%x+"</span><span class="p">,</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a> <span class="s2">"%-"</span><span class="p">,</span> <span class="mi">34</span><span class="p">,</span> <span class="mi">127</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 class="s2">"+"</span> <span class="p">]</span> <span class="o">=</span> <span class="s2">"%S"</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a><span class="p">}</span> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a><span class="n">Local</span><span class="p">.</span><span class="n">boolean</span> <span class="o">=</span> <span class="p">{</span> <span class="p">[</span><span class="s2">"1"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a> <span class="p">[</span><span class="s2">"true"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</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">y</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> <span class="n">yes</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> <span class="p">[</span><span class="s2">"0"</span><span class="p">]</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="p">[</span><span class="s2">"false"</span><span class="p">]</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="p">[</span><span class="s2">"-"</span><span class="p">]</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">n</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="n">no</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a> <span class="n">off</span> <span class="o">=</span> <span class="kc">true</span> <span class="p">}</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a><span class="n">Local</span><span class="p">.</span><span class="n">patternCJK</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a><span class="kd">local</span> <span class="n">foreignModule</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">access</span><span class="p">,</span> <span class="n">advanced</span><span class="p">,</span> <span class="n">append</span><span class="p">,</span> <span class="n">alt</span><span class="p">,</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> <span class="c1">-- Fetch global module</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> <span class="c1">-- access -- string, with name of base module</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a> <span class="c1">-- advanced -- true, for require(); else mw.loadData()</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> <span class="c1">-- append -- string, with subpage part, if any; or false</span> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a> <span class="c1">-- alt -- number, of wikidata item of root; or false</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> <span class="c1">-- alert -- true, for throwing error on data problem</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a> <span class="c1">-- Returns whatever, probably table</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> <span class="c1">-- 2020-01-01</span> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="kd">local</span> <span class="n">storage</span> <span class="o">=</span> <span class="n">access</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="kd">local</span> <span class="n">finer</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">()</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="kr">if</span> <span class="n">append</span> <span class="kr">then</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a> <span class="n">storage</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s/%s"</span><span class="p">,</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> <span class="n">storage</span><span class="p">,</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="n">append</span> <span class="p">)</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> <span class="kr">end</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a> <span class="kr">end</span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a> <span class="kd">local</span> <span class="n">fun</span><span class="p">,</span> <span class="n">lucky</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">suited</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a> <span class="kr">if</span> <span class="n">advanced</span> <span class="kr">then</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a> <span class="n">fun</span> <span class="o">=</span> <span class="nb">require</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="kr">else</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="n">fun</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">loadData</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a> <span class="kr">end</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a> <span class="n">GlobalMod</span><span class="p">.</span><span class="n">globalModules</span> <span class="o">=</span> <span class="n">GlobalMod</span><span class="p">.</span><span class="n">globalModules</span> <span class="ow">or</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a> <span class="n">suited</span> <span class="o">=</span> <span class="n">GlobalMod</span><span class="p">.</span><span class="n">globalModules</span><span class="p">[</span> <span class="n">access</span> <span class="p">]</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">suited</span> <span class="kr">then</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> <span class="n">finer</span><span class="p">()</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="n">lucky</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span> <span class="n">fun</span><span class="p">,</span> <span class="s2">"Module:"</span> <span class="o">..</span> <span class="n">storage</span> <span class="p">)</span> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a> <span class="kr">end</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="ow">not</span> <span class="n">lucky</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="kr">if</span> <span class="ow">not</span> <span class="n">suited</span> <span class="ow">and</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="nb">type</span><span class="p">(</span> <span class="n">alt</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="ow">and</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="n">alt</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="n">suited</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"Q%d"</span><span class="p">,</span> <span class="n">alt</span> <span class="p">)</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="n">suited</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">wikibase</span><span class="p">.</span><span class="n">getSitelink</span><span class="p">(</span> <span class="n">suited</span> <span class="p">)</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="n">GlobalMod</span><span class="p">.</span><span class="n">globalModules</span><span class="p">[</span> <span class="n">access</span> <span class="p">]</span> <span class="o">=</span> <span class="n">suited</span> <span class="ow">or</span> <span class="kc">true</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="kr">end</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">suited</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="n">storage</span> <span class="o">=</span> <span class="n">suited</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="n">finer</span><span class="p">()</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="n">lucky</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span> <span class="n">fun</span><span class="p">,</span> <span class="n">storage</span> <span class="p">)</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a> <span class="kr">end</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">lucky</span> <span class="ow">and</span> <span class="n">alert</span> <span class="kr">then</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="nb">error</span><span class="p">(</span> <span class="s2">"Missing or invalid page: "</span> <span class="o">..</span> <span class="n">storage</span> <span class="p">)</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a> <span class="kr">end</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> <span class="kr">end</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a><span class="kr">end</span> <span class="c1">-- foreignModule()</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">Foreign</span><span class="p">(</span> <span class="n">access</span> <span class="p">)</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="c1">-- Access standardized library</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a> <span class="c1">-- access -- string, with name of base module</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="c1">-- Return library table, or not</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="kr">if</span> <span class="n">Local</span><span class="p">[</span> <span class="n">access</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="n">r</span> <span class="o">=</span> <span class="n">Local</span><span class="p">[</span> <span class="n">access</span> <span class="p">]</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> <span class="kr">else</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="kd">local</span> <span class="n">bib</span> <span class="o">=</span> <span class="n">foreignModule</span><span class="p">(</span> <span class="n">access</span><span class="p">,</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="kc">true</span><span class="p">,</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a> <span class="kc">false</span><span class="p">,</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">globals</span><span class="p">[</span> <span class="n">access</span> <span class="p">],</span> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a> <span class="kc">false</span> <span class="p">)</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">bib</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="ow">and</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a> <span class="nb">type</span><span class="p">(</span> <span class="n">bib</span><span class="p">[</span> <span class="n">access</span> <span class="p">]</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"function"</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="n">bib</span> <span class="o">=</span> <span class="n">bib</span><span class="p">[</span> <span class="n">access</span> <span class="p">]()</span> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">bib</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">bib</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="n">Local</span><span class="p">[</span> <span class="n">access</span> <span class="p">]</span> <span class="o">=</span> <span class="n">bib</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 class="kr">end</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a> <span class="kr">end</span> </span><span id="L-187"><a href="#L-187"><span class="linenos" data-line="187"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></span></a><span class="kr">end</span> <span class="c1">-- Foreign()</span> </span><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">containsCJK</span><span class="p">(</span> <span class="n">analyse</span> <span class="p">)</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> <span class="c1">-- Is any CJK character present?</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> <span class="c1">-- analyse -- string</span> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="c1">-- Return false iff no CJK present</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="c1">-- >< Local.patternCJK</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="c1">-- mw.ustring.char()</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></span></a> <span class="c1">-- mw.ustring.match()</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">Local</span><span class="p">.</span><span class="n">patternCJK</span> <span class="kr">then</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a> <span class="n">Local</span><span class="p">.</span><span class="n">patternCJK</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">char</span><span class="p">(</span> <span class="mi">91</span><span class="p">,</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> <span class="mi">13312</span><span class="p">,</span> <span class="mi">45</span><span class="p">,</span> <span class="mi">40959</span><span class="p">,</span> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="mi">131072</span><span class="p">,</span> <span class="mi">45</span><span class="p">,</span> <span class="mi">178207</span><span class="p">,</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="mi">93</span> <span class="p">)</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a> <span class="kr">end</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a> <span class="kr">if</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span><span class="p">(</span> <span class="n">analyse</span><span class="p">,</span> <span class="n">Local</span><span class="p">.</span><span class="n">patternCJK</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a> <span class="kr">end</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a><span class="kr">end</span> <span class="c1">-- containsCJK()</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">facility</span><span class="p">(</span> <span class="n">accept</span><span class="p">,</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a> <span class="c1">-- Check string as possible file name or other source page</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> <span class="c1">-- accept -- string; requirement</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> <span class="c1">-- file</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a> <span class="c1">-- file+</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a> <span class="c1">-- file:</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a> <span class="c1">-- file:+</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a> <span class="c1">-- image</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> <span class="c1">-- image+</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a> <span class="c1">-- image:</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> <span class="c1">-- image:+</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a> <span class="c1">-- attempt -- string; to be tested</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a> <span class="c1">-- Return error keyword, or false</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a> <span class="c1">-- Module:FileMedia</span> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a> <span class="c1">-- Foreign()</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a> <span class="c1">-- FileMedia.isFile()</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> <span class="c1">-- FileMedia.isType()</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> <span class="kr">if</span> <span class="n">attempt</span> <span class="ow">and</span> <span class="n">attempt</span> <span class="o">~=</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a> <span class="kd">local</span> <span class="n">FileMedia</span> <span class="o">=</span> <span class="n">Foreign</span><span class="p">(</span> <span class="s2">"FileMedia"</span> <span class="p">)</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a> <span class="kr">if</span> <span class="n">FileMedia</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span> <span class="n">FileMedia</span><span class="p">.</span><span class="n">isFile</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"function"</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span> <span class="n">FileMedia</span><span class="p">.</span><span class="n">isType</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"function"</span> <span class="kr">then</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a> <span class="kd">local</span> <span class="n">s</span><span class="p">,</span> <span class="n">live</span> <span class="o">=</span> <span class="n">accept</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^([a-z]+)(:?)%+?$"</span> <span class="p">)</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a> <span class="kr">if</span> <span class="n">live</span> <span class="kr">then</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a> <span class="kr">if</span> <span class="n">FileMedia</span><span class="p">.</span><span class="n">isType</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a> <span class="kr">if</span> <span class="n">FileMedia</span><span class="p">.</span><span class="n">isFile</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a> <span class="kr">else</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"notFound"</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> <span class="kr">end</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a> <span class="kr">else</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> <span class="kr">end</span> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> <span class="kr">elseif</span> <span class="n">FileMedia</span><span class="p">.</span><span class="n">isType</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> <span class="kr">else</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> <span class="kr">end</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> <span class="kr">else</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"missing"</span> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a> <span class="kr">end</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a> <span class="kr">elseif</span> <span class="n">accept</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"%+$"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"empty"</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a> <span class="kr">else</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a> <span class="kr">end</span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a><span class="kr">end</span> <span class="c1">-- facility()</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">factory</span><span class="p">(</span> <span class="n">say</span> <span class="p">)</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> <span class="c1">-- Retrieve localized message string in content language</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a> <span class="c1">-- say -- string; message ID</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="c1">-- Return some message string</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a> <span class="c1">-- > Local.messagePrefix</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a> <span class="c1">-- > Local.L10nDef</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a> <span class="c1">-- mw.message.new()</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a> <span class="c1">-- mw.language.getContentLanguage()</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a> <span class="c1">-- Module:Multilingual</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a> <span class="c1">-- Foreign()</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="c1">-- TemplatePar.framing()</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a> <span class="c1">-- Multilingual.tabData()</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">m</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">message</span><span class="p">.</span><span class="n">new</span><span class="p">(</span> <span class="n">Local</span><span class="p">.</span><span class="n">messagePrefix</span> <span class="o">..</span> <span class="n">say</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">r</span> <span class="o">=</span> <span class="kc">false</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">m</span><span class="p">:</span><span class="n">isBlank</span><span class="p">()</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="kd">local</span> <span class="n">c</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">language</span><span class="p">.</span><span class="n">getContentLanguage</span><span class="p">():</span><span class="n">getCode</span><span class="p">()</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a> <span class="kd">local</span> <span class="n">l10n</span> <span class="o">=</span> <span class="n">Local</span><span class="p">.</span><span class="n">L10nDef</span><span class="p">[</span> <span class="n">c</span> <span class="p">]</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="kr">if</span> <span class="n">l10n</span> <span class="kr">then</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">l10n</span><span class="p">[</span> <span class="n">say</span> <span class="p">]</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="kr">else</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="kd">local</span> <span class="n">MultiL</span> <span class="o">=</span> <span class="n">Foreign</span><span class="p">(</span> <span class="s2">"Multilingual"</span> <span class="p">)</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a> <span class="kr">if</span> <span class="n">MultiL</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span> <span class="n">MultiL</span><span class="p">.</span><span class="n">tabData</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"function"</span> <span class="kr">then</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="kd">local</span> <span class="n">lang</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="n">r</span><span class="p">,</span> <span class="n">lang</span> <span class="o">=</span> <span class="n">MultiL</span><span class="p">.</span><span class="n">tabData</span><span class="p">(</span> <span class="s2">"I18n/Module:TemplatePar"</span><span class="p">,</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> <span class="n">say</span><span class="p">,</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> <span class="kc">false</span><span class="p">,</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">framing</span><span class="p">()</span> <span class="p">)</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="kr">end</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="kr">end</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">Local</span><span class="p">.</span><span class="n">L10nDef</span><span class="p">.</span><span class="n">en</span><span class="p">[</span> <span class="n">say</span> <span class="p">]</span> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a> <span class="kr">end</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a> <span class="kr">else</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> <span class="n">m</span><span class="p">:</span><span class="n">inLanguage</span><span class="p">(</span> <span class="n">c</span> <span class="p">)</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">m</span><span class="p">:</span><span class="n">plain</span><span class="p">()</span> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a> <span class="kr">end</span> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"(((%s)))"</span><span class="p">,</span> <span class="n">say</span> <span class="p">)</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> <span class="kr">end</span> </span><span id="L-313"><a href="#L-313"><span class="linenos" data-line="313"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-314"><a href="#L-314"><span class="linenos" data-line="314"></span></a><span class="kr">end</span> <span class="c1">-- factory()</span> </span><span id="L-315"><a href="#L-315"><span class="linenos" data-line="315"></span></a> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a> </span><span id="L-318"><a href="#L-318"><span class="linenos" data-line="318"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">faculty</span><span class="p">(</span> <span class="n">accept</span><span class="p">,</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-319"><a href="#L-319"><span class="linenos" data-line="319"></span></a> <span class="c1">-- Check string as possible boolean</span> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> <span class="c1">-- accept -- string; requirement</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a> <span class="c1">-- boolean</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a> <span class="c1">-- boolean+</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a> <span class="c1">-- attempt -- string; to be tested</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a> <span class="c1">-- Return error keyword, or false</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> <span class="c1">-- Module:TemplUtl</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a> <span class="c1">-- Foreign()</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> <span class="c1">-- TemplUtl.faculty()</span> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">):</span><span class="n">lower</span><span class="p">()</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> <span class="kr">if</span> <span class="n">accept</span> <span class="o">==</span> <span class="s2">"boolean+"</span> <span class="kr">then</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"empty"</span> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="kr">else</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> <span class="kr">end</span> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="kr">elseif</span> <span class="n">Local</span><span class="p">.</span><span class="n">boolean</span><span class="p">[</span> <span class="n">r</span> <span class="p">]</span> <span class="ow">or</span> <span class="n">r</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^[01%-]+$"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-340"><a href="#L-340"><span class="linenos" data-line="340"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> <span class="kr">else</span> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a> <span class="kd">local</span> <span class="n">TemplUtl</span> <span class="o">=</span> <span class="n">Foreign</span><span class="p">(</span> <span class="s2">"TemplUtl"</span> <span class="p">)</span> </span><span id="L-343"><a href="#L-343"><span class="linenos" data-line="343"></span></a> <span class="kr">if</span> <span class="n">TemplUtl</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span> <span class="n">TemplUtl</span><span class="p">.</span><span class="n">faculty</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"function"</span> <span class="kr">then</span> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">TemplUtl</span><span class="p">.</span><span class="n">faculty</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="s2">"-"</span> <span class="p">)</span> </span><span id="L-345"><a href="#L-345"><span class="linenos" data-line="345"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="o">==</span> <span class="s2">"-"</span> <span class="kr">then</span> </span><span id="L-346"><a href="#L-346"><span class="linenos" data-line="346"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a> <span class="kr">else</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-349"><a href="#L-349"><span class="linenos" data-line="349"></span></a> <span class="kr">end</span> </span><span id="L-350"><a href="#L-350"><span class="linenos" data-line="350"></span></a> <span class="kr">else</span> </span><span id="L-351"><a href="#L-351"><span class="linenos" data-line="351"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-352"><a href="#L-352"><span class="linenos" data-line="352"></span></a> <span class="kr">end</span> </span><span id="L-353"><a href="#L-353"><span class="linenos" data-line="353"></span></a> <span class="kr">end</span> </span><span id="L-354"><a href="#L-354"><span class="linenos" data-line="354"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-355"><a href="#L-355"><span class="linenos" data-line="355"></span></a><span class="kr">end</span> <span class="c1">-- faculty()</span> </span><span id="L-356"><a href="#L-356"><span class="linenos" data-line="356"></span></a> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> </span><span id="L-359"><a href="#L-359"><span class="linenos" data-line="359"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">failure</span><span class="p">(</span> <span class="n">spec</span><span class="p">,</span> <span class="n">suspect</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-360"><a href="#L-360"><span class="linenos" data-line="360"></span></a> <span class="c1">-- Submit localized error message</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> <span class="c1">-- spec -- string; message ID</span> </span><span id="L-363"><a href="#L-363"><span class="linenos" data-line="363"></span></a> <span class="c1">-- suspect -- string or nil; additional information</span> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a> <span class="c1">-- options.template</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a> <span class="c1">-- Return string</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></span></a> <span class="c1">-- factory()</span> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">factory</span><span class="p">(</span> <span class="n">spec</span> <span class="p">)</span> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span><span class="p">.</span><span class="n">template</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">options</span><span class="p">.</span><span class="n">template</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-374"><a href="#L-374"><span class="linenos" data-line="374"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s (%s)"</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">options</span><span class="p">.</span><span class="n">template</span> <span class="p">)</span> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a> <span class="kr">end</span> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></span></a> <span class="kr">end</span> </span><span id="L-377"><a href="#L-377"><span class="linenos" data-line="377"></span></a> <span class="kr">end</span> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a> <span class="kr">if</span> <span class="n">suspect</span> <span class="kr">then</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s: %s"</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">suspect</span> <span class="p">)</span> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a> <span class="kr">end</span> </span><span id="L-381"><a href="#L-381"><span class="linenos" data-line="381"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-382"><a href="#L-382"><span class="linenos" data-line="382"></span></a><span class="kr">end</span> <span class="c1">-- failure()</span> </span><span id="L-383"><a href="#L-383"><span class="linenos" data-line="383"></span></a> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a> </span><span id="L-386"><a href="#L-386"><span class="linenos" data-line="386"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">fair</span><span class="p">(</span> <span class="n">story</span><span class="p">,</span> <span class="n">scan</span> <span class="p">)</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a> <span class="c1">-- Test for match (possibly user-defined with syntax error)</span> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-389"><a href="#L-389"><span class="linenos" data-line="389"></span></a> <span class="c1">-- story -- string; parameter value</span> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a> <span class="c1">-- scan -- string; pattern</span> </span><span id="L-391"><a href="#L-391"><span class="linenos" data-line="391"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-392"><a href="#L-392"><span class="linenos" data-line="392"></span></a> <span class="c1">-- Return nil, if not matching, else non-nil</span> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-394"><a href="#L-394"><span class="linenos" data-line="394"></span></a> <span class="c1">-- mw.ustring.match()</span> </span><span id="L-395"><a href="#L-395"><span class="linenos" data-line="395"></span></a> <span class="kr">return</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span><span class="p">(</span> <span class="n">story</span><span class="p">,</span> <span class="n">scan</span> <span class="p">)</span> </span><span id="L-396"><a href="#L-396"><span class="linenos" data-line="396"></span></a><span class="kr">end</span> <span class="c1">-- fair()</span> </span><span id="L-397"><a href="#L-397"><span class="linenos" data-line="397"></span></a> </span><span id="L-398"><a href="#L-398"><span class="linenos" data-line="398"></span></a> </span><span id="L-399"><a href="#L-399"><span class="linenos" data-line="399"></span></a> </span><span id="L-400"><a href="#L-400"><span class="linenos" data-line="400"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">familiar</span><span class="p">(</span> <span class="n">accept</span><span class="p">,</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-401"><a href="#L-401"><span class="linenos" data-line="401"></span></a> <span class="c1">-- Check string as possible language name or list</span> </span><span id="L-402"><a href="#L-402"><span class="linenos" data-line="402"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-403"><a href="#L-403"><span class="linenos" data-line="403"></span></a> <span class="c1">-- accept -- string; requirement</span> </span><span id="L-404"><a href="#L-404"><span class="linenos" data-line="404"></span></a> <span class="c1">-- lang</span> </span><span id="L-405"><a href="#L-405"><span class="linenos" data-line="405"></span></a> <span class="c1">-- langs</span> </span><span id="L-406"><a href="#L-406"><span class="linenos" data-line="406"></span></a> <span class="c1">-- langW</span> </span><span id="L-407"><a href="#L-407"><span class="linenos" data-line="407"></span></a> <span class="c1">-- langsW</span> </span><span id="L-408"><a href="#L-408"><span class="linenos" data-line="408"></span></a> <span class="c1">-- lang+</span> </span><span id="L-409"><a href="#L-409"><span class="linenos" data-line="409"></span></a> <span class="c1">-- langs+</span> </span><span id="L-410"><a href="#L-410"><span class="linenos" data-line="410"></span></a> <span class="c1">-- langW+</span> </span><span id="L-411"><a href="#L-411"><span class="linenos" data-line="411"></span></a> <span class="c1">-- langsW+</span> </span><span id="L-412"><a href="#L-412"><span class="linenos" data-line="412"></span></a> <span class="c1">-- attempt -- string; to be tested</span> </span><span id="L-413"><a href="#L-413"><span class="linenos" data-line="413"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-414"><a href="#L-414"><span class="linenos" data-line="414"></span></a> <span class="c1">-- Return error keyword, or false</span> </span><span id="L-415"><a href="#L-415"><span class="linenos" data-line="415"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-416"><a href="#L-416"><span class="linenos" data-line="416"></span></a> <span class="c1">-- Module:Multilingual</span> </span><span id="L-417"><a href="#L-417"><span class="linenos" data-line="417"></span></a> <span class="c1">-- Foreign()</span> </span><span id="L-418"><a href="#L-418"><span class="linenos" data-line="418"></span></a> <span class="c1">-- Multilingual.isLang()</span> </span><span id="L-419"><a href="#L-419"><span class="linenos" data-line="419"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-420"><a href="#L-420"><span class="linenos" data-line="420"></span></a> <span class="kr">if</span> <span class="n">attempt</span> <span class="ow">and</span> <span class="n">attempt</span> <span class="o">~=</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-421"><a href="#L-421"><span class="linenos" data-line="421"></span></a> <span class="kd">local</span> <span class="n">MultiL</span> <span class="o">=</span> <span class="n">Foreign</span><span class="p">(</span> <span class="s2">"Multilingual"</span> <span class="p">)</span> </span><span id="L-422"><a href="#L-422"><span class="linenos" data-line="422"></span></a> <span class="kr">if</span> <span class="n">MultiL</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span> <span class="n">MultiL</span><span class="p">.</span><span class="n">isLang</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"function"</span> <span class="kr">then</span> </span><span id="L-423"><a href="#L-423"><span class="linenos" data-line="423"></span></a> <span class="kd">local</span> <span class="n">lazy</span> <span class="o">=</span> <span class="n">accept</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">"W"</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-424"><a href="#L-424"><span class="linenos" data-line="424"></span></a> <span class="kr">if</span> <span class="n">accept</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">"s"</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-425"><a href="#L-425"><span class="linenos" data-line="425"></span></a> <span class="kd">local</span> <span class="n">group</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">split</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="s2">"%s+"</span> <span class="p">)</span> </span><span id="L-426"><a href="#L-426"><span class="linenos" data-line="426"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-427"><a href="#L-427"><span class="linenos" data-line="427"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">group</span> <span class="kr">do</span> </span><span id="L-428"><a href="#L-428"><span class="linenos" data-line="428"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">MultiL</span><span class="p">.</span><span class="n">isLang</span><span class="p">(</span> <span class="n">group</span><span class="p">[</span> <span class="n">i</span> <span class="p">],</span> <span class="n">lazy</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-429"><a href="#L-429"><span class="linenos" data-line="429"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-430"><a href="#L-430"><span class="linenos" data-line="430"></span></a> <span class="kr">break</span> <span class="c1">-- for i</span> </span><span id="L-431"><a href="#L-431"><span class="linenos" data-line="431"></span></a> <span class="kr">end</span> </span><span id="L-432"><a href="#L-432"><span class="linenos" data-line="432"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-433"><a href="#L-433"><span class="linenos" data-line="433"></span></a> <span class="kr">elseif</span> <span class="n">MultiL</span><span class="p">.</span><span class="n">isLang</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">lazy</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-434"><a href="#L-434"><span class="linenos" data-line="434"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-435"><a href="#L-435"><span class="linenos" data-line="435"></span></a> <span class="kr">else</span> </span><span id="L-436"><a href="#L-436"><span class="linenos" data-line="436"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-437"><a href="#L-437"><span class="linenos" data-line="437"></span></a> <span class="kr">end</span> </span><span id="L-438"><a href="#L-438"><span class="linenos" data-line="438"></span></a> <span class="kr">else</span> </span><span id="L-439"><a href="#L-439"><span class="linenos" data-line="439"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"missing"</span> </span><span id="L-440"><a href="#L-440"><span class="linenos" data-line="440"></span></a> <span class="kr">end</span> </span><span id="L-441"><a href="#L-441"><span class="linenos" data-line="441"></span></a> <span class="kr">elseif</span> <span class="n">accept</span><span class="p">:</span><span class="n">find</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="kr">then</span> </span><span id="L-442"><a href="#L-442"><span class="linenos" data-line="442"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"empty"</span> </span><span id="L-443"><a href="#L-443"><span class="linenos" data-line="443"></span></a> <span class="kr">else</span> </span><span id="L-444"><a href="#L-444"><span class="linenos" data-line="444"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-445"><a href="#L-445"><span class="linenos" data-line="445"></span></a> <span class="kr">end</span> </span><span id="L-446"><a href="#L-446"><span class="linenos" data-line="446"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-447"><a href="#L-447"><span class="linenos" data-line="447"></span></a><span class="kr">end</span> <span class="c1">-- familiar()</span> </span><span id="L-448"><a href="#L-448"><span class="linenos" data-line="448"></span></a> </span><span id="L-449"><a href="#L-449"><span class="linenos" data-line="449"></span></a> </span><span id="L-450"><a href="#L-450"><span class="linenos" data-line="450"></span></a> </span><span id="L-451"><a href="#L-451"><span class="linenos" data-line="451"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">far</span><span class="p">(</span> <span class="n">accept</span><span class="p">,</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-452"><a href="#L-452"><span class="linenos" data-line="452"></span></a> <span class="c1">-- Check string as possible URL</span> </span><span id="L-453"><a href="#L-453"><span class="linenos" data-line="453"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-454"><a href="#L-454"><span class="linenos" data-line="454"></span></a> <span class="c1">-- accept -- string; requirement</span> </span><span id="L-455"><a href="#L-455"><span class="linenos" data-line="455"></span></a> <span class="c1">-- url</span> </span><span id="L-456"><a href="#L-456"><span class="linenos" data-line="456"></span></a> <span class="c1">-- url+</span> </span><span id="L-457"><a href="#L-457"><span class="linenos" data-line="457"></span></a> <span class="c1">-- attempt -- string; to be tested</span> </span><span id="L-458"><a href="#L-458"><span class="linenos" data-line="458"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-459"><a href="#L-459"><span class="linenos" data-line="459"></span></a> <span class="c1">-- Return error keyword, or false</span> </span><span id="L-460"><a href="#L-460"><span class="linenos" data-line="460"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-461"><a href="#L-461"><span class="linenos" data-line="461"></span></a> <span class="c1">-- Module:URLutil</span> </span><span id="L-462"><a href="#L-462"><span class="linenos" data-line="462"></span></a> <span class="c1">-- Foreign()</span> </span><span id="L-463"><a href="#L-463"><span class="linenos" data-line="463"></span></a> <span class="c1">-- URLutil.isWebURL()</span> </span><span id="L-464"><a href="#L-464"><span class="linenos" data-line="464"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-465"><a href="#L-465"><span class="linenos" data-line="465"></span></a> <span class="kr">if</span> <span class="n">attempt</span> <span class="ow">and</span> <span class="n">attempt</span> <span class="o">~=</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-466"><a href="#L-466"><span class="linenos" data-line="466"></span></a> <span class="kd">local</span> <span class="n">URLutil</span> <span class="o">=</span> <span class="n">Foreign</span><span class="p">(</span> <span class="s2">"URLutil"</span> <span class="p">)</span> </span><span id="L-467"><a href="#L-467"><span class="linenos" data-line="467"></span></a> <span class="kr">if</span> <span class="n">URLutil</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span> <span class="n">URLutil</span><span class="p">.</span><span class="n">isWebURL</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"function"</span> <span class="kr">then</span> </span><span id="L-468"><a href="#L-468"><span class="linenos" data-line="468"></span></a> <span class="kr">if</span> <span class="n">URLutil</span><span class="p">.</span><span class="n">isWebURL</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-469"><a href="#L-469"><span class="linenos" data-line="469"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-470"><a href="#L-470"><span class="linenos" data-line="470"></span></a> <span class="kr">else</span> </span><span id="L-471"><a href="#L-471"><span class="linenos" data-line="471"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-472"><a href="#L-472"><span class="linenos" data-line="472"></span></a> <span class="kr">end</span> </span><span id="L-473"><a href="#L-473"><span class="linenos" data-line="473"></span></a> <span class="kr">else</span> </span><span id="L-474"><a href="#L-474"><span class="linenos" data-line="474"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"missing"</span> </span><span id="L-475"><a href="#L-475"><span class="linenos" data-line="475"></span></a> <span class="kr">end</span> </span><span id="L-476"><a href="#L-476"><span class="linenos" data-line="476"></span></a> <span class="kr">elseif</span> <span class="n">accept</span><span class="p">:</span><span class="n">find</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="kr">then</span> </span><span id="L-477"><a href="#L-477"><span class="linenos" data-line="477"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"empty"</span> </span><span id="L-478"><a href="#L-478"><span class="linenos" data-line="478"></span></a> <span class="kr">else</span> </span><span id="L-479"><a href="#L-479"><span class="linenos" data-line="479"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-480"><a href="#L-480"><span class="linenos" data-line="480"></span></a> <span class="kr">end</span> </span><span id="L-481"><a href="#L-481"><span class="linenos" data-line="481"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-482"><a href="#L-482"><span class="linenos" data-line="482"></span></a><span class="kr">end</span> <span class="c1">-- far()</span> </span><span id="L-483"><a href="#L-483"><span class="linenos" data-line="483"></span></a> </span><span id="L-484"><a href="#L-484"><span class="linenos" data-line="484"></span></a> </span><span id="L-485"><a href="#L-485"><span class="linenos" data-line="485"></span></a> </span><span id="L-486"><a href="#L-486"><span class="linenos" data-line="486"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">fast</span><span class="p">(</span> <span class="n">accept</span><span class="p">,</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-487"><a href="#L-487"><span class="linenos" data-line="487"></span></a> <span class="c1">-- Check string as possible date or time</span> </span><span id="L-488"><a href="#L-488"><span class="linenos" data-line="488"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-489"><a href="#L-489"><span class="linenos" data-line="489"></span></a> <span class="c1">-- accept -- string; requirement</span> </span><span id="L-490"><a href="#L-490"><span class="linenos" data-line="490"></span></a> <span class="c1">-- datetime</span> </span><span id="L-491"><a href="#L-491"><span class="linenos" data-line="491"></span></a> <span class="c1">-- datetime+</span> </span><span id="L-492"><a href="#L-492"><span class="linenos" data-line="492"></span></a> <span class="c1">-- datetime/y</span> </span><span id="L-493"><a href="#L-493"><span class="linenos" data-line="493"></span></a> <span class="c1">-- datetime/y+</span> </span><span id="L-494"><a href="#L-494"><span class="linenos" data-line="494"></span></a> <span class="c1">-- datetime/ym</span> </span><span id="L-495"><a href="#L-495"><span class="linenos" data-line="495"></span></a> <span class="c1">-- datetime/ym+</span> </span><span id="L-496"><a href="#L-496"><span class="linenos" data-line="496"></span></a> <span class="c1">-- datetime/ymd</span> </span><span id="L-497"><a href="#L-497"><span class="linenos" data-line="497"></span></a> <span class="c1">-- datetime/ymd+</span> </span><span id="L-498"><a href="#L-498"><span class="linenos" data-line="498"></span></a> <span class="c1">-- attempt -- string; to be tested</span> </span><span id="L-499"><a href="#L-499"><span class="linenos" data-line="499"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-500"><a href="#L-500"><span class="linenos" data-line="500"></span></a> <span class="c1">-- Return error keyword, or false</span> </span><span id="L-501"><a href="#L-501"><span class="linenos" data-line="501"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-502"><a href="#L-502"><span class="linenos" data-line="502"></span></a> <span class="c1">-- Module:DateTime</span> </span><span id="L-503"><a href="#L-503"><span class="linenos" data-line="503"></span></a> <span class="c1">-- Foreign()</span> </span><span id="L-504"><a href="#L-504"><span class="linenos" data-line="504"></span></a> <span class="c1">-- DateTime.DateTime()</span> </span><span id="L-505"><a href="#L-505"><span class="linenos" data-line="505"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-506"><a href="#L-506"><span class="linenos" data-line="506"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-507"><a href="#L-507"><span class="linenos" data-line="507"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-508"><a href="#L-508"><span class="linenos" data-line="508"></span></a> <span class="kr">if</span> <span class="n">accept</span><span class="p">:</span><span class="n">find</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="kr">then</span> </span><span id="L-509"><a href="#L-509"><span class="linenos" data-line="509"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"empty"</span> </span><span id="L-510"><a href="#L-510"><span class="linenos" data-line="510"></span></a> <span class="kr">else</span> </span><span id="L-511"><a href="#L-511"><span class="linenos" data-line="511"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-512"><a href="#L-512"><span class="linenos" data-line="512"></span></a> <span class="kr">end</span> </span><span id="L-513"><a href="#L-513"><span class="linenos" data-line="513"></span></a> <span class="kr">else</span> </span><span id="L-514"><a href="#L-514"><span class="linenos" data-line="514"></span></a> <span class="kd">local</span> <span class="n">DateTime</span> <span class="o">=</span> <span class="n">Foreign</span><span class="p">(</span> <span class="s2">"DateTime"</span> <span class="p">)</span> </span><span id="L-515"><a href="#L-515"><span class="linenos" data-line="515"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">DateTime</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-516"><a href="#L-516"><span class="linenos" data-line="516"></span></a> <span class="kd">local</span> <span class="n">d</span> <span class="o">=</span> <span class="n">DateTime</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-517"><a href="#L-517"><span class="linenos" data-line="517"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">d</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-518"><a href="#L-518"><span class="linenos" data-line="518"></span></a> <span class="kr">if</span> <span class="n">accept</span><span class="p">:</span><span class="n">find</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="kr">then</span> </span><span id="L-519"><a href="#L-519"><span class="linenos" data-line="519"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-520"><a href="#L-520"><span class="linenos" data-line="520"></span></a> <span class="kr">if</span> <span class="n">accept</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">10</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"datetime/y"</span> <span class="kr">then</span> </span><span id="L-521"><a href="#L-521"><span class="linenos" data-line="521"></span></a> <span class="kr">if</span> <span class="n">d</span><span class="p">.</span><span class="n">year</span> <span class="kr">then</span> </span><span id="L-522"><a href="#L-522"><span class="linenos" data-line="522"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-523"><a href="#L-523"><span class="linenos" data-line="523"></span></a> <span class="kr">if</span> <span class="n">accept</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">11</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"datetime/ym"</span> <span class="kr">then</span> </span><span id="L-524"><a href="#L-524"><span class="linenos" data-line="524"></span></a> <span class="kr">if</span> <span class="n">d</span><span class="p">.</span><span class="n">month</span> <span class="kr">then</span> </span><span id="L-525"><a href="#L-525"><span class="linenos" data-line="525"></span></a> <span class="kr">if</span> <span class="n">accept</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">12</span> <span class="p">)</span> </span><span id="L-526"><a href="#L-526"><span class="linenos" data-line="526"></span></a> <span class="o">==</span> <span class="s2">"datetime/ymd"</span> <span class="kr">then</span> </span><span id="L-527"><a href="#L-527"><span class="linenos" data-line="527"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">d</span><span class="p">.</span><span class="n">dom</span> <span class="kr">then</span> </span><span id="L-528"><a href="#L-528"><span class="linenos" data-line="528"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-529"><a href="#L-529"><span class="linenos" data-line="529"></span></a> <span class="kr">end</span> </span><span id="L-530"><a href="#L-530"><span class="linenos" data-line="530"></span></a> <span class="kr">end</span> </span><span id="L-531"><a href="#L-531"><span class="linenos" data-line="531"></span></a> <span class="kr">else</span> </span><span id="L-532"><a href="#L-532"><span class="linenos" data-line="532"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-533"><a href="#L-533"><span class="linenos" data-line="533"></span></a> <span class="kr">end</span> </span><span id="L-534"><a href="#L-534"><span class="linenos" data-line="534"></span></a> <span class="kr">end</span> </span><span id="L-535"><a href="#L-535"><span class="linenos" data-line="535"></span></a> <span class="kr">end</span> </span><span id="L-536"><a href="#L-536"><span class="linenos" data-line="536"></span></a> <span class="kr">end</span> </span><span id="L-537"><a href="#L-537"><span class="linenos" data-line="537"></span></a> <span class="kr">else</span> </span><span id="L-538"><a href="#L-538"><span class="linenos" data-line="538"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-539"><a href="#L-539"><span class="linenos" data-line="539"></span></a> <span class="kr">end</span> </span><span id="L-540"><a href="#L-540"><span class="linenos" data-line="540"></span></a> <span class="kr">else</span> </span><span id="L-541"><a href="#L-541"><span class="linenos" data-line="541"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-542"><a href="#L-542"><span class="linenos" data-line="542"></span></a> <span class="kr">end</span> </span><span id="L-543"><a href="#L-543"><span class="linenos" data-line="543"></span></a> <span class="kr">else</span> </span><span id="L-544"><a href="#L-544"><span class="linenos" data-line="544"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-545"><a href="#L-545"><span class="linenos" data-line="545"></span></a> <span class="kr">end</span> </span><span id="L-546"><a href="#L-546"><span class="linenos" data-line="546"></span></a> <span class="kr">end</span> </span><span id="L-547"><a href="#L-547"><span class="linenos" data-line="547"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-548"><a href="#L-548"><span class="linenos" data-line="548"></span></a><span class="kr">end</span> <span class="c1">-- fast()</span> </span><span id="L-549"><a href="#L-549"><span class="linenos" data-line="549"></span></a> </span><span id="L-550"><a href="#L-550"><span class="linenos" data-line="550"></span></a> </span><span id="L-551"><a href="#L-551"><span class="linenos" data-line="551"></span></a> </span><span id="L-552"><a href="#L-552"><span class="linenos" data-line="552"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">fault</span><span class="p">(</span> <span class="n">store</span><span class="p">,</span> <span class="n">key</span> <span class="p">)</span> </span><span id="L-553"><a href="#L-553"><span class="linenos" data-line="553"></span></a> <span class="c1">-- Add key to collection string and insert separator</span> </span><span id="L-554"><a href="#L-554"><span class="linenos" data-line="554"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-555"><a href="#L-555"><span class="linenos" data-line="555"></span></a> <span class="c1">-- store -- string or nil or false; collection string</span> </span><span id="L-556"><a href="#L-556"><span class="linenos" data-line="556"></span></a> <span class="c1">-- key -- string or number; to be appended</span> </span><span id="L-557"><a href="#L-557"><span class="linenos" data-line="557"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-558"><a href="#L-558"><span class="linenos" data-line="558"></span></a> <span class="c1">-- Return string; extended</span> </span><span id="L-559"><a href="#L-559"><span class="linenos" data-line="559"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-560"><a href="#L-560"><span class="linenos" data-line="560"></span></a> <span class="kd">local</span> <span class="n">s</span> </span><span id="L-561"><a href="#L-561"><span class="linenos" data-line="561"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">key</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-562"><a href="#L-562"><span class="linenos" data-line="562"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">key</span> <span class="p">)</span> </span><span id="L-563"><a href="#L-563"><span class="linenos" data-line="563"></span></a> <span class="kr">else</span> </span><span id="L-564"><a href="#L-564"><span class="linenos" data-line="564"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">key</span> </span><span id="L-565"><a href="#L-565"><span class="linenos" data-line="565"></span></a> <span class="kr">end</span> </span><span id="L-566"><a href="#L-566"><span class="linenos" data-line="566"></span></a> <span class="kr">if</span> <span class="n">store</span> <span class="kr">then</span> </span><span id="L-567"><a href="#L-567"><span class="linenos" data-line="567"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s; %s"</span><span class="p">,</span> <span class="n">store</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-568"><a href="#L-568"><span class="linenos" data-line="568"></span></a> <span class="kr">else</span> </span><span id="L-569"><a href="#L-569"><span class="linenos" data-line="569"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">s</span> </span><span id="L-570"><a href="#L-570"><span class="linenos" data-line="570"></span></a> <span class="kr">end</span> </span><span id="L-571"><a href="#L-571"><span class="linenos" data-line="571"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-572"><a href="#L-572"><span class="linenos" data-line="572"></span></a><span class="kr">end</span> <span class="c1">-- fault()</span> </span><span id="L-573"><a href="#L-573"><span class="linenos" data-line="573"></span></a> </span><span id="L-574"><a href="#L-574"><span class="linenos" data-line="574"></span></a> </span><span id="L-575"><a href="#L-575"><span class="linenos" data-line="575"></span></a> </span><span id="L-576"><a href="#L-576"><span class="linenos" data-line="576"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">feasible</span><span class="p">(</span> <span class="n">analyze</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">abbr</span> <span class="p">)</span> </span><span id="L-577"><a href="#L-577"><span class="linenos" data-line="577"></span></a> <span class="c1">-- Check content of a value</span> </span><span id="L-578"><a href="#L-578"><span class="linenos" data-line="578"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-579"><a href="#L-579"><span class="linenos" data-line="579"></span></a> <span class="c1">-- analyze -- string to be analyzed</span> </span><span id="L-580"><a href="#L-580"><span class="linenos" data-line="580"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-581"><a href="#L-581"><span class="linenos" data-line="581"></span></a> <span class="c1">-- options.pattern</span> </span><span id="L-582"><a href="#L-582"><span class="linenos" data-line="582"></span></a> <span class="c1">-- options.key</span> </span><span id="L-583"><a href="#L-583"><span class="linenos" data-line="583"></span></a> <span class="c1">-- options.say</span> </span><span id="L-584"><a href="#L-584"><span class="linenos" data-line="584"></span></a> <span class="c1">-- abbr -- true: abbreviated error message</span> </span><span id="L-585"><a href="#L-585"><span class="linenos" data-line="585"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-586"><a href="#L-586"><span class="linenos" data-line="586"></span></a> <span class="c1">-- Return string with error message as configured;</span> </span><span id="L-587"><a href="#L-587"><span class="linenos" data-line="587"></span></a> <span class="c1">-- false if valid or no answer permitted</span> </span><span id="L-588"><a href="#L-588"><span class="linenos" data-line="588"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-589"><a href="#L-589"><span class="linenos" data-line="589"></span></a> <span class="c1">-- > Local.patterns</span> </span><span id="L-590"><a href="#L-590"><span class="linenos" data-line="590"></span></a> <span class="c1">-- failure()</span> </span><span id="L-591"><a href="#L-591"><span class="linenos" data-line="591"></span></a> <span class="c1">-- mw.text.trim()</span> </span><span id="L-592"><a href="#L-592"><span class="linenos" data-line="592"></span></a> <span class="c1">-- faculty()</span> </span><span id="L-593"><a href="#L-593"><span class="linenos" data-line="593"></span></a> <span class="c1">-- fast()</span> </span><span id="L-594"><a href="#L-594"><span class="linenos" data-line="594"></span></a> <span class="c1">-- facility()</span> </span><span id="L-595"><a href="#L-595"><span class="linenos" data-line="595"></span></a> <span class="c1">-- familiar()</span> </span><span id="L-596"><a href="#L-596"><span class="linenos" data-line="596"></span></a> <span class="c1">-- far()</span> </span><span id="L-597"><a href="#L-597"><span class="linenos" data-line="597"></span></a> <span class="c1">-- fair()</span> </span><span id="L-598"><a href="#L-598"><span class="linenos" data-line="598"></span></a> <span class="c1">-- containsCJK()</span> </span><span id="L-599"><a href="#L-599"><span class="linenos" data-line="599"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-600"><a href="#L-600"><span class="linenos" data-line="600"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-601"><a href="#L-601"><span class="linenos" data-line="601"></span></a> <span class="kd">local</span> <span class="n">show</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-602"><a href="#L-602"><span class="linenos" data-line="602"></span></a> <span class="kd">local</span> <span class="n">scan</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-603"><a href="#L-603"><span class="linenos" data-line="603"></span></a> <span class="kd">local</span> <span class="n">stuff</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">analyze</span> <span class="p">)</span> </span><span id="L-604"><a href="#L-604"><span class="linenos" data-line="604"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span><span class="p">.</span><span class="n">pattern</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-605"><a href="#L-605"><span class="linenos" data-line="605"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">key</span> <span class="kr">then</span> </span><span id="L-606"><a href="#L-606"><span class="linenos" data-line="606"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"dupRule"</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-607"><a href="#L-607"><span class="linenos" data-line="607"></span></a> <span class="kr">else</span> </span><span id="L-608"><a href="#L-608"><span class="linenos" data-line="608"></span></a> <span class="n">scan</span> <span class="o">=</span> <span class="n">options</span><span class="p">.</span><span class="n">pattern</span> </span><span id="L-609"><a href="#L-609"><span class="linenos" data-line="609"></span></a> <span class="kr">end</span> </span><span id="L-610"><a href="#L-610"><span class="linenos" data-line="610"></span></a> <span class="kr">else</span> </span><span id="L-611"><a href="#L-611"><span class="linenos" data-line="611"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span><span class="p">.</span><span class="n">key</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-612"><a href="#L-612"><span class="linenos" data-line="612"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">options</span><span class="p">.</span><span class="n">key</span> <span class="p">)</span> </span><span id="L-613"><a href="#L-613"><span class="linenos" data-line="613"></span></a> <span class="kr">else</span> </span><span id="L-614"><a href="#L-614"><span class="linenos" data-line="614"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">"+"</span> </span><span id="L-615"><a href="#L-615"><span class="linenos" data-line="615"></span></a> <span class="kr">end</span> </span><span id="L-616"><a href="#L-616"><span class="linenos" data-line="616"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">~=</span> <span class="s2">"*"</span> <span class="kr">then</span> </span><span id="L-617"><a href="#L-617"><span class="linenos" data-line="617"></span></a> <span class="n">scan</span> <span class="o">=</span> <span class="n">Local</span><span class="p">.</span><span class="n">patterns</span><span class="p">[</span> <span class="n">s</span> <span class="p">]</span> </span><span id="L-618"><a href="#L-618"><span class="linenos" data-line="618"></span></a> <span class="kr">end</span> </span><span id="L-619"><a href="#L-619"><span class="linenos" data-line="619"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">scan</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-620"><a href="#L-620"><span class="linenos" data-line="620"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">"n"</span> <span class="ow">or</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">"0,0"</span> <span class="ow">or</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">"0.0"</span> <span class="kr">then</span> </span><span id="L-621"><a href="#L-621"><span class="linenos" data-line="621"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">stuff</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"[0-9]"</span> <span class="p">)</span> <span class="ow">and</span> </span><span id="L-622"><a href="#L-622"><span class="linenos" data-line="622"></span></a> <span class="ow">not</span> <span class="n">stuff</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^%s*$"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-623"><a href="#L-623"><span class="linenos" data-line="623"></span></a> <span class="n">scan</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-624"><a href="#L-624"><span class="linenos" data-line="624"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="kr">then</span> </span><span id="L-625"><a href="#L-625"><span class="linenos" data-line="625"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"&quot;%s&quot;"</span><span class="p">,</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="p">)</span> </span><span id="L-626"><a href="#L-626"><span class="linenos" data-line="626"></span></a> <span class="kr">end</span> </span><span id="L-627"><a href="#L-627"><span class="linenos" data-line="627"></span></a> <span class="kr">if</span> <span class="n">abbr</span> <span class="kr">then</span> </span><span id="L-628"><a href="#L-628"><span class="linenos" data-line="628"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">show</span> </span><span id="L-629"><a href="#L-629"><span class="linenos" data-line="629"></span></a> <span class="kr">else</span> </span><span id="L-630"><a href="#L-630"><span class="linenos" data-line="630"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"invalid"</span><span class="p">,</span> <span class="n">show</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-631"><a href="#L-631"><span class="linenos" data-line="631"></span></a> <span class="kr">end</span> </span><span id="L-632"><a href="#L-632"><span class="linenos" data-line="632"></span></a> <span class="kr">end</span> </span><span id="L-633"><a href="#L-633"><span class="linenos" data-line="633"></span></a> <span class="kr">end</span> </span><span id="L-634"><a href="#L-634"><span class="linenos" data-line="634"></span></a> <span class="kr">elseif</span> <span class="n">s</span> <span class="o">~=</span> <span class="s2">"*"</span> <span class="kr">then</span> </span><span id="L-635"><a href="#L-635"><span class="linenos" data-line="635"></span></a> <span class="kd">local</span> <span class="n">op</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">plus</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"([<!=>]=?)([-0-9][%S]*)(+?)"</span> <span class="p">)</span> </span><span id="L-636"><a href="#L-636"><span class="linenos" data-line="636"></span></a> <span class="kr">if</span> <span class="n">op</span> <span class="kr">then</span> </span><span id="L-637"><a href="#L-637"><span class="linenos" data-line="637"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">n</span> <span class="p">)</span> </span><span id="L-638"><a href="#L-638"><span class="linenos" data-line="638"></span></a> <span class="kr">if</span> <span class="n">n</span> <span class="kr">then</span> </span><span id="L-639"><a href="#L-639"><span class="linenos" data-line="639"></span></a> <span class="kd">local</span> <span class="n">i</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">stuff</span> <span class="p">)</span> </span><span id="L-640"><a href="#L-640"><span class="linenos" data-line="640"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="kr">then</span> </span><span id="L-641"><a href="#L-641"><span class="linenos" data-line="641"></span></a> <span class="kr">if</span> <span class="n">op</span> <span class="o">==</span> <span class="s2">"<"</span> <span class="kr">then</span> </span><span id="L-642"><a href="#L-642"><span class="linenos" data-line="642"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="p">(</span> <span class="n">i</span> <span class="o"><</span> <span class="n">n</span> <span class="p">)</span> </span><span id="L-643"><a href="#L-643"><span class="linenos" data-line="643"></span></a> <span class="kr">elseif</span> <span class="n">op</span> <span class="o">==</span> <span class="s2">"<="</span> <span class="kr">then</span> </span><span id="L-644"><a href="#L-644"><span class="linenos" data-line="644"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="p">(</span> <span class="n">i</span> <span class="o"><=</span> <span class="n">n</span> <span class="p">)</span> </span><span id="L-645"><a href="#L-645"><span class="linenos" data-line="645"></span></a> <span class="kr">elseif</span> <span class="n">op</span> <span class="o">==</span> <span class="s2">">"</span> <span class="kr">then</span> </span><span id="L-646"><a href="#L-646"><span class="linenos" data-line="646"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="p">(</span> <span class="n">i</span> <span class="o">></span> <span class="n">n</span> <span class="p">)</span> </span><span id="L-647"><a href="#L-647"><span class="linenos" data-line="647"></span></a> <span class="kr">elseif</span> <span class="n">op</span> <span class="o">==</span> <span class="s2">">="</span> <span class="kr">then</span> </span><span id="L-648"><a href="#L-648"><span class="linenos" data-line="648"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="p">(</span> <span class="n">i</span> <span class="o">>=</span> <span class="n">n</span> <span class="p">)</span> </span><span id="L-649"><a href="#L-649"><span class="linenos" data-line="649"></span></a> <span class="kr">elseif</span> <span class="n">op</span> <span class="o">==</span> <span class="s2">"=="</span> <span class="kr">then</span> </span><span id="L-650"><a href="#L-650"><span class="linenos" data-line="650"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="p">(</span> <span class="n">i</span> <span class="o">==</span> <span class="n">n</span> <span class="p">)</span> </span><span id="L-651"><a href="#L-651"><span class="linenos" data-line="651"></span></a> <span class="kr">elseif</span> <span class="n">op</span> <span class="o">==</span> <span class="s2">"!="</span> <span class="kr">then</span> </span><span id="L-652"><a href="#L-652"><span class="linenos" data-line="652"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="p">(</span> <span class="n">i</span> <span class="o">~=</span> <span class="n">n</span> <span class="p">)</span> </span><span id="L-653"><a href="#L-653"><span class="linenos" data-line="653"></span></a> <span class="kr">else</span> </span><span id="L-654"><a href="#L-654"><span class="linenos" data-line="654"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-655"><a href="#L-655"><span class="linenos" data-line="655"></span></a> <span class="kr">end</span> </span><span id="L-656"><a href="#L-656"><span class="linenos" data-line="656"></span></a> <span class="kr">end</span> </span><span id="L-657"><a href="#L-657"><span class="linenos" data-line="657"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">i</span> <span class="kr">then</span> </span><span id="L-658"><a href="#L-658"><span class="linenos" data-line="658"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"invalid"</span> </span><span id="L-659"><a href="#L-659"><span class="linenos" data-line="659"></span></a> <span class="kr">end</span> </span><span id="L-660"><a href="#L-660"><span class="linenos" data-line="660"></span></a> <span class="kr">elseif</span> <span class="n">plus</span> <span class="kr">then</span> </span><span id="L-661"><a href="#L-661"><span class="linenos" data-line="661"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"undefined"</span> </span><span id="L-662"><a href="#L-662"><span class="linenos" data-line="662"></span></a> <span class="kr">end</span> </span><span id="L-663"><a href="#L-663"><span class="linenos" data-line="663"></span></a> <span class="kr">elseif</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^boolean%+?$"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-664"><a href="#L-664"><span class="linenos" data-line="664"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">faculty</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">stuff</span> <span class="p">)</span> </span><span id="L-665"><a href="#L-665"><span class="linenos" data-line="665"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-666"><a href="#L-666"><span class="linenos" data-line="666"></span></a> <span class="kr">elseif</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^datetime/?y?m?d?%+?$"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-667"><a href="#L-667"><span class="linenos" data-line="667"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">fast</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">stuff</span> <span class="p">)</span> </span><span id="L-668"><a href="#L-668"><span class="linenos" data-line="668"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-669"><a href="#L-669"><span class="linenos" data-line="669"></span></a> <span class="kr">elseif</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^image%+?:?$"</span> <span class="p">)</span> <span class="ow">or</span> </span><span id="L-670"><a href="#L-670"><span class="linenos" data-line="670"></span></a> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^file%+?:?$"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-671"><a href="#L-671"><span class="linenos" data-line="671"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">facility</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">stuff</span> <span class="p">)</span> </span><span id="L-672"><a href="#L-672"><span class="linenos" data-line="672"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-673"><a href="#L-673"><span class="linenos" data-line="673"></span></a> <span class="kr">elseif</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"langs?W?%+?"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-674"><a href="#L-674"><span class="linenos" data-line="674"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">familiar</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">stuff</span> <span class="p">)</span> </span><span id="L-675"><a href="#L-675"><span class="linenos" data-line="675"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-676"><a href="#L-676"><span class="linenos" data-line="676"></span></a> <span class="kr">elseif</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"url%+?"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-677"><a href="#L-677"><span class="linenos" data-line="677"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">far</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">stuff</span> <span class="p">)</span> </span><span id="L-678"><a href="#L-678"><span class="linenos" data-line="678"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-679"><a href="#L-679"><span class="linenos" data-line="679"></span></a> <span class="kr">end</span> </span><span id="L-680"><a href="#L-680"><span class="linenos" data-line="680"></span></a><span class="c1">-- datetime+</span> </span><span id="L-681"><a href="#L-681"><span class="linenos" data-line="681"></span></a><span class="c1">-- iso8631+</span> </span><span id="L-682"><a href="#L-682"><span class="linenos" data-line="682"></span></a><span class="c1">-- line+</span> </span><span id="L-683"><a href="#L-683"><span class="linenos" data-line="683"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">n</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-684"><a href="#L-684"><span class="linenos" data-line="684"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">"unknownRule"</span> </span><span id="L-685"><a href="#L-685"><span class="linenos" data-line="685"></span></a> <span class="kr">end</span> </span><span id="L-686"><a href="#L-686"><span class="linenos" data-line="686"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-687"><a href="#L-687"><span class="linenos" data-line="687"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="kr">then</span> </span><span id="L-688"><a href="#L-688"><span class="linenos" data-line="688"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"&quot;%s&quot; %s"</span><span class="p">,</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-689"><a href="#L-689"><span class="linenos" data-line="689"></span></a> <span class="kr">else</span> </span><span id="L-690"><a href="#L-690"><span class="linenos" data-line="690"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="n">s</span> </span><span id="L-691"><a href="#L-691"><span class="linenos" data-line="691"></span></a> <span class="kr">end</span> </span><span id="L-692"><a href="#L-692"><span class="linenos" data-line="692"></span></a> <span class="kr">if</span> <span class="n">abbr</span> <span class="kr">then</span> </span><span id="L-693"><a href="#L-693"><span class="linenos" data-line="693"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">show</span> </span><span id="L-694"><a href="#L-694"><span class="linenos" data-line="694"></span></a> <span class="kr">else</span> </span><span id="L-695"><a href="#L-695"><span class="linenos" data-line="695"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">show</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-696"><a href="#L-696"><span class="linenos" data-line="696"></span></a> <span class="kr">end</span> </span><span id="L-697"><a href="#L-697"><span class="linenos" data-line="697"></span></a> <span class="kr">end</span> </span><span id="L-698"><a href="#L-698"><span class="linenos" data-line="698"></span></a> <span class="kr">end</span> </span><span id="L-699"><a href="#L-699"><span class="linenos" data-line="699"></span></a> <span class="kr">end</span> </span><span id="L-700"><a href="#L-700"><span class="linenos" data-line="700"></span></a> <span class="kr">if</span> <span class="n">scan</span> <span class="kr">then</span> </span><span id="L-701"><a href="#L-701"><span class="linenos" data-line="701"></span></a> <span class="kd">local</span> <span class="n">legal</span><span class="p">,</span> <span class="n">got</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span> <span class="n">fair</span><span class="p">,</span> <span class="n">stuff</span><span class="p">,</span> <span class="n">scan</span> <span class="p">)</span> </span><span id="L-702"><a href="#L-702"><span class="linenos" data-line="702"></span></a> <span class="kr">if</span> <span class="n">legal</span> <span class="kr">then</span> </span><span id="L-703"><a href="#L-703"><span class="linenos" data-line="703"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">got</span> <span class="kr">then</span> </span><span id="L-704"><a href="#L-704"><span class="linenos" data-line="704"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">"aa"</span> <span class="kr">then</span> </span><span id="L-705"><a href="#L-705"><span class="linenos" data-line="705"></span></a> <span class="n">got</span> <span class="o">=</span> <span class="n">containsCJK</span><span class="p">(</span> <span class="n">stuff</span> <span class="p">)</span> </span><span id="L-706"><a href="#L-706"><span class="linenos" data-line="706"></span></a> <span class="kr">end</span> </span><span id="L-707"><a href="#L-707"><span class="linenos" data-line="707"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">got</span> <span class="kr">then</span> </span><span id="L-708"><a href="#L-708"><span class="linenos" data-line="708"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="kr">then</span> </span><span id="L-709"><a href="#L-709"><span class="linenos" data-line="709"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"&quot;%s&quot;"</span><span class="p">,</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="p">)</span> </span><span id="L-710"><a href="#L-710"><span class="linenos" data-line="710"></span></a> <span class="kr">end</span> </span><span id="L-711"><a href="#L-711"><span class="linenos" data-line="711"></span></a> <span class="kr">if</span> <span class="n">abbr</span> <span class="kr">then</span> </span><span id="L-712"><a href="#L-712"><span class="linenos" data-line="712"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">show</span> </span><span id="L-713"><a href="#L-713"><span class="linenos" data-line="713"></span></a> <span class="kr">else</span> </span><span id="L-714"><a href="#L-714"><span class="linenos" data-line="714"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"invalid"</span><span class="p">,</span> <span class="n">show</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-715"><a href="#L-715"><span class="linenos" data-line="715"></span></a> <span class="kr">end</span> </span><span id="L-716"><a href="#L-716"><span class="linenos" data-line="716"></span></a> <span class="kr">end</span> </span><span id="L-717"><a href="#L-717"><span class="linenos" data-line="717"></span></a> <span class="kr">end</span> </span><span id="L-718"><a href="#L-718"><span class="linenos" data-line="718"></span></a> <span class="kr">else</span> </span><span id="L-719"><a href="#L-719"><span class="linenos" data-line="719"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"badPattern"</span><span class="p">,</span> </span><span id="L-720"><a href="#L-720"><span class="linenos" data-line="720"></span></a> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s *** %s"</span><span class="p">,</span> <span class="n">scan</span><span class="p">,</span> <span class="n">got</span> <span class="p">),</span> </span><span id="L-721"><a href="#L-721"><span class="linenos" data-line="721"></span></a> <span class="n">options</span> <span class="p">)</span> </span><span id="L-722"><a href="#L-722"><span class="linenos" data-line="722"></span></a> <span class="kr">end</span> </span><span id="L-723"><a href="#L-723"><span class="linenos" data-line="723"></span></a> <span class="kr">end</span> </span><span id="L-724"><a href="#L-724"><span class="linenos" data-line="724"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-725"><a href="#L-725"><span class="linenos" data-line="725"></span></a><span class="kr">end</span> <span class="c1">-- feasible()</span> </span><span id="L-726"><a href="#L-726"><span class="linenos" data-line="726"></span></a> </span><span id="L-727"><a href="#L-727"><span class="linenos" data-line="727"></span></a> </span><span id="L-728"><a href="#L-728"><span class="linenos" data-line="728"></span></a> </span><span id="L-729"><a href="#L-729"><span class="linenos" data-line="729"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">fed</span><span class="p">(</span> <span class="n">haystack</span><span class="p">,</span> <span class="n">needle</span> <span class="p">)</span> </span><span id="L-730"><a href="#L-730"><span class="linenos" data-line="730"></span></a> <span class="c1">-- Find needle in haystack map</span> </span><span id="L-731"><a href="#L-731"><span class="linenos" data-line="731"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-732"><a href="#L-732"><span class="linenos" data-line="732"></span></a> <span class="c1">-- haystack -- table; map of key values</span> </span><span id="L-733"><a href="#L-733"><span class="linenos" data-line="733"></span></a> <span class="c1">-- needle -- any; identifier</span> </span><span id="L-734"><a href="#L-734"><span class="linenos" data-line="734"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-735"><a href="#L-735"><span class="linenos" data-line="735"></span></a> <span class="c1">-- Return true iff found</span> </span><span id="L-736"><a href="#L-736"><span class="linenos" data-line="736"></span></a> <span class="kd">local</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">r</span> </span><span id="L-737"><a href="#L-737"><span class="linenos" data-line="737"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">haystack</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-738"><a href="#L-738"><span class="linenos" data-line="738"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="o">==</span> <span class="n">needle</span> <span class="kr">then</span> </span><span id="L-739"><a href="#L-739"><span class="linenos" data-line="739"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-740"><a href="#L-740"><span class="linenos" data-line="740"></span></a> <span class="kr">end</span> </span><span id="L-741"><a href="#L-741"><span class="linenos" data-line="741"></span></a> <span class="kr">end</span> <span class="c1">-- for k, v</span> </span><span id="L-742"><a href="#L-742"><span class="linenos" data-line="742"></span></a> <span class="kr">return</span> <span class="n">r</span> <span class="ow">or</span> <span class="kc">false</span> </span><span id="L-743"><a href="#L-743"><span class="linenos" data-line="743"></span></a><span class="kr">end</span> <span class="c1">-- fed()</span> </span><span id="L-744"><a href="#L-744"><span class="linenos" data-line="744"></span></a> </span><span id="L-745"><a href="#L-745"><span class="linenos" data-line="745"></span></a> </span><span id="L-746"><a href="#L-746"><span class="linenos" data-line="746"></span></a> </span><span id="L-747"><a href="#L-747"><span class="linenos" data-line="747"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">fetch</span><span class="p">(</span> <span class="n">light</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-748"><a href="#L-748"><span class="linenos" data-line="748"></span></a> <span class="c1">-- Return regular table with all parameters</span> </span><span id="L-749"><a href="#L-749"><span class="linenos" data-line="749"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-750"><a href="#L-750"><span class="linenos" data-line="750"></span></a> <span class="c1">-- light -- true: template transclusion; false: #invoke</span> </span><span id="L-751"><a href="#L-751"><span class="linenos" data-line="751"></span></a> <span class="c1">-- options -- table; optional details</span> </span><span id="L-752"><a href="#L-752"><span class="linenos" data-line="752"></span></a> <span class="c1">-- options.low</span> </span><span id="L-753"><a href="#L-753"><span class="linenos" data-line="753"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-754"><a href="#L-754"><span class="linenos" data-line="754"></span></a> <span class="c1">-- Return table; whitespace-only values as false</span> </span><span id="L-755"><a href="#L-755"><span class="linenos" data-line="755"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-756"><a href="#L-756"><span class="linenos" data-line="756"></span></a> <span class="c1">-- TemplatePar.downcase()</span> </span><span id="L-757"><a href="#L-757"><span class="linenos" data-line="757"></span></a> <span class="c1">-- TemplatePar.framing()</span> </span><span id="L-758"><a href="#L-758"><span class="linenos" data-line="758"></span></a> <span class="c1">-- frame:getParent()</span> </span><span id="L-759"><a href="#L-759"><span class="linenos" data-line="759"></span></a> <span class="kd">local</span> <span class="n">g</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> </span><span id="L-760"><a href="#L-760"><span class="linenos" data-line="760"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-761"><a href="#L-761"><span class="linenos" data-line="761"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">low</span> <span class="kr">then</span> </span><span id="L-762"><a href="#L-762"><span class="linenos" data-line="762"></span></a> <span class="n">g</span> <span class="o">=</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">downcase</span><span class="p">(</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-763"><a href="#L-763"><span class="linenos" data-line="763"></span></a> <span class="kr">else</span> </span><span id="L-764"><a href="#L-764"><span class="linenos" data-line="764"></span></a> <span class="n">g</span> <span class="o">=</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">framing</span><span class="p">()</span> </span><span id="L-765"><a href="#L-765"><span class="linenos" data-line="765"></span></a> <span class="kr">if</span> <span class="n">light</span> <span class="kr">then</span> </span><span id="L-766"><a href="#L-766"><span class="linenos" data-line="766"></span></a> <span class="n">g</span> <span class="o">=</span> <span class="n">g</span><span class="p">:</span><span class="n">getParent</span><span class="p">()</span> </span><span id="L-767"><a href="#L-767"><span class="linenos" data-line="767"></span></a> <span class="kr">end</span> </span><span id="L-768"><a href="#L-768"><span class="linenos" data-line="768"></span></a> <span class="n">g</span> <span class="o">=</span> <span class="n">g</span><span class="p">.</span><span class="n">args</span> </span><span id="L-769"><a href="#L-769"><span class="linenos" data-line="769"></span></a> <span class="kr">end</span> </span><span id="L-770"><a href="#L-770"><span class="linenos" data-line="770"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">g</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-771"><a href="#L-771"><span class="linenos" data-line="771"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-772"><a href="#L-772"><span class="linenos" data-line="772"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">g</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-773"><a href="#L-773"><span class="linenos" data-line="773"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">v</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-774"><a href="#L-774"><span class="linenos" data-line="774"></span></a> <span class="kr">if</span> <span class="n">v</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^%s*$"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-775"><a href="#L-775"><span class="linenos" data-line="775"></span></a> <span class="n">v</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-776"><a href="#L-776"><span class="linenos" data-line="776"></span></a> <span class="kr">end</span> </span><span id="L-777"><a href="#L-777"><span class="linenos" data-line="777"></span></a> <span class="kr">else</span> </span><span id="L-778"><a href="#L-778"><span class="linenos" data-line="778"></span></a> <span class="n">v</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-779"><a href="#L-779"><span class="linenos" data-line="779"></span></a> <span class="kr">end</span> </span><span id="L-780"><a href="#L-780"><span class="linenos" data-line="780"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">k</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-781"><a href="#L-781"><span class="linenos" data-line="781"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">k</span> <span class="p">)</span> </span><span id="L-782"><a href="#L-782"><span class="linenos" data-line="782"></span></a> <span class="kr">end</span> </span><span id="L-783"><a href="#L-783"><span class="linenos" data-line="783"></span></a> <span class="n">r</span><span class="p">[</span> <span class="n">k</span> <span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="L-784"><a href="#L-784"><span class="linenos" data-line="784"></span></a> <span class="kr">end</span> <span class="c1">-- for k, v</span> </span><span id="L-785"><a href="#L-785"><span class="linenos" data-line="785"></span></a> <span class="kr">else</span> </span><span id="L-786"><a href="#L-786"><span class="linenos" data-line="786"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">g</span> </span><span id="L-787"><a href="#L-787"><span class="linenos" data-line="787"></span></a> <span class="kr">end</span> </span><span id="L-788"><a href="#L-788"><span class="linenos" data-line="788"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-789"><a href="#L-789"><span class="linenos" data-line="789"></span></a><span class="kr">end</span> <span class="c1">-- fetch()</span> </span><span id="L-790"><a href="#L-790"><span class="linenos" data-line="790"></span></a> </span><span id="L-791"><a href="#L-791"><span class="linenos" data-line="791"></span></a> </span><span id="L-792"><a href="#L-792"><span class="linenos" data-line="792"></span></a> </span><span id="L-793"><a href="#L-793"><span class="linenos" data-line="793"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">figure</span><span class="p">(</span> <span class="n">append</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-794"><a href="#L-794"><span class="linenos" data-line="794"></span></a> <span class="c1">-- Extend options by rule from #invoke strings</span> </span><span id="L-795"><a href="#L-795"><span class="linenos" data-line="795"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-796"><a href="#L-796"><span class="linenos" data-line="796"></span></a> <span class="c1">-- append -- string or nil; requested rule</span> </span><span id="L-797"><a href="#L-797"><span class="linenos" data-line="797"></span></a> <span class="c1">-- options -- table; details</span> </span><span id="L-798"><a href="#L-798"><span class="linenos" data-line="798"></span></a> <span class="c1">-- ++ .key</span> </span><span id="L-799"><a href="#L-799"><span class="linenos" data-line="799"></span></a> <span class="c1">-- ++ .pattern</span> </span><span id="L-800"><a href="#L-800"><span class="linenos" data-line="800"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-801"><a href="#L-801"><span class="linenos" data-line="801"></span></a> <span class="c1">-- Return sequence table</span> </span><span id="L-802"><a href="#L-802"><span class="linenos" data-line="802"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">options</span> </span><span id="L-803"><a href="#L-803"><span class="linenos" data-line="803"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">append</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-804"><a href="#L-804"><span class="linenos" data-line="804"></span></a> <span class="kd">local</span> <span class="n">story</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">append</span> <span class="p">)</span> </span><span id="L-805"><a href="#L-805"><span class="linenos" data-line="805"></span></a> <span class="kd">local</span> <span class="n">sub</span> <span class="o">=</span> <span class="n">story</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^/(.*%S)/$"</span> <span class="p">)</span> </span><span id="L-806"><a href="#L-806"><span class="linenos" data-line="806"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">sub</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-807"><a href="#L-807"><span class="linenos" data-line="807"></span></a> <span class="n">sub</span> <span class="o">=</span> <span class="n">sub</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">"%%!"</span><span class="p">,</span> <span class="s2">"|"</span> <span class="p">)</span> </span><span id="L-808"><a href="#L-808"><span class="linenos" data-line="808"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">"%%%(%("</span><span class="p">,</span> <span class="s2">"{{"</span> <span class="p">)</span> </span><span id="L-809"><a href="#L-809"><span class="linenos" data-line="809"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">"%%%)%)"</span><span class="p">,</span> <span class="s2">"}}"</span> <span class="p">)</span> </span><span id="L-810"><a href="#L-810"><span class="linenos" data-line="810"></span></a> <span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">n"</span><span class="p">,</span> <span class="nb">string.char</span><span class="p">(</span> <span class="mi">10</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-811"><a href="#L-811"><span class="linenos" data-line="811"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">pattern</span> <span class="o">=</span> <span class="n">sub</span> </span><span id="L-812"><a href="#L-812"><span class="linenos" data-line="812"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">key</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-813"><a href="#L-813"><span class="linenos" data-line="813"></span></a> <span class="kr">else</span> </span><span id="L-814"><a href="#L-814"><span class="linenos" data-line="814"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">story</span> </span><span id="L-815"><a href="#L-815"><span class="linenos" data-line="815"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">pattern</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-816"><a href="#L-816"><span class="linenos" data-line="816"></span></a> <span class="kr">end</span> </span><span id="L-817"><a href="#L-817"><span class="linenos" data-line="817"></span></a> <span class="kr">end</span> </span><span id="L-818"><a href="#L-818"><span class="linenos" data-line="818"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-819"><a href="#L-819"><span class="linenos" data-line="819"></span></a><span class="kr">end</span> <span class="c1">-- figure()</span> </span><span id="L-820"><a href="#L-820"><span class="linenos" data-line="820"></span></a> </span><span id="L-821"><a href="#L-821"><span class="linenos" data-line="821"></span></a> </span><span id="L-822"><a href="#L-822"><span class="linenos" data-line="822"></span></a> </span><span id="L-823"><a href="#L-823"><span class="linenos" data-line="823"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">fill</span><span class="p">(</span> <span class="n">specified</span> <span class="p">)</span> </span><span id="L-824"><a href="#L-824"><span class="linenos" data-line="824"></span></a> <span class="c1">-- Split requirement string separated by '='</span> </span><span id="L-825"><a href="#L-825"><span class="linenos" data-line="825"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-826"><a href="#L-826"><span class="linenos" data-line="826"></span></a> <span class="c1">-- specified -- string or nil; requested parameter set</span> </span><span id="L-827"><a href="#L-827"><span class="linenos" data-line="827"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-828"><a href="#L-828"><span class="linenos" data-line="828"></span></a> <span class="c1">-- Return sequence table</span> </span><span id="L-829"><a href="#L-829"><span class="linenos" data-line="829"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-830"><a href="#L-830"><span class="linenos" data-line="830"></span></a> <span class="c1">-- mw.text.split()</span> </span><span id="L-831"><a href="#L-831"><span class="linenos" data-line="831"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-832"><a href="#L-832"><span class="linenos" data-line="832"></span></a> <span class="kr">if</span> <span class="n">specified</span> <span class="kr">then</span> </span><span id="L-833"><a href="#L-833"><span class="linenos" data-line="833"></span></a> <span class="kd">local</span> <span class="n">i</span><span class="p">,</span> <span class="n">s</span> </span><span id="L-834"><a href="#L-834"><span class="linenos" data-line="834"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">split</span><span class="p">(</span> <span class="n">specified</span><span class="p">,</span> <span class="s2">"%s*=%s*"</span> <span class="p">)</span> </span><span id="L-835"><a href="#L-835"><span class="linenos" data-line="835"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="o">#</span><span class="n">r</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span> <span class="kr">do</span> </span><span id="L-836"><a href="#L-836"><span class="linenos" data-line="836"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> </span><span id="L-837"><a href="#L-837"><span class="linenos" data-line="837"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">s</span> <span class="o">==</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-838"><a href="#L-838"><span class="linenos" data-line="838"></span></a> <span class="nb">table.remove</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">i</span> <span class="p">)</span> </span><span id="L-839"><a href="#L-839"><span class="linenos" data-line="839"></span></a> <span class="kr">end</span> </span><span id="L-840"><a href="#L-840"><span class="linenos" data-line="840"></span></a> <span class="kr">end</span> <span class="c1">-- for i, -1</span> </span><span id="L-841"><a href="#L-841"><span class="linenos" data-line="841"></span></a> <span class="kr">else</span> </span><span id="L-842"><a href="#L-842"><span class="linenos" data-line="842"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-843"><a href="#L-843"><span class="linenos" data-line="843"></span></a> <span class="kr">end</span> </span><span id="L-844"><a href="#L-844"><span class="linenos" data-line="844"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-845"><a href="#L-845"><span class="linenos" data-line="845"></span></a><span class="kr">end</span> <span class="c1">-- fill()</span> </span><span id="L-846"><a href="#L-846"><span class="linenos" data-line="846"></span></a> </span><span id="L-847"><a href="#L-847"><span class="linenos" data-line="847"></span></a> </span><span id="L-848"><a href="#L-848"><span class="linenos" data-line="848"></span></a> </span><span id="L-849"><a href="#L-849"><span class="linenos" data-line="849"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">finalize</span><span class="p">(</span> <span class="n">submit</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-850"><a href="#L-850"><span class="linenos" data-line="850"></span></a> <span class="c1">-- Finalize message</span> </span><span id="L-851"><a href="#L-851"><span class="linenos" data-line="851"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-852"><a href="#L-852"><span class="linenos" data-line="852"></span></a> <span class="c1">-- submit -- string or false or nil; non-empty error message</span> </span><span id="L-853"><a href="#L-853"><span class="linenos" data-line="853"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-854"><a href="#L-854"><span class="linenos" data-line="854"></span></a> <span class="c1">-- options.format</span> </span><span id="L-855"><a href="#L-855"><span class="linenos" data-line="855"></span></a> <span class="c1">-- options.preview</span> </span><span id="L-856"><a href="#L-856"><span class="linenos" data-line="856"></span></a> <span class="c1">-- options.cat</span> </span><span id="L-857"><a href="#L-857"><span class="linenos" data-line="857"></span></a> <span class="c1">-- options.template</span> </span><span id="L-858"><a href="#L-858"><span class="linenos" data-line="858"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-859"><a href="#L-859"><span class="linenos" data-line="859"></span></a> <span class="c1">-- Return string or false</span> </span><span id="L-860"><a href="#L-860"><span class="linenos" data-line="860"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-861"><a href="#L-861"><span class="linenos" data-line="861"></span></a> <span class="c1">-- TemplatePar.framing()</span> </span><span id="L-862"><a href="#L-862"><span class="linenos" data-line="862"></span></a> <span class="c1">-- factory()</span> </span><span id="L-863"><a href="#L-863"><span class="linenos" data-line="863"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-864"><a href="#L-864"><span class="linenos" data-line="864"></span></a> <span class="kr">if</span> <span class="n">submit</span> <span class="kr">then</span> </span><span id="L-865"><a href="#L-865"><span class="linenos" data-line="865"></span></a> <span class="kd">local</span> <span class="n">lazy</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-866"><a href="#L-866"><span class="linenos" data-line="866"></span></a> <span class="kd">local</span> <span class="n">learn</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-867"><a href="#L-867"><span class="linenos" data-line="867"></span></a> <span class="kd">local</span> <span class="n">show</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-868"><a href="#L-868"><span class="linenos" data-line="868"></span></a> <span class="kd">local</span> <span class="n">opt</span><span class="p">,</span> <span class="n">s</span> </span><span id="L-869"><a href="#L-869"><span class="linenos" data-line="869"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-870"><a href="#L-870"><span class="linenos" data-line="870"></span></a> <span class="n">opt</span> <span class="o">=</span> <span class="n">options</span> </span><span id="L-871"><a href="#L-871"><span class="linenos" data-line="871"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="n">opt</span><span class="p">.</span><span class="n">format</span> </span><span id="L-872"><a href="#L-872"><span class="linenos" data-line="872"></span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="p">(</span> <span class="n">show</span> <span class="o">==</span> <span class="s2">""</span> <span class="ow">or</span> <span class="n">show</span> <span class="o">==</span> <span class="s2">"0"</span> <span class="ow">or</span> <span class="n">show</span> <span class="o">==</span> <span class="s2">"-"</span> <span class="p">)</span> </span><span id="L-873"><a href="#L-873"><span class="linenos" data-line="873"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">opt</span><span class="p">.</span><span class="n">preview</span> </span><span id="L-874"><a href="#L-874"><span class="linenos" data-line="874"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">and</span> </span><span id="L-875"><a href="#L-875"><span class="linenos" data-line="875"></span></a> <span class="n">s</span> <span class="o">~=</span> <span class="s2">""</span> <span class="ow">and</span> <span class="n">s</span> <span class="o">~=</span> <span class="s2">"0"</span> <span class="ow">and</span> <span class="n">s</span> <span class="o">~=</span> <span class="s2">"-"</span> <span class="kr">then</span> </span><span id="L-876"><a href="#L-876"><span class="linenos" data-line="876"></span></a> <span class="kd">local</span> <span class="n">sniffer</span> <span class="o">=</span> <span class="s2">"{{REVISIONID}}"</span> </span><span id="L-877"><a href="#L-877"><span class="linenos" data-line="877"></span></a> <span class="kr">if</span> <span class="n">lazy</span> <span class="kr">then</span> </span><span id="L-878"><a href="#L-878"><span class="linenos" data-line="878"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-879"><a href="#L-879"><span class="linenos" data-line="879"></span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-880"><a href="#L-880"><span class="linenos" data-line="880"></span></a> <span class="kr">end</span> </span><span id="L-881"><a href="#L-881"><span class="linenos" data-line="881"></span></a> <span class="kr">if</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">framing</span><span class="p">():</span><span class="n">preprocess</span><span class="p">(</span> <span class="n">sniffer</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-882"><a href="#L-882"><span class="linenos" data-line="882"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">"1"</span> <span class="kr">then</span> </span><span id="L-883"><a href="#L-883"><span class="linenos" data-line="883"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="s2">"*"</span> </span><span id="L-884"><a href="#L-884"><span class="linenos" data-line="884"></span></a> <span class="kr">else</span> </span><span id="L-885"><a href="#L-885"><span class="linenos" data-line="885"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="n">s</span> </span><span id="L-886"><a href="#L-886"><span class="linenos" data-line="886"></span></a> <span class="kr">end</span> </span><span id="L-887"><a href="#L-887"><span class="linenos" data-line="887"></span></a> <span class="n">learn</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-888"><a href="#L-888"><span class="linenos" data-line="888"></span></a> <span class="kr">end</span> </span><span id="L-889"><a href="#L-889"><span class="linenos" data-line="889"></span></a> <span class="kr">end</span> </span><span id="L-890"><a href="#L-890"><span class="linenos" data-line="890"></span></a> <span class="kr">else</span> </span><span id="L-891"><a href="#L-891"><span class="linenos" data-line="891"></span></a> <span class="n">opt</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-892"><a href="#L-892"><span class="linenos" data-line="892"></span></a> <span class="kr">end</span> </span><span id="L-893"><a href="#L-893"><span class="linenos" data-line="893"></span></a> <span class="kr">if</span> <span class="n">lazy</span> <span class="kr">then</span> </span><span id="L-894"><a href="#L-894"><span class="linenos" data-line="894"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">opt</span><span class="p">.</span><span class="n">cat</span> <span class="kr">then</span> </span><span id="L-895"><a href="#L-895"><span class="linenos" data-line="895"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s %s"</span><span class="p">,</span> </span><span id="L-896"><a href="#L-896"><span class="linenos" data-line="896"></span></a> <span class="n">submit</span><span class="p">,</span> <span class="n">factory</span><span class="p">(</span> <span class="s2">"noMSGnoCAT"</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-897"><a href="#L-897"><span class="linenos" data-line="897"></span></a> <span class="kr">end</span> </span><span id="L-898"><a href="#L-898"><span class="linenos" data-line="898"></span></a> <span class="kr">else</span> </span><span id="L-899"><a href="#L-899"><span class="linenos" data-line="899"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">submit</span> </span><span id="L-900"><a href="#L-900"><span class="linenos" data-line="900"></span></a> <span class="kr">end</span> </span><span id="L-901"><a href="#L-901"><span class="linenos" data-line="901"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">lazy</span> <span class="kr">then</span> </span><span id="L-902"><a href="#L-902"><span class="linenos" data-line="902"></span></a> <span class="kd">local</span> <span class="n">i</span> </span><span id="L-903"><a href="#L-903"><span class="linenos" data-line="903"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">show</span> <span class="ow">or</span> <span class="n">show</span> <span class="o">==</span> <span class="s2">"*"</span> <span class="kr">then</span> </span><span id="L-904"><a href="#L-904"><span class="linenos" data-line="904"></span></a> <span class="kd">local</span> <span class="n">e</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">html</span><span class="p">.</span><span class="n">create</span><span class="p">(</span> <span class="s2">"span"</span> <span class="p">)</span> </span><span id="L-905"><a href="#L-905"><span class="linenos" data-line="905"></span></a> <span class="p">:</span><span class="n">attr</span><span class="p">(</span> <span class="s2">"class"</span><span class="p">,</span> <span class="s2">"error"</span> <span class="p">)</span> </span><span id="L-906"><a href="#L-906"><span class="linenos" data-line="906"></span></a> <span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="s2">"@@@"</span> <span class="p">)</span> </span><span id="L-907"><a href="#L-907"><span class="linenos" data-line="907"></span></a> <span class="kr">if</span> <span class="n">learn</span> <span class="kr">then</span> </span><span id="L-908"><a href="#L-908"><span class="linenos" data-line="908"></span></a> <span class="kd">local</span> <span class="n">max</span> <span class="o">=</span> <span class="mi">1000000000</span> </span><span id="L-909"><a href="#L-909"><span class="linenos" data-line="909"></span></a> <span class="kd">local</span> <span class="n">id</span> <span class="o">=</span> <span class="nb">math.floor</span><span class="p">(</span> <span class="nb">os.clock</span><span class="p">()</span> <span class="o">*</span> <span class="n">max</span> <span class="p">)</span> </span><span id="L-910"><a href="#L-910"><span class="linenos" data-line="910"></span></a> <span class="kd">local</span> <span class="n">sign</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"error_%d"</span><span class="p">,</span> <span class="n">id</span> <span class="p">)</span> </span><span id="L-911"><a href="#L-911"><span class="linenos" data-line="911"></span></a> <span class="kd">local</span> <span class="n">btn</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">html</span><span class="p">.</span><span class="n">create</span><span class="p">(</span> <span class="s2">"span"</span> <span class="p">)</span> </span><span id="L-912"><a href="#L-912"><span class="linenos" data-line="912"></span></a> <span class="kd">local</span> <span class="n">top</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">html</span><span class="p">.</span><span class="n">create</span><span class="p">(</span> <span class="s2">"div"</span> <span class="p">)</span> </span><span id="L-913"><a href="#L-913"><span class="linenos" data-line="913"></span></a> <span class="n">e</span><span class="p">:</span><span class="n">attr</span><span class="p">(</span> <span class="s2">"id"</span><span class="p">,</span> <span class="n">sign</span> <span class="p">)</span> </span><span id="L-914"><a href="#L-914"><span class="linenos" data-line="914"></span></a> <span class="n">btn</span><span class="p">:</span><span class="n">css</span><span class="p">(</span> <span class="p">{</span> <span class="p">[</span><span class="s2">"background"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"#FFFF00"</span><span class="p">,</span> </span><span id="L-915"><a href="#L-915"><span class="linenos" data-line="915"></span></a> <span class="p">[</span><span class="s2">"border"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"#FF0000 3px solid"</span><span class="p">,</span> </span><span id="L-916"><a href="#L-916"><span class="linenos" data-line="916"></span></a> <span class="p">[</span><span class="s2">"font-weight"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"bold"</span><span class="p">,</span> </span><span id="L-917"><a href="#L-917"><span class="linenos" data-line="917"></span></a> <span class="p">[</span><span class="s2">"padding"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"2px"</span><span class="p">,</span> </span><span id="L-918"><a href="#L-918"><span class="linenos" data-line="918"></span></a> <span class="p">[</span><span class="s2">"text-decoration"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"none"</span> <span class="p">}</span> <span class="p">)</span> </span><span id="L-919"><a href="#L-919"><span class="linenos" data-line="919"></span></a> <span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="s2">"&gt;&gt;&gt;"</span> <span class="p">)</span> </span><span id="L-920"><a href="#L-920"><span class="linenos" data-line="920"></span></a> <span class="n">sign</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"[[#%s|%s]]"</span><span class="p">,</span> </span><span id="L-921"><a href="#L-921"><span class="linenos" data-line="921"></span></a> <span class="n">sign</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">btn</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-922"><a href="#L-922"><span class="linenos" data-line="922"></span></a> <span class="n">top</span><span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">sign</span><span class="p">,</span> <span class="s2">"&#160;"</span><span class="p">,</span> <span class="n">submit</span> <span class="p">)</span> </span><span id="L-923"><a href="#L-923"><span class="linenos" data-line="923"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">addWarning</span><span class="p">(</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">top</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-924"><a href="#L-924"><span class="linenos" data-line="924"></span></a> <span class="kr">end</span> </span><span id="L-925"><a href="#L-925"><span class="linenos" data-line="925"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">e</span> <span class="p">)</span> </span><span id="L-926"><a href="#L-926"><span class="linenos" data-line="926"></span></a> <span class="kr">end</span> </span><span id="L-927"><a href="#L-927"><span class="linenos" data-line="927"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">show</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">"@@@"</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> </span><span id="L-928"><a href="#L-928"><span class="linenos" data-line="928"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="kr">then</span> </span><span id="L-929"><a href="#L-929"><span class="linenos" data-line="929"></span></a> <span class="c1">-- No gsub() since r might contain "%3" (e.g. URL)</span> </span><span id="L-930"><a href="#L-930"><span class="linenos" data-line="930"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s%s%s"</span><span class="p">,</span> </span><span id="L-931"><a href="#L-931"><span class="linenos" data-line="931"></span></a> <span class="n">show</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="n">i</span> <span class="o">-</span> <span class="mi">1</span> <span class="p">),</span> </span><span id="L-932"><a href="#L-932"><span class="linenos" data-line="932"></span></a> <span class="n">r</span><span class="p">,</span> </span><span id="L-933"><a href="#L-933"><span class="linenos" data-line="933"></span></a> <span class="n">show</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">3</span> <span class="p">)</span> <span class="p">)</span> </span><span id="L-934"><a href="#L-934"><span class="linenos" data-line="934"></span></a> <span class="kr">else</span> </span><span id="L-935"><a href="#L-935"><span class="linenos" data-line="935"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">show</span> </span><span id="L-936"><a href="#L-936"><span class="linenos" data-line="936"></span></a> <span class="kr">end</span> </span><span id="L-937"><a href="#L-937"><span class="linenos" data-line="937"></span></a> <span class="kr">end</span> </span><span id="L-938"><a href="#L-938"><span class="linenos" data-line="938"></span></a> <span class="kr">if</span> <span class="n">learn</span> <span class="ow">and</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-939"><a href="#L-939"><span class="linenos" data-line="939"></span></a> <span class="c1">-- r = fatal( r )</span> </span><span id="L-940"><a href="#L-940"><span class="linenos" data-line="940"></span></a> <span class="kr">end</span> </span><span id="L-941"><a href="#L-941"><span class="linenos" data-line="941"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">opt</span><span class="p">.</span><span class="n">cat</span> </span><span id="L-942"><a href="#L-942"><span class="linenos" data-line="942"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-943"><a href="#L-943"><span class="linenos" data-line="943"></span></a> <span class="kd">local</span> <span class="n">link</span> </span><span id="L-944"><a href="#L-944"><span class="linenos" data-line="944"></span></a> <span class="kr">if</span> <span class="n">opt</span><span class="p">.</span><span class="n">errNS</span> <span class="kr">then</span> </span><span id="L-945"><a href="#L-945"><span class="linenos" data-line="945"></span></a> <span class="kd">local</span> <span class="n">ns</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">getCurrentTitle</span><span class="p">().</span><span class="n">namespace</span> </span><span id="L-946"><a href="#L-946"><span class="linenos" data-line="946"></span></a> <span class="kd">local</span> <span class="n">st</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span> <span class="n">opt</span><span class="p">.</span><span class="n">errNS</span> <span class="p">)</span> </span><span id="L-947"><a href="#L-947"><span class="linenos" data-line="947"></span></a> <span class="kr">if</span> <span class="n">st</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-948"><a href="#L-948"><span class="linenos" data-line="948"></span></a> <span class="kd">local</span> <span class="n">space</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">".*%%s%d%%s.*"</span><span class="p">,</span> <span class="n">ns</span> <span class="p">)</span> </span><span id="L-949"><a href="#L-949"><span class="linenos" data-line="949"></span></a> <span class="kd">local</span> <span class="n">spaces</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">" %s "</span><span class="p">,</span> <span class="n">opt</span><span class="p">.</span><span class="n">errNS</span> <span class="p">)</span> </span><span id="L-950"><a href="#L-950"><span class="linenos" data-line="950"></span></a> <span class="kr">if</span> <span class="n">spaces</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="n">space</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-951"><a href="#L-951"><span class="linenos" data-line="951"></span></a> <span class="n">link</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-952"><a href="#L-952"><span class="linenos" data-line="952"></span></a> <span class="kr">end</span> </span><span id="L-953"><a href="#L-953"><span class="linenos" data-line="953"></span></a> <span class="kr">elseif</span> <span class="n">st</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-954"><a href="#L-954"><span class="linenos" data-line="954"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">opt</span><span class="p">.</span><span class="n">errNS</span> <span class="kr">do</span> </span><span id="L-955"><a href="#L-955"><span class="linenos" data-line="955"></span></a> <span class="kr">if</span> <span class="n">opt</span><span class="p">.</span><span class="n">errNS</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> <span class="o">==</span> <span class="n">ns</span> <span class="kr">then</span> </span><span id="L-956"><a href="#L-956"><span class="linenos" data-line="956"></span></a> <span class="n">link</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-957"><a href="#L-957"><span class="linenos" data-line="957"></span></a> <span class="kr">break</span> <span class="c1">-- for i</span> </span><span id="L-958"><a href="#L-958"><span class="linenos" data-line="958"></span></a> <span class="kr">end</span> </span><span id="L-959"><a href="#L-959"><span class="linenos" data-line="959"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-960"><a href="#L-960"><span class="linenos" data-line="960"></span></a> <span class="kr">end</span> </span><span id="L-961"><a href="#L-961"><span class="linenos" data-line="961"></span></a> <span class="kr">else</span> </span><span id="L-962"><a href="#L-962"><span class="linenos" data-line="962"></span></a> <span class="n">link</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-963"><a href="#L-963"><span class="linenos" data-line="963"></span></a> <span class="kr">end</span> </span><span id="L-964"><a href="#L-964"><span class="linenos" data-line="964"></span></a> <span class="kr">if</span> <span class="n">link</span> <span class="kr">then</span> </span><span id="L-965"><a href="#L-965"><span class="linenos" data-line="965"></span></a> <span class="kd">local</span> <span class="n">cats</span><span class="p">,</span> <span class="n">i</span> </span><span id="L-966"><a href="#L-966"><span class="linenos" data-line="966"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-967"><a href="#L-967"><span class="linenos" data-line="967"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-968"><a href="#L-968"><span class="linenos" data-line="968"></span></a> <span class="kr">end</span> </span><span id="L-969"><a href="#L-969"><span class="linenos" data-line="969"></span></a> <span class="kr">if</span> <span class="n">s</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">"@@@"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-970"><a href="#L-970"><span class="linenos" data-line="970"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">opt</span><span class="p">.</span><span class="n">template</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-971"><a href="#L-971"><span class="linenos" data-line="971"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">"@@@"</span><span class="p">,</span> <span class="n">opt</span><span class="p">.</span><span class="n">template</span> <span class="p">)</span> </span><span id="L-972"><a href="#L-972"><span class="linenos" data-line="972"></span></a> <span class="kr">end</span> </span><span id="L-973"><a href="#L-973"><span class="linenos" data-line="973"></span></a> <span class="kr">end</span> </span><span id="L-974"><a href="#L-974"><span class="linenos" data-line="974"></span></a> <span class="n">cats</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">split</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="s2">"%s*#%s*"</span> <span class="p">)</span> </span><span id="L-975"><a href="#L-975"><span class="linenos" data-line="975"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">cats</span> <span class="kr">do</span> </span><span id="L-976"><a href="#L-976"><span class="linenos" data-line="976"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">cats</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> <span class="p">)</span> </span><span id="L-977"><a href="#L-977"><span class="linenos" data-line="977"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">s</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-978"><a href="#L-978"><span class="linenos" data-line="978"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s[[Category:%s]]"</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-979"><a href="#L-979"><span class="linenos" data-line="979"></span></a> <span class="kr">end</span> </span><span id="L-980"><a href="#L-980"><span class="linenos" data-line="980"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-981"><a href="#L-981"><span class="linenos" data-line="981"></span></a> <span class="kr">end</span> </span><span id="L-982"><a href="#L-982"><span class="linenos" data-line="982"></span></a> <span class="kr">end</span> </span><span id="L-983"><a href="#L-983"><span class="linenos" data-line="983"></span></a> <span class="kr">end</span> </span><span id="L-984"><a href="#L-984"><span class="linenos" data-line="984"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-985"><a href="#L-985"><span class="linenos" data-line="985"></span></a><span class="kr">end</span> <span class="c1">-- finalize()</span> </span><span id="L-986"><a href="#L-986"><span class="linenos" data-line="986"></span></a> </span><span id="L-987"><a href="#L-987"><span class="linenos" data-line="987"></span></a> </span><span id="L-988"><a href="#L-988"><span class="linenos" data-line="988"></span></a> </span><span id="L-989"><a href="#L-989"><span class="linenos" data-line="989"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">finder</span><span class="p">(</span> <span class="n">haystack</span><span class="p">,</span> <span class="n">needle</span> <span class="p">)</span> </span><span id="L-990"><a href="#L-990"><span class="linenos" data-line="990"></span></a> <span class="c1">-- Find needle in haystack sequence</span> </span><span id="L-991"><a href="#L-991"><span class="linenos" data-line="991"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-992"><a href="#L-992"><span class="linenos" data-line="992"></span></a> <span class="c1">-- haystack -- table; sequence of key names, downcased if low</span> </span><span id="L-993"><a href="#L-993"><span class="linenos" data-line="993"></span></a> <span class="c1">-- needle -- any; key name</span> </span><span id="L-994"><a href="#L-994"><span class="linenos" data-line="994"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-995"><a href="#L-995"><span class="linenos" data-line="995"></span></a> <span class="c1">-- Return true iff found</span> </span><span id="L-996"><a href="#L-996"><span class="linenos" data-line="996"></span></a> <span class="kd">local</span> <span class="n">i</span> </span><span id="L-997"><a href="#L-997"><span class="linenos" data-line="997"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">haystack</span> <span class="kr">do</span> </span><span id="L-998"><a href="#L-998"><span class="linenos" data-line="998"></span></a> <span class="kr">if</span> <span class="n">haystack</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> <span class="o">==</span> <span class="n">needle</span> <span class="kr">then</span> </span><span id="L-999"><a href="#L-999"><span class="linenos" data-line="999"></span></a> <span class="kr">return</span> <span class="kc">true</span> </span><span id="L-1000"><a href="#L-1000"><span class="linenos" data-line="1000"></span></a> <span class="kr">end</span> </span><span id="L-1001"><a href="#L-1001"><span class="linenos" data-line="1001"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-1002"><a href="#L-1002"><span class="linenos" data-line="1002"></span></a> <span class="kr">return</span> <span class="kc">false</span> </span><span id="L-1003"><a href="#L-1003"><span class="linenos" data-line="1003"></span></a><span class="kr">end</span> <span class="c1">-- finder()</span> </span><span id="L-1004"><a href="#L-1004"><span class="linenos" data-line="1004"></span></a> </span><span id="L-1005"><a href="#L-1005"><span class="linenos" data-line="1005"></span></a> </span><span id="L-1006"><a href="#L-1006"><span class="linenos" data-line="1006"></span></a> </span><span id="L-1007"><a href="#L-1007"><span class="linenos" data-line="1007"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">fix</span><span class="p">(</span> <span class="n">valid</span><span class="p">,</span> <span class="n">duty</span><span class="p">,</span> <span class="n">got</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1008"><a href="#L-1008"><span class="linenos" data-line="1008"></span></a> <span class="c1">-- Perform parameter analysis</span> </span><span id="L-1009"><a href="#L-1009"><span class="linenos" data-line="1009"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1010"><a href="#L-1010"><span class="linenos" data-line="1010"></span></a> <span class="c1">-- valid -- table; unique sequence of known parameters</span> </span><span id="L-1011"><a href="#L-1011"><span class="linenos" data-line="1011"></span></a> <span class="c1">-- duty -- table; sequence of mandatory parameters</span> </span><span id="L-1012"><a href="#L-1012"><span class="linenos" data-line="1012"></span></a> <span class="c1">-- got -- table; sequence of current parameters</span> </span><span id="L-1013"><a href="#L-1013"><span class="linenos" data-line="1013"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-1014"><a href="#L-1014"><span class="linenos" data-line="1014"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1015"><a href="#L-1015"><span class="linenos" data-line="1015"></span></a> <span class="c1">-- Return string as configured; empty if valid</span> </span><span id="L-1016"><a href="#L-1016"><span class="linenos" data-line="1016"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1017"><a href="#L-1017"><span class="linenos" data-line="1017"></span></a> <span class="c1">-- finder()</span> </span><span id="L-1018"><a href="#L-1018"><span class="linenos" data-line="1018"></span></a> <span class="c1">-- fault()</span> </span><span id="L-1019"><a href="#L-1019"><span class="linenos" data-line="1019"></span></a> <span class="c1">-- failure()</span> </span><span id="L-1020"><a href="#L-1020"><span class="linenos" data-line="1020"></span></a> <span class="c1">-- fed()</span> </span><span id="L-1021"><a href="#L-1021"><span class="linenos" data-line="1021"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1022"><a href="#L-1022"><span class="linenos" data-line="1022"></span></a> <span class="kd">local</span> <span class="n">lack</span> </span><span id="L-1023"><a href="#L-1023"><span class="linenos" data-line="1023"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">got</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-1024"><a href="#L-1024"><span class="linenos" data-line="1024"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-1025"><a href="#L-1025"><span class="linenos" data-line="1025"></span></a> <span class="n">lack</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-1026"><a href="#L-1026"><span class="linenos" data-line="1026"></span></a> <span class="kr">break</span> <span class="c1">-- for k, v</span> </span><span id="L-1027"><a href="#L-1027"><span class="linenos" data-line="1027"></span></a> <span class="kr">elseif</span> <span class="ow">not</span> <span class="n">finder</span><span class="p">(</span> <span class="n">valid</span><span class="p">,</span> <span class="n">k</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1028"><a href="#L-1028"><span class="linenos" data-line="1028"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">fault</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">k</span> <span class="p">)</span> </span><span id="L-1029"><a href="#L-1029"><span class="linenos" data-line="1029"></span></a> <span class="kr">end</span> </span><span id="L-1030"><a href="#L-1030"><span class="linenos" data-line="1030"></span></a> <span class="kr">end</span> <span class="c1">-- for k, v</span> </span><span id="L-1031"><a href="#L-1031"><span class="linenos" data-line="1031"></span></a> <span class="kr">if</span> <span class="n">lack</span> <span class="kr">then</span> </span><span id="L-1032"><a href="#L-1032"><span class="linenos" data-line="1032"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"unavailable"</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1033"><a href="#L-1033"><span class="linenos" data-line="1033"></span></a> <span class="kr">elseif</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1034"><a href="#L-1034"><span class="linenos" data-line="1034"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"unknown"</span><span class="p">,</span> </span><span id="L-1035"><a href="#L-1035"><span class="linenos" data-line="1035"></span></a> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"&quot;%s&quot;"</span><span class="p">,</span> <span class="n">r</span> <span class="p">),</span> </span><span id="L-1036"><a href="#L-1036"><span class="linenos" data-line="1036"></span></a> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1037"><a href="#L-1037"><span class="linenos" data-line="1037"></span></a> <span class="kr">else</span> <span class="c1">-- all names valid</span> </span><span id="L-1038"><a href="#L-1038"><span class="linenos" data-line="1038"></span></a> <span class="kd">local</span> <span class="n">i</span><span class="p">,</span> <span class="n">s</span> </span><span id="L-1039"><a href="#L-1039"><span class="linenos" data-line="1039"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">duty</span> <span class="kr">do</span> </span><span id="L-1040"><a href="#L-1040"><span class="linenos" data-line="1040"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">duty</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> </span><span id="L-1041"><a href="#L-1041"><span class="linenos" data-line="1041"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">fed</span><span class="p">(</span> <span class="n">got</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1042"><a href="#L-1042"><span class="linenos" data-line="1042"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">fault</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-1043"><a href="#L-1043"><span class="linenos" data-line="1043"></span></a> <span class="kr">end</span> </span><span id="L-1044"><a href="#L-1044"><span class="linenos" data-line="1044"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-1045"><a href="#L-1045"><span class="linenos" data-line="1045"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1046"><a href="#L-1046"><span class="linenos" data-line="1046"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"undefined"</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1047"><a href="#L-1047"><span class="linenos" data-line="1047"></span></a> <span class="kr">else</span> <span class="c1">-- all mandatory present</span> </span><span id="L-1048"><a href="#L-1048"><span class="linenos" data-line="1048"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">duty</span> <span class="kr">do</span> </span><span id="L-1049"><a href="#L-1049"><span class="linenos" data-line="1049"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">duty</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> </span><span id="L-1050"><a href="#L-1050"><span class="linenos" data-line="1050"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">got</span><span class="p">[</span> <span class="n">s</span> <span class="p">]</span> <span class="kr">then</span> </span><span id="L-1051"><a href="#L-1051"><span class="linenos" data-line="1051"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">fault</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-1052"><a href="#L-1052"><span class="linenos" data-line="1052"></span></a> <span class="kr">end</span> </span><span id="L-1053"><a href="#L-1053"><span class="linenos" data-line="1053"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-1054"><a href="#L-1054"><span class="linenos" data-line="1054"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1055"><a href="#L-1055"><span class="linenos" data-line="1055"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"empty"</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1056"><a href="#L-1056"><span class="linenos" data-line="1056"></span></a> <span class="kr">end</span> </span><span id="L-1057"><a href="#L-1057"><span class="linenos" data-line="1057"></span></a> <span class="kr">end</span> </span><span id="L-1058"><a href="#L-1058"><span class="linenos" data-line="1058"></span></a> <span class="kr">end</span> </span><span id="L-1059"><a href="#L-1059"><span class="linenos" data-line="1059"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-1060"><a href="#L-1060"><span class="linenos" data-line="1060"></span></a><span class="kr">end</span> <span class="c1">-- fix()</span> </span><span id="L-1061"><a href="#L-1061"><span class="linenos" data-line="1061"></span></a> </span><span id="L-1062"><a href="#L-1062"><span class="linenos" data-line="1062"></span></a> </span><span id="L-1063"><a href="#L-1063"><span class="linenos" data-line="1063"></span></a> </span><span id="L-1064"><a href="#L-1064"><span class="linenos" data-line="1064"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">flat</span><span class="p">(</span> <span class="n">collection</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1065"><a href="#L-1065"><span class="linenos" data-line="1065"></span></a> <span class="c1">-- Return all table elements with downcased string</span> </span><span id="L-1066"><a href="#L-1066"><span class="linenos" data-line="1066"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1067"><a href="#L-1067"><span class="linenos" data-line="1067"></span></a> <span class="c1">-- collection -- table; k=v pairs</span> </span><span id="L-1068"><a href="#L-1068"><span class="linenos" data-line="1068"></span></a> <span class="c1">-- options -- table or nil; optional messaging details</span> </span><span id="L-1069"><a href="#L-1069"><span class="linenos" data-line="1069"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1070"><a href="#L-1070"><span class="linenos" data-line="1070"></span></a> <span class="c1">-- Return table, may be empty; or string with error message.</span> </span><span id="L-1071"><a href="#L-1071"><span class="linenos" data-line="1071"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1072"><a href="#L-1072"><span class="linenos" data-line="1072"></span></a> <span class="c1">-- mw.ustring.lower()</span> </span><span id="L-1073"><a href="#L-1073"><span class="linenos" data-line="1073"></span></a> <span class="c1">-- fault()</span> </span><span id="L-1074"><a href="#L-1074"><span class="linenos" data-line="1074"></span></a> <span class="c1">-- failure()</span> </span><span id="L-1075"><a href="#L-1075"><span class="linenos" data-line="1075"></span></a> <span class="kd">local</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> </span><span id="L-1076"><a href="#L-1076"><span class="linenos" data-line="1076"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1077"><a href="#L-1077"><span class="linenos" data-line="1077"></span></a> <span class="kd">local</span> <span class="n">e</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1078"><a href="#L-1078"><span class="linenos" data-line="1078"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">collection</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-1079"><a href="#L-1079"><span class="linenos" data-line="1079"></span></a> <span class="kr">if</span> <span class="nb">type</span> <span class="p">(</span> <span class="n">k</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-1080"><a href="#L-1080"><span class="linenos" data-line="1080"></span></a> <span class="n">k</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 class="p">(</span> <span class="n">k</span> <span class="p">)</span> </span><span id="L-1081"><a href="#L-1081"><span class="linenos" data-line="1081"></span></a> <span class="kr">if</span> <span class="n">r</span><span class="p">[</span> <span class="n">k</span> <span class="p">]</span> <span class="kr">then</span> </span><span id="L-1082"><a href="#L-1082"><span class="linenos" data-line="1082"></span></a> <span class="n">e</span> <span class="o">=</span> <span class="n">fault</span><span class="p">(</span> <span class="n">e</span><span class="p">,</span> <span class="n">k</span> <span class="p">)</span> </span><span id="L-1083"><a href="#L-1083"><span class="linenos" data-line="1083"></span></a> <span class="kr">end</span> </span><span id="L-1084"><a href="#L-1084"><span class="linenos" data-line="1084"></span></a> <span class="kr">end</span> </span><span id="L-1085"><a href="#L-1085"><span class="linenos" data-line="1085"></span></a> <span class="n">r</span><span class="p">[</span> <span class="n">k</span> <span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="L-1086"><a href="#L-1086"><span class="linenos" data-line="1086"></span></a> <span class="kr">end</span> <span class="c1">-- for k, v</span> </span><span id="L-1087"><a href="#L-1087"><span class="linenos" data-line="1087"></span></a> <span class="kr">if</span> <span class="n">e</span> <span class="kr">then</span> </span><span id="L-1088"><a href="#L-1088"><span class="linenos" data-line="1088"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"multiSpell"</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1089"><a href="#L-1089"><span class="linenos" data-line="1089"></span></a> <span class="kr">end</span> </span><span id="L-1090"><a href="#L-1090"><span class="linenos" data-line="1090"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-1091"><a href="#L-1091"><span class="linenos" data-line="1091"></span></a><span class="kr">end</span> <span class="c1">-- flat()</span> </span><span id="L-1092"><a href="#L-1092"><span class="linenos" data-line="1092"></span></a> </span><span id="L-1093"><a href="#L-1093"><span class="linenos" data-line="1093"></span></a> </span><span id="L-1094"><a href="#L-1094"><span class="linenos" data-line="1094"></span></a> </span><span id="L-1095"><a href="#L-1095"><span class="linenos" data-line="1095"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">fold</span><span class="p">(</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1096"><a href="#L-1096"><span class="linenos" data-line="1096"></span></a> <span class="c1">-- Merge two tables, create new sequence if both not empty</span> </span><span id="L-1097"><a href="#L-1097"><span class="linenos" data-line="1097"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1098"><a href="#L-1098"><span class="linenos" data-line="1098"></span></a> <span class="c1">-- options -- table; details</span> </span><span id="L-1099"><a href="#L-1099"><span class="linenos" data-line="1099"></span></a> <span class="c1">-- options.mandatory sequence to keep unchanged</span> </span><span id="L-1100"><a href="#L-1100"><span class="linenos" data-line="1100"></span></a> <span class="c1">-- options.optional sequence to be appended</span> </span><span id="L-1101"><a href="#L-1101"><span class="linenos" data-line="1101"></span></a> <span class="c1">-- options.low downcased expected</span> </span><span id="L-1102"><a href="#L-1102"><span class="linenos" data-line="1102"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1103"><a href="#L-1103"><span class="linenos" data-line="1103"></span></a> <span class="c1">-- Return merged table, or message string if error</span> </span><span id="L-1104"><a href="#L-1104"><span class="linenos" data-line="1104"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1105"><a href="#L-1105"><span class="linenos" data-line="1105"></span></a> <span class="c1">-- finder()</span> </span><span id="L-1106"><a href="#L-1106"><span class="linenos" data-line="1106"></span></a> <span class="c1">-- fault()</span> </span><span id="L-1107"><a href="#L-1107"><span class="linenos" data-line="1107"></span></a> <span class="c1">-- failure()</span> </span><span id="L-1108"><a href="#L-1108"><span class="linenos" data-line="1108"></span></a> <span class="c1">-- flat()</span> </span><span id="L-1109"><a href="#L-1109"><span class="linenos" data-line="1109"></span></a> <span class="kd">local</span> <span class="n">i</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">s</span> </span><span id="L-1110"><a href="#L-1110"><span class="linenos" data-line="1110"></span></a> <span class="kd">local</span> <span class="n">base</span> <span class="o">=</span> <span class="n">options</span><span class="p">.</span><span class="n">mandatory</span> </span><span id="L-1111"><a href="#L-1111"><span class="linenos" data-line="1111"></span></a> <span class="kd">local</span> <span class="n">extend</span> <span class="o">=</span> <span class="n">options</span><span class="p">.</span><span class="n">optional</span> </span><span id="L-1112"><a href="#L-1112"><span class="linenos" data-line="1112"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">base</span> <span class="o">==</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-1113"><a href="#L-1113"><span class="linenos" data-line="1113"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">extend</span> <span class="o">==</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-1114"><a href="#L-1114"><span class="linenos" data-line="1114"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1115"><a href="#L-1115"><span class="linenos" data-line="1115"></span></a> <span class="kr">else</span> </span><span id="L-1116"><a href="#L-1116"><span class="linenos" data-line="1116"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">extend</span> </span><span id="L-1117"><a href="#L-1117"><span class="linenos" data-line="1117"></span></a> <span class="kr">end</span> </span><span id="L-1118"><a href="#L-1118"><span class="linenos" data-line="1118"></span></a> <span class="kr">else</span> </span><span id="L-1119"><a href="#L-1119"><span class="linenos" data-line="1119"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">extend</span> <span class="o">==</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-1120"><a href="#L-1120"><span class="linenos" data-line="1120"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">base</span> </span><span id="L-1121"><a href="#L-1121"><span class="linenos" data-line="1121"></span></a> <span class="kr">else</span> </span><span id="L-1122"><a href="#L-1122"><span class="linenos" data-line="1122"></span></a> <span class="n">e</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1123"><a href="#L-1123"><span class="linenos" data-line="1123"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">extend</span> <span class="kr">do</span> </span><span id="L-1124"><a href="#L-1124"><span class="linenos" data-line="1124"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">extend</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> </span><span id="L-1125"><a href="#L-1125"><span class="linenos" data-line="1125"></span></a> <span class="kr">if</span> <span class="n">finder</span><span class="p">(</span> <span class="n">base</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1126"><a href="#L-1126"><span class="linenos" data-line="1126"></span></a> <span class="n">e</span> <span class="o">=</span> <span class="n">fault</span><span class="p">(</span> <span class="n">e</span><span class="p">,</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-1127"><a href="#L-1127"><span class="linenos" data-line="1127"></span></a> <span class="kr">end</span> </span><span id="L-1128"><a href="#L-1128"><span class="linenos" data-line="1128"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-1129"><a href="#L-1129"><span class="linenos" data-line="1129"></span></a> <span class="kr">if</span> <span class="n">e</span> <span class="kr">then</span> </span><span id="L-1130"><a href="#L-1130"><span class="linenos" data-line="1130"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"dupOpt"</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1131"><a href="#L-1131"><span class="linenos" data-line="1131"></span></a> <span class="kr">else</span> </span><span id="L-1132"><a href="#L-1132"><span class="linenos" data-line="1132"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1133"><a href="#L-1133"><span class="linenos" data-line="1133"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">base</span> <span class="kr">do</span> </span><span id="L-1134"><a href="#L-1134"><span class="linenos" data-line="1134"></span></a> <span class="nb">table.insert</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">base</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> <span class="p">)</span> </span><span id="L-1135"><a href="#L-1135"><span class="linenos" data-line="1135"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-1136"><a href="#L-1136"><span class="linenos" data-line="1136"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">extend</span> <span class="kr">do</span> </span><span id="L-1137"><a href="#L-1137"><span class="linenos" data-line="1137"></span></a> <span class="nb">table.insert</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">extend</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> <span class="p">)</span> </span><span id="L-1138"><a href="#L-1138"><span class="linenos" data-line="1138"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-1139"><a href="#L-1139"><span class="linenos" data-line="1139"></span></a> <span class="kr">end</span> </span><span id="L-1140"><a href="#L-1140"><span class="linenos" data-line="1140"></span></a> <span class="kr">end</span> </span><span id="L-1141"><a href="#L-1141"><span class="linenos" data-line="1141"></span></a> <span class="kr">end</span> </span><span id="L-1142"><a href="#L-1142"><span class="linenos" data-line="1142"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">low</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span> <span class="n">r</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1143"><a href="#L-1143"><span class="linenos" data-line="1143"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">flat</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1144"><a href="#L-1144"><span class="linenos" data-line="1144"></span></a> <span class="kr">end</span> </span><span id="L-1145"><a href="#L-1145"><span class="linenos" data-line="1145"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-1146"><a href="#L-1146"><span class="linenos" data-line="1146"></span></a><span class="kr">end</span> <span class="c1">-- fold()</span> </span><span id="L-1147"><a href="#L-1147"><span class="linenos" data-line="1147"></span></a> </span><span id="L-1148"><a href="#L-1148"><span class="linenos" data-line="1148"></span></a> </span><span id="L-1149"><a href="#L-1149"><span class="linenos" data-line="1149"></span></a> </span><span id="L-1150"><a href="#L-1150"><span class="linenos" data-line="1150"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">form</span><span class="p">(</span> <span class="n">light</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1151"><a href="#L-1151"><span class="linenos" data-line="1151"></span></a> <span class="c1">-- Run parameter analysis on current environment</span> </span><span id="L-1152"><a href="#L-1152"><span class="linenos" data-line="1152"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1153"><a href="#L-1153"><span class="linenos" data-line="1153"></span></a> <span class="c1">-- light -- true: template transclusion; false: #invoke</span> </span><span id="L-1154"><a href="#L-1154"><span class="linenos" data-line="1154"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-1155"><a href="#L-1155"><span class="linenos" data-line="1155"></span></a> <span class="c1">-- options.mandatory</span> </span><span id="L-1156"><a href="#L-1156"><span class="linenos" data-line="1156"></span></a> <span class="c1">-- options.optional</span> </span><span id="L-1157"><a href="#L-1157"><span class="linenos" data-line="1157"></span></a> <span class="c1">-- frame -- object; #invoke environment, or false</span> </span><span id="L-1158"><a href="#L-1158"><span class="linenos" data-line="1158"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1159"><a href="#L-1159"><span class="linenos" data-line="1159"></span></a> <span class="c1">-- Return string with error message as configured;</span> </span><span id="L-1160"><a href="#L-1160"><span class="linenos" data-line="1160"></span></a> <span class="c1">-- false if valid</span> </span><span id="L-1161"><a href="#L-1161"><span class="linenos" data-line="1161"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1162"><a href="#L-1162"><span class="linenos" data-line="1162"></span></a> <span class="c1">-- TemplatePar.framing()</span> </span><span id="L-1163"><a href="#L-1163"><span class="linenos" data-line="1163"></span></a> <span class="c1">-- fold()</span> </span><span id="L-1164"><a href="#L-1164"><span class="linenos" data-line="1164"></span></a> <span class="c1">-- fetch()</span> </span><span id="L-1165"><a href="#L-1165"><span class="linenos" data-line="1165"></span></a> <span class="c1">-- fix()</span> </span><span id="L-1166"><a href="#L-1166"><span class="linenos" data-line="1166"></span></a> <span class="c1">-- finalize()</span> </span><span id="L-1167"><a href="#L-1167"><span class="linenos" data-line="1167"></span></a> <span class="kd">local</span> <span class="n">duty</span><span class="p">,</span> <span class="n">r</span> </span><span id="L-1168"><a href="#L-1168"><span class="linenos" data-line="1168"></span></a> <span class="kr">if</span> <span class="n">frame</span> <span class="kr">then</span> </span><span id="L-1169"><a href="#L-1169"><span class="linenos" data-line="1169"></span></a> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">framing</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1170"><a href="#L-1170"><span class="linenos" data-line="1170"></span></a> <span class="kr">end</span> </span><span id="L-1171"><a href="#L-1171"><span class="linenos" data-line="1171"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1172"><a href="#L-1172"><span class="linenos" data-line="1172"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span><span class="p">.</span><span class="n">mandatory</span> <span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1173"><a href="#L-1173"><span class="linenos" data-line="1173"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">mandatory</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1174"><a href="#L-1174"><span class="linenos" data-line="1174"></span></a> <span class="kr">end</span> </span><span id="L-1175"><a href="#L-1175"><span class="linenos" data-line="1175"></span></a> <span class="n">duty</span> <span class="o">=</span> <span class="n">options</span><span class="p">.</span><span class="n">mandatory</span> </span><span id="L-1176"><a href="#L-1176"><span class="linenos" data-line="1176"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span><span class="p">.</span><span class="n">optional</span> <span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1177"><a href="#L-1177"><span class="linenos" data-line="1177"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">optional</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1178"><a href="#L-1178"><span class="linenos" data-line="1178"></span></a> <span class="kr">end</span> </span><span id="L-1179"><a href="#L-1179"><span class="linenos" data-line="1179"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">fold</span><span class="p">(</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1180"><a href="#L-1180"><span class="linenos" data-line="1180"></span></a> <span class="kr">else</span> </span><span id="L-1181"><a href="#L-1181"><span class="linenos" data-line="1181"></span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1182"><a href="#L-1182"><span class="linenos" data-line="1182"></span></a> <span class="n">duty</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1183"><a href="#L-1183"><span class="linenos" data-line="1183"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1184"><a href="#L-1184"><span class="linenos" data-line="1184"></span></a> <span class="kr">end</span> </span><span id="L-1185"><a href="#L-1185"><span class="linenos" data-line="1185"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">r</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1186"><a href="#L-1186"><span class="linenos" data-line="1186"></span></a> <span class="kd">local</span> <span class="n">got</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="n">light</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1187"><a href="#L-1187"><span class="linenos" data-line="1187"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">got</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1188"><a href="#L-1188"><span class="linenos" data-line="1188"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">fix</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">duty</span><span class="p">,</span> <span class="n">got</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1189"><a href="#L-1189"><span class="linenos" data-line="1189"></span></a> <span class="kr">else</span> </span><span id="L-1190"><a href="#L-1190"><span class="linenos" data-line="1190"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">got</span> </span><span id="L-1191"><a href="#L-1191"><span class="linenos" data-line="1191"></span></a> <span class="kr">end</span> </span><span id="L-1192"><a href="#L-1192"><span class="linenos" data-line="1192"></span></a> <span class="kr">end</span> </span><span id="L-1193"><a href="#L-1193"><span class="linenos" data-line="1193"></span></a> <span class="kr">return</span> <span class="n">finalize</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1194"><a href="#L-1194"><span class="linenos" data-line="1194"></span></a><span class="kr">end</span> <span class="c1">-- form()</span> </span><span id="L-1195"><a href="#L-1195"><span class="linenos" data-line="1195"></span></a> </span><span id="L-1196"><a href="#L-1196"><span class="linenos" data-line="1196"></span></a> </span><span id="L-1197"><a href="#L-1197"><span class="linenos" data-line="1197"></span></a> </span><span id="L-1198"><a href="#L-1198"><span class="linenos" data-line="1198"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">format</span><span class="p">(</span> <span class="n">analyze</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1199"><a href="#L-1199"><span class="linenos" data-line="1199"></span></a> <span class="c1">-- Check validity of a value</span> </span><span id="L-1200"><a href="#L-1200"><span class="linenos" data-line="1200"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1201"><a href="#L-1201"><span class="linenos" data-line="1201"></span></a> <span class="c1">-- analyze -- string to be analyzed</span> </span><span id="L-1202"><a href="#L-1202"><span class="linenos" data-line="1202"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-1203"><a href="#L-1203"><span class="linenos" data-line="1203"></span></a> <span class="c1">-- options.say</span> </span><span id="L-1204"><a href="#L-1204"><span class="linenos" data-line="1204"></span></a> <span class="c1">-- options.min</span> </span><span id="L-1205"><a href="#L-1205"><span class="linenos" data-line="1205"></span></a> <span class="c1">-- options.max</span> </span><span id="L-1206"><a href="#L-1206"><span class="linenos" data-line="1206"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1207"><a href="#L-1207"><span class="linenos" data-line="1207"></span></a> <span class="c1">-- Return string with error message as configured;</span> </span><span id="L-1208"><a href="#L-1208"><span class="linenos" data-line="1208"></span></a> <span class="c1">-- false if valid or no answer permitted</span> </span><span id="L-1209"><a href="#L-1209"><span class="linenos" data-line="1209"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1210"><a href="#L-1210"><span class="linenos" data-line="1210"></span></a> <span class="c1">-- feasible()</span> </span><span id="L-1211"><a href="#L-1211"><span class="linenos" data-line="1211"></span></a> <span class="c1">-- failure()</span> </span><span id="L-1212"><a href="#L-1212"><span class="linenos" data-line="1212"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">feasible</span><span class="p">(</span> <span class="n">analyze</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="kc">false</span> <span class="p">)</span> </span><span id="L-1213"><a href="#L-1213"><span class="linenos" data-line="1213"></span></a> <span class="kd">local</span> <span class="n">show</span> </span><span id="L-1214"><a href="#L-1214"><span class="linenos" data-line="1214"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">min</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1215"><a href="#L-1215"><span class="linenos" data-line="1215"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span><span class="p">.</span><span class="n">min</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-1216"><a href="#L-1216"><span class="linenos" data-line="1216"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span><span class="p">.</span><span class="n">max</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-1217"><a href="#L-1217"><span class="linenos" data-line="1217"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">max</span> <span class="o"><</span> <span class="n">options</span><span class="p">.</span><span class="n">min</span> <span class="kr">then</span> </span><span id="L-1218"><a href="#L-1218"><span class="linenos" data-line="1218"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"minmax"</span><span class="p">,</span> </span><span id="L-1219"><a href="#L-1219"><span class="linenos" data-line="1219"></span></a> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%d > %d"</span><span class="p">,</span> </span><span id="L-1220"><a href="#L-1220"><span class="linenos" data-line="1220"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">min</span><span class="p">,</span> </span><span id="L-1221"><a href="#L-1221"><span class="linenos" data-line="1221"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">max</span> <span class="p">),</span> </span><span id="L-1222"><a href="#L-1222"><span class="linenos" data-line="1222"></span></a> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1223"><a href="#L-1223"><span class="linenos" data-line="1223"></span></a> <span class="kr">end</span> </span><span id="L-1224"><a href="#L-1224"><span class="linenos" data-line="1224"></span></a> <span class="kr">end</span> </span><span id="L-1225"><a href="#L-1225"><span class="linenos" data-line="1225"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">analyze</span> <span class="o"><</span> <span class="n">options</span><span class="p">.</span><span class="n">min</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1226"><a href="#L-1226"><span class="linenos" data-line="1226"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="s2">" <"</span> <span class="o">..</span> <span class="n">options</span><span class="p">.</span><span class="n">min</span> </span><span id="L-1227"><a href="#L-1227"><span class="linenos" data-line="1227"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="kr">then</span> </span><span id="L-1228"><a href="#L-1228"><span class="linenos" data-line="1228"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s &quot;%s&quot;"</span><span class="p">,</span> <span class="n">show</span><span class="p">,</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="p">)</span> </span><span id="L-1229"><a href="#L-1229"><span class="linenos" data-line="1229"></span></a> <span class="kr">end</span> </span><span id="L-1230"><a href="#L-1230"><span class="linenos" data-line="1230"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"tooShort"</span><span class="p">,</span> <span class="n">show</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1231"><a href="#L-1231"><span class="linenos" data-line="1231"></span></a> <span class="kr">end</span> </span><span id="L-1232"><a href="#L-1232"><span class="linenos" data-line="1232"></span></a> <span class="kr">else</span> </span><span id="L-1233"><a href="#L-1233"><span class="linenos" data-line="1233"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"invalidPar"</span><span class="p">,</span> <span class="s2">"min"</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1234"><a href="#L-1234"><span class="linenos" data-line="1234"></span></a> <span class="kr">end</span> </span><span id="L-1235"><a href="#L-1235"><span class="linenos" data-line="1235"></span></a> <span class="kr">end</span> </span><span id="L-1236"><a href="#L-1236"><span class="linenos" data-line="1236"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">max</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1237"><a href="#L-1237"><span class="linenos" data-line="1237"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span><span class="p">.</span><span class="n">max</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-1238"><a href="#L-1238"><span class="linenos" data-line="1238"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">analyze</span> <span class="o">></span> <span class="n">options</span><span class="p">.</span><span class="n">max</span> <span class="kr">then</span> </span><span id="L-1239"><a href="#L-1239"><span class="linenos" data-line="1239"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="s2">" >"</span> <span class="o">..</span> <span class="n">options</span><span class="p">.</span><span class="n">max</span> </span><span id="L-1240"><a href="#L-1240"><span class="linenos" data-line="1240"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="kr">then</span> </span><span id="L-1241"><a href="#L-1241"><span class="linenos" data-line="1241"></span></a> <span class="n">show</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s &quot;%s&quot;"</span><span class="p">,</span> <span class="n">show</span><span class="p">,</span> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="p">)</span> </span><span id="L-1242"><a href="#L-1242"><span class="linenos" data-line="1242"></span></a> <span class="kr">end</span> </span><span id="L-1243"><a href="#L-1243"><span class="linenos" data-line="1243"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"tooLong"</span><span class="p">,</span> <span class="n">show</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1244"><a href="#L-1244"><span class="linenos" data-line="1244"></span></a> <span class="kr">end</span> </span><span id="L-1245"><a href="#L-1245"><span class="linenos" data-line="1245"></span></a> <span class="kr">else</span> </span><span id="L-1246"><a href="#L-1246"><span class="linenos" data-line="1246"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"invalidPar"</span><span class="p">,</span> <span class="s2">"max"</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1247"><a href="#L-1247"><span class="linenos" data-line="1247"></span></a> <span class="kr">end</span> </span><span id="L-1248"><a href="#L-1248"><span class="linenos" data-line="1248"></span></a> <span class="kr">end</span> </span><span id="L-1249"><a href="#L-1249"><span class="linenos" data-line="1249"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-1250"><a href="#L-1250"><span class="linenos" data-line="1250"></span></a><span class="kr">end</span> <span class="c1">-- format()</span> </span><span id="L-1251"><a href="#L-1251"><span class="linenos" data-line="1251"></span></a> </span><span id="L-1252"><a href="#L-1252"><span class="linenos" data-line="1252"></span></a> </span><span id="L-1253"><a href="#L-1253"><span class="linenos" data-line="1253"></span></a> </span><span id="L-1254"><a href="#L-1254"><span class="linenos" data-line="1254"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">formatted</span><span class="p">(</span> <span class="n">assignment</span><span class="p">,</span> <span class="n">access</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1255"><a href="#L-1255"><span class="linenos" data-line="1255"></span></a> <span class="c1">-- Check validity of one particular parameter in a collection</span> </span><span id="L-1256"><a href="#L-1256"><span class="linenos" data-line="1256"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1257"><a href="#L-1257"><span class="linenos" data-line="1257"></span></a> <span class="c1">-- assignment -- collection</span> </span><span id="L-1258"><a href="#L-1258"><span class="linenos" data-line="1258"></span></a> <span class="c1">-- access -- id of parameter in collection</span> </span><span id="L-1259"><a href="#L-1259"><span class="linenos" data-line="1259"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-1260"><a href="#L-1260"><span class="linenos" data-line="1260"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1261"><a href="#L-1261"><span class="linenos" data-line="1261"></span></a> <span class="c1">-- Return string with error message as configured;</span> </span><span id="L-1262"><a href="#L-1262"><span class="linenos" data-line="1262"></span></a> <span class="c1">-- false if valid or no answer permitted</span> </span><span id="L-1263"><a href="#L-1263"><span class="linenos" data-line="1263"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1264"><a href="#L-1264"><span class="linenos" data-line="1264"></span></a> <span class="c1">-- mw.text.trim()</span> </span><span id="L-1265"><a href="#L-1265"><span class="linenos" data-line="1265"></span></a> <span class="c1">-- format()</span> </span><span id="L-1266"><a href="#L-1266"><span class="linenos" data-line="1266"></span></a> <span class="c1">-- failure()</span> </span><span id="L-1267"><a href="#L-1267"><span class="linenos" data-line="1267"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1268"><a href="#L-1268"><span class="linenos" data-line="1268"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">assignment</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1269"><a href="#L-1269"><span class="linenos" data-line="1269"></span></a> <span class="kd">local</span> <span class="n">story</span> <span class="o">=</span> <span class="n">assignment</span><span class="p">.</span><span class="n">args</span><span class="p">[</span> <span class="n">access</span> <span class="p">]</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-1270"><a href="#L-1270"><span class="linenos" data-line="1270"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">access</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-1271"><a href="#L-1271"><span class="linenos" data-line="1271"></span></a> <span class="n">story</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">story</span> <span class="p">)</span> </span><span id="L-1272"><a href="#L-1272"><span class="linenos" data-line="1272"></span></a> <span class="kr">end</span> </span><span id="L-1273"><a href="#L-1273"><span class="linenos" data-line="1273"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span> <span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1274"><a href="#L-1274"><span class="linenos" data-line="1274"></span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1275"><a href="#L-1275"><span class="linenos" data-line="1275"></span></a> <span class="kr">end</span> </span><span id="L-1276"><a href="#L-1276"><span class="linenos" data-line="1276"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="o">=</span> <span class="n">access</span> </span><span id="L-1277"><a href="#L-1277"><span class="linenos" data-line="1277"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">format</span><span class="p">(</span> <span class="n">story</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1278"><a href="#L-1278"><span class="linenos" data-line="1278"></span></a> <span class="kr">end</span> </span><span id="L-1279"><a href="#L-1279"><span class="linenos" data-line="1279"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-1280"><a href="#L-1280"><span class="linenos" data-line="1280"></span></a><span class="kr">end</span> <span class="c1">-- formatted()</span> </span><span id="L-1281"><a href="#L-1281"><span class="linenos" data-line="1281"></span></a> </span><span id="L-1282"><a href="#L-1282"><span class="linenos" data-line="1282"></span></a> </span><span id="L-1283"><a href="#L-1283"><span class="linenos" data-line="1283"></span></a> </span><span id="L-1284"><a href="#L-1284"><span class="linenos" data-line="1284"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">furnish</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="n">action</span> <span class="p">)</span> </span><span id="L-1285"><a href="#L-1285"><span class="linenos" data-line="1285"></span></a> <span class="c1">-- Prepare #invoke evaluation of .assert() or .valid()</span> </span><span id="L-1286"><a href="#L-1286"><span class="linenos" data-line="1286"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1287"><a href="#L-1287"><span class="linenos" data-line="1287"></span></a> <span class="c1">-- frame -- object; #invoke environment</span> </span><span id="L-1288"><a href="#L-1288"><span class="linenos" data-line="1288"></span></a> <span class="c1">-- action -- "assert" or "valid"</span> </span><span id="L-1289"><a href="#L-1289"><span class="linenos" data-line="1289"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1290"><a href="#L-1290"><span class="linenos" data-line="1290"></span></a> <span class="c1">-- Return string with error message or ""</span> </span><span id="L-1291"><a href="#L-1291"><span class="linenos" data-line="1291"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1292"><a href="#L-1292"><span class="linenos" data-line="1292"></span></a> <span class="c1">-- form()</span> </span><span id="L-1293"><a href="#L-1293"><span class="linenos" data-line="1293"></span></a> <span class="c1">-- failure()</span> </span><span id="L-1294"><a href="#L-1294"><span class="linenos" data-line="1294"></span></a> <span class="c1">-- finalize()</span> </span><span id="L-1295"><a href="#L-1295"><span class="linenos" data-line="1295"></span></a> <span class="c1">-- TemplatePar.valid()</span> </span><span id="L-1296"><a href="#L-1296"><span class="linenos" data-line="1296"></span></a> <span class="c1">-- TemplatePar.assert()</span> </span><span id="L-1297"><a href="#L-1297"><span class="linenos" data-line="1297"></span></a> <span class="kd">local</span> <span class="n">options</span> <span class="o">=</span> <span class="p">{</span> <span class="n">mandatory</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"1"</span> <span class="p">},</span> </span><span id="L-1298"><a href="#L-1298"><span class="linenos" data-line="1298"></span></a> <span class="n">optional</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"2"</span><span class="p">,</span> </span><span id="L-1299"><a href="#L-1299"><span class="linenos" data-line="1299"></span></a> <span class="s2">"cat"</span><span class="p">,</span> </span><span id="L-1300"><a href="#L-1300"><span class="linenos" data-line="1300"></span></a> <span class="s2">"errNS"</span><span class="p">,</span> </span><span id="L-1301"><a href="#L-1301"><span class="linenos" data-line="1301"></span></a> <span class="s2">"low"</span><span class="p">,</span> </span><span id="L-1302"><a href="#L-1302"><span class="linenos" data-line="1302"></span></a> <span class="s2">"max"</span><span class="p">,</span> </span><span id="L-1303"><a href="#L-1303"><span class="linenos" data-line="1303"></span></a> <span class="s2">"min"</span><span class="p">,</span> </span><span id="L-1304"><a href="#L-1304"><span class="linenos" data-line="1304"></span></a> <span class="s2">"format"</span><span class="p">,</span> </span><span id="L-1305"><a href="#L-1305"><span class="linenos" data-line="1305"></span></a> <span class="s2">"preview"</span><span class="p">,</span> </span><span id="L-1306"><a href="#L-1306"><span class="linenos" data-line="1306"></span></a> <span class="s2">"template"</span> <span class="p">},</span> </span><span id="L-1307"><a href="#L-1307"><span class="linenos" data-line="1307"></span></a> <span class="n">template</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"&#35;invoke:%s|%s|"</span><span class="p">,</span> </span><span id="L-1308"><a href="#L-1308"><span class="linenos" data-line="1308"></span></a> <span class="s2">"TemplatePar"</span><span class="p">,</span> </span><span id="L-1309"><a href="#L-1309"><span class="linenos" data-line="1309"></span></a> <span class="n">action</span> <span class="p">)</span> </span><span id="L-1310"><a href="#L-1310"><span class="linenos" data-line="1310"></span></a> <span class="p">}</span> </span><span id="L-1311"><a href="#L-1311"><span class="linenos" data-line="1311"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">form</span><span class="p">(</span> <span class="kc">false</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1312"><a href="#L-1312"><span class="linenos" data-line="1312"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1313"><a href="#L-1313"><span class="linenos" data-line="1313"></span></a> <span class="kd">local</span> <span class="n">s</span> </span><span id="L-1314"><a href="#L-1314"><span class="linenos" data-line="1314"></span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{</span> <span class="n">cat</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">cat</span><span class="p">,</span> </span><span id="L-1315"><a href="#L-1315"><span class="linenos" data-line="1315"></span></a> <span class="n">errNS</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">errNS</span><span class="p">,</span> </span><span id="L-1316"><a href="#L-1316"><span class="linenos" data-line="1316"></span></a> <span class="n">low</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">low</span><span class="p">,</span> </span><span id="L-1317"><a href="#L-1317"><span class="linenos" data-line="1317"></span></a> <span class="n">format</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">format</span><span class="p">,</span> </span><span id="L-1318"><a href="#L-1318"><span class="linenos" data-line="1318"></span></a> <span class="n">preview</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">preview</span><span class="p">,</span> </span><span id="L-1319"><a href="#L-1319"><span class="linenos" data-line="1319"></span></a> <span class="n">template</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">template</span> </span><span id="L-1320"><a href="#L-1320"><span class="linenos" data-line="1320"></span></a> <span class="p">}</span> </span><span id="L-1321"><a href="#L-1321"><span class="linenos" data-line="1321"></span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span> <span class="mi">2</span> <span class="p">],</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1322"><a href="#L-1322"><span class="linenos" data-line="1322"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">min</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-1323"><a href="#L-1323"><span class="linenos" data-line="1323"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">min</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^%s*([0-9]+)%s*$"</span> <span class="p">)</span> </span><span id="L-1324"><a href="#L-1324"><span class="linenos" data-line="1324"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1325"><a href="#L-1325"><span class="linenos" data-line="1325"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">min</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-1326"><a href="#L-1326"><span class="linenos" data-line="1326"></span></a> <span class="kr">else</span> </span><span id="L-1327"><a href="#L-1327"><span class="linenos" data-line="1327"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"invalidPar"</span><span class="p">,</span> </span><span id="L-1328"><a href="#L-1328"><span class="linenos" data-line="1328"></span></a> <span class="s2">"min="</span> <span class="o">..</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">min</span><span class="p">,</span> </span><span id="L-1329"><a href="#L-1329"><span class="linenos" data-line="1329"></span></a> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1330"><a href="#L-1330"><span class="linenos" data-line="1330"></span></a> <span class="kr">end</span> </span><span id="L-1331"><a href="#L-1331"><span class="linenos" data-line="1331"></span></a> <span class="kr">end</span> </span><span id="L-1332"><a href="#L-1332"><span class="linenos" data-line="1332"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">max</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-1333"><a href="#L-1333"><span class="linenos" data-line="1333"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">max</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^%s*([1-9][0-9]*)%s*$"</span> <span class="p">)</span> </span><span id="L-1334"><a href="#L-1334"><span class="linenos" data-line="1334"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1335"><a href="#L-1335"><span class="linenos" data-line="1335"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">max</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-1336"><a href="#L-1336"><span class="linenos" data-line="1336"></span></a> <span class="kr">else</span> </span><span id="L-1337"><a href="#L-1337"><span class="linenos" data-line="1337"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"invalidPar"</span><span class="p">,</span> </span><span id="L-1338"><a href="#L-1338"><span class="linenos" data-line="1338"></span></a> <span class="s2">"max="</span> <span class="o">..</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">max</span><span class="p">,</span> </span><span id="L-1339"><a href="#L-1339"><span class="linenos" data-line="1339"></span></a> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1340"><a href="#L-1340"><span class="linenos" data-line="1340"></span></a> <span class="kr">end</span> </span><span id="L-1341"><a href="#L-1341"><span class="linenos" data-line="1341"></span></a> <span class="kr">end</span> </span><span id="L-1342"><a href="#L-1342"><span class="linenos" data-line="1342"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1343"><a href="#L-1343"><span class="linenos" data-line="1343"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">finalize</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1344"><a href="#L-1344"><span class="linenos" data-line="1344"></span></a> <span class="kr">else</span> </span><span id="L-1345"><a href="#L-1345"><span class="linenos" data-line="1345"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span> <span class="mi">1</span> <span class="p">]</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-1346"><a href="#L-1346"><span class="linenos" data-line="1346"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-1347"><a href="#L-1347"><span class="linenos" data-line="1347"></span></a> <span class="kr">if</span> <span class="p">(</span> <span class="n">r</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1348"><a href="#L-1348"><span class="linenos" data-line="1348"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">r</span> </span><span id="L-1349"><a href="#L-1349"><span class="linenos" data-line="1349"></span></a> <span class="kr">end</span> </span><span id="L-1350"><a href="#L-1350"><span class="linenos" data-line="1350"></span></a> <span class="kr">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s2">"valid"</span> <span class="kr">then</span> </span><span id="L-1351"><a href="#L-1351"><span class="linenos" data-line="1351"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">valid</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1352"><a href="#L-1352"><span class="linenos" data-line="1352"></span></a> <span class="kr">elseif</span> <span class="n">action</span> <span class="o">==</span> <span class="s2">"assert"</span> <span class="kr">then</span> </span><span id="L-1353"><a href="#L-1353"><span class="linenos" data-line="1353"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">assert</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1354"><a href="#L-1354"><span class="linenos" data-line="1354"></span></a> <span class="kr">end</span> </span><span id="L-1355"><a href="#L-1355"><span class="linenos" data-line="1355"></span></a> <span class="kr">end</span> </span><span id="L-1356"><a href="#L-1356"><span class="linenos" data-line="1356"></span></a> <span class="kr">end</span> </span><span id="L-1357"><a href="#L-1357"><span class="linenos" data-line="1357"></span></a> <span class="kr">return</span> <span class="n">r</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-1358"><a href="#L-1358"><span class="linenos" data-line="1358"></span></a><span class="kr">end</span> <span class="c1">-- furnish()</span> </span><span id="L-1359"><a href="#L-1359"><span class="linenos" data-line="1359"></span></a> </span><span id="L-1360"><a href="#L-1360"><span class="linenos" data-line="1360"></span></a> </span><span id="L-1361"><a href="#L-1361"><span class="linenos" data-line="1361"></span></a> </span><span id="L-1362"><a href="#L-1362"><span class="linenos" data-line="1362"></span></a><span class="n">TemplatePar</span><span class="p">.</span><span class="n">assert</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">analyze</span><span class="p">,</span> <span class="n">append</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1363"><a href="#L-1363"><span class="linenos" data-line="1363"></span></a> <span class="c1">-- Perform parameter analysis on a single string</span> </span><span id="L-1364"><a href="#L-1364"><span class="linenos" data-line="1364"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1365"><a href="#L-1365"><span class="linenos" data-line="1365"></span></a> <span class="c1">-- analyze -- string to be analyzed</span> </span><span id="L-1366"><a href="#L-1366"><span class="linenos" data-line="1366"></span></a> <span class="c1">-- append -- string: append error message, prepending <br /></span> </span><span id="L-1367"><a href="#L-1367"><span class="linenos" data-line="1367"></span></a> <span class="c1">-- false or nil: throw error with message</span> </span><span id="L-1368"><a href="#L-1368"><span class="linenos" data-line="1368"></span></a> <span class="c1">-- options -- table; optional details</span> </span><span id="L-1369"><a href="#L-1369"><span class="linenos" data-line="1369"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1370"><a href="#L-1370"><span class="linenos" data-line="1370"></span></a> <span class="c1">-- Return string with error message as configured;</span> </span><span id="L-1371"><a href="#L-1371"><span class="linenos" data-line="1371"></span></a> <span class="c1">-- false if valid</span> </span><span id="L-1372"><a href="#L-1372"><span class="linenos" data-line="1372"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1373"><a href="#L-1373"><span class="linenos" data-line="1373"></span></a> <span class="c1">-- format()</span> </span><span id="L-1374"><a href="#L-1374"><span class="linenos" data-line="1374"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">format</span><span class="p">(</span> <span class="n">analyze</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1375"><a href="#L-1375"><span class="linenos" data-line="1375"></span></a> <span class="kr">if</span> <span class="p">(</span> <span class="n">r</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1376"><a href="#L-1376"><span class="linenos" data-line="1376"></span></a> <span class="kr">if</span> <span class="p">(</span> <span class="nb">type</span><span class="p">(</span> <span class="n">append</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1377"><a href="#L-1377"><span class="linenos" data-line="1377"></span></a> <span class="kr">if</span> <span class="p">(</span> <span class="n">append</span> <span class="o">~=</span> <span class="s2">""</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1378"><a href="#L-1378"><span class="linenos" data-line="1378"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"%s<br /> %s"</span><span class="p">,</span> <span class="n">append</span><span class="p">,</span> <span class="n">r</span> <span class="p">)</span> </span><span id="L-1379"><a href="#L-1379"><span class="linenos" data-line="1379"></span></a> <span class="kr">end</span> </span><span id="L-1380"><a href="#L-1380"><span class="linenos" data-line="1380"></span></a> <span class="kr">else</span> </span><span id="L-1381"><a href="#L-1381"><span class="linenos" data-line="1381"></span></a> <span class="nb">error</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="mi">0</span> <span class="p">)</span> </span><span id="L-1382"><a href="#L-1382"><span class="linenos" data-line="1382"></span></a> <span class="kr">end</span> </span><span id="L-1383"><a href="#L-1383"><span class="linenos" data-line="1383"></span></a> <span class="kr">end</span> </span><span id="L-1384"><a href="#L-1384"><span class="linenos" data-line="1384"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-1385"><a href="#L-1385"><span class="linenos" data-line="1385"></span></a><span class="kr">end</span> <span class="c1">-- TemplatePar.assert()</span> </span><span id="L-1386"><a href="#L-1386"><span class="linenos" data-line="1386"></span></a> </span><span id="L-1387"><a href="#L-1387"><span class="linenos" data-line="1387"></span></a> </span><span id="L-1388"><a href="#L-1388"><span class="linenos" data-line="1388"></span></a> </span><span id="L-1389"><a href="#L-1389"><span class="linenos" data-line="1389"></span></a><span class="n">TemplatePar</span><span class="p">.</span><span class="n">check</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1390"><a href="#L-1390"><span class="linenos" data-line="1390"></span></a> <span class="c1">-- Run parameter analysis on current template environment</span> </span><span id="L-1391"><a href="#L-1391"><span class="linenos" data-line="1391"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1392"><a href="#L-1392"><span class="linenos" data-line="1392"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-1393"><a href="#L-1393"><span class="linenos" data-line="1393"></span></a> <span class="c1">-- options.mandatory</span> </span><span id="L-1394"><a href="#L-1394"><span class="linenos" data-line="1394"></span></a> <span class="c1">-- options.optional</span> </span><span id="L-1395"><a href="#L-1395"><span class="linenos" data-line="1395"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1396"><a href="#L-1396"><span class="linenos" data-line="1396"></span></a> <span class="c1">-- Return string with error message as configured;</span> </span><span id="L-1397"><a href="#L-1397"><span class="linenos" data-line="1397"></span></a> <span class="c1">-- false if valid</span> </span><span id="L-1398"><a href="#L-1398"><span class="linenos" data-line="1398"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1399"><a href="#L-1399"><span class="linenos" data-line="1399"></span></a> <span class="c1">-- form()</span> </span><span id="L-1400"><a href="#L-1400"><span class="linenos" data-line="1400"></span></a> <span class="kr">return</span> <span class="n">form</span><span class="p">(</span> <span class="kc">true</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="kc">false</span> <span class="p">)</span> </span><span id="L-1401"><a href="#L-1401"><span class="linenos" data-line="1401"></span></a><span class="kr">end</span> <span class="c1">-- TemplatePar.check()</span> </span><span id="L-1402"><a href="#L-1402"><span class="linenos" data-line="1402"></span></a> </span><span id="L-1403"><a href="#L-1403"><span class="linenos" data-line="1403"></span></a> </span><span id="L-1404"><a href="#L-1404"><span class="linenos" data-line="1404"></span></a> </span><span id="L-1405"><a href="#L-1405"><span class="linenos" data-line="1405"></span></a><span class="n">TemplatePar</span><span class="p">.</span><span class="n">count</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">()</span> </span><span id="L-1406"><a href="#L-1406"><span class="linenos" data-line="1406"></span></a> <span class="c1">-- Return number of template parameters</span> </span><span id="L-1407"><a href="#L-1407"><span class="linenos" data-line="1407"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1408"><a href="#L-1408"><span class="linenos" data-line="1408"></span></a> <span class="c1">-- Return number, starting at 0</span> </span><span id="L-1409"><a href="#L-1409"><span class="linenos" data-line="1409"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1410"><a href="#L-1410"><span class="linenos" data-line="1410"></span></a> <span class="c1">-- mw.getCurrentFrame()</span> </span><span id="L-1411"><a href="#L-1411"><span class="linenos" data-line="1411"></span></a> <span class="c1">-- frame:getParent()</span> </span><span id="L-1412"><a href="#L-1412"><span class="linenos" data-line="1412"></span></a> <span class="kd">local</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> </span><span id="L-1413"><a href="#L-1413"><span class="linenos" data-line="1413"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-1414"><a href="#L-1414"><span class="linenos" data-line="1414"></span></a> <span class="kd">local</span> <span class="n">t</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">getCurrentFrame</span><span class="p">():</span><span class="n">getParent</span><span class="p">()</span> </span><span id="L-1415"><a href="#L-1415"><span class="linenos" data-line="1415"></span></a> <span class="kd">local</span> <span class="n">o</span> <span class="o">=</span> <span class="n">t</span><span class="p">.</span><span class="n">args</span> </span><span id="L-1416"><a href="#L-1416"><span class="linenos" data-line="1416"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">o</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-1417"><a href="#L-1417"><span class="linenos" data-line="1417"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-1418"><a href="#L-1418"><span class="linenos" data-line="1418"></span></a> <span class="kr">end</span> <span class="c1">-- for k, v</span> </span><span id="L-1419"><a href="#L-1419"><span class="linenos" data-line="1419"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-1420"><a href="#L-1420"><span class="linenos" data-line="1420"></span></a><span class="kr">end</span> <span class="c1">-- TemplatePar.count()</span> </span><span id="L-1421"><a href="#L-1421"><span class="linenos" data-line="1421"></span></a> </span><span id="L-1422"><a href="#L-1422"><span class="linenos" data-line="1422"></span></a> </span><span id="L-1423"><a href="#L-1423"><span class="linenos" data-line="1423"></span></a> </span><span id="L-1424"><a href="#L-1424"><span class="linenos" data-line="1424"></span></a><span class="n">TemplatePar</span><span class="p">.</span><span class="n">countNotEmpty</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">()</span> </span><span id="L-1425"><a href="#L-1425"><span class="linenos" data-line="1425"></span></a> <span class="c1">-- Return number of template parameters with more than whitespace</span> </span><span id="L-1426"><a href="#L-1426"><span class="linenos" data-line="1426"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1427"><a href="#L-1427"><span class="linenos" data-line="1427"></span></a> <span class="c1">-- Return number, starting at 0</span> </span><span id="L-1428"><a href="#L-1428"><span class="linenos" data-line="1428"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1429"><a href="#L-1429"><span class="linenos" data-line="1429"></span></a> <span class="c1">-- mw.getCurrentFrame()</span> </span><span id="L-1430"><a href="#L-1430"><span class="linenos" data-line="1430"></span></a> <span class="c1">-- frame:getParent()</span> </span><span id="L-1431"><a href="#L-1431"><span class="linenos" data-line="1431"></span></a> <span class="kd">local</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> </span><span id="L-1432"><a href="#L-1432"><span class="linenos" data-line="1432"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-1433"><a href="#L-1433"><span class="linenos" data-line="1433"></span></a> <span class="kd">local</span> <span class="n">t</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">getCurrentFrame</span><span class="p">():</span><span class="n">getParent</span><span class="p">()</span> </span><span id="L-1434"><a href="#L-1434"><span class="linenos" data-line="1434"></span></a> <span class="kd">local</span> <span class="n">o</span> <span class="o">=</span> <span class="n">t</span><span class="p">.</span><span class="n">args</span> </span><span id="L-1435"><a href="#L-1435"><span class="linenos" data-line="1435"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">o</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-1436"><a href="#L-1436"><span class="linenos" data-line="1436"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">v</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^%s*$"</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1437"><a href="#L-1437"><span class="linenos" data-line="1437"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-1438"><a href="#L-1438"><span class="linenos" data-line="1438"></span></a> <span class="kr">end</span> </span><span id="L-1439"><a href="#L-1439"><span class="linenos" data-line="1439"></span></a> <span class="kr">end</span> <span class="c1">-- for k, v</span> </span><span id="L-1440"><a href="#L-1440"><span class="linenos" data-line="1440"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-1441"><a href="#L-1441"><span class="linenos" data-line="1441"></span></a><span class="kr">end</span> <span class="c1">-- TemplatePar.countNotEmpty()</span> </span><span id="L-1442"><a href="#L-1442"><span class="linenos" data-line="1442"></span></a> </span><span id="L-1443"><a href="#L-1443"><span class="linenos" data-line="1443"></span></a> </span><span id="L-1444"><a href="#L-1444"><span class="linenos" data-line="1444"></span></a> </span><span id="L-1445"><a href="#L-1445"><span class="linenos" data-line="1445"></span></a><span class="n">TemplatePar</span><span class="p">.</span><span class="n">downcase</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1446"><a href="#L-1446"><span class="linenos" data-line="1446"></span></a> <span class="c1">-- Return all template parameters with downcased name</span> </span><span id="L-1447"><a href="#L-1447"><span class="linenos" data-line="1447"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1448"><a href="#L-1448"><span class="linenos" data-line="1448"></span></a> <span class="c1">-- options -- table or nil; optional messaging details</span> </span><span id="L-1449"><a href="#L-1449"><span class="linenos" data-line="1449"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1450"><a href="#L-1450"><span class="linenos" data-line="1450"></span></a> <span class="c1">-- Return table, may be empty; or string with error message.</span> </span><span id="L-1451"><a href="#L-1451"><span class="linenos" data-line="1451"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1452"><a href="#L-1452"><span class="linenos" data-line="1452"></span></a> <span class="c1">-- mw.getCurrentFrame()</span> </span><span id="L-1453"><a href="#L-1453"><span class="linenos" data-line="1453"></span></a> <span class="c1">-- frame:getParent()</span> </span><span id="L-1454"><a href="#L-1454"><span class="linenos" data-line="1454"></span></a> <span class="c1">-- flat()</span> </span><span id="L-1455"><a href="#L-1455"><span class="linenos" data-line="1455"></span></a> <span class="kd">local</span> <span class="n">t</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">getCurrentFrame</span><span class="p">():</span><span class="n">getParent</span><span class="p">()</span> </span><span id="L-1456"><a href="#L-1456"><span class="linenos" data-line="1456"></span></a> <span class="kr">return</span> <span class="n">flat</span><span class="p">(</span> <span class="n">t</span><span class="p">.</span><span class="n">args</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1457"><a href="#L-1457"><span class="linenos" data-line="1457"></span></a><span class="kr">end</span> <span class="c1">-- TemplatePar.downcase()</span> </span><span id="L-1458"><a href="#L-1458"><span class="linenos" data-line="1458"></span></a> </span><span id="L-1459"><a href="#L-1459"><span class="linenos" data-line="1459"></span></a> </span><span id="L-1460"><a href="#L-1460"><span class="linenos" data-line="1460"></span></a> </span><span id="L-1461"><a href="#L-1461"><span class="linenos" data-line="1461"></span></a><span class="n">TemplatePar</span><span class="p">.</span><span class="n">valid</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">access</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1462"><a href="#L-1462"><span class="linenos" data-line="1462"></span></a> <span class="c1">-- Check validity of one particular template parameter</span> </span><span id="L-1463"><a href="#L-1463"><span class="linenos" data-line="1463"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1464"><a href="#L-1464"><span class="linenos" data-line="1464"></span></a> <span class="c1">-- access -- id of parameter in template transclusion</span> </span><span id="L-1465"><a href="#L-1465"><span class="linenos" data-line="1465"></span></a> <span class="c1">-- string or number</span> </span><span id="L-1466"><a href="#L-1466"><span class="linenos" data-line="1466"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-1467"><a href="#L-1467"><span class="linenos" data-line="1467"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1468"><a href="#L-1468"><span class="linenos" data-line="1468"></span></a> <span class="c1">-- Return string with error message as configured;</span> </span><span id="L-1469"><a href="#L-1469"><span class="linenos" data-line="1469"></span></a> <span class="c1">-- false if valid or no answer permitted</span> </span><span id="L-1470"><a href="#L-1470"><span class="linenos" data-line="1470"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1471"><a href="#L-1471"><span class="linenos" data-line="1471"></span></a> <span class="c1">-- mw.text.trim()</span> </span><span id="L-1472"><a href="#L-1472"><span class="linenos" data-line="1472"></span></a> <span class="c1">-- TemplatePar.downcase()</span> </span><span id="L-1473"><a href="#L-1473"><span class="linenos" data-line="1473"></span></a> <span class="c1">-- TemplatePar.framing()</span> </span><span id="L-1474"><a href="#L-1474"><span class="linenos" data-line="1474"></span></a> <span class="c1">-- frame:getParent()</span> </span><span id="L-1475"><a href="#L-1475"><span class="linenos" data-line="1475"></span></a> <span class="c1">-- formatted()</span> </span><span id="L-1476"><a href="#L-1476"><span class="linenos" data-line="1476"></span></a> <span class="c1">-- failure()</span> </span><span id="L-1477"><a href="#L-1477"><span class="linenos" data-line="1477"></span></a> <span class="c1">-- finalize()</span> </span><span id="L-1478"><a href="#L-1478"><span class="linenos" data-line="1478"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span> <span class="n">access</span> <span class="p">)</span> </span><span id="L-1479"><a href="#L-1479"><span class="linenos" data-line="1479"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-1480"><a href="#L-1480"><span class="linenos" data-line="1480"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">access</span> <span class="p">)</span> </span><span id="L-1481"><a href="#L-1481"><span class="linenos" data-line="1481"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">r</span> <span class="o">==</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-1482"><a href="#L-1482"><span class="linenos" data-line="1482"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1483"><a href="#L-1483"><span class="linenos" data-line="1483"></span></a> <span class="kr">end</span> </span><span id="L-1484"><a href="#L-1484"><span class="linenos" data-line="1484"></span></a> <span class="kr">elseif</span> <span class="n">r</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-1485"><a href="#L-1485"><span class="linenos" data-line="1485"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">access</span> </span><span id="L-1486"><a href="#L-1486"><span class="linenos" data-line="1486"></span></a> <span class="kr">else</span> </span><span id="L-1487"><a href="#L-1487"><span class="linenos" data-line="1487"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1488"><a href="#L-1488"><span class="linenos" data-line="1488"></span></a> <span class="kr">end</span> </span><span id="L-1489"><a href="#L-1489"><span class="linenos" data-line="1489"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1490"><a href="#L-1490"><span class="linenos" data-line="1490"></span></a> <span class="kd">local</span> <span class="n">params</span> </span><span id="L-1491"><a href="#L-1491"><span class="linenos" data-line="1491"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">options</span> <span class="p">)</span> <span class="o">~=</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1492"><a href="#L-1492"><span class="linenos" data-line="1492"></span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1493"><a href="#L-1493"><span class="linenos" data-line="1493"></span></a> <span class="kr">end</span> </span><span id="L-1494"><a href="#L-1494"><span class="linenos" data-line="1494"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">low</span> <span class="kr">then</span> </span><span id="L-1495"><a href="#L-1495"><span class="linenos" data-line="1495"></span></a> <span class="n">params</span> <span class="o">=</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">downcase</span><span class="p">(</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1496"><a href="#L-1496"><span class="linenos" data-line="1496"></span></a> <span class="kr">else</span> </span><span id="L-1497"><a href="#L-1497"><span class="linenos" data-line="1497"></span></a> <span class="n">params</span> <span class="o">=</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">framing</span><span class="p">():</span><span class="n">getParent</span><span class="p">()</span> </span><span id="L-1498"><a href="#L-1498"><span class="linenos" data-line="1498"></span></a> <span class="kr">end</span> </span><span id="L-1499"><a href="#L-1499"><span class="linenos" data-line="1499"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">formatted</span><span class="p">(</span> <span class="n">params</span><span class="p">,</span> <span class="n">access</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1500"><a href="#L-1500"><span class="linenos" data-line="1500"></span></a> <span class="kr">else</span> </span><span id="L-1501"><a href="#L-1501"><span class="linenos" data-line="1501"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"noname"</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1502"><a href="#L-1502"><span class="linenos" data-line="1502"></span></a> <span class="kr">end</span> </span><span id="L-1503"><a href="#L-1503"><span class="linenos" data-line="1503"></span></a> <span class="kr">return</span> <span class="n">finalize</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1504"><a href="#L-1504"><span class="linenos" data-line="1504"></span></a><span class="kr">end</span> <span class="c1">-- TemplatePar.valid()</span> </span><span id="L-1505"><a href="#L-1505"><span class="linenos" data-line="1505"></span></a> </span><span id="L-1506"><a href="#L-1506"><span class="linenos" data-line="1506"></span></a> </span><span id="L-1507"><a href="#L-1507"><span class="linenos" data-line="1507"></span></a> </span><span id="L-1508"><a href="#L-1508"><span class="linenos" data-line="1508"></span></a><span class="n">TemplatePar</span><span class="p">.</span><span class="n">verify</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1509"><a href="#L-1509"><span class="linenos" data-line="1509"></span></a> <span class="c1">-- Perform #invoke parameter analysis</span> </span><span id="L-1510"><a href="#L-1510"><span class="linenos" data-line="1510"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1511"><a href="#L-1511"><span class="linenos" data-line="1511"></span></a> <span class="c1">-- options -- table or nil; optional details</span> </span><span id="L-1512"><a href="#L-1512"><span class="linenos" data-line="1512"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1513"><a href="#L-1513"><span class="linenos" data-line="1513"></span></a> <span class="c1">-- Return string with error message as configured;</span> </span><span id="L-1514"><a href="#L-1514"><span class="linenos" data-line="1514"></span></a> <span class="c1">-- false if valid</span> </span><span id="L-1515"><a href="#L-1515"><span class="linenos" data-line="1515"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1516"><a href="#L-1516"><span class="linenos" data-line="1516"></span></a> <span class="c1">-- form()</span> </span><span id="L-1517"><a href="#L-1517"><span class="linenos" data-line="1517"></span></a> <span class="kr">return</span> <span class="n">form</span><span class="p">(</span> <span class="kc">false</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="kc">false</span> <span class="p">)</span> </span><span id="L-1518"><a href="#L-1518"><span class="linenos" data-line="1518"></span></a><span class="kr">end</span> <span class="c1">-- TemplatePar.verify()</span> </span><span id="L-1519"><a href="#L-1519"><span class="linenos" data-line="1519"></span></a> </span><span id="L-1520"><a href="#L-1520"><span class="linenos" data-line="1520"></span></a> </span><span id="L-1521"><a href="#L-1521"><span class="linenos" data-line="1521"></span></a> </span><span id="L-1522"><a href="#L-1522"><span class="linenos" data-line="1522"></span></a><span class="n">TemplatePar</span><span class="p">.</span><span class="n">framing</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1523"><a href="#L-1523"><span class="linenos" data-line="1523"></span></a> <span class="c1">-- Ensure availability of frame object</span> </span><span id="L-1524"><a href="#L-1524"><span class="linenos" data-line="1524"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1525"><a href="#L-1525"><span class="linenos" data-line="1525"></span></a> <span class="c1">-- frame -- object; #invoke environment, or false</span> </span><span id="L-1526"><a href="#L-1526"><span class="linenos" data-line="1526"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1527"><a href="#L-1527"><span class="linenos" data-line="1527"></span></a> <span class="c1">-- Return frame object</span> </span><span id="L-1528"><a href="#L-1528"><span class="linenos" data-line="1528"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1529"><a href="#L-1529"><span class="linenos" data-line="1529"></span></a> <span class="c1">-- >< Local.frame</span> </span><span id="L-1530"><a href="#L-1530"><span class="linenos" data-line="1530"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">Local</span><span class="p">.</span><span class="n">frame</span> <span class="kr">then</span> </span><span id="L-1531"><a href="#L-1531"><span class="linenos" data-line="1531"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="ow">and</span> </span><span id="L-1532"><a href="#L-1532"><span class="linenos" data-line="1532"></span></a> <span class="nb">type</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="ow">and</span> </span><span id="L-1533"><a href="#L-1533"><span class="linenos" data-line="1533"></span></a> <span class="nb">type</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">getParent</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"function"</span> <span class="ow">and</span> </span><span id="L-1534"><a href="#L-1534"><span class="linenos" data-line="1534"></span></a> <span class="nb">type</span><span class="p">(</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">()</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="ow">and</span> </span><span id="L-1535"><a href="#L-1535"><span class="linenos" data-line="1535"></span></a> <span class="nb">type</span><span class="p">(</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">getParent</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"function"</span> <span class="ow">and</span> </span><span id="L-1536"><a href="#L-1536"><span class="linenos" data-line="1536"></span></a> <span class="nb">type</span><span class="p">(</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">():</span><span class="n">getParent</span><span class="p">()</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"nil"</span> <span class="kr">then</span> </span><span id="L-1537"><a href="#L-1537"><span class="linenos" data-line="1537"></span></a> <span class="n">Local</span><span class="p">.</span><span class="n">frame</span> <span class="o">=</span> <span class="n">frame</span> </span><span id="L-1538"><a href="#L-1538"><span class="linenos" data-line="1538"></span></a> <span class="kr">else</span> </span><span id="L-1539"><a href="#L-1539"><span class="linenos" data-line="1539"></span></a> <span class="n">Local</span><span class="p">.</span><span class="n">frame</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">getCurrentFrame</span><span class="p">()</span> </span><span id="L-1540"><a href="#L-1540"><span class="linenos" data-line="1540"></span></a> <span class="kr">end</span> </span><span id="L-1541"><a href="#L-1541"><span class="linenos" data-line="1541"></span></a> <span class="kr">end</span> </span><span id="L-1542"><a href="#L-1542"><span class="linenos" data-line="1542"></span></a> <span class="kr">return</span> <span class="n">Local</span><span class="p">.</span><span class="n">frame</span> </span><span id="L-1543"><a href="#L-1543"><span class="linenos" data-line="1543"></span></a><span class="kr">end</span> <span class="c1">-- TemplatePar.framing()</span> </span><span id="L-1544"><a href="#L-1544"><span class="linenos" data-line="1544"></span></a> </span><span id="L-1545"><a href="#L-1545"><span class="linenos" data-line="1545"></span></a> </span><span id="L-1546"><a href="#L-1546"><span class="linenos" data-line="1546"></span></a> </span><span id="L-1547"><a href="#L-1547"><span class="linenos" data-line="1547"></span></a><span class="n">Failsafe</span><span class="p">.</span><span class="n">failsafe</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">atleast</span> <span class="p">)</span> </span><span id="L-1548"><a href="#L-1548"><span class="linenos" data-line="1548"></span></a> <span class="c1">-- Retrieve versioning and check for compliance</span> </span><span id="L-1549"><a href="#L-1549"><span class="linenos" data-line="1549"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1550"><a href="#L-1550"><span class="linenos" data-line="1550"></span></a> <span class="c1">-- atleast -- string, with required version</span> </span><span id="L-1551"><a href="#L-1551"><span class="linenos" data-line="1551"></span></a> <span class="c1">-- or wikidata|item|~|@ or false</span> </span><span id="L-1552"><a href="#L-1552"><span class="linenos" data-line="1552"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1553"><a href="#L-1553"><span class="linenos" data-line="1553"></span></a> <span class="c1">-- Returns string -- with queried version/item, also if problem</span> </span><span id="L-1554"><a href="#L-1554"><span class="linenos" data-line="1554"></span></a> <span class="c1">-- false -- if appropriate</span> </span><span id="L-1555"><a href="#L-1555"><span class="linenos" data-line="1555"></span></a> <span class="c1">-- 2020-08-17</span> </span><span id="L-1556"><a href="#L-1556"><span class="linenos" data-line="1556"></span></a> <span class="kd">local</span> <span class="n">since</span> <span class="o">=</span> <span class="n">atleast</span> </span><span id="L-1557"><a href="#L-1557"><span class="linenos" data-line="1557"></span></a> <span class="kd">local</span> <span class="n">last</span> <span class="o">=</span> <span class="p">(</span> <span class="n">since</span> <span class="o">==</span> <span class="s2">"~"</span> <span class="p">)</span> </span><span id="L-1558"><a href="#L-1558"><span class="linenos" data-line="1558"></span></a> <span class="kd">local</span> <span class="n">linked</span> <span class="o">=</span> <span class="p">(</span> <span class="n">since</span> <span class="o">==</span> <span class="s2">"@"</span> <span class="p">)</span> </span><span id="L-1559"><a href="#L-1559"><span class="linenos" data-line="1559"></span></a> <span class="kd">local</span> <span class="n">link</span> <span class="o">=</span> <span class="p">(</span> <span class="n">since</span> <span class="o">==</span> <span class="s2">"item"</span> <span class="p">)</span> </span><span id="L-1560"><a href="#L-1560"><span class="linenos" data-line="1560"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-1561"><a href="#L-1561"><span class="linenos" data-line="1561"></span></a> <span class="kr">if</span> <span class="n">last</span> <span class="ow">or</span> <span class="n">link</span> <span class="ow">or</span> <span class="n">linked</span> <span class="ow">or</span> <span class="n">since</span> <span class="o">==</span> <span class="s2">"wikidata"</span> <span class="kr">then</span> </span><span id="L-1562"><a href="#L-1562"><span class="linenos" data-line="1562"></span></a> <span class="kd">local</span> <span class="n">item</span> <span class="o">=</span> <span class="n">Failsafe</span><span class="p">.</span><span class="n">item</span> </span><span id="L-1563"><a href="#L-1563"><span class="linenos" data-line="1563"></span></a> <span class="n">since</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1564"><a href="#L-1564"><span class="linenos" data-line="1564"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">item</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="ow">and</span> <span class="n">item</span> <span class="o">></span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-1565"><a href="#L-1565"><span class="linenos" data-line="1565"></span></a> <span class="kd">local</span> <span class="n">suited</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"Q%d"</span><span class="p">,</span> <span class="n">item</span> <span class="p">)</span> </span><span id="L-1566"><a href="#L-1566"><span class="linenos" data-line="1566"></span></a> <span class="kr">if</span> <span class="n">link</span> <span class="kr">then</span> </span><span id="L-1567"><a href="#L-1567"><span class="linenos" data-line="1567"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">suited</span> </span><span id="L-1568"><a href="#L-1568"><span class="linenos" data-line="1568"></span></a> <span class="kr">else</span> </span><span id="L-1569"><a href="#L-1569"><span class="linenos" data-line="1569"></span></a> <span class="kd">local</span> <span class="n">entity</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">wikibase</span><span class="p">.</span><span class="n">getEntity</span><span class="p">(</span> <span class="n">suited</span> <span class="p">)</span> </span><span id="L-1570"><a href="#L-1570"><span class="linenos" data-line="1570"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">entity</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1571"><a href="#L-1571"><span class="linenos" data-line="1571"></span></a> <span class="kd">local</span> <span class="n">seek</span> <span class="o">=</span> <span class="n">Failsafe</span><span class="p">.</span><span class="n">serialProperty</span> <span class="ow">or</span> <span class="s2">"P348"</span> </span><span id="L-1572"><a href="#L-1572"><span class="linenos" data-line="1572"></span></a> <span class="kd">local</span> <span class="n">vsn</span> <span class="o">=</span> <span class="n">entity</span><span class="p">:</span><span class="n">formatPropertyValues</span><span class="p">(</span> <span class="n">seek</span> <span class="p">)</span> </span><span id="L-1573"><a href="#L-1573"><span class="linenos" data-line="1573"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">vsn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="ow">and</span> </span><span id="L-1574"><a href="#L-1574"><span class="linenos" data-line="1574"></span></a> <span class="nb">type</span><span class="p">(</span> <span class="n">vsn</span><span class="p">.</span><span class="n">value</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">and</span> </span><span id="L-1575"><a href="#L-1575"><span class="linenos" data-line="1575"></span></a> <span class="n">vsn</span><span class="p">.</span><span class="n">value</span> <span class="o">~=</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-1576"><a href="#L-1576"><span class="linenos" data-line="1576"></span></a> <span class="kr">if</span> <span class="n">last</span> <span class="ow">and</span> <span class="n">vsn</span><span class="p">.</span><span class="n">value</span> <span class="o">==</span> <span class="n">Failsafe</span><span class="p">.</span><span class="n">serial</span> <span class="kr">then</span> </span><span id="L-1577"><a href="#L-1577"><span class="linenos" data-line="1577"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1578"><a href="#L-1578"><span class="linenos" data-line="1578"></span></a> <span class="kr">elseif</span> <span class="n">linked</span> <span class="kr">then</span> </span><span id="L-1579"><a href="#L-1579"><span class="linenos" data-line="1579"></span></a> <span class="kr">if</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">getCurrentTitle</span><span class="p">().</span><span class="n">prefixedText</span> </span><span id="L-1580"><a href="#L-1580"><span class="linenos" data-line="1580"></span></a> <span class="o">==</span> <span class="n">mw</span><span class="p">.</span><span class="n">wikibase</span><span class="p">.</span><span class="n">getSitelink</span><span class="p">(</span> <span class="n">suited</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1581"><a href="#L-1581"><span class="linenos" data-line="1581"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1582"><a href="#L-1582"><span class="linenos" data-line="1582"></span></a> <span class="kr">else</span> </span><span id="L-1583"><a href="#L-1583"><span class="linenos" data-line="1583"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">suited</span> </span><span id="L-1584"><a href="#L-1584"><span class="linenos" data-line="1584"></span></a> <span class="kr">end</span> </span><span id="L-1585"><a href="#L-1585"><span class="linenos" data-line="1585"></span></a> <span class="kr">else</span> </span><span id="L-1586"><a href="#L-1586"><span class="linenos" data-line="1586"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">vsn</span><span class="p">.</span><span class="n">value</span> </span><span id="L-1587"><a href="#L-1587"><span class="linenos" data-line="1587"></span></a> <span class="kr">end</span> </span><span id="L-1588"><a href="#L-1588"><span class="linenos" data-line="1588"></span></a> <span class="kr">end</span> </span><span id="L-1589"><a href="#L-1589"><span class="linenos" data-line="1589"></span></a> <span class="kr">end</span> </span><span id="L-1590"><a href="#L-1590"><span class="linenos" data-line="1590"></span></a> <span class="kr">end</span> </span><span id="L-1591"><a href="#L-1591"><span class="linenos" data-line="1591"></span></a> <span class="kr">end</span> </span><span id="L-1592"><a href="#L-1592"><span class="linenos" data-line="1592"></span></a> <span class="kr">end</span> </span><span id="L-1593"><a href="#L-1593"><span class="linenos" data-line="1593"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">r</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"nil"</span> <span class="kr">then</span> </span><span id="L-1594"><a href="#L-1594"><span class="linenos" data-line="1594"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">since</span> <span class="ow">or</span> <span class="n">since</span> <span class="o"><=</span> <span class="n">Failsafe</span><span class="p">.</span><span class="n">serial</span> <span class="kr">then</span> </span><span id="L-1595"><a href="#L-1595"><span class="linenos" data-line="1595"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">Failsafe</span><span class="p">.</span><span class="n">serial</span> </span><span id="L-1596"><a href="#L-1596"><span class="linenos" data-line="1596"></span></a> <span class="kr">else</span> </span><span id="L-1597"><a href="#L-1597"><span class="linenos" data-line="1597"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1598"><a href="#L-1598"><span class="linenos" data-line="1598"></span></a> <span class="kr">end</span> </span><span id="L-1599"><a href="#L-1599"><span class="linenos" data-line="1599"></span></a> <span class="kr">end</span> </span><span id="L-1600"><a href="#L-1600"><span class="linenos" data-line="1600"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-1601"><a href="#L-1601"><span class="linenos" data-line="1601"></span></a><span class="kr">end</span> <span class="c1">-- Failsafe.failsafe()</span> </span><span id="L-1602"><a href="#L-1602"><span class="linenos" data-line="1602"></span></a> </span><span id="L-1603"><a href="#L-1603"><span class="linenos" data-line="1603"></span></a> </span><span id="L-1604"><a href="#L-1604"><span class="linenos" data-line="1604"></span></a> </span><span id="L-1605"><a href="#L-1605"><span class="linenos" data-line="1605"></span></a><span class="c1">-- Provide external access</span> </span><span id="L-1606"><a href="#L-1606"><span class="linenos" data-line="1606"></span></a><span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-1607"><a href="#L-1607"><span class="linenos" data-line="1607"></span></a> </span><span id="L-1608"><a href="#L-1608"><span class="linenos" data-line="1608"></span></a> </span><span id="L-1609"><a href="#L-1609"><span class="linenos" data-line="1609"></span></a> </span><span id="L-1610"><a href="#L-1610"><span class="linenos" data-line="1610"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">assert</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1611"><a href="#L-1611"><span class="linenos" data-line="1611"></span></a> <span class="c1">-- Perform parameter analysis on some single string</span> </span><span id="L-1612"><a href="#L-1612"><span class="linenos" data-line="1612"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1613"><a href="#L-1613"><span class="linenos" data-line="1613"></span></a> <span class="c1">-- frame -- object; #invoke environment</span> </span><span id="L-1614"><a href="#L-1614"><span class="linenos" data-line="1614"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1615"><a href="#L-1615"><span class="linenos" data-line="1615"></span></a> <span class="c1">-- Return string with error message or ""</span> </span><span id="L-1616"><a href="#L-1616"><span class="linenos" data-line="1616"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1617"><a href="#L-1617"><span class="linenos" data-line="1617"></span></a> <span class="c1">-- furnish()</span> </span><span id="L-1618"><a href="#L-1618"><span class="linenos" data-line="1618"></span></a> <span class="kr">return</span> <span class="n">furnish</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">"assert"</span> <span class="p">)</span> </span><span id="L-1619"><a href="#L-1619"><span class="linenos" data-line="1619"></span></a><span class="kr">end</span> <span class="c1">-- p.assert()</span> </span><span id="L-1620"><a href="#L-1620"><span class="linenos" data-line="1620"></span></a> </span><span id="L-1621"><a href="#L-1621"><span class="linenos" data-line="1621"></span></a> </span><span id="L-1622"><a href="#L-1622"><span class="linenos" data-line="1622"></span></a> </span><span id="L-1623"><a href="#L-1623"><span class="linenos" data-line="1623"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">check</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1624"><a href="#L-1624"><span class="linenos" data-line="1624"></span></a> <span class="c1">-- Check validity of template parameters</span> </span><span id="L-1625"><a href="#L-1625"><span class="linenos" data-line="1625"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1626"><a href="#L-1626"><span class="linenos" data-line="1626"></span></a> <span class="c1">-- frame -- object; #invoke environment</span> </span><span id="L-1627"><a href="#L-1627"><span class="linenos" data-line="1627"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1628"><a href="#L-1628"><span class="linenos" data-line="1628"></span></a> <span class="c1">-- Return string with error message or ""</span> </span><span id="L-1629"><a href="#L-1629"><span class="linenos" data-line="1629"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1630"><a href="#L-1630"><span class="linenos" data-line="1630"></span></a> <span class="c1">-- form()</span> </span><span id="L-1631"><a href="#L-1631"><span class="linenos" data-line="1631"></span></a> <span class="c1">-- fill()</span> </span><span id="L-1632"><a href="#L-1632"><span class="linenos" data-line="1632"></span></a> <span class="kd">local</span> <span class="n">options</span> <span class="o">=</span> <span class="p">{</span> <span class="n">optional</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"all"</span><span class="p">,</span> </span><span id="L-1633"><a href="#L-1633"><span class="linenos" data-line="1633"></span></a> <span class="s2">"opt"</span><span class="p">,</span> </span><span id="L-1634"><a href="#L-1634"><span class="linenos" data-line="1634"></span></a> <span class="s2">"cat"</span><span class="p">,</span> </span><span id="L-1635"><a href="#L-1635"><span class="linenos" data-line="1635"></span></a> <span class="s2">"errNS"</span><span class="p">,</span> </span><span id="L-1636"><a href="#L-1636"><span class="linenos" data-line="1636"></span></a> <span class="s2">"low"</span><span class="p">,</span> </span><span id="L-1637"><a href="#L-1637"><span class="linenos" data-line="1637"></span></a> <span class="s2">"format"</span><span class="p">,</span> </span><span id="L-1638"><a href="#L-1638"><span class="linenos" data-line="1638"></span></a> <span class="s2">"preview"</span><span class="p">,</span> </span><span id="L-1639"><a href="#L-1639"><span class="linenos" data-line="1639"></span></a> <span class="s2">"template"</span> <span class="p">},</span> </span><span id="L-1640"><a href="#L-1640"><span class="linenos" data-line="1640"></span></a> <span class="n">template</span> <span class="o">=</span> <span class="s2">"&#35;invoke:TemplatePar|check|"</span> </span><span id="L-1641"><a href="#L-1641"><span class="linenos" data-line="1641"></span></a> <span class="p">}</span> </span><span id="L-1642"><a href="#L-1642"><span class="linenos" data-line="1642"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">form</span><span class="p">(</span> <span class="kc">false</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1643"><a href="#L-1643"><span class="linenos" data-line="1643"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1644"><a href="#L-1644"><span class="linenos" data-line="1644"></span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{</span> <span class="n">mandatory</span> <span class="o">=</span> <span class="n">fill</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">all</span> <span class="p">),</span> </span><span id="L-1645"><a href="#L-1645"><span class="linenos" data-line="1645"></span></a> <span class="n">optional</span> <span class="o">=</span> <span class="n">fill</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">opt</span> <span class="p">),</span> </span><span id="L-1646"><a href="#L-1646"><span class="linenos" data-line="1646"></span></a> <span class="n">cat</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">cat</span><span class="p">,</span> </span><span id="L-1647"><a href="#L-1647"><span class="linenos" data-line="1647"></span></a> <span class="n">errNS</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">errNS</span><span class="p">,</span> </span><span id="L-1648"><a href="#L-1648"><span class="linenos" data-line="1648"></span></a> <span class="n">low</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">low</span><span class="p">,</span> </span><span id="L-1649"><a href="#L-1649"><span class="linenos" data-line="1649"></span></a> <span class="n">format</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">format</span><span class="p">,</span> </span><span id="L-1650"><a href="#L-1650"><span class="linenos" data-line="1650"></span></a> <span class="n">preview</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">preview</span><span class="p">,</span> </span><span id="L-1651"><a href="#L-1651"><span class="linenos" data-line="1651"></span></a> <span class="n">template</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">template</span> </span><span id="L-1652"><a href="#L-1652"><span class="linenos" data-line="1652"></span></a> <span class="p">}</span> </span><span id="L-1653"><a href="#L-1653"><span class="linenos" data-line="1653"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">form</span><span class="p">(</span> <span class="kc">true</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1654"><a href="#L-1654"><span class="linenos" data-line="1654"></span></a> <span class="kr">end</span> </span><span id="L-1655"><a href="#L-1655"><span class="linenos" data-line="1655"></span></a> <span class="kr">return</span> <span class="n">r</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-1656"><a href="#L-1656"><span class="linenos" data-line="1656"></span></a><span class="kr">end</span> <span class="c1">-- p.check()</span> </span><span id="L-1657"><a href="#L-1657"><span class="linenos" data-line="1657"></span></a> </span><span id="L-1658"><a href="#L-1658"><span class="linenos" data-line="1658"></span></a> </span><span id="L-1659"><a href="#L-1659"><span class="linenos" data-line="1659"></span></a> </span><span id="L-1660"><a href="#L-1660"><span class="linenos" data-line="1660"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">count</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1661"><a href="#L-1661"><span class="linenos" data-line="1661"></span></a> <span class="c1">-- Count number of template parameters</span> </span><span id="L-1662"><a href="#L-1662"><span class="linenos" data-line="1662"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1663"><a href="#L-1663"><span class="linenos" data-line="1663"></span></a> <span class="c1">-- Return string with digits including "0"</span> </span><span id="L-1664"><a href="#L-1664"><span class="linenos" data-line="1664"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1665"><a href="#L-1665"><span class="linenos" data-line="1665"></span></a> <span class="c1">-- TemplatePar.count()</span> </span><span id="L-1666"><a href="#L-1666"><span class="linenos" data-line="1666"></span></a> <span class="kr">return</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">count</span><span class="p">()</span> <span class="p">)</span> </span><span id="L-1667"><a href="#L-1667"><span class="linenos" data-line="1667"></span></a><span class="kr">end</span> <span class="c1">-- p.count()</span> </span><span id="L-1668"><a href="#L-1668"><span class="linenos" data-line="1668"></span></a> </span><span id="L-1669"><a href="#L-1669"><span class="linenos" data-line="1669"></span></a> </span><span id="L-1670"><a href="#L-1670"><span class="linenos" data-line="1670"></span></a> </span><span id="L-1671"><a href="#L-1671"><span class="linenos" data-line="1671"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">countNotEmpty</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1672"><a href="#L-1672"><span class="linenos" data-line="1672"></span></a> <span class="c1">-- Count number of template parameters which are not empty</span> </span><span id="L-1673"><a href="#L-1673"><span class="linenos" data-line="1673"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1674"><a href="#L-1674"><span class="linenos" data-line="1674"></span></a> <span class="c1">-- Return string with digits including "0"</span> </span><span id="L-1675"><a href="#L-1675"><span class="linenos" data-line="1675"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1676"><a href="#L-1676"><span class="linenos" data-line="1676"></span></a> <span class="c1">-- TemplatePar.countNotEmpty()</span> </span><span id="L-1677"><a href="#L-1677"><span class="linenos" data-line="1677"></span></a> <span class="kr">return</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">countNotEmpty</span><span class="p">()</span> <span class="p">)</span> </span><span id="L-1678"><a href="#L-1678"><span class="linenos" data-line="1678"></span></a><span class="kr">end</span> <span class="c1">-- p.countNotEmpty()</span> </span><span id="L-1679"><a href="#L-1679"><span class="linenos" data-line="1679"></span></a> </span><span id="L-1680"><a href="#L-1680"><span class="linenos" data-line="1680"></span></a> </span><span id="L-1681"><a href="#L-1681"><span class="linenos" data-line="1681"></span></a> </span><span id="L-1682"><a href="#L-1682"><span class="linenos" data-line="1682"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">match</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1683"><a href="#L-1683"><span class="linenos" data-line="1683"></span></a> <span class="c1">-- Combined analysis of parameters and their values</span> </span><span id="L-1684"><a href="#L-1684"><span class="linenos" data-line="1684"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1685"><a href="#L-1685"><span class="linenos" data-line="1685"></span></a> <span class="c1">-- frame -- object; #invoke environment</span> </span><span id="L-1686"><a href="#L-1686"><span class="linenos" data-line="1686"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1687"><a href="#L-1687"><span class="linenos" data-line="1687"></span></a> <span class="c1">-- Return string with error message or ""</span> </span><span id="L-1688"><a href="#L-1688"><span class="linenos" data-line="1688"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1689"><a href="#L-1689"><span class="linenos" data-line="1689"></span></a> <span class="c1">-- TemplatePar.framing()</span> </span><span id="L-1690"><a href="#L-1690"><span class="linenos" data-line="1690"></span></a> <span class="c1">-- mw.text.trim()</span> </span><span id="L-1691"><a href="#L-1691"><span class="linenos" data-line="1691"></span></a> <span class="c1">-- mw.ustring.lower()</span> </span><span id="L-1692"><a href="#L-1692"><span class="linenos" data-line="1692"></span></a> <span class="c1">-- failure()</span> </span><span id="L-1693"><a href="#L-1693"><span class="linenos" data-line="1693"></span></a> <span class="c1">-- form()</span> </span><span id="L-1694"><a href="#L-1694"><span class="linenos" data-line="1694"></span></a> <span class="c1">-- TemplatePar.downcase()</span> </span><span id="L-1695"><a href="#L-1695"><span class="linenos" data-line="1695"></span></a> <span class="c1">-- figure()</span> </span><span id="L-1696"><a href="#L-1696"><span class="linenos" data-line="1696"></span></a> <span class="c1">-- feasible()</span> </span><span id="L-1697"><a href="#L-1697"><span class="linenos" data-line="1697"></span></a> <span class="c1">-- fault()</span> </span><span id="L-1698"><a href="#L-1698"><span class="linenos" data-line="1698"></span></a> <span class="c1">-- finalize()</span> </span><span id="L-1699"><a href="#L-1699"><span class="linenos" data-line="1699"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1700"><a href="#L-1700"><span class="linenos" data-line="1700"></span></a> <span class="kd">local</span> <span class="n">options</span> <span class="o">=</span> <span class="p">{</span> <span class="n">cat</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">cat</span><span class="p">,</span> </span><span id="L-1701"><a href="#L-1701"><span class="linenos" data-line="1701"></span></a> <span class="n">errNS</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">errNS</span><span class="p">,</span> </span><span id="L-1702"><a href="#L-1702"><span class="linenos" data-line="1702"></span></a> <span class="n">low</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">low</span><span class="p">,</span> </span><span id="L-1703"><a href="#L-1703"><span class="linenos" data-line="1703"></span></a> <span class="n">format</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">format</span><span class="p">,</span> </span><span id="L-1704"><a href="#L-1704"><span class="linenos" data-line="1704"></span></a> <span class="n">preview</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">preview</span><span class="p">,</span> </span><span id="L-1705"><a href="#L-1705"><span class="linenos" data-line="1705"></span></a> <span class="n">template</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">template</span> </span><span id="L-1706"><a href="#L-1706"><span class="linenos" data-line="1706"></span></a> <span class="p">}</span> </span><span id="L-1707"><a href="#L-1707"><span class="linenos" data-line="1707"></span></a> <span class="kd">local</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">s</span> </span><span id="L-1708"><a href="#L-1708"><span class="linenos" data-line="1708"></span></a> <span class="kd">local</span> <span class="n">params</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1709"><a href="#L-1709"><span class="linenos" data-line="1709"></span></a> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">framing</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1710"><a href="#L-1710"><span class="linenos" data-line="1710"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-1711"><a href="#L-1711"><span class="linenos" data-line="1711"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">k</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">"number"</span> <span class="kr">then</span> </span><span id="L-1712"><a href="#L-1712"><span class="linenos" data-line="1712"></span></a> <span class="n">s</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">v</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">"^ *([^=]+) *= *(%S.*%S*) *$"</span> <span class="p">)</span> </span><span id="L-1713"><a href="#L-1713"><span class="linenos" data-line="1713"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1714"><a href="#L-1714"><span class="linenos" data-line="1714"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-1715"><a href="#L-1715"><span class="linenos" data-line="1715"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-1716"><a href="#L-1716"><span class="linenos" data-line="1716"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1717"><a href="#L-1717"><span class="linenos" data-line="1717"></span></a> <span class="kr">end</span> </span><span id="L-1718"><a href="#L-1718"><span class="linenos" data-line="1718"></span></a> <span class="kr">end</span> </span><span id="L-1719"><a href="#L-1719"><span class="linenos" data-line="1719"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1720"><a href="#L-1720"><span class="linenos" data-line="1720"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">low</span> <span class="kr">then</span> </span><span id="L-1721"><a href="#L-1721"><span class="linenos" data-line="1721"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">lower</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> </span><span id="L-1722"><a href="#L-1722"><span class="linenos" data-line="1722"></span></a> <span class="kr">end</span> </span><span id="L-1723"><a href="#L-1723"><span class="linenos" data-line="1723"></span></a> <span class="kr">if</span> <span class="n">params</span><span class="p">[</span> <span class="n">s</span> <span class="p">]</span> <span class="kr">then</span> </span><span id="L-1724"><a href="#L-1724"><span class="linenos" data-line="1724"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">params</span><span class="p">[</span> <span class="n">s</span> <span class="p">]</span> </span><span id="L-1725"><a href="#L-1725"><span class="linenos" data-line="1725"></span></a> <span class="n">s</span><span class="p">[</span> <span class="o">#</span><span class="n">s</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="L-1726"><a href="#L-1726"><span class="linenos" data-line="1726"></span></a> <span class="kr">else</span> </span><span id="L-1727"><a href="#L-1727"><span class="linenos" data-line="1727"></span></a> <span class="n">params</span><span class="p">[</span> <span class="n">s</span> <span class="p">]</span> <span class="o">=</span> <span class="p">{</span> <span class="n">v</span> <span class="p">}</span> </span><span id="L-1728"><a href="#L-1728"><span class="linenos" data-line="1728"></span></a> <span class="kr">end</span> </span><span id="L-1729"><a href="#L-1729"><span class="linenos" data-line="1729"></span></a> <span class="kr">else</span> </span><span id="L-1730"><a href="#L-1730"><span class="linenos" data-line="1730"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"invalidPar"</span><span class="p">,</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">k</span> <span class="p">),</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1731"><a href="#L-1731"><span class="linenos" data-line="1731"></span></a> <span class="kr">break</span> <span class="c1">-- for k, v</span> </span><span id="L-1732"><a href="#L-1732"><span class="linenos" data-line="1732"></span></a> <span class="kr">end</span> </span><span id="L-1733"><a href="#L-1733"><span class="linenos" data-line="1733"></span></a> <span class="kr">end</span> </span><span id="L-1734"><a href="#L-1734"><span class="linenos" data-line="1734"></span></a> <span class="kr">end</span> <span class="c1">-- for k, v</span> </span><span id="L-1735"><a href="#L-1735"><span class="linenos" data-line="1735"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1736"><a href="#L-1736"><span class="linenos" data-line="1736"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="p">{</span> <span class="p">}</span> </span><span id="L-1737"><a href="#L-1737"><span class="linenos" data-line="1737"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">params</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-1738"><a href="#L-1738"><span class="linenos" data-line="1738"></span></a> <span class="n">s</span><span class="p">[</span> <span class="o">#</span><span class="n">s</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">]</span> <span class="o">=</span> <span class="n">k</span> </span><span id="L-1739"><a href="#L-1739"><span class="linenos" data-line="1739"></span></a> <span class="kr">end</span> <span class="c1">-- for k, v</span> </span><span id="L-1740"><a href="#L-1740"><span class="linenos" data-line="1740"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">optional</span> <span class="o">=</span> <span class="n">s</span> </span><span id="L-1741"><a href="#L-1741"><span class="linenos" data-line="1741"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">form</span><span class="p">(</span> <span class="kc">true</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1742"><a href="#L-1742"><span class="linenos" data-line="1742"></span></a> <span class="kr">end</span> </span><span id="L-1743"><a href="#L-1743"><span class="linenos" data-line="1743"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1744"><a href="#L-1744"><span class="linenos" data-line="1744"></span></a> <span class="kd">local</span> <span class="n">errMiss</span><span class="p">,</span> <span class="n">errValues</span><span class="p">,</span> <span class="n">lack</span><span class="p">,</span> <span class="n">rule</span> </span><span id="L-1745"><a href="#L-1745"><span class="linenos" data-line="1745"></span></a> <span class="kd">local</span> <span class="n">targs</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span> </span><span id="L-1746"><a href="#L-1746"><span class="linenos" data-line="1746"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">optional</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-1747"><a href="#L-1747"><span class="linenos" data-line="1747"></span></a> <span class="kr">if</span> <span class="n">options</span><span class="p">.</span><span class="n">low</span> <span class="kr">then</span> </span><span id="L-1748"><a href="#L-1748"><span class="linenos" data-line="1748"></span></a> <span class="n">targs</span> <span class="o">=</span> <span class="n">TemplatePar</span><span class="p">.</span><span class="n">downcase</span><span class="p">()</span> </span><span id="L-1749"><a href="#L-1749"><span class="linenos" data-line="1749"></span></a> <span class="kr">else</span> </span><span id="L-1750"><a href="#L-1750"><span class="linenos" data-line="1750"></span></a> <span class="n">targs</span> <span class="o">=</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">().</span><span class="n">args</span> </span><span id="L-1751"><a href="#L-1751"><span class="linenos" data-line="1751"></span></a> <span class="kr">end</span> </span><span id="L-1752"><a href="#L-1752"><span class="linenos" data-line="1752"></span></a> <span class="n">errMiss</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1753"><a href="#L-1753"><span class="linenos" data-line="1753"></span></a> <span class="n">errValues</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1754"><a href="#L-1754"><span class="linenos" data-line="1754"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">params</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-1755"><a href="#L-1755"><span class="linenos" data-line="1755"></span></a> <span class="n">options</span><span class="p">.</span><span class="n">say</span> <span class="o">=</span> <span class="n">k</span> </span><span id="L-1756"><a href="#L-1756"><span class="linenos" data-line="1756"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">targs</span><span class="p">[</span> <span class="n">k</span> <span class="p">]</span> </span><span id="L-1757"><a href="#L-1757"><span class="linenos" data-line="1757"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1758"><a href="#L-1758"><span class="linenos" data-line="1758"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-1759"><a href="#L-1759"><span class="linenos" data-line="1759"></span></a> <span class="n">lack</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-1760"><a href="#L-1760"><span class="linenos" data-line="1760"></span></a> <span class="kr">else</span> </span><span id="L-1761"><a href="#L-1761"><span class="linenos" data-line="1761"></span></a> <span class="n">lack</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1762"><a href="#L-1762"><span class="linenos" data-line="1762"></span></a> <span class="kr">end</span> </span><span id="L-1763"><a href="#L-1763"><span class="linenos" data-line="1763"></span></a> <span class="kr">else</span> </span><span id="L-1764"><a href="#L-1764"><span class="linenos" data-line="1764"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">""</span> </span><span id="L-1765"><a href="#L-1765"><span class="linenos" data-line="1765"></span></a> <span class="n">lack</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-1766"><a href="#L-1766"><span class="linenos" data-line="1766"></span></a> <span class="kr">end</span> </span><span id="L-1767"><a href="#L-1767"><span class="linenos" data-line="1767"></span></a> <span class="kr">for</span> <span class="n">r</span><span class="p">,</span> <span class="n">rule</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span> <span class="n">v</span> <span class="p">)</span> <span class="kr">do</span> </span><span id="L-1768"><a href="#L-1768"><span class="linenos" data-line="1768"></span></a> <span class="n">options</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span> <span class="n">rule</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1769"><a href="#L-1769"><span class="linenos" data-line="1769"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">feasible</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> </span><span id="L-1770"><a href="#L-1770"><span class="linenos" data-line="1770"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1771"><a href="#L-1771"><span class="linenos" data-line="1771"></span></a> <span class="kr">if</span> <span class="n">lack</span> <span class="kr">then</span> </span><span id="L-1772"><a href="#L-1772"><span class="linenos" data-line="1772"></span></a> <span class="kr">if</span> <span class="n">errMiss</span> <span class="kr">then</span> </span><span id="L-1773"><a href="#L-1773"><span class="linenos" data-line="1773"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">"%s, &quot;%s&quot;"</span> </span><span id="L-1774"><a href="#L-1774"><span class="linenos" data-line="1774"></span></a> <span class="n">errMiss</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">errMiss</span><span class="p">,</span> <span class="n">k</span> <span class="p">)</span> </span><span id="L-1775"><a href="#L-1775"><span class="linenos" data-line="1775"></span></a> <span class="kr">else</span> </span><span id="L-1776"><a href="#L-1776"><span class="linenos" data-line="1776"></span></a> <span class="n">errMiss</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">"&quot;%s&quot;"</span><span class="p">,</span> </span><span id="L-1777"><a href="#L-1777"><span class="linenos" data-line="1777"></span></a> <span class="n">k</span> <span class="p">)</span> </span><span id="L-1778"><a href="#L-1778"><span class="linenos" data-line="1778"></span></a> <span class="kr">end</span> </span><span id="L-1779"><a href="#L-1779"><span class="linenos" data-line="1779"></span></a> <span class="kr">elseif</span> <span class="ow">not</span> <span class="n">errMiss</span> <span class="kr">then</span> </span><span id="L-1780"><a href="#L-1780"><span class="linenos" data-line="1780"></span></a> <span class="n">errValues</span> <span class="o">=</span> <span class="n">fault</span><span class="p">(</span> <span class="n">errValues</span><span class="p">,</span> <span class="n">r</span> <span class="p">)</span> </span><span id="L-1781"><a href="#L-1781"><span class="linenos" data-line="1781"></span></a> <span class="kr">end</span> </span><span id="L-1782"><a href="#L-1782"><span class="linenos" data-line="1782"></span></a> <span class="kr">break</span> <span class="c1">-- for r, rule</span> </span><span id="L-1783"><a href="#L-1783"><span class="linenos" data-line="1783"></span></a> <span class="kr">end</span> </span><span id="L-1784"><a href="#L-1784"><span class="linenos" data-line="1784"></span></a> <span class="kr">end</span> <span class="c1">-- for s, rule</span> </span><span id="L-1785"><a href="#L-1785"><span class="linenos" data-line="1785"></span></a> <span class="kr">end</span> <span class="c1">-- for k, v</span> </span><span id="L-1786"><a href="#L-1786"><span class="linenos" data-line="1786"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">(</span> <span class="n">errMiss</span> <span class="ow">or</span> <span class="n">errValues</span> <span class="p">)</span> </span><span id="L-1787"><a href="#L-1787"><span class="linenos" data-line="1787"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1788"><a href="#L-1788"><span class="linenos" data-line="1788"></span></a> <span class="kr">if</span> <span class="n">errMiss</span> <span class="kr">then</span> </span><span id="L-1789"><a href="#L-1789"><span class="linenos" data-line="1789"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"undefined"</span><span class="p">,</span> <span class="n">errMiss</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1790"><a href="#L-1790"><span class="linenos" data-line="1790"></span></a> <span class="kr">else</span> </span><span id="L-1791"><a href="#L-1791"><span class="linenos" data-line="1791"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">failure</span><span class="p">(</span> <span class="s2">"invalid"</span><span class="p">,</span> <span class="n">errValues</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1792"><a href="#L-1792"><span class="linenos" data-line="1792"></span></a> <span class="kr">end</span> </span><span id="L-1793"><a href="#L-1793"><span class="linenos" data-line="1793"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">finalize</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">options</span> <span class="p">)</span> </span><span id="L-1794"><a href="#L-1794"><span class="linenos" data-line="1794"></span></a> <span class="kr">end</span> </span><span id="L-1795"><a href="#L-1795"><span class="linenos" data-line="1795"></span></a> <span class="kr">end</span> </span><span id="L-1796"><a href="#L-1796"><span class="linenos" data-line="1796"></span></a> <span class="kr">return</span> <span class="n">r</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-1797"><a href="#L-1797"><span class="linenos" data-line="1797"></span></a><span class="kr">end</span> <span class="c1">-- p.match()</span> </span><span id="L-1798"><a href="#L-1798"><span class="linenos" data-line="1798"></span></a> </span><span id="L-1799"><a href="#L-1799"><span class="linenos" data-line="1799"></span></a> </span><span id="L-1800"><a href="#L-1800"><span class="linenos" data-line="1800"></span></a> </span><span id="L-1801"><a href="#L-1801"><span class="linenos" data-line="1801"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">valid</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1802"><a href="#L-1802"><span class="linenos" data-line="1802"></span></a> <span class="c1">-- Check validity of one particular template parameter</span> </span><span id="L-1803"><a href="#L-1803"><span class="linenos" data-line="1803"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1804"><a href="#L-1804"><span class="linenos" data-line="1804"></span></a> <span class="c1">-- frame -- object; #invoke environment</span> </span><span id="L-1805"><a href="#L-1805"><span class="linenos" data-line="1805"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1806"><a href="#L-1806"><span class="linenos" data-line="1806"></span></a> <span class="c1">-- Return string with error message or ""</span> </span><span id="L-1807"><a href="#L-1807"><span class="linenos" data-line="1807"></span></a> <span class="c1">-- Uses:</span> </span><span id="L-1808"><a href="#L-1808"><span class="linenos" data-line="1808"></span></a> <span class="c1">-- furnish()</span> </span><span id="L-1809"><a href="#L-1809"><span class="linenos" data-line="1809"></span></a> <span class="kr">return</span> <span class="n">furnish</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">"valid"</span> <span class="p">)</span> </span><span id="L-1810"><a href="#L-1810"><span class="linenos" data-line="1810"></span></a><span class="kr">end</span> <span class="c1">-- p.valid()</span> </span><span id="L-1811"><a href="#L-1811"><span class="linenos" data-line="1811"></span></a> </span><span id="L-1812"><a href="#L-1812"><span class="linenos" data-line="1812"></span></a> </span><span id="L-1813"><a href="#L-1813"><span class="linenos" data-line="1813"></span></a> </span><span id="L-1814"><a href="#L-1814"><span class="linenos" data-line="1814"></span></a><span class="n">p</span><span class="p">.</span><span class="n">failsafe</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1815"><a href="#L-1815"><span class="linenos" data-line="1815"></span></a> <span class="c1">-- Versioning interface</span> </span><span id="L-1816"><a href="#L-1816"><span class="linenos" data-line="1816"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-1817"><a href="#L-1817"><span class="linenos" data-line="1817"></span></a> <span class="kd">local</span> <span class="n">since</span> </span><span id="L-1818"><a href="#L-1818"><span class="linenos" data-line="1818"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">"table"</span> <span class="kr">then</span> </span><span id="L-1819"><a href="#L-1819"><span class="linenos" data-line="1819"></span></a> <span class="n">since</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span> <span class="mi">1</span> <span class="p">]</span> </span><span id="L-1820"><a href="#L-1820"><span class="linenos" data-line="1820"></span></a> <span class="kr">elseif</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="kr">then</span> </span><span id="L-1821"><a href="#L-1821"><span class="linenos" data-line="1821"></span></a> <span class="n">since</span> <span class="o">=</span> <span class="n">frame</span> </span><span id="L-1822"><a href="#L-1822"><span class="linenos" data-line="1822"></span></a> <span class="kr">end</span> </span><span id="L-1823"><a href="#L-1823"><span class="linenos" data-line="1823"></span></a> <span class="kr">if</span> <span class="n">since</span> <span class="kr">then</span> </span><span id="L-1824"><a href="#L-1824"><span class="linenos" data-line="1824"></span></a> <span class="n">since</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">since</span> <span class="p">)</span> </span><span id="L-1825"><a href="#L-1825"><span class="linenos" data-line="1825"></span></a> <span class="kr">if</span> <span class="n">since</span> <span class="o">==</span> <span class="s2">""</span> <span class="kr">then</span> </span><span id="L-1826"><a href="#L-1826"><span class="linenos" data-line="1826"></span></a> <span class="n">since</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-1827"><a href="#L-1827"><span class="linenos" data-line="1827"></span></a> <span class="kr">end</span> </span><span id="L-1828"><a href="#L-1828"><span class="linenos" data-line="1828"></span></a> <span class="kr">end</span> </span><span id="L-1829"><a href="#L-1829"><span class="linenos" data-line="1829"></span></a> <span class="kr">return</span> <span class="n">Failsafe</span><span class="p">.</span><span class="n">failsafe</span><span class="p">(</span> <span class="n">since</span> <span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span> </span><span id="L-1830"><a href="#L-1830"><span class="linenos" data-line="1830"></span></a><span class="kr">end</span> <span class="c1">-- p.failsafe</span> </span><span id="L-1831"><a href="#L-1831"><span class="linenos" data-line="1831"></span></a> </span><span id="L-1832"><a href="#L-1832"><span class="linenos" data-line="1832"></span></a> </span><span id="L-1833"><a href="#L-1833"><span class="linenos" data-line="1833"></span></a> </span><span id="L-1834"><a href="#L-1834"><span class="linenos" data-line="1834"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">TemplatePar</span><span class="p">()</span> </span><span id="L-1835"><a href="#L-1835"><span class="linenos" data-line="1835"></span></a> <span class="c1">-- Retrieve function access for modules</span> </span><span id="L-1836"><a href="#L-1836"><span class="linenos" data-line="1836"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1837"><a href="#L-1837"><span class="linenos" data-line="1837"></span></a> <span class="c1">-- Return table with functions</span> </span><span id="L-1838"><a href="#L-1838"><span class="linenos" data-line="1838"></span></a> <span class="kr">return</span> <span class="n">TemplatePar</span> </span><span id="L-1839"><a href="#L-1839"><span class="linenos" data-line="1839"></span></a><span class="kr">end</span> <span class="c1">-- p.TemplatePar()</span> </span><span id="L-1840"><a href="#L-1840"><span class="linenos" data-line="1840"></span></a> </span><span id="L-1841"><a href="#L-1841"><span class="linenos" data-line="1841"></span></a> </span><span id="L-1842"><a href="#L-1842"><span class="linenos" data-line="1842"></span></a> </span><span id="L-1843"><a href="#L-1843"><span class="linenos" data-line="1843"></span></a><span class="nb">setmetatable</span><span class="p">(</span> <span class="n">p</span><span class="p">,</span> <span class="p">{</span> <span class="n">__call</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">func</span><span class="p">,</span> <span class="p">...</span> <span class="p">)</span> </span><span id="L-1844"><a href="#L-1844"><span class="linenos" data-line="1844"></span></a> <span class="nb">setmetatable</span><span class="p">(</span> <span class="n">p</span><span class="p">,</span> <span class="kc">nil</span> <span class="p">)</span> </span><span id="L-1845"><a href="#L-1845"><span class="linenos" data-line="1845"></span></a> <span class="kr">return</span> <span class="n">Failsafe</span> </span><span id="L-1846"><a href="#L-1846"><span class="linenos" data-line="1846"></span></a> <span class="kr">end</span> <span class="p">}</span> <span class="p">)</span> </span><span id="L-1847"><a href="#L-1847"><span class="linenos" data-line="1847"></span></a> </span><span id="L-1848"><a href="#L-1848"><span class="linenos" data-line="1848"></span></a><span class="kr">return</span> <span class="n">p</span> </span></pre></div></div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?useformat=desktop&type=1x1&usesul3=0" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Abgerufen von „<a dir="ltr" href="https://de.wikipedia.org/w/index.php?title=Modul:TemplatePar&oldid=232032714">https://de.wikipedia.org/w/index.php?title=Modul:TemplatePar&oldid=232032714</a>“</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Wikipedia:Kategorien" title="Wikipedia:Kategorien">Kategorie</a>: <ul><li><a href="/wiki/Kategorie:Wikipedia:Lua/Modul/Global_via_WikiData/Mutter" title="Kategorie:Wikipedia:Lua/Modul/Global via WikiData/Mutter">Wikipedia:Lua/Modul/Global via WikiData/Mutter</a></li></ul></div></div> </div> </div> <div id="mw-navigation"> <h2>Navigationsmenü</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">Meine Werkzeuge</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anonuserpage" class="mw-list-item"><span title="Benutzerseite der IP-Adresse, von der aus du Änderungen durchführst">Nicht angemeldet</span></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Spezial:Meine_Diskussionsseite" title="Diskussion über Änderungen von dieser IP-Adresse [n]" accesskey="n"><span>Diskussionsseite</span></a></li><li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Spezial:Meine_Beitr%C3%A4ge" title="Eine Liste der Bearbeitungen, die von dieser IP-Adresse gemacht wurden [y]" accesskey="y"><span>Beiträge</span></a></li><li id="pt-createaccount" class="mw-list-item"><a href="/w/index.php?title=Spezial:Benutzerkonto_anlegen&returnto=Modul%3ATemplatePar" title="Wir ermutigen dich dazu, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich."><span>Benutzerkonto erstellen</span></a></li><li id="pt-login" class="mw-list-item"><a href="/w/index.php?title=Spezial:Anmelden&returnto=Modul%3ATemplatePar" title="Anmelden ist zwar keine Pflicht, wird aber gerne gesehen. [o]" accesskey="o"><span>Anmelden</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">Namensräume</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/Modul:TemplatePar" title="Die Modulseite ansehen [c]" accesskey="c"><span>Modul</span></a></li><li id="ca-talk" class="mw-list-item"><a href="/wiki/Modul_Diskussion:TemplatePar" rel="discussion" class="mw-redirect" title="Diskussion zum Seiteninhalt [t]" accesskey="t"><span>Diskussion</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">Ansichten</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/Modul:TemplatePar"><span>Lesen</span></a></li><li id="ca-viewsource" class="mw-list-item"><a href="/w/index.php?title=Modul:TemplatePar&action=edit" title="Diese Seite ist geschützt. Ihr Quelltext kann dennoch angesehen und kopiert werden. [e]" accesskey="e"><span>Quelltext anzeigen</span></a></li><li id="ca-history" class="mw-list-item"><a href="/w/index.php?title=Modul:TemplatePar&action=history" title="Frühere Versionen dieser Seite [h]" accesskey="h"><span>Versionsgeschichte</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="Weitere Optionen" > <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">Weitere</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 >Suche</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="Wikipedia durchsuchen" aria-label="Wikipedia durchsuchen" autocapitalize="sentences" title="Durchsuche die Wikipedia [f]" accesskey="f" id="searchInput" > <input type="hidden" name="title" value="Spezial:Suche"> <input id="mw-searchButton" class="searchButton mw-fallbackSearchButton" type="submit" name="fulltext" title="Suche nach Seiten, die diesen Text enthalten" value="Suchen"> <input id="searchButton" class="searchButton" type="submit" name="go" title="Gehe direkt zu der Seite mit genau diesem Namen, falls sie vorhanden ist." value="Artikel"> </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/Wikipedia:Hauptseite" title="Hauptseite"></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-description" class="mw-list-item"><a href="/wiki/Wikipedia:Hauptseite" title="Hauptseite besuchen [z]" accesskey="z"><span>Hauptseite</span></a></li><li id="n-topics" class="mw-list-item"><a href="/wiki/Portal:Wikipedia_nach_Themen"><span>Themenportale</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Spezial:Zuf%C3%A4llige_Seite" title="Zufällige Seite aufrufen [x]" accesskey="x"><span>Zufälliger Artikel</span></a></li><li id="n-specialpages" class="mw-list-item"><a href="/wiki/Spezial:Spezialseiten"><span>Spezialseiten</span></a></li> </ul> </div> </nav> <nav id="p-Mitmachen" class="mw-portlet mw-portlet-Mitmachen vector-menu-portal portal vector-menu" aria-labelledby="p-Mitmachen-label" > <h3 id="p-Mitmachen-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Mitmachen</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-Artikel-verbessern" class="mw-list-item"><a href="/wiki/Wikipedia:Beteiligen"><span>Artikel verbessern</span></a></li><li id="n-Neuerartikel" class="mw-list-item"><a href="/wiki/Hilfe:Neuen_Artikel_anlegen"><span>Neuen Artikel anlegen</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Autorenportal" title="Info-Zentrum über Beteiligungsmöglichkeiten"><span>Autorenportal</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Hilfe:%C3%9Cbersicht" title="Übersicht über Hilfeseiten"><span>Hilfe</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Spezial:Letzte_%C3%84nderungen" title="Liste der letzten Änderungen in Wikipedia [r]" accesskey="r"><span>Letzte Änderungen</span></a></li><li id="n-contact" class="mw-list-item"><a href="/wiki/Wikipedia:Kontakt" title="Kontaktmöglichkeiten"><span>Kontakt</span></a></li><li id="n-sitesupport" class="mw-list-item"><a href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=de.wikipedia.org&uselang=de" title="Unterstütze uns"><span>Spenden</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">Werkzeuge</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Spezial:Linkliste/Modul:TemplatePar" title="Liste aller Seiten, die hierher verlinken [j]" accesskey="j"><span>Links auf diese Seite</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Spezial:%C3%84nderungen_an_verlinkten_Seiten/Modul:TemplatePar" rel="nofollow" title="Letzte Änderungen an Seiten, die von hier verlinkt sind [k]" accesskey="k"><span>Änderungen an verlinkten Seiten</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Modul:TemplatePar&oldid=232032714" title="Dauerhafter Link zu dieser Seitenversion"><span>Permanenter Link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Modul:TemplatePar&action=info" title="Weitere Informationen über diese Seite"><span>Seiteninformationen</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Spezial:URL-K%C3%BCrzung&url=https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FModul%3ATemplatePar"><span>Kurzlink</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Spezial:QrCode&url=https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FModul%3ATemplatePar"><span>QR-Code herunterladen</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">Drucken/Exportieren</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="electron-print_pdf" class="mw-list-item"><a href="/w/index.php?title=Spezial:DownloadAsPdf&page=Modul%3ATemplatePar&action=show-download-screen"><span>Als PDF herunterladen</span></a></li><li id="t-print" class="mw-list-item"><a href="javascript:print();" rel="alternate" title="Druckansicht dieser Seite [p]" accesskey="p"><span>Druckversion</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 anderen Projekten</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Module:TemplatePar" hreflang="en"><span>Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-wikidata mw-list-item"><a href="https://www.wikidata.org/wiki/Module:TemplatePar" hreflang="en"><span>Wikidata</span></a></li><li class="wb-otherproject-link wb-otherproject-wikivoyage mw-list-item"><a href="https://de.wikivoyage.org/wiki/Modul:TemplatePar" hreflang="de"><span>Wikivoyage</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q15393417" title="Link zum verbundenen Objekt im Datenrepositorium [g]" accesskey="g"><span>Wikidata-Datenobjekt</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 anderen Sprachen</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-als mw-list-item"><a href="https://als.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Schweizerdeutsch" lang="gsw" hreflang="gsw" data-title="Modul:TemplatePar" data-language-autonym="Alemannisch" data-language-local-name="Schweizerdeutsch" class="interlanguage-link-target"><span>Alemannisch</span></a></li><li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D9%88%D8%AD%D8%AF%D8%A9:TemplatePar" title="وحدة:TemplatePar – Arabisch" lang="ar" hreflang="ar" data-title="وحدة:TemplatePar" data-language-autonym="العربية" data-language-local-name="Arabisch" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-as mw-list-item"><a href="https://as.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Assamesisch" lang="as" hreflang="as" data-title="Module:TemplatePar" data-language-autonym="অসমীয়া" data-language-local-name="Assamesisch" class="interlanguage-link-target"><span>অসমীয়া</span></a></li><li class="interlanguage-link interwiki-ast mw-list-item"><a href="https://ast.wikipedia.org/wiki/M%C3%B3dulu:TemplatePar" title="Módulu:TemplatePar – Asturisch" lang="ast" hreflang="ast" data-title="Módulu:TemplatePar" data-language-autonym="Asturianu" data-language-local-name="Asturisch" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Aserbaidschanisch" lang="az" hreflang="az" data-title="Modul:TemplatePar" data-language-autonym="Azərbaycanca" data-language-local-name="Aserbaidschanisch" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-azb mw-list-item"><a href="https://azb.wikipedia.org/wiki/%D9%85%D8%A7%DA%98%D9%88%D9%84:TemplatePar" title="ماژول:TemplatePar – Südaserbaidschanisch" lang="azb" hreflang="azb" data-title="ماژول:TemplatePar" data-language-autonym="تۆرکجه" data-language-local-name="Südaserbaidschanisch" class="interlanguage-link-target"><span>تۆرکجه</span></a></li><li class="interlanguage-link interwiki-ban mw-list-item"><a href="https://ban.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Balinesisch" lang="ban" hreflang="ban" data-title="Modul:TemplatePar" data-language-autonym="Basa Bali" data-language-local-name="Balinesisch" class="interlanguage-link-target"><span>Basa Bali</span></a></li><li class="interlanguage-link interwiki-bh mw-list-item"><a href="https://bh.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Bhojpuri" lang="bh" hreflang="bh" data-title="Module:TemplatePar" data-language-autonym="भोजपुरी" data-language-local-name="Bhojpuri" class="interlanguage-link-target"><span>भोजपुरी</span></a></li><li class="interlanguage-link interwiki-bjn mw-list-item"><a href="https://bjn.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Banjaresisch" lang="bjn" hreflang="bjn" data-title="Modul:TemplatePar" data-language-autonym="Banjar" data-language-local-name="Banjaresisch" class="interlanguage-link-target"><span>Banjar</span></a></li><li class="interlanguage-link interwiki-blk mw-list-item"><a href="https://blk.wikipedia.org/wiki/%E1%80%99%E1%80%B1%E1%80%AC%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0%E1%80%B8:TemplatePar" title="မော်ဂျူး:TemplatePar – Pa'O" lang="blk" hreflang="blk" data-title="မော်ဂျူး:TemplatePar" data-language-autonym="ပအိုဝ်ႏဘာႏသာႏ" data-language-local-name="Pa'O" class="interlanguage-link-target"><span>ပအိုဝ်ႏဘာႏသာႏ</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%AE%E0%A6%A1%E0%A6%BF%E0%A6%89%E0%A6%B2:TemplatePar" title="মডিউল:TemplatePar – Bengalisch" lang="bn" hreflang="bn" data-title="মডিউল:TemplatePar" data-language-autonym="বাংলা" data-language-local-name="Bengalisch" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-br mw-list-item"><a href="https://br.wikipedia.org/wiki/Modulenn:TemplatePar" title="Modulenn:TemplatePar – Bretonisch" lang="br" hreflang="br" data-title="Modulenn:TemplatePar" data-language-autonym="Brezhoneg" data-language-local-name="Bretonisch" class="interlanguage-link-target"><span>Brezhoneg</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Bosnisch" lang="bs" hreflang="bs" data-title="Modul:TemplatePar" data-language-autonym="Bosanski" data-language-local-name="Bosnisch" class="interlanguage-link-target"><span>Bosanski</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/M%C3%B2dul:TemplatePar" title="Mòdul:TemplatePar – Katalanisch" lang="ca" hreflang="ca" data-title="Mòdul:TemplatePar" data-language-autonym="Català" data-language-local-name="Katalanisch" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cdo mw-list-item"><a href="https://cdo.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:TemplatePar" title="模組:TemplatePar – Min Dong" lang="cdo" hreflang="cdo" data-title="模組:TemplatePar" data-language-autonym="閩東語 / Mìng-dĕ̤ng-ngṳ̄" data-language-local-name="Min Dong" class="interlanguage-link-target"><span>閩東語 / Mìng-dĕ̤ng-ngṳ̄</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wikipedia.org/wiki/%D9%85%DB%86%D8%AF%DB%8C%D9%88%D9%88%D9%84:TemplatePar" title="مۆدیوول:TemplatePar – Zentralkurdisch" lang="ckb" hreflang="ckb" data-title="مۆدیوول:TemplatePar" data-language-autonym="کوردی" data-language-local-name="Zentralkurdisch" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-cy mw-list-item"><a href="https://cy.wikipedia.org/wiki/Modiwl:TemplatePar" title="Modiwl:TemplatePar – Walisisch" lang="cy" hreflang="cy" data-title="Modiwl:TemplatePar" data-language-autonym="Cymraeg" data-language-local-name="Walisisch" class="interlanguage-link-target"><span>Cymraeg</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Dänisch" lang="da" hreflang="da" data-title="Modul:TemplatePar" data-language-autonym="Dansk" data-language-local-name="Dänisch" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-dag mw-list-item"><a href="https://dag.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Dagbani" lang="dag" hreflang="dag" data-title="Module:TemplatePar" data-language-autonym="Dagbanli" data-language-local-name="Dagbani" class="interlanguage-link-target"><span>Dagbanli</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Englisch" lang="en" hreflang="en" data-title="Module:TemplatePar" data-language-autonym="English" data-language-local-name="Englisch" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/M%C3%B3dulo:TemplatePar" title="Módulo:TemplatePar – Spanisch" lang="es" hreflang="es" data-title="Módulo:TemplatePar" data-language-autonym="Español" data-language-local-name="Spanisch" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Modulu:TemplatePar" title="Modulu:TemplatePar – Baskisch" lang="eu" hreflang="eu" data-title="Modulu:TemplatePar" data-language-autonym="Euskara" data-language-local-name="Baskisch" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:TemplatePar" title="پودمان:TemplatePar – Persisch" lang="fa" hreflang="fa" data-title="پودمان:TemplatePar" data-language-autonym="فارسی" data-language-local-name="Persisch" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fo mw-list-item"><a href="https://fo.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Färöisch" lang="fo" hreflang="fo" data-title="Module:TemplatePar" data-language-autonym="Føroyskt" data-language-local-name="Färöisch" class="interlanguage-link-target"><span>Føroyskt</span></a></li><li class="interlanguage-link interwiki-frr mw-list-item"><a href="https://frr.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Nordfriesisch" lang="frr" hreflang="frr" data-title="Modul:TemplatePar" data-language-autonym="Nordfriisk" data-language-local-name="Nordfriesisch" class="interlanguage-link-target"><span>Nordfriisk</span></a></li><li class="interlanguage-link interwiki-ga mw-list-item"><a href="https://ga.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Irisch" lang="ga" hreflang="ga" data-title="Module:TemplatePar" data-language-autonym="Gaeilge" data-language-local-name="Irisch" class="interlanguage-link-target"><span>Gaeilge</span></a></li><li class="interlanguage-link interwiki-gl mw-list-item"><a href="https://gl.wikipedia.org/wiki/M%C3%B3dulo:TemplatePar" title="Módulo:TemplatePar – Galicisch" lang="gl" hreflang="gl" data-title="Módulo:TemplatePar" data-language-autonym="Galego" data-language-local-name="Galicisch" class="interlanguage-link-target"><span>Galego</span></a></li><li class="interlanguage-link interwiki-gu mw-list-item"><a href="https://gu.wikipedia.org/wiki/%E0%AA%B5%E0%AA%BF%E0%AA%AD%E0%AA%BE%E0%AA%97:TemplatePar" title="વિભાગ:TemplatePar – Gujarati" lang="gu" hreflang="gu" data-title="વિભાગ:TemplatePar" data-language-autonym="ગુજરાતી" data-language-local-name="Gujarati" class="interlanguage-link-target"><span>ગુજરાતી</span></a></li><li class="interlanguage-link interwiki-guc mw-list-item"><a href="https://guc.wikipedia.org/wiki/M%C3%B3dulo:TemplatePar" title="Módulo:TemplatePar – Wayúu" lang="guc" hreflang="guc" data-title="Módulo:TemplatePar" data-language-autonym="Wayuunaiki" data-language-local-name="Wayúu" class="interlanguage-link-target"><span>Wayuunaiki</span></a></li><li class="interlanguage-link interwiki-ha mw-list-item"><a href="https://ha.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Haussa" lang="ha" hreflang="ha" data-title="Module:TemplatePar" data-language-autonym="Hausa" data-language-local-name="Haussa" class="interlanguage-link-target"><span>Hausa</span></a></li><li class="interlanguage-link interwiki-hak mw-list-item"><a href="https://hak.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:TemplatePar" title="模組:TemplatePar – Hakka" lang="hak" hreflang="hak" data-title="模組:TemplatePar" data-language-autonym="客家語 / Hak-kâ-ngî" data-language-local-name="Hakka" class="interlanguage-link-target"><span>客家語 / Hak-kâ-ngî</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%89%E0%A4%A1%E0%A5%8D%E0%A4%AF%E0%A5%82%E0%A4%B2:TemplatePar" title="मॉड्यूल:TemplatePar – Hindi" lang="hi" hreflang="hi" data-title="मॉड्यूल:TemplatePar" data-language-autonym="हिन्दी" data-language-local-name="Hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/%D5%84%D5%B8%D5%A4%D5%B8%D6%82%D5%AC:TemplatePar" title="Մոդուլ:TemplatePar – Armenisch" lang="hy" hreflang="hy" data-title="Մոդուլ:TemplatePar" data-language-autonym="Հայերեն" data-language-local-name="Armenisch" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Indonesisch" lang="id" hreflang="id" data-title="Modul:TemplatePar" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesisch" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-ilo mw-list-item"><a href="https://ilo.wikipedia.org/wiki/Modulo:TemplatePar" title="Modulo:TemplatePar – Ilokano" lang="ilo" hreflang="ilo" data-title="Modulo:TemplatePar" data-language-autonym="Ilokano" data-language-local-name="Ilokano" class="interlanguage-link-target"><span>Ilokano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:TemplatePar" title="モジュール:TemplatePar – Japanisch" lang="ja" hreflang="ja" data-title="モジュール:TemplatePar" data-language-autonym="日本語" data-language-local-name="Japanisch" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-jv mw-list-item"><a href="https://jv.wikipedia.org/wiki/Modhul:TemplatePar" title="Modhul:TemplatePar – Javanisch" lang="jv" hreflang="jv" data-title="Modhul:TemplatePar" data-language-autonym="Jawa" data-language-local-name="Javanisch" class="interlanguage-link-target"><span>Jawa</span></a></li><li class="interlanguage-link interwiki-kab mw-list-item"><a href="https://kab.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Kabylisch" lang="kab" hreflang="kab" data-title="Module:TemplatePar" data-language-autonym="Taqbaylit" data-language-local-name="Kabylisch" class="interlanguage-link-target"><span>Taqbaylit</span></a></li><li class="interlanguage-link interwiki-kn mw-list-item"><a href="https://kn.wikipedia.org/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:TemplatePar" title="ಮಾಡ್ಯೂಲ್:TemplatePar – Kannada" lang="kn" hreflang="kn" data-title="ಮಾಡ್ಯೂಲ್:TemplatePar" data-language-autonym="ಕನ್ನಡ" data-language-local-name="Kannada" class="interlanguage-link-target"><span>ಕನ್ನಡ</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%93%88:TemplatePar" title="모듈:TemplatePar – Koreanisch" lang="ko" hreflang="ko" data-title="모듈:TemplatePar" data-language-autonym="한국어" data-language-local-name="Koreanisch" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-ku mw-list-item"><a href="https://ku.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Kurdisch" lang="ku" hreflang="ku" data-title="Modul:TemplatePar" data-language-autonym="Kurdî" data-language-local-name="Kurdisch" class="interlanguage-link-target"><span>Kurdî</span></a></li><li class="interlanguage-link interwiki-lld mw-list-item"><a href="https://lld.wikipedia.org/wiki/Modulo:TemplatePar" title="Modulo:TemplatePar – Ladinisch" lang="lld" hreflang="lld" data-title="Modulo:TemplatePar" data-language-autonym="Ladin" data-language-local-name="Ladinisch" class="interlanguage-link-target"><span>Ladin</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Litauisch" lang="lt" hreflang="lt" data-title="Module:TemplatePar" data-language-autonym="Lietuvių" data-language-local-name="Litauisch" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Modulis:TemplatePar" title="Modulis:TemplatePar – Lettisch" lang="lv" hreflang="lv" data-title="Modulis:TemplatePar" data-language-autonym="Latviešu" data-language-local-name="Lettisch" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-min mw-list-item"><a href="https://min.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Minangkabau" lang="min" hreflang="min" data-title="Modul:TemplatePar" data-language-autonym="Minangkabau" data-language-local-name="Minangkabau" class="interlanguage-link-target"><span>Minangkabau</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:TemplatePar" title="ഘടകം:TemplatePar – Malayalam" lang="ml" hreflang="ml" data-title="ഘടകം:TemplatePar" data-language-autonym="മലയാളം" data-language-local-name="Malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Mongolisch" lang="mn" hreflang="mn" data-title="Module:TemplatePar" data-language-autonym="Монгол" data-language-local-name="Mongolisch" class="interlanguage-link-target"><span>Монгол</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Malaiisch" lang="ms" hreflang="ms" data-title="Modul:TemplatePar" data-language-autonym="Bahasa Melayu" data-language-local-name="Malaiisch" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-my mw-list-item"><a href="https://my.wikipedia.org/wiki/%E1%80%99%E1%80%B1%E1%80%AC%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0%E1%80%B8:TemplatePar" title="မော်ဂျူး:TemplatePar – Birmanisch" lang="my" hreflang="my" data-title="မော်ဂျူး:TemplatePar" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="Birmanisch" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-nds mw-list-item"><a href="https://nds.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Niederdeutsch" lang="nds" hreflang="nds" data-title="Modul:TemplatePar" data-language-autonym="Plattdüütsch" data-language-local-name="Niederdeutsch" class="interlanguage-link-target"><span>Plattdüütsch</span></a></li><li class="interlanguage-link interwiki-or mw-list-item"><a href="https://or.wikipedia.org/wiki/%E0%AC%AE%E0%AC%A1%E0%AD%8D%E0%AD%9F%E0%AD%81%E0%AC%B2:TemplatePar" title="ମଡ୍ୟୁଲ:TemplatePar – Oriya" lang="or" hreflang="or" data-title="ମଡ୍ୟୁଲ:TemplatePar" data-language-autonym="ଓଡ଼ିଆ" data-language-local-name="Oriya" class="interlanguage-link-target"><span>ଓଡ଼ିଆ</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wikipedia.org/wiki/%E0%A8%AE%E0%A9%8C%E0%A8%A1%E0%A8%BF%E0%A8%8A%E0%A8%B2:TemplatePar" title="ਮੌਡਿਊਲ:TemplatePar – Punjabi" lang="pa" hreflang="pa" data-title="ਮੌਡਿਊਲ:TemplatePar" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="Punjabi" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/M%C3%B3dulo:TemplatePar" title="Módulo:TemplatePar – Portugiesisch" lang="pt" hreflang="pt" data-title="Módulo:TemplatePar" data-language-autonym="Português" data-language-local-name="Portugiesisch" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Rumänisch" lang="ro" hreflang="ro" data-title="Modul:TemplatePar" data-language-autonym="Română" data-language-local-name="Rumänisch" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TemplatePar" title="Модуль:TemplatePar – Russisch" lang="ru" hreflang="ru" data-title="Модуль:TemplatePar" data-language-autonym="Русский" data-language-local-name="Russisch" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sco mw-list-item"><a href="https://sco.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Schottisch" lang="sco" hreflang="sco" data-title="Module:TemplatePar" data-language-autonym="Scots" data-language-local-name="Schottisch" class="interlanguage-link-target"><span>Scots</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Serbokroatisch" lang="sh" hreflang="sh" data-title="Modul:TemplatePar" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="Serbokroatisch" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-shn mw-list-item"><a href="https://shn.wikipedia.org/wiki/%E1%80%99%E1%80%B1%E1%82%83%E1%82%87%E1%81%B5%E1%80%BB%E1%80%B0%E1%80%B8:TemplatePar" title="မေႃႇၵျူး:TemplatePar – Schan" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:TemplatePar" data-language-autonym="တႆး" data-language-local-name="Schan" class="interlanguage-link-target"><span>တႆး</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – einfaches Englisch" lang="en-simple" hreflang="en-simple" data-title="Module:TemplatePar" data-language-autonym="Simple English" data-language-local-name="einfaches Englisch" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Slowenisch" lang="sl" hreflang="sl" data-title="Modul:TemplatePar" data-language-autonym="Slovenščina" data-language-local-name="Slowenisch" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/Moduli:TemplatePar" title="Moduli:TemplatePar – Albanisch" lang="sq" hreflang="sq" data-title="Moduli:TemplatePar" data-language-autonym="Shqip" data-language-local-name="Albanisch" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:TemplatePar" title="Модул:TemplatePar – Serbisch" lang="sr" hreflang="sr" data-title="Модул:TemplatePar" data-language-autonym="Српски / srpski" data-language-local-name="Serbisch" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-su mw-list-item"><a href="https://su.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Sundanesisch" lang="su" hreflang="su" data-title="Modul:TemplatePar" data-language-autonym="Sunda" data-language-local-name="Sundanesisch" class="interlanguage-link-target"><span>Sunda</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Schwedisch" lang="sv" hreflang="sv" data-title="Modul:TemplatePar" data-language-autonym="Svenska" data-language-local-name="Schwedisch" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Tamil" lang="ta" hreflang="ta" data-title="Module:TemplatePar" data-language-autonym="தமிழ்" data-language-local-name="Tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A1%E0%B8%AD%E0%B8%94%E0%B8%B9%E0%B8%A5:TemplatePar" title="มอดูล:TemplatePar – Thailändisch" lang="th" hreflang="th" data-title="มอดูล:TemplatePar" data-language-autonym="ไทย" data-language-local-name="Thailändisch" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tl mw-list-item"><a href="https://tl.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Tagalog" lang="tl" hreflang="tl" data-title="Module:TemplatePar" data-language-autonym="Tagalog" data-language-local-name="Tagalog" class="interlanguage-link-target"><span>Tagalog</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Mod%C3%BCl:TemplatePar" title="Modül:TemplatePar – Türkisch" lang="tr" hreflang="tr" data-title="Modül:TemplatePar" data-language-autonym="Türkçe" data-language-local-name="Türkisch" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TemplatePar" title="Модуль:TemplatePar – Ukrainisch" lang="uk" hreflang="uk" data-title="Модуль:TemplatePar" data-language-autonym="Українська" data-language-local-name="Ukrainisch" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-ur mw-list-item"><a href="https://ur.wikipedia.org/wiki/%D9%85%D8%A7%DA%88%DB%8C%D9%88%D9%84:TemplatePar" title="ماڈیول:TemplatePar – Urdu" lang="ur" hreflang="ur" data-title="ماڈیول:TemplatePar" data-language-autonym="اردو" data-language-local-name="Urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wikipedia.org/wiki/Modul:TemplatePar" title="Modul:TemplatePar – Usbekisch" lang="uz" hreflang="uz" data-title="Modul:TemplatePar" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="Usbekisch" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-vec mw-list-item"><a href="https://vec.wikipedia.org/wiki/Modulo:TemplatePar" title="Modulo:TemplatePar – Venetisch" lang="vec" hreflang="vec" data-title="Modulo:TemplatePar" data-language-autonym="Vèneto" data-language-local-name="Venetisch" class="interlanguage-link-target"><span>Vèneto</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/M%C3%B4_%C4%91un:TemplatePar" title="Mô đun:TemplatePar – Vietnamesisch" lang="vi" hreflang="vi" data-title="Mô đun:TemplatePar" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamesisch" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Module:TemplatePar" title="Module:TemplatePar – Chinesisch" lang="zh" hreflang="zh" data-title="Module:TemplatePar" data-language-autonym="中文" data-language-local-name="Chinesisch" class="interlanguage-link-target"><span>中文</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:TemplatePar" title="模組:TemplatePar – Min Nan" lang="nan" hreflang="nan" data-title="模組:TemplatePar" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="Min Nan" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:TemplatePar" title="模組:TemplatePar – Kantonesisch" lang="yue" hreflang="yue" data-title="模組:TemplatePar" data-language-autonym="粵語" data-language-local-name="Kantonesisch" 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/Q15393417#sitelinks-wikipedia" title="Links auf Artikel in anderen Sprachen bearbeiten" class="wbc-editpage">Links bearbeiten</a></span></div> </div> </nav> </div> </div> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> Diese Seite wurde zuletzt am 21. März 2023 um 15:11 Uhr bearbeitet.</li> <li id="footer-info-copyright"><div id="footer-info-copyright-stats" class="noprint"><a rel="nofollow" class="external text" href="https://pageviews.wmcloud.org/?pages=Modul:TemplatePar&project=de.wikipedia.org">Abrufstatistik</a> </div><div id="footer-info-copyright-separator"><br /></div><div id="footer-info-copyright-info"> <p>Der Text ist unter der Lizenz <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">„Creative-Commons Namensnennung – Weitergabe unter gleichen Bedingungen“</a> verfügbar; Informationen zu den Urhebern und zum Lizenzstatus eingebundener Mediendateien (etwa Bilder oder Videos) können im Regelfall durch Anklicken dieser abgerufen werden. Möglicherweise unterliegen die Inhalte jeweils zusätzlichen Bedingungen. Durch die Nutzung dieser Website erklären Sie sich mit den <span class="plainlinks"><a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Terms_of_Use/de">Nutzungsbedingungen</a> und der <a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Privacy_policy/de">Datenschutzrichtlinie</a></span> einverstanden.<br /> </p> Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.</div></li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/de">Datenschutz</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:%C3%9Cber_Wikipedia">Über Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:Impressum">Impressum</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Verhaltenskodex</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Entwickler</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/de.wikipedia.org">Statistiken</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Stellungnahme zu Cookies</a></li> <li id="footer-places-mobileview"><a href="//de.m.wikipedia.org/w/index.php?title=Modul:TemplatePar&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile Ansicht</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"><picture><source media="(min-width: 500px)" srcset="/static/images/footer/wikimedia-button.svg" width="84" height="29"><img src="/static/images/footer/wikimedia.svg" width="25" height="25" alt="Wikimedia Foundation" lang="en" loading="lazy"></picture></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"><picture><source media="(min-width: 500px)" srcset="/w/resources/assets/poweredby_mediawiki.svg" width="88" height="31"><img src="/w/resources/assets/mediawiki_compact.svg" alt="Powered by MediaWiki" lang="en" width="25" height="25" loading="lazy"></picture></a></li> </ul> </footer> <div class="mw-portlet mw-portlet-dock-bottom emptyPortlet vector-menu-portal portal" id="p-dock-bottom"> <ul> </ul> </div> <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-7d5db9ff5-6p8x2","wgBackendResponseTime":740,"wgPageParseReport":{"limitreport":{"cputime":"0.059","walltime":"0.097","ppvisitednodes":{"value":238,"limit":1000000},"postexpandincludesize":{"value":9746,"limit":2097152},"templateargumentsize":{"value":196,"limit":2097152},"expansiondepth":{"value":9,"limit":100},"expensivefunctioncount":{"value":10,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":0,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 82.502 1 -total","100.00% 82.502 1 Modul:TemplatePar/Doku"," 73.91% 60.978 1 Vorlage:LuaModuleDoc"]},"scribunto":{"limitreport-timeusage":{"value":"0.031","limit":"10.000"},"limitreport-memusage":{"value":882643,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-7d5db9ff5-6p8x2","timestamp":"20250303135413","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>