CINXE.COM

Modul:URIutil – Wikipedia

<!DOCTYPE html> <html class="client-nojs" lang="de" dir="ltr"> <head> <meta charset="UTF-8"> <title>Modul:URIutil – 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":"34de83fb-c7cb-4a2e-9555-77050b26fe6a","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Modul:URIutil","wgTitle":"URIutil","wgCurRevisionId":247451609,"wgRevisionId":247451609,"wgArticleId":7757824,"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:URIutil","wgRelevantArticleId":7757824,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":["sysop"],"wgRestrictionMove":["sysop"],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":1}}},"wgStableRevisionId":247451609,"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":70000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":true,"wgVector2022LanguageInHeader":false, "wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q19644443","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&amp;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&amp;only=styles&amp;skin=vector"> <script async="" src="/w/load.php?lang=de&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=de&amp;modules=ext.gadget.NavFrame%2CciteRef%2CdefaultPlainlinks%2CdewikiCommonHide%2CdewikiCommonLayout%2CdewikiCommonStyle&amp;only=styles&amp;skin=vector"> <link rel="stylesheet" href="/w/load.php?lang=de&amp;modules=site.styles&amp;only=styles&amp;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:URIutil – 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:URIutil"> <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:URIutil"> <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&amp;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_URIutil rootpage-Modul_URIutil 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">URIutil</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/URIutil" title="Wikipedia:Lua/Modul/URIutil">Vorlagenprogrammierung</a> </td> <td rowspan="2"><a href="/wiki/Wikipedia_Diskussion:Lua/Modul/URIutil" title="Wikipedia Diskussion:Lua/Modul/URIutil">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/URIutil/Test" title="Wikipedia:Lua/Modul/URIutil/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/URIutil/de" title="Wikipedia:Lua/Modul/URIutil/de">Deutsch</a> </td> <td><a href="/wiki/Wikipedia:Lua/Modul/URIutil/en" title="Wikipedia:Lua/Modul/URIutil/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&amp;prefix=URIutil&amp;namespace=828">Modul:</a> </td> <td><a class="external text" href="https://de.wikipedia.org/w/index.php?title=Spezial:Prefixindex&amp;prefix=Lua/Modul/URIutil&amp;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&amp;namespace=828&amp;name=URIutil">Einbindungszahl</a></span> <a class="external text" href="https://de.wikipedia.org/w/index.php?title=Spezial:Suche&amp;search=hastemplate%3A%22Modul%3AURIutil%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">2024-08-05</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">URIutil</span> <span class="o">=</span> <span class="p">{</span> <span class="n">suite</span> <span class="o">=</span> <span class="s2">&quot;URIutil&quot;</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">serial</span> <span class="o">=</span> <span class="s2">&quot;2024-08-05&quot;</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">19644443</span> <span class="p">};</span> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a><span class="cm">--[=[</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a><span class="cm">Utilities for URI etc.</span> </span><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a><span class="cm">* coreISSN()</span> </span><span id="L-7"><a href="#L-7"><span class="linenos" data-line="7"></span></a><span class="cm">* formatISBN()</span> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a><span class="cm">* formatISSN()</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a><span class="cm">* formatLCCN()</span> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a><span class="cm">* isDNBvalid()</span> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a><span class="cm">* isDOI()</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a><span class="cm">* isEscValid()</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a><span class="cm">* isGTINvalid()</span> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a><span class="cm">* isHandle()</span> </span><span id="L-15"><a href="#L-15"><span class="linenos" data-line="15"></span></a><span class="cm">* isISBN()</span> </span><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a><span class="cm">* isISBNvalid()</span> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a><span class="cm">* isISSNvalid()</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a><span class="cm">* isLCCN()</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a><span class="cm">* linkDNBopac()</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a><span class="cm">* linkDOI()</span> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a><span class="cm">* linkHandle()</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a><span class="cm">* linkISBN()</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a><span class="cm">* linkISSN()</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a><span class="cm">* linkLCCN()</span> </span><span id="L-25"><a href="#L-25"><span class="linenos" data-line="25"></span></a><span class="cm">* linkPMID()</span> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a><span class="cm">* linkURN()</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a><span class="cm">* mayDOI()</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a><span class="cm">* mayHandle()</span> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a><span class="cm">* mayISBN()</span> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a><span class="cm">* mayISSN()</span> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a><span class="cm">* mayLCCN()</span> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a><span class="cm">* mayURI()</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a><span class="cm">* mayURN()</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a><span class="cm">* plainISBN()</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a><span class="cm">* targetISSN()</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a><span class="cm">* uriDOI()</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a><span class="cm">* uriHandle()</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a><span class="cm">* uriURN()</span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a><span class="cm">* failsafe()</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a><span class="cm">* URIutil()</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a><span class="cm">loadData: URIutil/config URIutil/isbn URIutil/urn</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a><span class="cm">]=]</span> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a><span class="kd">local</span> <span class="n">Failsafe</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">;</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a><span class="kd">local</span> <span class="n">CurrentPageName</span><span class="p">;</span> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a><span class="kd">local</span> <span class="n">factory</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">allowX</span> <span class="p">)</span> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a> <span class="c1">-- Retrieve plain digits of attempt</span> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a> <span class="c1">-- attempt -- string; with digits (+xX) and hyphens, not trimmed</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="c1">-- allowX -- number; of (last) position for permitted xX</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a> <span class="c1">-- boolean; xX at last position permitted</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a> <span class="c1">-- Returns table; success</span> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a> <span class="c1">-- [1]...[8]/[10]...[13] -- digits 0...9</span> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a> <span class="c1">-- 10 at last position</span> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a> <span class="c1">-- .hyphens -- number of hyphens</span> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a> <span class="c1">-- .type -- number of digits</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a> <span class="c1">-- number; no string or bad length or data</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a> <span class="c1">-- 0 -- no string</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a> <span class="c1">-- &gt;0 -- unexpected char at position (trimmed)</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a> <span class="kd">local</span> <span class="n">c</span><span class="p">,</span> <span class="n">i</span><span class="p">;</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a> <span class="kd">local</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> <span class="kd">local</span> <span class="n">k</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">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-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a> <span class="kd">local</span> <span class="n">n</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">len</span><span class="p">(</span> <span class="n">s</span> <span class="p">);</span> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="n">hyphens</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">};</span> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">n</span> <span class="kr">do</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="n">c</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">codepoint</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">i</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-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="kr">if</span> <span class="n">c</span> <span class="o">&gt;=</span> <span class="mi">48</span> <span class="ow">and</span> <span class="n">c</span> <span class="o">&lt;=</span> <span class="mi">57</span> <span class="kr">then</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> <span class="n">r</span><span class="p">[</span> <span class="n">j</span> <span class="p">]</span> <span class="o">=</span> <span class="n">c</span> <span class="o">-</span> <span class="mi">48</span><span class="p">;</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a> <span class="kr">elseif</span> <span class="n">c</span> <span class="o">==</span> <span class="mi">45</span> <span class="kr">then</span> <span class="c1">-- hyphen</span> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">n</span> <span class="kr">then</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a> <span class="n">r</span><span class="p">.</span><span class="n">hyphens</span> <span class="o">=</span> <span class="n">r</span><span class="p">.</span><span class="n">hyphens</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="n">i</span><span class="p">;</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a> <span class="kr">else</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">j</span><span class="p">;</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a> <span class="kr">break</span><span class="p">;</span> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a> <span class="kr">end</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a> <span class="kr">elseif</span> <span class="n">c</span> <span class="o">==</span> <span class="mi">88</span> <span class="ow">or</span> <span class="n">c</span> <span class="o">==</span> <span class="mi">120</span> <span class="kr">then</span> <span class="c1">-- X x</span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a> <span class="kr">if</span> <span class="n">allowX</span> <span class="ow">and</span> <span class="n">i</span> <span class="o">==</span> <span class="n">n</span> <span class="kr">then</span> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a> <span class="kr">if</span> <span class="n">allowX</span> <span class="o">==</span> <span class="kc">true</span> <span class="ow">or</span> <span class="n">allowX</span> <span class="o">==</span> <span class="n">j</span> <span class="kr">then</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a> <span class="n">r</span><span class="p">[</span> <span class="n">j</span> <span class="p">]</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a> <span class="kr">else</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">j</span><span class="p">;</span> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a> <span class="kr">end</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a> <span class="kr">else</span> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">j</span><span class="p">;</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a> <span class="kr">end</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a> <span class="kr">break</span><span class="p">;</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> <span class="kr">else</span> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">j</span><span class="p">;</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> <span class="kr">break</span><span class="p">;</span> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a> <span class="kr">end</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></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">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a> <span class="n">r</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">j</span><span class="p">;</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a> <span class="kr">end</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a> <span class="kr">else</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a> <span class="kr">end</span> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a><span class="kr">end</span> <span class="c1">-- factory()</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a><span class="kd">local</span> <span class="n">faculty</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">ask</span><span class="p">,</span> <span class="n">auto</span> <span class="p">)</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> <span class="c1">-- Evaluate possible string as boolean signal, if brief</span> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> <span class="c1">-- ask -- trimmed string or nil or other</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a> <span class="c1">-- auto -- fallback value if nil</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> <span class="c1">-- Returns appropriate value, or ask</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">r</span><span class="p">;</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">ask</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="kr">if</span> <span class="n">ask</span> <span class="o">==</span> <span class="s2">&quot;1&quot;</span> <span class="ow">or</span> <span class="n">ask</span> <span class="o">==</span> <span class="s2">&quot;&quot;</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">r</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> <span class="kr">elseif</span> <span class="n">ask</span> <span class="o">==</span> <span class="s2">&quot;0&quot;</span> <span class="ow">or</span> <span class="n">ask</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> <span class="kr">then</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</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">else</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">ask</span><span class="p">;</span> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a> <span class="kr">end</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a> <span class="kr">elseif</span> <span class="n">ask</span> <span class="o">==</span> <span class="kc">nil</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">r</span> <span class="o">=</span> <span class="n">auto</span><span class="p">;</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="kr">else</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">ask</span><span class="p">;</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="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a><span class="kr">end</span> <span class="c1">-- faculty()</span> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a><span class="kd">local</span> <span class="n">fair</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="nb">assert</span> <span class="p">)</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a> <span class="c1">-- Compute check digit (11 minus modulo 11) for descending factor</span> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="c1">-- assert -- table; as of factory()</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> <span class="c1">-- .type -- number of digits including check digit</span> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="c1">-- Returns checksum</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="kd">local</span> <span class="n">i</span><span class="p">;</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="kd">local</span> <span class="n">n</span> <span class="o">=</span> <span class="n">assert</span><span class="p">.</span><span class="n">type</span><span class="p">;</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> <span class="kd">local</span> <span class="n">k</span> <span class="o">=</span> <span class="n">n</span><span class="p">;</span> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">n</span> <span class="o">-</span> <span class="mi">1</span> <span class="kr">do</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">+</span> <span class="n">k</span> <span class="o">*</span> <span class="nb">assert</span><span class="p">[</span> <span class="n">i</span> <span class="p">];</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="kr">return</span> <span class="p">(</span> <span class="mi">11</span> <span class="o">-</span> <span class="n">r</span> <span class="o">%</span> <span class="mi">11</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 class="c1">-- fair()</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a><span class="kd">local</span> <span class="n">fault</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="c1">-- Format error message by class=error</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="c1">-- Parameter:</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a> <span class="c1">-- alert -- string, error message</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="c1">-- Returns:</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a> <span class="c1">-- string, HTML span</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a> <span class="kr">return</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">mw</span><span class="p">.</span><span class="n">html</span><span class="p">.</span><span class="n">create</span><span class="p">(</span> <span class="s2">&quot;span&quot;</span> <span class="p">)</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="p">:</span><span class="n">addClass</span><span class="p">(</span> <span class="s2">&quot;error&quot;</span> <span class="p">)</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">alert</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a><span class="kr">end</span> <span class="c1">-- fault()</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a><span class="kd">local</span> <span class="n">fetch</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">acquire</span> <span class="p">)</span> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a> <span class="c1">-- Load data submodule</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a> <span class="c1">-- acquire -- string, one of</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> <span class="c1">-- &quot;config&quot;</span> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a> <span class="c1">-- &quot;isbn&quot;</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a> <span class="c1">-- &quot;urn&quot;</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a> <span class="c1">-- Returns any table</span> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a> <span class="kr">if</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">data</span> <span class="kr">then</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">data</span><span class="p">[</span> <span class="n">acquire</span> <span class="p">];</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></span></a> <span class="kr">else</span> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a> <span class="n">URIutil</span><span class="p">.</span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span> <span class="p">};</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">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></span></a> <span class="kd">local</span> <span class="n">lucky</span><span class="p">,</span> <span class="n">storage</span><span class="p">;</span> </span><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a> <span class="n">storage</span> <span class="o">=</span> <span class="s2">&quot;Module:URIutil/&quot;</span> <span class="o">..</span> <span class="n">acquire</span><span class="p">;</span> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></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">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">,</span> <span class="n">storage</span> <span class="p">);</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></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-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">suited</span> <span class="ow">and</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> <span class="nb">type</span><span class="p">(</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">item</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;number&quot;</span> <span class="kr">then</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></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">&quot;Q%d&quot;</span><span class="p">,</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">item</span> <span class="p">);</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> <span class="n">URIutil</span><span class="p">.</span><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-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a> <span class="ow">or</span> <span class="kc">true</span><span class="p">;</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> <span class="kr">end</span> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">suited</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="n">storage</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s/%s&quot;</span><span class="p">,</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="n">URIutil</span><span class="p">.</span><span class="n">suited</span><span class="p">,</span> <span class="n">acquire</span> <span class="p">);</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></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">mw</span><span class="p">.</span><span class="n">loadData</span><span class="p">,</span> <span class="n">storage</span> <span class="p">);</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> <span class="kr">end</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> <span class="kr">end</span> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></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">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="p">};</span> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="kr">end</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="n">URIutil</span><span class="p">.</span><span class="n">data</span><span class="p">[</span> <span class="n">acquire</span> <span class="p">]</span> <span class="o">=</span> <span class="n">r</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">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a><span class="kr">end</span> <span class="c1">-- fetch()</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a><span class="kd">local</span> <span class="n">flop</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> <span class="c1">-- Create link to (maintenance) category</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a> <span class="c1">-- alert -- trimmed string with title, not empty, or nil</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a> <span class="c1">-- Returns link, or false</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">alert</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="ow">and</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a> <span class="n">alert</span> <span class="o">~=</span> <span class="s2">&quot;-&quot;</span> <span class="ow">and</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a> <span class="n">alert</span> <span class="o">~=</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[[Category:%s]]&quot;</span><span class="p">,</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a> <span class="kr">end</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a><span class="kr">end</span> <span class="c1">-- flop()</span> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a><span class="kd">local</span> <span class="n">format</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">ahead</span><span class="p">,</span> <span class="n">amount</span> <span class="p">)</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a> <span class="c1">-- Convert part of digit sequence into string</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a> <span class="c1">-- assigned -- table; as of factory()</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a> <span class="c1">-- ahead -- index of first digit</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> <span class="c1">-- amount -- number of digits to append</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> <span class="c1">-- Returns string with digits and hyphens</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">i</span><span class="p">,</span> <span class="n">k</span><span class="p">;</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="n">ahead</span><span class="p">,</span> <span class="n">ahead</span> <span class="o">+</span> <span class="n">amount</span> <span class="o">-</span> <span class="mi">1</span> <span class="kr">do</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">i</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">k</span> <span class="o">==</span> <span class="mi">10</span> <span class="kr">then</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="s2">&quot;X&quot;</span><span class="p">;</span> </span><span id="L-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a> <span class="kr">else</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</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-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a> <span class="kr">end</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a><span class="kr">end</span> <span class="c1">-- format()</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a><span class="kd">local</span> <span class="n">fullPageName</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">()</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a> <span class="c1">-- Retrieve current page name</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a> <span class="c1">-- Returns string: current page name</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">CurrentPageName</span> <span class="kr">then</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a> <span class="n">CurrentPageName</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">fullText</span><span class="p">;</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">return</span> <span class="n">CurrentPageName</span><span class="p">;</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a><span class="kr">end</span> <span class="c1">-- fullPageName()</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a><span class="kd">local</span> <span class="n">DNBfaith</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="nb">assert</span><span class="p">,</span> <span class="n">ancestor</span> <span class="p">)</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a> <span class="c1">-- Compute DNB (also GND, ZDB) check digit and verify</span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a> <span class="c1">-- assert -- table; as of factory()</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a> <span class="c1">-- .type -- until 11 including check digit</span> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a> <span class="c1">-- ancestor -- true: 2011 mode</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a> <span class="c1">-- Returns true: check digit matches</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a> <span class="c1">-- 2013-09-01</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a> <span class="kd">local</span> <span class="n">k</span> <span class="o">=</span> <span class="n">fair</span><span class="p">(</span> <span class="nb">assert</span> <span class="p">)</span> <span class="o">%</span> <span class="mi">11</span><span class="p">;</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a> <span class="kr">if</span> <span class="n">ancestor</span> <span class="kr">then</span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="mi">11</span> <span class="o">-</span> <span class="n">k</span><span class="p">;</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a> <span class="kr">end</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a> <span class="kr">return</span> <span class="p">(</span> <span class="n">k</span> <span class="o">==</span> <span class="nb">assert</span><span class="p">[</span> <span class="n">assert</span><span class="p">.</span><span class="n">type</span> <span class="p">]</span> <span class="p">);</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a><span class="kr">end</span> <span class="c1">-- DNBfaith()</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a><span class="kd">local</span> <span class="n">GTINfair</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="nb">assert</span> <span class="p">)</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a> <span class="c1">-- Compute GTIN check digit</span> </span><span id="L-286"><a href="#L-286"><span class="linenos" data-line="286"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-287"><a href="#L-287"><span class="linenos" data-line="287"></span></a> <span class="c1">-- assert -- table; ~ 13 digits</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a> <span class="c1">-- .type -- 13 ...</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a> <span class="c1">-- Returns number 0...9</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="kd">local</span> <span class="n">i</span><span class="p">,</span> <span class="n">k</span><span class="p">;</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="kd">local</span> <span class="n">lead</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">assert</span><span class="p">.</span><span class="n">type</span> <span class="o">-</span> <span class="mi">1</span> <span class="kr">do</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="nb">assert</span><span class="p">[</span> <span class="n">i</span> <span class="p">];</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">+</span> <span class="n">k</span><span class="p">;</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="kr">if</span> <span class="n">lead</span> <span class="kr">then</span> <span class="c1">-- odd</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> <span class="n">lead</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> <span class="kr">else</span> <span class="c1">-- even</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">+</span> <span class="n">k</span> <span class="o">+</span> <span class="n">k</span><span class="p">;</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="n">lead</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="kr">end</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="kr">end</span> <span class="c1">-- for i</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="p">(</span><span class="mi">10</span> <span class="o">-</span> <span class="n">r</span> <span class="o">%</span> <span class="mi">10</span><span class="p">)</span> <span class="o">%</span> <span class="mi">10</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">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a><span class="kr">end</span> <span class="c1">-- GTINfair()</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a><span class="kd">local</span> <span class="n">GTINfaith</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="nb">assert</span> <span class="p">)</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="c1">-- Compute GTIN check digit and verify</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-313"><a href="#L-313"><span class="linenos" data-line="313"></span></a> <span class="c1">-- assert -- table; ~ 13 digits</span> </span><span id="L-314"><a href="#L-314"><span class="linenos" data-line="314"></span></a> <span class="c1">-- .type -- 13 ...</span> </span><span id="L-315"><a href="#L-315"><span class="linenos" data-line="315"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> <span class="c1">-- Returns true: check digit matches</span> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a> <span class="kr">return</span> <span class="p">(</span> <span class="n">GTINfair</span><span class="p">(</span> <span class="nb">assert</span> <span class="p">)</span> <span class="o">==</span> <span class="nb">assert</span><span class="p">[</span> <span class="n">assert</span><span class="p">.</span><span class="n">type</span> <span class="p">]</span> <span class="p">);</span> </span><span id="L-318"><a href="#L-318"><span class="linenos" data-line="318"></span></a><span class="kr">end</span> <span class="c1">-- GTINfaith()</span> </span><span id="L-319"><a href="#L-319"><span class="linenos" data-line="319"></span></a> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a><span class="kd">local</span> <span class="n">ISBNfactory</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a> <span class="c1">-- Retrieve plain digits of ISBN attempt</span> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a> <span class="c1">-- attempt -- string with digits (+xX) and hyphens, not trimmed</span> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a> <span class="c1">-- Returns table; success</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> <span class="c1">-- [1]...[13] -- digits 0...9</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a> <span class="c1">-- 10 at ISBN-10 last position</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> <span class="c1">-- .type -- 10 or 13</span> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a> <span class="c1">-- .hyphens -- 0... number of hyphens</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> <span class="c1">-- number; no string or bad length or data</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> <span class="c1">-- 0 -- no string</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> <span class="c1">-- &gt;0 -- unexpected char at position (trimmed)</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> <span class="c1">-- -1 -- bad digit count</span> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="c1">-- -2 -- bad bookland</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="kd">local</span> <span class="n">s</span><span class="p">;</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="n">factory</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="mi">10</span> <span class="p">);</span> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;number&quot;</span> <span class="ow">and</span> <span class="n">r</span> <span class="o">~=</span> <span class="mi">10</span> <span class="ow">and</span> <span class="n">r</span> <span class="o">&gt;</span> <span class="mi">6</span> <span class="ow">and</span> <span class="n">r</span> <span class="o">&lt;</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-343"><a href="#L-343"><span class="linenos" data-line="343"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">factory</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-345"><a href="#L-345"><span class="linenos" data-line="345"></span></a> <span class="kr">end</span> </span><span id="L-346"><a href="#L-346"><span class="linenos" data-line="346"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a> <span class="kr">if</span> <span class="n">r</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a> <span class="kr">if</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">9</span> <span class="ow">or</span> </span><span id="L-349"><a href="#L-349"><span class="linenos" data-line="349"></span></a> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">~=</span> <span class="mi">7</span> <span class="ow">or</span> </span><span id="L-350"><a href="#L-350"><span class="linenos" data-line="350"></span></a> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">8</span> <span class="kr">then</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="o">-</span><span class="mi">2</span><span class="p">;</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">elseif</span> <span class="n">r</span><span class="p">.</span><span class="n">type</span> <span class="o">~=</span> <span class="mi">10</span> <span class="kr">then</span> </span><span id="L-354"><a href="#L-354"><span class="linenos" data-line="354"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> </span><span id="L-355"><a href="#L-355"><span class="linenos" data-line="355"></span></a> <span class="kr">end</span> </span><span id="L-356"><a href="#L-356"><span class="linenos" data-line="356"></span></a> <span class="kr">end</span> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a> <span class="kr">else</span> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-359"><a href="#L-359"><span class="linenos" data-line="359"></span></a> <span class="kr">end</span> </span><span id="L-360"><a href="#L-360"><span class="linenos" data-line="360"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a><span class="kr">end</span> <span class="c1">-- ISBNfactory()</span> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> </span><span id="L-363"><a href="#L-363"><span class="linenos" data-line="363"></span></a> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a><span class="kd">local</span> <span class="n">ISBNfaith</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="nb">assert</span> <span class="p">)</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> <span class="c1">-- Compute ISBN check digit and verify</span> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> <span class="c1">-- assert -- table; as of ISBNfactory()</span> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></span></a> <span class="c1">-- .type -- 10 or 13</span> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a> <span class="c1">-- Returns true: check digit matches</span> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a> <span class="kr">if</span> <span class="n">assert</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">10</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="kd">local</span> <span class="n">i</span><span class="p">;</span> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a> <span class="kd">local</span> <span class="n">k</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></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="mi">9</span> <span class="kr">do</span> </span><span id="L-377"><a href="#L-377"><span class="linenos" data-line="377"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="n">k</span> <span class="o">+</span> <span class="n">i</span> <span class="o">*</span> <span class="nb">assert</span><span class="p">[</span> <span class="n">i</span> <span class="p">];</span> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="n">k</span> <span class="o">%</span> <span class="mi">11</span><span class="p">;</span> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">(</span> <span class="n">k</span> <span class="o">==</span> <span class="nb">assert</span><span class="p">[</span> <span class="mi">10</span> <span class="p">]</span> <span class="p">);</span> </span><span id="L-381"><a href="#L-381"><span class="linenos" data-line="381"></span></a> <span class="kr">elseif</span> <span class="n">assert</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-382"><a href="#L-382"><span class="linenos" data-line="382"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">GTINfaith</span><span class="p">(</span> <span class="nb">assert</span> <span class="p">);</span> </span><span id="L-383"><a href="#L-383"><span class="linenos" data-line="383"></span></a> <span class="kr">else</span> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a> <span class="kr">end</span> </span><span id="L-386"><a href="#L-386"><span class="linenos" data-line="386"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a><span class="kr">end</span> <span class="c1">-- ISBNfaith()</span> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a> </span><span id="L-389"><a href="#L-389"><span class="linenos" data-line="389"></span></a> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a> </span><span id="L-391"><a href="#L-391"><span class="linenos" data-line="391"></span></a><span class="kd">local</span> <span class="n">ISBNflat</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">assigned</span> <span class="p">)</span> </span><span id="L-392"><a href="#L-392"><span class="linenos" data-line="392"></span></a> <span class="c1">-- Plain digits of attempt ISBN</span> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-394"><a href="#L-394"><span class="linenos" data-line="394"></span></a> <span class="c1">-- assigned -- table; as of ISBNfactory()</span> </span><span id="L-395"><a href="#L-395"><span class="linenos" data-line="395"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-396"><a href="#L-396"><span class="linenos" data-line="396"></span></a> <span class="c1">-- Returns string with digits; ISBN-10 with &#39;X&#39; at last position</span> </span><span id="L-397"><a href="#L-397"><span class="linenos" data-line="397"></span></a> <span class="kd">local</span> <span class="n">i</span><span class="p">;</span> </span><span id="L-398"><a href="#L-398"><span class="linenos" data-line="398"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-399"><a href="#L-399"><span class="linenos" data-line="399"></span></a> <span class="kd">local</span> <span class="n">n</span> <span class="o">=</span> <span class="n">assigned</span><span class="p">.</span><span class="n">type</span><span class="p">;</span> </span><span id="L-400"><a href="#L-400"><span class="linenos" data-line="400"></span></a> <span class="kr">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">10</span> <span class="kr">then</span> </span><span id="L-401"><a href="#L-401"><span class="linenos" data-line="401"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">assigned</span><span class="p">.</span><span class="n">type</span> <span class="p">]</span> <span class="o">==</span> <span class="mi">10</span> <span class="kr">then</span> </span><span id="L-402"><a href="#L-402"><span class="linenos" data-line="402"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="mi">9</span><span class="p">;</span> </span><span id="L-403"><a href="#L-403"><span class="linenos" data-line="403"></span></a> <span class="kr">end</span> </span><span id="L-404"><a href="#L-404"><span class="linenos" data-line="404"></span></a> <span class="kr">end</span> </span><span id="L-405"><a href="#L-405"><span class="linenos" data-line="405"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">n</span> <span class="kr">do</span> </span><span id="L-406"><a href="#L-406"><span class="linenos" data-line="406"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">i</span> <span class="p">]</span> <span class="p">);</span> </span><span id="L-407"><a href="#L-407"><span class="linenos" data-line="407"></span></a> <span class="kr">end</span> <span class="c1">-- for i</span> </span><span id="L-408"><a href="#L-408"><span class="linenos" data-line="408"></span></a> <span class="kr">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">9</span> <span class="kr">then</span> </span><span id="L-409"><a href="#L-409"><span class="linenos" data-line="409"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="s2">&quot;X&quot;</span><span class="p">;</span> </span><span id="L-410"><a href="#L-410"><span class="linenos" data-line="410"></span></a> <span class="kr">end</span> </span><span id="L-411"><a href="#L-411"><span class="linenos" data-line="411"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-412"><a href="#L-412"><span class="linenos" data-line="412"></span></a><span class="kr">end</span> <span class="c1">-- ISBNflat()</span> </span><span id="L-413"><a href="#L-413"><span class="linenos" data-line="413"></span></a> </span><span id="L-414"><a href="#L-414"><span class="linenos" data-line="414"></span></a> </span><span id="L-415"><a href="#L-415"><span class="linenos" data-line="415"></span></a> </span><span id="L-416"><a href="#L-416"><span class="linenos" data-line="416"></span></a><span class="kd">local</span> <span class="n">ISBNfold</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">apply</span><span class="p">,</span> <span class="n">allocate</span><span class="p">,</span> <span class="n">already</span> <span class="p">)</span> </span><span id="L-417"><a href="#L-417"><span class="linenos" data-line="417"></span></a> <span class="c1">-- Retrieve number of digits for ISBN publisher/group</span> </span><span id="L-418"><a href="#L-418"><span class="linenos" data-line="418"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-419"><a href="#L-419"><span class="linenos" data-line="419"></span></a> <span class="c1">-- assigned -- table; as of ISBNfactory()</span> </span><span id="L-420"><a href="#L-420"><span class="linenos" data-line="420"></span></a> <span class="c1">-- apply -- number; of bookland (978 or 979)</span> </span><span id="L-421"><a href="#L-421"><span class="linenos" data-line="421"></span></a> <span class="c1">-- allocate -- number; of country</span> </span><span id="L-422"><a href="#L-422"><span class="linenos" data-line="422"></span></a> <span class="c1">-- already -- number; position in assigned to inspect</span> </span><span id="L-423"><a href="#L-423"><span class="linenos" data-line="423"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-424"><a href="#L-424"><span class="linenos" data-line="424"></span></a> <span class="c1">-- Returns number of digits, at least 0</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">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-426"><a href="#L-426"><span class="linenos" data-line="426"></span></a> <span class="kd">local</span> <span class="n">def</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;isbn&quot;</span> <span class="p">);</span> </span><span id="L-427"><a href="#L-427"><span class="linenos" data-line="427"></span></a> <span class="kd">local</span> <span class="n">bookland</span> <span class="o">=</span> <span class="n">def</span><span class="p">[</span> <span class="n">apply</span> <span class="p">];</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="nb">type</span><span class="p">(</span> <span class="n">bookland</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</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="kd">local</span> <span class="n">country</span> <span class="o">=</span> <span class="n">bookland</span><span class="p">[</span> <span class="n">allocate</span> <span class="p">];</span> </span><span id="L-430"><a href="#L-430"><span class="linenos" data-line="430"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">country</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-431"><a href="#L-431"><span class="linenos" data-line="431"></span></a> <span class="kd">local</span> <span class="n">e</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">m</span><span class="p">,</span> <span class="n">v</span><span class="p">;</span> </span><span id="L-432"><a href="#L-432"><span class="linenos" data-line="432"></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="mi">4</span> <span class="kr">do</span> </span><span id="L-433"><a href="#L-433"><span class="linenos" data-line="433"></span></a> <span class="n">v</span> <span class="o">=</span> <span class="n">country</span><span class="p">[</span> <span class="n">i</span> <span class="p">];</span> </span><span id="L-434"><a href="#L-434"><span class="linenos" data-line="434"></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">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-435"><a href="#L-435"><span class="linenos" data-line="435"></span></a> <span class="n">m</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">already</span><span class="p">,</span> <span class="n">i</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-436"><a href="#L-436"><span class="linenos" data-line="436"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">e</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-437"><a href="#L-437"><span class="linenos" data-line="437"></span></a> <span class="kr">if</span> <span class="n">m</span> <span class="o">&gt;=</span> <span class="n">e</span><span class="p">[</span> <span class="mi">1</span> <span class="p">]</span> <span class="ow">and</span> <span class="n">m</span> <span class="o">&lt;=</span> <span class="n">e</span><span class="p">[</span> <span class="mi">2</span> <span class="p">]</span> <span class="kr">then</span> </span><span id="L-438"><a href="#L-438"><span class="linenos" data-line="438"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">e</span><span class="p">[</span> <span class="mi">3</span> <span class="p">];</span> </span><span id="L-439"><a href="#L-439"><span class="linenos" data-line="439"></span></a> <span class="kr">break</span><span class="p">;</span> <span class="c1">-- for k</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">end</span> <span class="c1">-- for k</span> </span><span id="L-442"><a href="#L-442"><span class="linenos" data-line="442"></span></a> <span class="kr">end</span> </span><span id="L-443"><a href="#L-443"><span class="linenos" data-line="443"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-444"><a href="#L-444"><span class="linenos" data-line="444"></span></a> <span class="kr">break</span><span class="p">;</span> <span class="c1">-- for i</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">end</span> <span class="c1">-- for i</span> </span><span id="L-447"><a href="#L-447"><span class="linenos" data-line="447"></span></a> <span class="kr">end</span> </span><span id="L-448"><a href="#L-448"><span class="linenos" data-line="448"></span></a> <span class="kr">end</span> </span><span id="L-449"><a href="#L-449"><span class="linenos" data-line="449"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-450"><a href="#L-450"><span class="linenos" data-line="450"></span></a><span class="kr">end</span> <span class="c1">-- ISBNfold()</span> </span><span id="L-451"><a href="#L-451"><span class="linenos" data-line="451"></span></a> </span><span id="L-452"><a href="#L-452"><span class="linenos" data-line="452"></span></a> </span><span id="L-453"><a href="#L-453"><span class="linenos" data-line="453"></span></a> </span><span id="L-454"><a href="#L-454"><span class="linenos" data-line="454"></span></a><span class="kd">local</span> <span class="n">ISBNformat</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">assigned</span> <span class="p">)</span> </span><span id="L-455"><a href="#L-455"><span class="linenos" data-line="455"></span></a> <span class="c1">-- Hyphen formatting; at least try minimum</span> </span><span id="L-456"><a href="#L-456"><span class="linenos" data-line="456"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-457"><a href="#L-457"><span class="linenos" data-line="457"></span></a> <span class="c1">-- attempt -- string with presumable ISBN</span> </span><span id="L-458"><a href="#L-458"><span class="linenos" data-line="458"></span></a> <span class="c1">-- assigned -- table; as of ISBNfactory()</span> </span><span id="L-459"><a href="#L-459"><span class="linenos" data-line="459"></span></a> <span class="c1">-- .type -- 10 or 13</span> </span><span id="L-460"><a href="#L-460"><span class="linenos" data-line="460"></span></a> <span class="c1">-- .hyphens -- 0...4</span> </span><span id="L-461"><a href="#L-461"><span class="linenos" data-line="461"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-462"><a href="#L-462"><span class="linenos" data-line="462"></span></a> <span class="c1">-- Returns string with digits and hyphens</span> </span><span id="L-463"><a href="#L-463"><span class="linenos" data-line="463"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</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">j</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">m</span><span class="p">,</span> <span class="n">n</span><span class="p">;</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">assigned</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">10</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="n">m</span> <span class="o">=</span> <span class="mi">978</span><span class="p">;</span> </span><span id="L-467"><a href="#L-467"><span class="linenos" data-line="467"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-468"><a href="#L-468"><span class="linenos" data-line="468"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> </span><span id="L-469"><a href="#L-469"><span class="linenos" data-line="469"></span></a> <span class="kr">else</span> </span><span id="L-470"><a href="#L-470"><span class="linenos" data-line="470"></span></a> <span class="n">m</span> <span class="o">=</span> <span class="mi">970</span> <span class="o">+</span> <span class="n">assigned</span><span class="p">[</span> <span class="mi">3</span> <span class="p">];</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="nb">tostring</span><span class="p">(</span> <span class="n">m</span> <span class="p">)</span> <span class="o">..</span> <span class="s2">&quot;-&quot;</span><span class="p">;</span> </span><span id="L-472"><a href="#L-472"><span class="linenos" data-line="472"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="mi">4</span><span class="p">;</span> </span><span id="L-473"><a href="#L-473"><span class="linenos" data-line="473"></span></a> <span class="kr">end</span> </span><span id="L-474"><a href="#L-474"><span class="linenos" data-line="474"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">j</span> <span class="p">]</span> <span class="o">&lt;</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-475"><a href="#L-475"><span class="linenos" data-line="475"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> </span><span id="L-476"><a href="#L-476"><span class="linenos" data-line="476"></span></a> <span class="kr">else</span> </span><span id="L-477"><a href="#L-477"><span class="linenos" data-line="477"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span> </span><span id="L-478"><a href="#L-478"><span class="linenos" data-line="478"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">j</span> <span class="p">]</span> <span class="o">==</span> <span class="mi">9</span> <span class="ow">and</span> </span><span id="L-479"><a href="#L-479"><span class="linenos" data-line="479"></span></a> <span class="n">assigned</span><span class="p">[</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">]</span> <span class="o">&gt;</span> <span class="mi">4</span> <span class="kr">then</span> </span><span id="L-480"><a href="#L-480"><span class="linenos" data-line="480"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> </span><span id="L-481"><a href="#L-481"><span class="linenos" data-line="481"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">]</span> <span class="o">&gt;</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-482"><a href="#L-482"><span class="linenos" data-line="482"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="mi">4</span><span class="p">;</span> </span><span id="L-483"><a href="#L-483"><span class="linenos" data-line="483"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">j</span> <span class="o">+</span> <span class="mi">2</span> <span class="p">]</span> <span class="o">&gt;</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-484"><a href="#L-484"><span class="linenos" data-line="484"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span> </span><span id="L-485"><a href="#L-485"><span class="linenos" data-line="485"></span></a> <span class="kr">end</span> </span><span id="L-486"><a href="#L-486"><span class="linenos" data-line="486"></span></a> <span class="kr">end</span> </span><span id="L-487"><a href="#L-487"><span class="linenos" data-line="487"></span></a> <span class="kr">end</span> </span><span id="L-488"><a href="#L-488"><span class="linenos" data-line="488"></span></a> <span class="kr">end</span> </span><span id="L-489"><a href="#L-489"><span class="linenos" data-line="489"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="kr">then</span> </span><span id="L-490"><a href="#L-490"><span class="linenos" data-line="490"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span> <span class="p">);</span> </span><span id="L-491"><a href="#L-491"><span class="linenos" data-line="491"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s%s-&quot;</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">n</span> <span class="p">);</span> </span><span id="L-492"><a href="#L-492"><span class="linenos" data-line="492"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="n">j</span> <span class="o">+</span> <span class="n">k</span><span class="p">;</span> </span><span id="L-493"><a href="#L-493"><span class="linenos" data-line="493"></span></a> <span class="n">n</span> <span class="o">=</span> <span class="n">ISBNfold</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">m</span><span class="p">,</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">n</span> <span class="p">),</span> <span class="n">j</span> <span class="p">);</span> </span><span id="L-494"><a href="#L-494"><span class="linenos" data-line="494"></span></a> <span class="kr">if</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-495"><a href="#L-495"><span class="linenos" data-line="495"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s%s-&quot;</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">n</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-496"><a href="#L-496"><span class="linenos" data-line="496"></span></a> <span class="n">j</span> <span class="o">=</span> <span class="n">j</span> <span class="o">+</span> <span class="n">n</span><span class="p">;</span> </span><span id="L-497"><a href="#L-497"><span class="linenos" data-line="497"></span></a> <span class="kr">end</span> </span><span id="L-498"><a href="#L-498"><span class="linenos" data-line="498"></span></a> <span class="kr">end</span> </span><span id="L-499"><a href="#L-499"><span class="linenos" data-line="499"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">assigned</span><span class="p">.</span><span class="n">type</span> <span class="o">-</span> <span class="n">j</span> <span class="p">);</span> </span><span id="L-500"><a href="#L-500"><span class="linenos" data-line="500"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">assigned</span><span class="p">.</span><span class="n">type</span> <span class="p">]</span> <span class="o">==</span> <span class="mi">10</span> <span class="kr">then</span> </span><span id="L-501"><a href="#L-501"><span class="linenos" data-line="501"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="s2">&quot;-X&quot;</span><span class="p">;</span> </span><span id="L-502"><a href="#L-502"><span class="linenos" data-line="502"></span></a> <span class="kr">else</span> </span><span id="L-503"><a href="#L-503"><span class="linenos" data-line="503"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s-%s&quot;</span><span class="p">,</span> </span><span id="L-504"><a href="#L-504"><span class="linenos" data-line="504"></span></a> <span class="n">r</span><span class="p">,</span> </span><span id="L-505"><a href="#L-505"><span class="linenos" data-line="505"></span></a> <span class="nb">tostring</span><span class="p">(</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">assigned</span><span class="p">.</span><span class="n">type</span> <span class="p">]</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-506"><a href="#L-506"><span class="linenos" data-line="506"></span></a> <span class="kr">end</span> </span><span id="L-507"><a href="#L-507"><span class="linenos" data-line="507"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">r</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="n">r</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">upper</span><span class="p">(</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-509"><a href="#L-509"><span class="linenos" data-line="509"></span></a> <span class="kr">end</span> </span><span id="L-510"><a href="#L-510"><span class="linenos" data-line="510"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-511"><a href="#L-511"><span class="linenos" data-line="511"></span></a><span class="kr">end</span> <span class="c1">-- ISBNformat()</span> </span><span id="L-512"><a href="#L-512"><span class="linenos" data-line="512"></span></a> </span><span id="L-513"><a href="#L-513"><span class="linenos" data-line="513"></span></a> </span><span id="L-514"><a href="#L-514"><span class="linenos" data-line="514"></span></a> </span><span id="L-515"><a href="#L-515"><span class="linenos" data-line="515"></span></a><span class="kd">local</span> <span class="n">ISSNfactory</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-516"><a href="#L-516"><span class="linenos" data-line="516"></span></a> <span class="c1">-- Retrieve plain digits of ISSN attempt</span> </span><span id="L-517"><a href="#L-517"><span class="linenos" data-line="517"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-518"><a href="#L-518"><span class="linenos" data-line="518"></span></a> <span class="c1">-- attempt -- string with digits (+xX) and hyphens, not trimmed</span> </span><span id="L-519"><a href="#L-519"><span class="linenos" data-line="519"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-520"><a href="#L-520"><span class="linenos" data-line="520"></span></a> <span class="c1">-- Returns table; success</span> </span><span id="L-521"><a href="#L-521"><span class="linenos" data-line="521"></span></a> <span class="c1">-- [1]...[13] -- digits 0...9</span> </span><span id="L-522"><a href="#L-522"><span class="linenos" data-line="522"></span></a> <span class="c1">-- 10 at ISSN-8 last position</span> </span><span id="L-523"><a href="#L-523"><span class="linenos" data-line="523"></span></a> <span class="c1">-- .type -- 8 or 13</span> </span><span id="L-524"><a href="#L-524"><span class="linenos" data-line="524"></span></a> <span class="c1">-- .hyphens -- 0... number of hyphens</span> </span><span id="L-525"><a href="#L-525"><span class="linenos" data-line="525"></span></a> <span class="c1">-- number; no string or bad length or data</span> </span><span id="L-526"><a href="#L-526"><span class="linenos" data-line="526"></span></a> <span class="c1">-- 0 -- no string</span> </span><span id="L-527"><a href="#L-527"><span class="linenos" data-line="527"></span></a> <span class="c1">-- &gt;0 -- unexpected char at position (trimmed)</span> </span><span id="L-528"><a href="#L-528"><span class="linenos" data-line="528"></span></a> <span class="c1">-- -1 -- bad digit count</span> </span><span id="L-529"><a href="#L-529"><span class="linenos" data-line="529"></span></a> <span class="c1">-- -2 -- bad issnland</span> </span><span id="L-530"><a href="#L-530"><span class="linenos" data-line="530"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-531"><a href="#L-531"><span class="linenos" data-line="531"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</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="n">factory</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="mi">8</span> <span class="p">);</span> </span><span id="L-533"><a href="#L-533"><span class="linenos" data-line="533"></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">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-534"><a href="#L-534"><span class="linenos" data-line="534"></span></a> <span class="kr">if</span> <span class="n">r</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-535"><a href="#L-535"><span class="linenos" data-line="535"></span></a> <span class="kr">if</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">9</span> <span class="ow">or</span> </span><span id="L-536"><a href="#L-536"><span class="linenos" data-line="536"></span></a> <span class="n">r</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">~=</span> <span class="mi">7</span> <span class="ow">or</span> </span><span id="L-537"><a href="#L-537"><span class="linenos" data-line="537"></span></a> <span class="n">r</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">~=</span> <span class="mi">7</span> <span class="kr">then</span> </span><span id="L-538"><a href="#L-538"><span class="linenos" data-line="538"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span><span class="p">;</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">elseif</span> <span class="n">r</span><span class="p">.</span><span class="n">type</span> <span class="o">~=</span> <span class="mi">8</span> <span class="kr">then</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="o">-</span><span class="mi">1</span><span class="p">;</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">end</span> </span><span id="L-544"><a href="#L-544"><span class="linenos" data-line="544"></span></a> <span class="kr">else</span> </span><span id="L-545"><a href="#L-545"><span class="linenos" data-line="545"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</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 class="p">;</span> </span><span id="L-548"><a href="#L-548"><span class="linenos" data-line="548"></span></a><span class="kr">end</span> <span class="c1">-- ISSNfactory()</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="n">ISSNfaith</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="nb">assert</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">-- Compute ISSN check digit and verify</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">-- assert -- table; as of ISSNfactory()</span> </span><span id="L-556"><a href="#L-556"><span class="linenos" data-line="556"></span></a> <span class="c1">-- .type -- 8 or 13</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">-- Returns true: check digit matches</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 class="p">;</span> </span><span id="L-560"><a href="#L-560"><span class="linenos" data-line="560"></span></a> <span class="kr">if</span> <span class="n">assert</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-561"><a href="#L-561"><span class="linenos" data-line="561"></span></a> <span class="kd">local</span> <span class="n">k</span> <span class="o">=</span> <span class="n">fair</span><span class="p">(</span> <span class="nb">assert</span> <span class="p">);</span> </span><span id="L-562"><a href="#L-562"><span class="linenos" data-line="562"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">11</span> <span class="kr">then</span> </span><span id="L-563"><a href="#L-563"><span class="linenos" data-line="563"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">(</span> <span class="nb">assert</span><span class="p">[</span> <span class="mi">8</span> <span class="p">]</span> <span class="o">==</span> <span class="mi">0</span> <span class="p">);</span> </span><span id="L-564"><a href="#L-564"><span class="linenos" data-line="564"></span></a> <span class="kr">else</span> </span><span id="L-565"><a href="#L-565"><span class="linenos" data-line="565"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">(</span> <span class="nb">assert</span><span class="p">[</span> <span class="mi">8</span> <span class="p">]</span> <span class="o">==</span> <span class="n">k</span> <span class="p">);</span> </span><span id="L-566"><a href="#L-566"><span class="linenos" data-line="566"></span></a> <span class="kr">end</span> </span><span id="L-567"><a href="#L-567"><span class="linenos" data-line="567"></span></a> <span class="kr">elseif</span> <span class="n">assert</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-568"><a href="#L-568"><span class="linenos" data-line="568"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">GTINfaith</span><span class="p">(</span> <span class="nb">assert</span> <span class="p">);</span> </span><span id="L-569"><a href="#L-569"><span class="linenos" data-line="569"></span></a> <span class="kr">else</span> </span><span id="L-570"><a href="#L-570"><span class="linenos" data-line="570"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-571"><a href="#L-571"><span class="linenos" data-line="571"></span></a> <span class="kr">end</span> </span><span id="L-572"><a href="#L-572"><span class="linenos" data-line="572"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-573"><a href="#L-573"><span class="linenos" data-line="573"></span></a><span class="kr">end</span> <span class="c1">-- ISSNfaith()</span> </span><span id="L-574"><a href="#L-574"><span class="linenos" data-line="574"></span></a> </span><span id="L-575"><a href="#L-575"><span class="linenos" data-line="575"></span></a> </span><span id="L-576"><a href="#L-576"><span class="linenos" data-line="576"></span></a> </span><span id="L-577"><a href="#L-577"><span class="linenos" data-line="577"></span></a><span class="kd">local</span> <span class="n">ISSNformat</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">achieve</span> <span class="p">)</span> </span><span id="L-578"><a href="#L-578"><span class="linenos" data-line="578"></span></a> <span class="c1">-- Hyphen formatting of ISSN</span> </span><span id="L-579"><a href="#L-579"><span class="linenos" data-line="579"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-580"><a href="#L-580"><span class="linenos" data-line="580"></span></a> <span class="c1">-- assigned -- table; as of ISSNfactory(), and valid</span> </span><span id="L-581"><a href="#L-581"><span class="linenos" data-line="581"></span></a> <span class="c1">-- achieve -- 8 or 13</span> </span><span id="L-582"><a href="#L-582"><span class="linenos" data-line="582"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-583"><a href="#L-583"><span class="linenos" data-line="583"></span></a> <span class="c1">-- Returns string with digits and hyphens</span> </span><span id="L-584"><a href="#L-584"><span class="linenos" data-line="584"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-585"><a href="#L-585"><span class="linenos" data-line="585"></span></a> <span class="kr">if</span> <span class="n">achieve</span> <span class="o">==</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-586"><a href="#L-586"><span class="linenos" data-line="586"></span></a> <span class="kd">local</span> <span class="n">x</span><span class="p">;</span> </span><span id="L-587"><a href="#L-587"><span class="linenos" data-line="587"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-588"><a href="#L-588"><span class="linenos" data-line="588"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s-%s&quot;</span><span class="p">,</span> </span><span id="L-589"><a href="#L-589"><span class="linenos" data-line="589"></span></a> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span> <span class="p">),</span> </span><span id="L-590"><a href="#L-590"><span class="linenos" data-line="590"></span></a> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">3</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-591"><a href="#L-591"><span class="linenos" data-line="591"></span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">assigned</span><span class="p">[</span> <span class="mi">8</span> <span class="p">];</span> </span><span id="L-592"><a href="#L-592"><span class="linenos" data-line="592"></span></a> <span class="kr">elseif</span> <span class="n">assigned</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-593"><a href="#L-593"><span class="linenos" data-line="593"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s-%s&quot;</span><span class="p">,</span> </span><span id="L-594"><a href="#L-594"><span class="linenos" data-line="594"></span></a> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span> <span class="p">),</span> </span><span id="L-595"><a href="#L-595"><span class="linenos" data-line="595"></span></a> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">3</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-596"><a href="#L-596"><span class="linenos" data-line="596"></span></a> <span class="n">x</span> <span class="o">=</span> <span class="n">fair</span><span class="p">(</span> <span class="n">assigned</span> <span class="p">);</span> </span><span id="L-597"><a href="#L-597"><span class="linenos" data-line="597"></span></a> <span class="kr">end</span> </span><span id="L-598"><a href="#L-598"><span class="linenos" data-line="598"></span></a> <span class="kr">if</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">10</span> <span class="kr">then</span> </span><span id="L-599"><a href="#L-599"><span class="linenos" data-line="599"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="s2">&quot;X&quot;</span><span class="p">;</span> </span><span id="L-600"><a href="#L-600"><span class="linenos" data-line="600"></span></a> <span class="kr">else</span> </span><span id="L-601"><a href="#L-601"><span class="linenos" data-line="601"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">x</span> <span class="p">);</span> </span><span id="L-602"><a href="#L-602"><span class="linenos" data-line="602"></span></a> <span class="kr">end</span> </span><span id="L-603"><a href="#L-603"><span class="linenos" data-line="603"></span></a> <span class="kr">elseif</span> <span class="n">achieve</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</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="n">assigned</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">8</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="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;977-%s-00-%s&quot;</span><span class="p">,</span> </span><span id="L-606"><a href="#L-606"><span class="linenos" data-line="606"></span></a> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">7</span> <span class="p">),</span> </span><span id="L-607"><a href="#L-607"><span class="linenos" data-line="607"></span></a> <span class="n">GTINfair</span><span class="p">(</span> <span class="n">assigned</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-608"><a href="#L-608"><span class="linenos" data-line="608"></span></a> <span class="kr">elseif</span> <span class="n">assigned</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-609"><a href="#L-609"><span class="linenos" data-line="609"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;977-%s%s-%s&quot;</span><span class="p">,</span> </span><span id="L-610"><a href="#L-610"><span class="linenos" data-line="610"></span></a> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">7</span> <span class="p">),</span> </span><span id="L-611"><a href="#L-611"><span class="linenos" data-line="611"></span></a> <span class="n">format</span><span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">2</span> <span class="p">),</span> </span><span id="L-612"><a href="#L-612"><span class="linenos" data-line="612"></span></a> <span class="nb">tostring</span><span class="p">(</span> <span class="n">assigned</span><span class="p">[</span> <span class="mi">13</span> <span class="p">]</span> <span class="p">)</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">end</span> </span><span id="L-614"><a href="#L-614"><span class="linenos" data-line="614"></span></a> <span class="kr">end</span> </span><span id="L-615"><a href="#L-615"><span class="linenos" data-line="615"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-616"><a href="#L-616"><span class="linenos" data-line="616"></span></a><span class="kr">end</span> <span class="c1">-- ISSNformat()</span> </span><span id="L-617"><a href="#L-617"><span class="linenos" data-line="617"></span></a> </span><span id="L-618"><a href="#L-618"><span class="linenos" data-line="618"></span></a> </span><span id="L-619"><a href="#L-619"><span class="linenos" data-line="619"></span></a> </span><span id="L-620"><a href="#L-620"><span class="linenos" data-line="620"></span></a><span class="kd">local</span> <span class="n">LCCNfactory</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">allow</span> <span class="p">)</span> </span><span id="L-621"><a href="#L-621"><span class="linenos" data-line="621"></span></a> <span class="c1">-- Retrieve segments of LCCN attempt (format since 2001)</span> </span><span id="L-622"><a href="#L-622"><span class="linenos" data-line="622"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-623"><a href="#L-623"><span class="linenos" data-line="623"></span></a> <span class="c1">-- attempt -- string with presumable LCCN</span> </span><span id="L-624"><a href="#L-624"><span class="linenos" data-line="624"></span></a> <span class="c1">-- allow -- false or string: &quot;/&quot;</span> </span><span id="L-625"><a href="#L-625"><span class="linenos" data-line="625"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-626"><a href="#L-626"><span class="linenos" data-line="626"></span></a> <span class="c1">-- Returns table; success</span> </span><span id="L-627"><a href="#L-627"><span class="linenos" data-line="627"></span></a> <span class="c1">-- false if not correct, bad data</span> </span><span id="L-628"><a href="#L-628"><span class="linenos" data-line="628"></span></a> <span class="c1">-- 2014-12-28</span> </span><span id="L-629"><a href="#L-629"><span class="linenos" data-line="629"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-630"><a href="#L-630"><span class="linenos" data-line="630"></span></a> <span class="kd">local</span> <span class="n">pat</span> <span class="o">=</span> <span class="s2">&quot;^%s*(%a*)(/?)(%d%S+)%s*$&quot;</span><span class="p">;</span> </span><span id="L-631"><a href="#L-631"><span class="linenos" data-line="631"></span></a> <span class="kd">local</span> <span class="n">pre</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">s</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="n">pat</span> <span class="p">);</span> </span><span id="L-632"><a href="#L-632"><span class="linenos" data-line="632"></span></a> <span class="kr">if</span> <span class="n">pre</span> <span class="ow">and</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-633"><a href="#L-633"><span class="linenos" data-line="633"></span></a> <span class="kd">local</span> <span class="n">year</span><span class="p">,</span> <span class="n">serial</span><span class="p">;</span> </span><span id="L-634"><a href="#L-634"><span class="linenos" data-line="634"></span></a> <span class="kr">if</span> <span class="n">pre</span> <span class="o">==</span> <span class="s2">&quot;&quot;</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="n">pre</span> <span class="o">=</span> <span class="kc">false</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">sep</span> <span class="o">~=</span> <span class="s2">&quot;&quot;</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">s</span> <span class="o">=</span> <span class="kc">false</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">end</span> </span><span id="L-639"><a href="#L-639"><span class="linenos" data-line="639"></span></a> <span class="kr">elseif</span> <span class="o">#</span><span class="n">pre</span> <span class="o">&gt;</span> <span class="mi">3</span> <span class="kr">then</span> </span><span id="L-640"><a href="#L-640"><span class="linenos" data-line="640"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-641"><a href="#L-641"><span class="linenos" data-line="641"></span></a> <span class="kr">else</span> </span><span id="L-642"><a href="#L-642"><span class="linenos" data-line="642"></span></a> <span class="n">pre</span> <span class="o">=</span> <span class="n">pre</span><span class="p">:</span><span class="n">lower</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">end</span> </span><span id="L-644"><a href="#L-644"><span class="linenos" data-line="644"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-645"><a href="#L-645"><span class="linenos" data-line="645"></span></a> <span class="kr">if</span> <span class="n">allow</span> <span class="o">~=</span> <span class="s2">&quot;/&quot;</span> <span class="ow">or</span> <span class="n">sep</span> <span class="o">==</span> <span class="s2">&quot;/&quot;</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="kr">if</span> <span class="n">sep</span> <span class="o">==</span> <span class="s2">&quot;/&quot;</span> <span class="kr">then</span> </span><span id="L-647"><a href="#L-647"><span class="linenos" data-line="647"></span></a> <span class="n">year</span><span class="p">,</span> <span class="n">serial</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">&quot;^(%d+)/(%d.+)$&quot;</span> <span class="p">);</span> </span><span id="L-648"><a href="#L-648"><span class="linenos" data-line="648"></span></a> <span class="kr">elseif</span> <span class="n">s</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">&quot;-&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-649"><a href="#L-649"><span class="linenos" data-line="649"></span></a> <span class="n">year</span><span class="p">,</span> <span class="n">serial</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">&quot;^(%d+)%-(%d.+)$&quot;</span> <span class="p">);</span> </span><span id="L-650"><a href="#L-650"><span class="linenos" data-line="650"></span></a> <span class="kr">else</span> </span><span id="L-651"><a href="#L-651"><span class="linenos" data-line="651"></span></a> <span class="n">year</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">&quot;^([%d]+)&quot;</span> <span class="p">);</span> </span><span id="L-652"><a href="#L-652"><span class="linenos" data-line="652"></span></a> <span class="kr">if</span> <span class="n">year</span> <span class="kr">then</span> </span><span id="L-653"><a href="#L-653"><span class="linenos" data-line="653"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">year</span> <span class="o">&lt;=</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-654"><a href="#L-654"><span class="linenos" data-line="654"></span></a> <span class="n">year</span> <span class="o">=</span> <span class="n">s</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">2</span> <span class="p">);</span> </span><span id="L-655"><a href="#L-655"><span class="linenos" data-line="655"></span></a> <span class="n">serial</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="mi">3</span> <span class="p">);</span> </span><span id="L-656"><a href="#L-656"><span class="linenos" data-line="656"></span></a> <span class="kr">elseif</span> <span class="o">#</span><span class="n">year</span> <span class="o">&lt;=</span> <span class="mi">10</span> <span class="kr">then</span> </span><span id="L-657"><a href="#L-657"><span class="linenos" data-line="657"></span></a> <span class="n">year</span> <span class="o">=</span> <span class="n">s</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">4</span> <span class="p">);</span> </span><span id="L-658"><a href="#L-658"><span class="linenos" data-line="658"></span></a> <span class="n">serial</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="mi">5</span> <span class="p">);</span> </span><span id="L-659"><a href="#L-659"><span class="linenos" data-line="659"></span></a> <span class="kr">else</span> </span><span id="L-660"><a href="#L-660"><span class="linenos" data-line="660"></span></a> <span class="n">year</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-661"><a href="#L-661"><span class="linenos" data-line="661"></span></a> <span class="n">serial</span> <span class="o">=</span> <span class="n">s</span><span class="p">;</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="nb">tonumber</span><span class="p">(</span> <span class="n">s</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">serial</span> <span class="o">=</span> <span class="n">s</span><span class="p">;</span> </span><span id="L-665"><a href="#L-665"><span class="linenos" data-line="665"></span></a> <span class="kr">end</span> </span><span id="L-666"><a href="#L-666"><span class="linenos" data-line="666"></span></a> <span class="kr">end</span> </span><span id="L-667"><a href="#L-667"><span class="linenos" data-line="667"></span></a> <span class="kr">end</span> </span><span id="L-668"><a href="#L-668"><span class="linenos" data-line="668"></span></a> <span class="kr">if</span> <span class="n">year</span> <span class="kr">then</span> </span><span id="L-669"><a href="#L-669"><span class="linenos" data-line="669"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">year</span> <span class="o">==</span> <span class="mi">4</span> <span class="kr">then</span> </span><span id="L-670"><a href="#L-670"><span class="linenos" data-line="670"></span></a> <span class="kd">local</span> <span class="n">n</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">year</span> <span class="p">);</span> </span><span id="L-671"><a href="#L-671"><span class="linenos" data-line="671"></span></a> <span class="kr">if</span> <span class="n">n</span> <span class="o">&lt;=</span> <span class="mi">2000</span> <span class="kr">then</span> </span><span id="L-672"><a href="#L-672"><span class="linenos" data-line="672"></span></a> <span class="c1">-- 2000 -&gt; &quot;00&quot;</span> </span><span id="L-673"><a href="#L-673"><span class="linenos" data-line="673"></span></a> <span class="n">serial</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-674"><a href="#L-674"><span class="linenos" data-line="674"></span></a> <span class="kr">elseif</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="nb">os.date</span><span class="p">(</span> <span class="s2">&quot;%Y&quot;</span> <span class="p">)</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-675"><a href="#L-675"><span class="linenos" data-line="675"></span></a> <span class="n">serial</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-676"><a href="#L-676"><span class="linenos" data-line="676"></span></a> <span class="kr">end</span> </span><span id="L-677"><a href="#L-677"><span class="linenos" data-line="677"></span></a> <span class="kr">elseif</span> <span class="o">#</span><span class="n">year</span> <span class="o">~=</span> <span class="mi">2</span> <span class="kr">then</span> </span><span id="L-678"><a href="#L-678"><span class="linenos" data-line="678"></span></a> <span class="n">serial</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-679"><a href="#L-679"><span class="linenos" data-line="679"></span></a> <span class="kr">end</span> </span><span id="L-680"><a href="#L-680"><span class="linenos" data-line="680"></span></a> <span class="kr">end</span> </span><span id="L-681"><a href="#L-681"><span class="linenos" data-line="681"></span></a> <span class="kr">if</span> <span class="n">serial</span> <span class="kr">then</span> </span><span id="L-682"><a href="#L-682"><span class="linenos" data-line="682"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="p">{</span> <span class="n">pre</span> <span class="o">=</span> <span class="n">pre</span><span class="p">,</span> <span class="n">serial</span> <span class="o">=</span> <span class="n">serial</span> <span class="p">};</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="n">year</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="p">.</span><span class="n">year</span> <span class="o">=</span> <span class="n">year</span><span class="p">;</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">serial</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-687"><a href="#L-687"><span class="linenos" data-line="687"></span></a> <span class="kd">local</span> <span class="n">q</span><span class="p">;</span> </span><span id="L-688"><a href="#L-688"><span class="linenos" data-line="688"></span></a> <span class="n">serial</span><span class="p">,</span> <span class="n">q</span> <span class="o">=</span> <span class="n">serial</span><span class="p">:</span><span class="n">lower</span><span class="p">()</span> </span><span id="L-689"><a href="#L-689"><span class="linenos" data-line="689"></span></a> <span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^(%d+)/([a-z]+)$&quot;</span> <span class="p">);</span> </span><span id="L-690"><a href="#L-690"><span class="linenos" data-line="690"></span></a> <span class="kr">if</span> <span class="n">q</span> <span class="o">==</span> <span class="s2">&quot;dc&quot;</span> <span class="ow">or</span> </span><span id="L-691"><a href="#L-691"><span class="linenos" data-line="691"></span></a> <span class="n">q</span> <span class="o">==</span> <span class="s2">&quot;mads&quot;</span> <span class="ow">or</span> </span><span id="L-692"><a href="#L-692"><span class="linenos" data-line="692"></span></a> <span class="n">q</span> <span class="o">==</span> <span class="s2">&quot;marcxml&quot;</span> <span class="ow">or</span> </span><span id="L-693"><a href="#L-693"><span class="linenos" data-line="693"></span></a> <span class="n">q</span> <span class="o">==</span> <span class="s2">&quot;mods&quot;</span> <span class="kr">then</span> </span><span id="L-694"><a href="#L-694"><span class="linenos" data-line="694"></span></a> <span class="n">r</span><span class="p">.</span><span class="n">serial</span> <span class="o">=</span> <span class="n">serial</span><span class="p">;</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="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">q</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">if</span> <span class="n">serial</span> <span class="kr">then</span> </span><span id="L-699"><a href="#L-699"><span class="linenos" data-line="699"></span></a> <span class="n">serial</span> <span class="o">=</span> <span class="n">serial</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^0*([1-9]%d*)$&quot;</span> <span class="p">);</span> </span><span id="L-700"><a href="#L-700"><span class="linenos" data-line="700"></span></a> <span class="kr">end</span> </span><span id="L-701"><a href="#L-701"><span class="linenos" data-line="701"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">serial</span> <span class="kr">then</span> </span><span id="L-702"><a href="#L-702"><span class="linenos" data-line="702"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-703"><a href="#L-703"><span class="linenos" data-line="703"></span></a> <span class="kr">elseif</span> <span class="o">#</span><span class="n">serial</span> <span class="o">&lt;</span> <span class="mi">6</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="n">r</span><span class="p">.</span><span class="n">serial</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%06d&quot;</span><span class="p">,</span> </span><span id="L-705"><a href="#L-705"><span class="linenos" data-line="705"></span></a> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">serial</span> <span class="p">)</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">elseif</span> <span class="o">#</span><span class="n">serial</span> <span class="o">&gt;</span> <span class="mi">6</span> <span class="kr">then</span> </span><span id="L-707"><a href="#L-707"><span class="linenos" data-line="707"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-708"><a href="#L-708"><span class="linenos" data-line="708"></span></a> <span class="kr">end</span> </span><span id="L-709"><a href="#L-709"><span class="linenos" data-line="709"></span></a> <span class="kr">end</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">end</span> </span><span id="L-712"><a href="#L-712"><span class="linenos" data-line="712"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-713"><a href="#L-713"><span class="linenos" data-line="713"></span></a><span class="kr">end</span> <span class="c1">-- LCCNfactory()</span> </span><span id="L-714"><a href="#L-714"><span class="linenos" data-line="714"></span></a> </span><span id="L-715"><a href="#L-715"><span class="linenos" data-line="715"></span></a> </span><span id="L-716"><a href="#L-716"><span class="linenos" data-line="716"></span></a> </span><span id="L-717"><a href="#L-717"><span class="linenos" data-line="717"></span></a><span class="kd">local</span> <span class="n">LCCNformat</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">achieve</span> <span class="p">)</span> </span><span id="L-718"><a href="#L-718"><span class="linenos" data-line="718"></span></a> <span class="c1">-- Standard or hyphen or slash formatting of LCCN</span> </span><span id="L-719"><a href="#L-719"><span class="linenos" data-line="719"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-720"><a href="#L-720"><span class="linenos" data-line="720"></span></a> <span class="c1">-- assigned -- table; as of LCCNfactory(), and valid</span> </span><span id="L-721"><a href="#L-721"><span class="linenos" data-line="721"></span></a> <span class="c1">-- achieve -- additional formatting desires, like &quot;-&quot; or &quot;/&quot;</span> </span><span id="L-722"><a href="#L-722"><span class="linenos" data-line="722"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-723"><a href="#L-723"><span class="linenos" data-line="723"></span></a> <span class="c1">-- Returns string with letters, digits and hyphens</span> </span><span id="L-724"><a href="#L-724"><span class="linenos" data-line="724"></span></a> <span class="c1">-- 2013-07-14</span> </span><span id="L-725"><a href="#L-725"><span class="linenos" data-line="725"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-726"><a href="#L-726"><span class="linenos" data-line="726"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">.</span><span class="n">pre</span> <span class="kr">then</span> </span><span id="L-727"><a href="#L-727"><span class="linenos" data-line="727"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">assigned</span><span class="p">.</span><span class="n">pre</span><span class="p">;</span> </span><span id="L-728"><a href="#L-728"><span class="linenos" data-line="728"></span></a> <span class="kr">else</span> </span><span id="L-729"><a href="#L-729"><span class="linenos" data-line="729"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-730"><a href="#L-730"><span class="linenos" data-line="730"></span></a> <span class="kr">end</span> </span><span id="L-731"><a href="#L-731"><span class="linenos" data-line="731"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">.</span><span class="n">year</span> <span class="kr">then</span> </span><span id="L-732"><a href="#L-732"><span class="linenos" data-line="732"></span></a> <span class="kr">if</span> <span class="n">achieve</span> <span class="o">==</span> <span class="s2">&quot;/&quot;</span> <span class="ow">and</span> <span class="n">r</span> <span class="o">~=</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-733"><a href="#L-733"><span class="linenos" data-line="733"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="s2">&quot;/&quot;</span><span class="p">;</span> </span><span id="L-734"><a href="#L-734"><span class="linenos" data-line="734"></span></a> <span class="kr">end</span> </span><span id="L-735"><a href="#L-735"><span class="linenos" data-line="735"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">assigned</span><span class="p">.</span><span class="n">year</span><span class="p">;</span> </span><span id="L-736"><a href="#L-736"><span class="linenos" data-line="736"></span></a> <span class="kr">if</span> <span class="n">achieve</span> <span class="kr">then</span> </span><span id="L-737"><a href="#L-737"><span class="linenos" data-line="737"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">achieve</span><span class="p">;</span> </span><span id="L-738"><a href="#L-738"><span class="linenos" data-line="738"></span></a> <span class="kr">end</span> </span><span id="L-739"><a href="#L-739"><span class="linenos" data-line="739"></span></a> <span class="kr">end</span> </span><span id="L-740"><a href="#L-740"><span class="linenos" data-line="740"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">.</span><span class="n">serial</span> <span class="kr">then</span> </span><span id="L-741"><a href="#L-741"><span class="linenos" data-line="741"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">assigned</span><span class="p">.</span><span class="n">serial</span><span class="p">;</span> </span><span id="L-742"><a href="#L-742"><span class="linenos" data-line="742"></span></a> <span class="kr">end</span> </span><span id="L-743"><a href="#L-743"><span class="linenos" data-line="743"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">.</span><span class="n">qualifier</span> <span class="kr">then</span> </span><span id="L-744"><a href="#L-744"><span class="linenos" data-line="744"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s/%s&quot;</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">assigned</span><span class="p">.</span><span class="n">qualifier</span> <span class="p">);</span> </span><span id="L-745"><a href="#L-745"><span class="linenos" data-line="745"></span></a> <span class="kr">end</span> </span><span id="L-746"><a href="#L-746"><span class="linenos" data-line="746"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-747"><a href="#L-747"><span class="linenos" data-line="747"></span></a><span class="kr">end</span> <span class="c1">-- LCCNformat()</span> </span><span id="L-748"><a href="#L-748"><span class="linenos" data-line="748"></span></a> </span><span id="L-749"><a href="#L-749"><span class="linenos" data-line="749"></span></a> </span><span id="L-750"><a href="#L-750"><span class="linenos" data-line="750"></span></a> </span><span id="L-751"><a href="#L-751"><span class="linenos" data-line="751"></span></a><span class="kd">local</span> <span class="n">LCCNforward</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">achieve</span> <span class="p">)</span> </span><span id="L-752"><a href="#L-752"><span class="linenos" data-line="752"></span></a> <span class="c1">-- Retrieve bracketed titled external LCCN permalink</span> </span><span id="L-753"><a href="#L-753"><span class="linenos" data-line="753"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-754"><a href="#L-754"><span class="linenos" data-line="754"></span></a> <span class="c1">-- attempt -- string with presumable LCCN</span> </span><span id="L-755"><a href="#L-755"><span class="linenos" data-line="755"></span></a> <span class="c1">-- achieve -- additional title formatting desires, like &quot;-&quot;</span> </span><span id="L-756"><a href="#L-756"><span class="linenos" data-line="756"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-757"><a href="#L-757"><span class="linenos" data-line="757"></span></a> <span class="c1">-- Returns link, or plain attempt if bad LCCN</span> </span><span id="L-758"><a href="#L-758"><span class="linenos" data-line="758"></span></a> <span class="c1">-- 2015-08-10</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">lccn</span> <span class="o">=</span> <span class="n">LCCNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</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="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">lccn</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">r</span> <span class="o">=</span> <span class="n">LCCNformat</span><span class="p">(</span> <span class="n">lccn</span><span class="p">,</span> <span class="kc">false</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">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-764"><a href="#L-764"><span class="linenos" data-line="764"></span></a> <span class="kd">local</span> <span class="n">e</span><span class="p">,</span> <span class="n">s</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">achieve</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">s</span> <span class="o">=</span> <span class="n">LCCNformat</span><span class="p">(</span> <span class="n">lccn</span><span class="p">,</span> <span class="n">achieve</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">if</span> <span class="n">s</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">&quot;-&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-768"><a href="#L-768"><span class="linenos" data-line="768"></span></a> <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">&quot;span&quot;</span> <span class="p">)</span> </span><span id="L-769"><a href="#L-769"><span class="linenos" data-line="769"></span></a> <span class="p">:</span><span class="n">css</span><span class="p">(</span> <span class="s2">&quot;white-space&quot;</span><span class="p">,</span> <span class="s2">&quot;nowrap&quot;</span> <span class="p">);</span> </span><span id="L-770"><a href="#L-770"><span class="linenos" data-line="770"></span></a> <span class="kr">end</span> </span><span id="L-771"><a href="#L-771"><span class="linenos" data-line="771"></span></a> <span class="kr">else</span> </span><span id="L-772"><a href="#L-772"><span class="linenos" data-line="772"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-773"><a href="#L-773"><span class="linenos" data-line="773"></span></a> <span class="kr">end</span> </span><span id="L-774"><a href="#L-774"><span class="linenos" data-line="774"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[https://lccn.loc.gov/%s %s]&quot;</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-775"><a href="#L-775"><span class="linenos" data-line="775"></span></a> <span class="kr">if</span> <span class="n">e</span> <span class="kr">then</span> </span><span id="L-776"><a href="#L-776"><span class="linenos" data-line="776"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">e</span><span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> <span class="p">);</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">r</span> <span class="o">=</span> <span class="n">s</span><span class="p">;</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">end</span> </span><span id="L-781"><a href="#L-781"><span class="linenos" data-line="781"></span></a> <span class="kr">else</span> </span><span id="L-782"><a href="#L-782"><span class="linenos" data-line="782"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">;</span> </span><span id="L-783"><a href="#L-783"><span class="linenos" data-line="783"></span></a> <span class="kr">end</span> </span><span id="L-784"><a href="#L-784"><span class="linenos" data-line="784"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-785"><a href="#L-785"><span class="linenos" data-line="785"></span></a><span class="kr">end</span> <span class="c1">-- LCCNforward()</span> </span><span id="L-786"><a href="#L-786"><span class="linenos" data-line="786"></span></a> </span><span id="L-787"><a href="#L-787"><span class="linenos" data-line="787"></span></a> </span><span id="L-788"><a href="#L-788"><span class="linenos" data-line="788"></span></a> </span><span id="L-789"><a href="#L-789"><span class="linenos" data-line="789"></span></a><span class="kd">local</span> <span class="n">URNnamespace</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">area</span><span class="p">,</span> <span class="n">acquire</span> <span class="p">)</span> </span><span id="L-790"><a href="#L-790"><span class="linenos" data-line="790"></span></a> <span class="c1">-- Are these parts of a correct URN?</span> </span><span id="L-791"><a href="#L-791"><span class="linenos" data-line="791"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-792"><a href="#L-792"><span class="linenos" data-line="792"></span></a> <span class="c1">-- area -- string with lowercase namespace</span> </span><span id="L-793"><a href="#L-793"><span class="linenos" data-line="793"></span></a> <span class="c1">-- acquire -- string with identification</span> </span><span id="L-794"><a href="#L-794"><span class="linenos" data-line="794"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-795"><a href="#L-795"><span class="linenos" data-line="795"></span></a> <span class="c1">-- Returns false if no problem detected</span> </span><span id="L-796"><a href="#L-796"><span class="linenos" data-line="796"></span></a> <span class="c1">-- string with violation</span> </span><span id="L-797"><a href="#L-797"><span class="linenos" data-line="797"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-798"><a href="#L-798"><span class="linenos" data-line="798"></span></a> <span class="kr">if</span> <span class="n">area</span> <span class="o">==</span> <span class="s2">&quot;urn&quot;</span> <span class="kr">then</span> </span><span id="L-799"><a href="#L-799"><span class="linenos" data-line="799"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;urn:&quot;</span><span class="p">;</span> </span><span id="L-800"><a href="#L-800"><span class="linenos" data-line="800"></span></a> <span class="kr">else</span> </span><span id="L-801"><a href="#L-801"><span class="linenos" data-line="801"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;urn&quot;</span> <span class="p">).</span><span class="n">sns</span><span class="p">;</span> </span><span id="L-802"><a href="#L-802"><span class="linenos" data-line="802"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">s</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-803"><a href="#L-803"><span class="linenos" data-line="803"></span></a> <span class="n">r</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">area</span> <span class="p">);</span> </span><span id="L-804"><a href="#L-804"><span class="linenos" data-line="804"></span></a> <span class="kr">if</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="n">r</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-805"><a href="#L-805"><span class="linenos" data-line="805"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;[^%w%(%)%+,%-%.:=/@;%$_!%*&#39;].*$&quot;</span><span class="p">;</span> </span><span id="L-806"><a href="#L-806"><span class="linenos" data-line="806"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">acquire</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="n">s</span> <span class="p">);</span> </span><span id="L-807"><a href="#L-807"><span class="linenos" data-line="807"></span></a> <span class="kr">else</span> </span><span id="L-808"><a href="#L-808"><span class="linenos" data-line="808"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;&amp;#58;%s:&quot;</span><span class="p">,</span> <span class="n">area</span> <span class="p">);</span> </span><span id="L-809"><a href="#L-809"><span class="linenos" data-line="809"></span></a> <span class="kr">end</span> </span><span id="L-810"><a href="#L-810"><span class="linenos" data-line="810"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-811"><a href="#L-811"><span class="linenos" data-line="811"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-812"><a href="#L-812"><span class="linenos" data-line="812"></span></a> <span class="kr">if</span> <span class="n">area</span> <span class="o">==</span> <span class="s2">&quot;isbn&quot;</span> <span class="kr">then</span> </span><span id="L-813"><a href="#L-813"><span class="linenos" data-line="813"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isISBNvalid</span><span class="p">(</span> <span class="n">acquire</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-814"><a href="#L-814"><span class="linenos" data-line="814"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">acquire</span><span class="p">;</span> </span><span id="L-815"><a href="#L-815"><span class="linenos" data-line="815"></span></a> <span class="kr">end</span> </span><span id="L-816"><a href="#L-816"><span class="linenos" data-line="816"></span></a> <span class="kr">elseif</span> <span class="n">area</span> <span class="o">==</span> <span class="s2">&quot;issn&quot;</span> <span class="kr">then</span> </span><span id="L-817"><a href="#L-817"><span class="linenos" data-line="817"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isISSNvalid</span><span class="p">(</span> <span class="n">acquire</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-818"><a href="#L-818"><span class="linenos" data-line="818"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">acquire</span><span class="p">;</span> </span><span id="L-819"><a href="#L-819"><span class="linenos" data-line="819"></span></a> <span class="kr">end</span> </span><span id="L-820"><a href="#L-820"><span class="linenos" data-line="820"></span></a> <span class="kr">end</span> </span><span id="L-821"><a href="#L-821"><span class="linenos" data-line="821"></span></a> <span class="kr">end</span> </span><span id="L-822"><a href="#L-822"><span class="linenos" data-line="822"></span></a> <span class="kr">end</span> </span><span id="L-823"><a href="#L-823"><span class="linenos" data-line="823"></span></a> <span class="kr">end</span> </span><span id="L-824"><a href="#L-824"><span class="linenos" data-line="824"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-825"><a href="#L-825"><span class="linenos" data-line="825"></span></a><span class="kr">end</span> <span class="c1">-- URNnamespace()</span> </span><span id="L-826"><a href="#L-826"><span class="linenos" data-line="826"></span></a> </span><span id="L-827"><a href="#L-827"><span class="linenos" data-line="827"></span></a> </span><span id="L-828"><a href="#L-828"><span class="linenos" data-line="828"></span></a> </span><span id="L-829"><a href="#L-829"><span class="linenos" data-line="829"></span></a><span class="kd">local</span> <span class="n">URNresolve</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span> <span class="n">assigned</span><span class="p">,</span> <span class="n">ask</span><span class="p">,</span> <span class="n">alter</span> <span class="p">)</span> </span><span id="L-830"><a href="#L-830"><span class="linenos" data-line="830"></span></a> <span class="c1">-- Resolve URN within space</span> </span><span id="L-831"><a href="#L-831"><span class="linenos" data-line="831"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-832"><a href="#L-832"><span class="linenos" data-line="832"></span></a> <span class="c1">-- assigned -- table with resolvers for this space</span> </span><span id="L-833"><a href="#L-833"><span class="linenos" data-line="833"></span></a> <span class="c1">-- ask -- string with ID within this space</span> </span><span id="L-834"><a href="#L-834"><span class="linenos" data-line="834"></span></a> <span class="c1">-- alter -- string with alternative resolver, or not</span> </span><span id="L-835"><a href="#L-835"><span class="linenos" data-line="835"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-836"><a href="#L-836"><span class="linenos" data-line="836"></span></a> <span class="c1">-- Returns</span> </span><span id="L-837"><a href="#L-837"><span class="linenos" data-line="837"></span></a> <span class="c1">-- 1. URL of resolver, or nil</span> </span><span id="L-838"><a href="#L-838"><span class="linenos" data-line="838"></span></a> <span class="c1">-- 2. modified ask</span> </span><span id="L-839"><a href="#L-839"><span class="linenos" data-line="839"></span></a> <span class="kd">local</span> <span class="n">resolver</span> <span class="o">=</span> <span class="n">assigned</span><span class="p">;</span> </span><span id="L-840"><a href="#L-840"><span class="linenos" data-line="840"></span></a> <span class="kd">local</span> <span class="n">sign</span> <span class="o">=</span> <span class="n">ask</span><span class="p">;</span> </span><span id="L-841"><a href="#L-841"><span class="linenos" data-line="841"></span></a> <span class="kd">local</span> <span class="n">subset</span> <span class="o">=</span> <span class="n">assigned</span><span class="p">[</span> <span class="s2">&quot;:&quot;</span> <span class="p">];</span> </span><span id="L-842"><a href="#L-842"><span class="linenos" data-line="842"></span></a> <span class="kd">local</span> <span class="n">r</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">if</span> <span class="n">subset</span> <span class="kr">then</span> </span><span id="L-844"><a href="#L-844"><span class="linenos" data-line="844"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">sign</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="n">subset</span> <span class="p">);</span> </span><span id="L-845"><a href="#L-845"><span class="linenos" data-line="845"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-846"><a href="#L-846"><span class="linenos" data-line="846"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">lower</span><span class="p">();</span> </span><span id="L-847"><a href="#L-847"><span class="linenos" data-line="847"></span></a> <span class="n">sign</span> <span class="o">=</span> <span class="n">s</span> <span class="o">..</span> <span class="n">sign</span><span class="p">:</span><span class="n">sub</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><span id="L-848"><a href="#L-848"><span class="linenos" data-line="848"></span></a> <span class="kr">if</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">s</span> <span class="p">]</span> <span class="kr">then</span> </span><span id="L-849"><a href="#L-849"><span class="linenos" data-line="849"></span></a> <span class="n">resolver</span> <span class="o">=</span> <span class="n">assigned</span><span class="p">[</span> <span class="n">s</span> <span class="p">];</span> </span><span id="L-850"><a href="#L-850"><span class="linenos" data-line="850"></span></a> <span class="kr">end</span> </span><span id="L-851"><a href="#L-851"><span class="linenos" data-line="851"></span></a> <span class="kr">end</span> </span><span id="L-852"><a href="#L-852"><span class="linenos" data-line="852"></span></a> <span class="kr">end</span> </span><span id="L-853"><a href="#L-853"><span class="linenos" data-line="853"></span></a> <span class="kr">if</span> <span class="n">alter</span> <span class="kr">then</span> </span><span id="L-854"><a href="#L-854"><span class="linenos" data-line="854"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">resolver</span><span class="p">[</span> <span class="n">alter</span> <span class="p">];</span> </span><span id="L-855"><a href="#L-855"><span class="linenos" data-line="855"></span></a> <span class="kr">end</span> </span><span id="L-856"><a href="#L-856"><span class="linenos" data-line="856"></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-857"><a href="#L-857"><span class="linenos" data-line="857"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">resolver</span><span class="p">[</span> <span class="s2">&quot;*&quot;</span> <span class="p">];</span> </span><span id="L-858"><a href="#L-858"><span class="linenos" data-line="858"></span></a> <span class="kr">end</span> </span><span id="L-859"><a href="#L-859"><span class="linenos" data-line="859"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">,</span> <span class="n">sign</span><span class="p">;</span> </span><span id="L-860"><a href="#L-860"><span class="linenos" data-line="860"></span></a><span class="kr">end</span> <span class="c1">-- URNresolve()</span> </span><span id="L-861"><a href="#L-861"><span class="linenos" data-line="861"></span></a> </span><span id="L-862"><a href="#L-862"><span class="linenos" data-line="862"></span></a> </span><span id="L-863"><a href="#L-863"><span class="linenos" data-line="863"></span></a> </span><span id="L-864"><a href="#L-864"><span class="linenos" data-line="864"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">coreISSN</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-865"><a href="#L-865"><span class="linenos" data-line="865"></span></a> <span class="c1">-- Fetch significant ISSN</span> </span><span id="L-866"><a href="#L-866"><span class="linenos" data-line="866"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-867"><a href="#L-867"><span class="linenos" data-line="867"></span></a> <span class="c1">-- attempt -- string with presumable ISSN</span> </span><span id="L-868"><a href="#L-868"><span class="linenos" data-line="868"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-869"><a href="#L-869"><span class="linenos" data-line="869"></span></a> <span class="c1">-- Returns string with 7 digits, without check digit nor GTIN</span> </span><span id="L-870"><a href="#L-870"><span class="linenos" data-line="870"></span></a> <span class="c1">-- unmodified input if wrong</span> </span><span id="L-871"><a href="#L-871"><span class="linenos" data-line="871"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-872"><a href="#L-872"><span class="linenos" data-line="872"></span></a> <span class="kd">local</span> <span class="n">issn</span> <span class="o">=</span> <span class="n">ISSNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-873"><a href="#L-873"><span class="linenos" data-line="873"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">issn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</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="n">issn</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-875"><a href="#L-875"><span class="linenos" data-line="875"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">format</span><span class="p">(</span> <span class="n">issn</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">7</span> <span class="p">);</span> </span><span id="L-876"><a href="#L-876"><span class="linenos" data-line="876"></span></a> <span class="kr">elseif</span> <span class="n">issn</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-877"><a href="#L-877"><span class="linenos" data-line="877"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">format</span><span class="p">(</span> <span class="n">issn</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">7</span> <span class="p">);</span> </span><span id="L-878"><a href="#L-878"><span class="linenos" data-line="878"></span></a> <span class="kr">end</span> </span><span id="L-879"><a href="#L-879"><span class="linenos" data-line="879"></span></a> <span class="kr">else</span> </span><span id="L-880"><a href="#L-880"><span class="linenos" data-line="880"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">upper</span><span class="p">(</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-881"><a href="#L-881"><span class="linenos" data-line="881"></span></a> <span class="kr">end</span> </span><span id="L-882"><a href="#L-882"><span class="linenos" data-line="882"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-883"><a href="#L-883"><span class="linenos" data-line="883"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.coreISSN()</span> </span><span id="L-884"><a href="#L-884"><span class="linenos" data-line="884"></span></a> </span><span id="L-885"><a href="#L-885"><span class="linenos" data-line="885"></span></a> </span><span id="L-886"><a href="#L-886"><span class="linenos" data-line="886"></span></a> </span><span id="L-887"><a href="#L-887"><span class="linenos" data-line="887"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">formatISBN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">assigned</span> <span class="p">)</span> </span><span id="L-888"><a href="#L-888"><span class="linenos" data-line="888"></span></a> <span class="c1">-- Format ISBN, if no hyphens present</span> </span><span id="L-889"><a href="#L-889"><span class="linenos" data-line="889"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-890"><a href="#L-890"><span class="linenos" data-line="890"></span></a> <span class="c1">-- attempt -- string with presumable ISBN</span> </span><span id="L-891"><a href="#L-891"><span class="linenos" data-line="891"></span></a> <span class="c1">-- assigned -- table or false; as of ISBNfactory()</span> </span><span id="L-892"><a href="#L-892"><span class="linenos" data-line="892"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-893"><a href="#L-893"><span class="linenos" data-line="893"></span></a> <span class="c1">-- Returns string with some hyphens, if not yet</span> </span><span id="L-894"><a href="#L-894"><span class="linenos" data-line="894"></span></a> <span class="c1">-- unmodified input if already hyphens or wrong</span> </span><span id="L-895"><a href="#L-895"><span class="linenos" data-line="895"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-896"><a href="#L-896"><span class="linenos" data-line="896"></span></a> <span class="kd">local</span> <span class="n">isbn</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">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">assigned</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-898"><a href="#L-898"><span class="linenos" data-line="898"></span></a> <span class="n">isbn</span> <span class="o">=</span> <span class="n">assigned</span><span class="p">;</span> </span><span id="L-899"><a href="#L-899"><span class="linenos" data-line="899"></span></a> <span class="kr">else</span> </span><span id="L-900"><a href="#L-900"><span class="linenos" data-line="900"></span></a> <span class="n">isbn</span> <span class="o">=</span> <span class="n">ISBNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-901"><a href="#L-901"><span class="linenos" data-line="901"></span></a> <span class="kr">end</span> </span><span id="L-902"><a href="#L-902"><span class="linenos" data-line="902"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">isbn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-903"><a href="#L-903"><span class="linenos" data-line="903"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">ISBNformat</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">isbn</span> <span class="p">);</span> </span><span id="L-904"><a href="#L-904"><span class="linenos" data-line="904"></span></a> <span class="kr">else</span> </span><span id="L-905"><a href="#L-905"><span class="linenos" data-line="905"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">upper</span><span class="p">(</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-906"><a href="#L-906"><span class="linenos" data-line="906"></span></a> <span class="kr">end</span> </span><span id="L-907"><a href="#L-907"><span class="linenos" data-line="907"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-908"><a href="#L-908"><span class="linenos" data-line="908"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.formatISBN()</span> </span><span id="L-909"><a href="#L-909"><span class="linenos" data-line="909"></span></a> </span><span id="L-910"><a href="#L-910"><span class="linenos" data-line="910"></span></a> </span><span id="L-911"><a href="#L-911"><span class="linenos" data-line="911"></span></a> </span><span id="L-912"><a href="#L-912"><span class="linenos" data-line="912"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">formatISSN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">achieve</span> <span class="p">)</span> </span><span id="L-913"><a href="#L-913"><span class="linenos" data-line="913"></span></a> <span class="c1">-- Format ISSN</span> </span><span id="L-914"><a href="#L-914"><span class="linenos" data-line="914"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-915"><a href="#L-915"><span class="linenos" data-line="915"></span></a> <span class="c1">-- attempt -- string with presumable ISSN</span> </span><span id="L-916"><a href="#L-916"><span class="linenos" data-line="916"></span></a> <span class="c1">-- achieve -- false or 8 or 13; requested presentation</span> </span><span id="L-917"><a href="#L-917"><span class="linenos" data-line="917"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-918"><a href="#L-918"><span class="linenos" data-line="918"></span></a> <span class="c1">-- Returns string with some hyphens, if not yet</span> </span><span id="L-919"><a href="#L-919"><span class="linenos" data-line="919"></span></a> <span class="c1">-- unmodified input if already hyphens or wrong</span> </span><span id="L-920"><a href="#L-920"><span class="linenos" data-line="920"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-921"><a href="#L-921"><span class="linenos" data-line="921"></span></a> <span class="kd">local</span> <span class="n">issn</span> <span class="o">=</span> <span class="n">ISSNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-922"><a href="#L-922"><span class="linenos" data-line="922"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">issn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-923"><a href="#L-923"><span class="linenos" data-line="923"></span></a> <span class="kr">if</span> <span class="n">ISSNfaith</span><span class="p">(</span> <span class="n">issn</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-924"><a href="#L-924"><span class="linenos" data-line="924"></span></a> <span class="kd">local</span> <span class="n">k</span><span class="p">,</span> <span class="n">m</span><span class="p">;</span> </span><span id="L-925"><a href="#L-925"><span class="linenos" data-line="925"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">achieve</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-926"><a href="#L-926"><span class="linenos" data-line="926"></span></a> <span class="n">m</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">achieve</span> <span class="p">);</span> </span><span id="L-927"><a href="#L-927"><span class="linenos" data-line="927"></span></a> <span class="kr">else</span> </span><span id="L-928"><a href="#L-928"><span class="linenos" data-line="928"></span></a> <span class="n">m</span> <span class="o">=</span> <span class="n">achieve</span><span class="p">;</span> </span><span id="L-929"><a href="#L-929"><span class="linenos" data-line="929"></span></a> <span class="kr">end</span> </span><span id="L-930"><a href="#L-930"><span class="linenos" data-line="930"></span></a> <span class="kr">if</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">8</span> <span class="ow">or</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-931"><a href="#L-931"><span class="linenos" data-line="931"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="n">m</span><span class="p">;</span> </span><span id="L-932"><a href="#L-932"><span class="linenos" data-line="932"></span></a> <span class="kr">else</span> </span><span id="L-933"><a href="#L-933"><span class="linenos" data-line="933"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="n">issn</span><span class="p">.</span><span class="n">type</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">end</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">ISSNformat</span><span class="p">(</span> <span class="n">issn</span><span class="p">,</span> <span class="n">k</span> <span class="p">);</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="ow">not</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="n">r</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">upper</span><span class="p">(</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="p">);</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="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-942"><a href="#L-942"><span class="linenos" data-line="942"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.formatISSN()</span> </span><span id="L-943"><a href="#L-943"><span class="linenos" data-line="943"></span></a> </span><span id="L-944"><a href="#L-944"><span class="linenos" data-line="944"></span></a> </span><span id="L-945"><a href="#L-945"><span class="linenos" data-line="945"></span></a> </span><span id="L-946"><a href="#L-946"><span class="linenos" data-line="946"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">formatLCCN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">achieve</span> <span class="p">)</span> </span><span id="L-947"><a href="#L-947"><span class="linenos" data-line="947"></span></a> <span class="c1">-- Standard or hyphen formatting of LCCN</span> </span><span id="L-948"><a href="#L-948"><span class="linenos" data-line="948"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-949"><a href="#L-949"><span class="linenos" data-line="949"></span></a> <span class="c1">-- attempt -- string with presumable LCCN</span> </span><span id="L-950"><a href="#L-950"><span class="linenos" data-line="950"></span></a> <span class="c1">-- achieve -- additional formatting desires, like &quot;-&quot;</span> </span><span id="L-951"><a href="#L-951"><span class="linenos" data-line="951"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-952"><a href="#L-952"><span class="linenos" data-line="952"></span></a> <span class="c1">-- Returns string with letters, digits and hyphens</span> </span><span id="L-953"><a href="#L-953"><span class="linenos" data-line="953"></span></a> <span class="c1">-- unmodified input if wrong</span> </span><span id="L-954"><a href="#L-954"><span class="linenos" data-line="954"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">LCCNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</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">r</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">r</span> <span class="o">=</span> <span class="n">LCCNformat</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="n">achieve</span> <span class="p">);</span> </span><span id="L-957"><a href="#L-957"><span class="linenos" data-line="957"></span></a> <span class="kr">end</span> </span><span id="L-958"><a href="#L-958"><span class="linenos" data-line="958"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</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">-- URIutil.formatLCCN()</span> </span><span id="L-960"><a href="#L-960"><span class="linenos" data-line="960"></span></a> </span><span id="L-961"><a href="#L-961"><span class="linenos" data-line="961"></span></a> </span><span id="L-962"><a href="#L-962"><span class="linenos" data-line="962"></span></a> </span><span id="L-963"><a href="#L-963"><span class="linenos" data-line="963"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">isDNBvalid</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">also</span> <span class="p">)</span> </span><span id="L-964"><a href="#L-964"><span class="linenos" data-line="964"></span></a> <span class="c1">-- Is this DNB (also GND, ZDB) formally correct (check digit)?</span> </span><span id="L-965"><a href="#L-965"><span class="linenos" data-line="965"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-966"><a href="#L-966"><span class="linenos" data-line="966"></span></a> <span class="c1">-- attempt -- string with any presumable DNB code</span> </span><span id="L-967"><a href="#L-967"><span class="linenos" data-line="967"></span></a> <span class="c1">-- also -- string or nil; optional requirement DMA GND SWD</span> </span><span id="L-968"><a href="#L-968"><span class="linenos" data-line="968"></span></a> <span class="c1">-- &quot;ZDB&quot; -- permit hyphen, but use &gt;2011 rule</span> </span><span id="L-969"><a href="#L-969"><span class="linenos" data-line="969"></span></a> <span class="c1">-- DMA starting with 3 and no hyphen</span> </span><span id="L-970"><a href="#L-970"><span class="linenos" data-line="970"></span></a> <span class="c1">-- GND not DNB2011</span> </span><span id="L-971"><a href="#L-971"><span class="linenos" data-line="971"></span></a> <span class="c1">-- SWD DNB2011 starting with 4 or 7 and no X check</span> </span><span id="L-972"><a href="#L-972"><span class="linenos" data-line="972"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-973"><a href="#L-973"><span class="linenos" data-line="973"></span></a> <span class="c1">-- Returns number of digits or 2011, if valid</span> </span><span id="L-974"><a href="#L-974"><span class="linenos" data-line="974"></span></a> <span class="c1">-- false if not correct, bad data or check digit wrong</span> </span><span id="L-975"><a href="#L-975"><span class="linenos" data-line="975"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">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-976"><a href="#L-976"><span class="linenos" data-line="976"></span></a> <span class="kd">local</span> <span class="n">j</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="kc">true</span> <span class="p">);</span> </span><span id="L-977"><a href="#L-977"><span class="linenos" data-line="977"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-978"><a href="#L-978"><span class="linenos" data-line="978"></span></a> <span class="kd">local</span> <span class="n">dnb</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">if</span> <span class="n">j</span> <span class="kr">then</span> </span><span id="L-980"><a href="#L-980"><span class="linenos" data-line="980"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">attempt</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">j</span> <span class="o">-</span> <span class="mi">1</span> <span class="p">);</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="n">j</span> <span class="o">=</span> <span class="n">s</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">&quot;-&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="kc">true</span> <span class="p">);</span> </span><span id="L-983"><a href="#L-983"><span class="linenos" data-line="983"></span></a> <span class="kr">if</span> <span class="n">j</span> <span class="kr">then</span> </span><span id="L-984"><a href="#L-984"><span class="linenos" data-line="984"></span></a> <span class="kr">if</span> <span class="n">j</span> <span class="o">&gt;</span> <span class="mi">3</span> <span class="ow">and</span> <span class="n">j</span> <span class="o">&lt;=</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-985"><a href="#L-985"><span class="linenos" data-line="985"></span></a> <span class="kr">if</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^[0-9]+-[0-9xX]$&quot;</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-986"><a href="#L-986"><span class="linenos" data-line="986"></span></a> <span class="n">dnb</span> <span class="o">=</span> <span class="n">factory</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="kc">true</span> <span class="p">);</span> </span><span id="L-987"><a href="#L-987"><span class="linenos" data-line="987"></span></a> <span class="kr">end</span> </span><span id="L-988"><a href="#L-988"><span class="linenos" data-line="988"></span></a> <span class="kr">end</span> </span><span id="L-989"><a href="#L-989"><span class="linenos" data-line="989"></span></a> <span class="kr">elseif</span> <span class="o">#</span><span class="n">s</span> <span class="o">&gt;</span> <span class="mi">6</span> <span class="kr">then</span> </span><span id="L-990"><a href="#L-990"><span class="linenos" data-line="990"></span></a> <span class="kr">if</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^[0-9]+[0-9xX]$&quot;</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-991"><a href="#L-991"><span class="linenos" data-line="991"></span></a> <span class="n">dnb</span> <span class="o">=</span> <span class="n">factory</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="o">#</span><span class="n">s</span> <span class="p">);</span> </span><span id="L-992"><a href="#L-992"><span class="linenos" data-line="992"></span></a> <span class="kr">end</span> </span><span id="L-993"><a href="#L-993"><span class="linenos" data-line="993"></span></a> <span class="kr">end</span> </span><span id="L-994"><a href="#L-994"><span class="linenos" data-line="994"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">dnb</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-995"><a href="#L-995"><span class="linenos" data-line="995"></span></a> <span class="kr">if</span> <span class="n">j</span> <span class="kr">then</span> </span><span id="L-996"><a href="#L-996"><span class="linenos" data-line="996"></span></a> <span class="kr">if</span> <span class="n">DNBfaith</span><span class="p">(</span> <span class="n">dnb</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-997"><a href="#L-997"><span class="linenos" data-line="997"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="mi">2011</span><span class="p">;</span> </span><span id="L-998"><a href="#L-998"><span class="linenos" data-line="998"></span></a> <span class="kr">elseif</span> <span class="nb">type</span><span class="p">(</span> <span class="n">also</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</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="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">also</span> <span class="p">);</span> </span><span id="L-1000"><a href="#L-1000"><span class="linenos" data-line="1000"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;ZDB&quot;</span> <span class="kr">then</span> </span><span id="L-1001"><a href="#L-1001"><span class="linenos" data-line="1001"></span></a> <span class="kr">if</span> <span class="n">DNBfaith</span><span class="p">(</span> <span class="n">dnb</span><span class="p">,</span> <span class="kc">false</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1002"><a href="#L-1002"><span class="linenos" data-line="1002"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">dnb</span><span class="p">.</span><span class="n">type</span><span class="p">;</span> </span><span id="L-1003"><a href="#L-1003"><span class="linenos" data-line="1003"></span></a> <span class="kr">end</span> </span><span id="L-1004"><a href="#L-1004"><span class="linenos" data-line="1004"></span></a> <span class="kr">end</span> </span><span id="L-1005"><a href="#L-1005"><span class="linenos" data-line="1005"></span></a> <span class="kr">end</span> </span><span id="L-1006"><a href="#L-1006"><span class="linenos" data-line="1006"></span></a> <span class="kr">else</span> </span><span id="L-1007"><a href="#L-1007"><span class="linenos" data-line="1007"></span></a> <span class="kr">if</span> <span class="n">DNBfaith</span><span class="p">(</span> <span class="n">dnb</span><span class="p">,</span> <span class="kc">false</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1008"><a href="#L-1008"><span class="linenos" data-line="1008"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">dnb</span><span class="p">.</span><span class="n">type</span><span class="p">;</span> </span><span id="L-1009"><a href="#L-1009"><span class="linenos" data-line="1009"></span></a> <span class="kr">elseif</span> <span class="nb">type</span><span class="p">(</span> <span class="n">also</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1010"><a href="#L-1010"><span class="linenos" data-line="1010"></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">also</span> <span class="p">);</span> </span><span id="L-1011"><a href="#L-1011"><span class="linenos" data-line="1011"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;ZDB&quot;</span> <span class="kr">then</span> </span><span id="L-1012"><a href="#L-1012"><span class="linenos" data-line="1012"></span></a> <span class="kr">if</span> <span class="n">DNBfaith</span><span class="p">(</span> <span class="n">dnb</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1013"><a href="#L-1013"><span class="linenos" data-line="1013"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">dnb</span><span class="p">.</span><span class="n">type</span><span class="p">;</span> </span><span id="L-1014"><a href="#L-1014"><span class="linenos" data-line="1014"></span></a> <span class="kr">end</span> </span><span id="L-1015"><a href="#L-1015"><span class="linenos" data-line="1015"></span></a> <span class="kr">end</span> </span><span id="L-1016"><a href="#L-1016"><span class="linenos" data-line="1016"></span></a> <span class="kr">end</span> </span><span id="L-1017"><a href="#L-1017"><span class="linenos" data-line="1017"></span></a> <span class="kr">end</span> </span><span id="L-1018"><a href="#L-1018"><span class="linenos" data-line="1018"></span></a> <span class="kr">end</span> </span><span id="L-1019"><a href="#L-1019"><span class="linenos" data-line="1019"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1020"><a href="#L-1020"><span class="linenos" data-line="1020"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.isDNBvalid()</span> </span><span id="L-1021"><a href="#L-1021"><span class="linenos" data-line="1021"></span></a> </span><span id="L-1022"><a href="#L-1022"><span class="linenos" data-line="1022"></span></a> </span><span id="L-1023"><a href="#L-1023"><span class="linenos" data-line="1023"></span></a> </span><span id="L-1024"><a href="#L-1024"><span class="linenos" data-line="1024"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">isDOI</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1025"><a href="#L-1025"><span class="linenos" data-line="1025"></span></a> <span class="c1">-- Is this a syntactically correct DOI?</span> </span><span id="L-1026"><a href="#L-1026"><span class="linenos" data-line="1026"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1027"><a href="#L-1027"><span class="linenos" data-line="1027"></span></a> <span class="c1">-- attempt -- string with presumable DOI code</span> </span><span id="L-1028"><a href="#L-1028"><span class="linenos" data-line="1028"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1029"><a href="#L-1029"><span class="linenos" data-line="1029"></span></a> <span class="c1">-- Returns number of organization, if valid</span> </span><span id="L-1030"><a href="#L-1030"><span class="linenos" data-line="1030"></span></a> <span class="c1">-- false if not correct, bad character or syntax</span> </span><span id="L-1031"><a href="#L-1031"><span class="linenos" data-line="1031"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1032"><a href="#L-1032"><span class="linenos" data-line="1032"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">DOIpAuth</span> <span class="kr">then</span> </span><span id="L-1033"><a href="#L-1033"><span class="linenos" data-line="1033"></span></a> <span class="n">URIutil</span><span class="p">.</span><span class="n">DOIpAuth</span> <span class="o">=</span> <span class="s2">&quot;^%s*10%.([1-9][0-9]+)/(.+)%s*$&quot;</span><span class="p">;</span> </span><span id="L-1034"><a href="#L-1034"><span class="linenos" data-line="1034"></span></a> <span class="kr">end</span> </span><span id="L-1035"><a href="#L-1035"><span class="linenos" data-line="1035"></span></a> <span class="kd">local</span> <span class="n">k</span><span class="p">,</span> <span class="n">s</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">DOIpAuth</span> <span class="p">);</span> </span><span id="L-1036"><a href="#L-1036"><span class="linenos" data-line="1036"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="kr">then</span> </span><span id="L-1037"><a href="#L-1037"><span class="linenos" data-line="1037"></span></a> <span class="n">k</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">k</span> <span class="p">);</span> </span><span id="L-1038"><a href="#L-1038"><span class="linenos" data-line="1038"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="o">&gt;=</span> <span class="mi">1000</span> <span class="ow">and</span> <span class="n">k</span> <span class="o">&lt;</span> <span class="mi">100000000</span> <span class="kr">then</span> </span><span id="L-1039"><a href="#L-1039"><span class="linenos" data-line="1039"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">DOI</span> <span class="kr">then</span> </span><span id="L-1040"><a href="#L-1040"><span class="linenos" data-line="1040"></span></a> <span class="n">URIutil</span><span class="p">.</span><span class="n">DOIpID</span> <span class="o">=</span> <span class="s2">&quot;^[0-9A-Za-z%(%[&lt;%./]&quot;</span> </span><span id="L-1041"><a href="#L-1041"><span class="linenos" data-line="1041"></span></a> <span class="o">..</span> <span class="s2">&quot;[%-0-9/A-Z%.a-z%(%)_%[%];,:&lt;&gt;%+]*&quot;</span> </span><span id="L-1042"><a href="#L-1042"><span class="linenos" data-line="1042"></span></a> <span class="o">..</span> <span class="s2">&quot;[0-9A-Za-z%)%]&gt;%+#]$&quot;</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="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">uri</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span> <span class="n">s</span> <span class="p">),</span> <span class="s2">&quot;PATH&quot;</span> <span class="p">);</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">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">DOIpID</span> <span class="p">)</span> <span class="ow">or</span> <span class="n">s</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^%w$&quot;</span> <span class="p">)</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">k</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">end</span> </span><span id="L-1048"><a href="#L-1048"><span class="linenos" data-line="1048"></span></a> <span class="kr">end</span> </span><span id="L-1049"><a href="#L-1049"><span class="linenos" data-line="1049"></span></a> <span class="kr">end</span> </span><span id="L-1050"><a href="#L-1050"><span class="linenos" data-line="1050"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1051"><a href="#L-1051"><span class="linenos" data-line="1051"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.isDOI()</span> </span><span id="L-1052"><a href="#L-1052"><span class="linenos" data-line="1052"></span></a> </span><span id="L-1053"><a href="#L-1053"><span class="linenos" data-line="1053"></span></a> </span><span id="L-1054"><a href="#L-1054"><span class="linenos" data-line="1054"></span></a> </span><span id="L-1055"><a href="#L-1055"><span class="linenos" data-line="1055"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">isEscValid</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1056"><a href="#L-1056"><span class="linenos" data-line="1056"></span></a> <span class="c1">-- Are bad percent escapings in attempt?</span> </span><span id="L-1057"><a href="#L-1057"><span class="linenos" data-line="1057"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1058"><a href="#L-1058"><span class="linenos" data-line="1058"></span></a> <span class="c1">-- attempt -- string with possible percent escapings</span> </span><span id="L-1059"><a href="#L-1059"><span class="linenos" data-line="1059"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1060"><a href="#L-1060"><span class="linenos" data-line="1060"></span></a> <span class="c1">-- Returns string with violating sequence</span> </span><span id="L-1061"><a href="#L-1061"><span class="linenos" data-line="1061"></span></a> <span class="c1">-- false if correct</span> </span><span id="L-1062"><a href="#L-1062"><span class="linenos" data-line="1062"></span></a> <span class="kd">local</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-1063"><a href="#L-1063"><span class="linenos" data-line="1063"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1064"><a href="#L-1064"><span class="linenos" data-line="1064"></span></a> <span class="kd">local</span> <span class="n">h</span><span class="p">,</span> <span class="n">s</span><span class="p">;</span> </span><span id="L-1065"><a href="#L-1065"><span class="linenos" data-line="1065"></span></a> <span class="kr">while</span> <span class="n">i</span> <span class="kr">do</span> </span><span id="L-1066"><a href="#L-1066"><span class="linenos" data-line="1066"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">&quot;%&quot;</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="kc">true</span> <span class="p">);</span> </span><span id="L-1067"><a href="#L-1067"><span class="linenos" data-line="1067"></span></a> <span class="kr">if</span> <span class="n">i</span> <span class="kr">then</span> </span><span id="L-1068"><a href="#L-1068"><span class="linenos" data-line="1068"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">attempt</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">1</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">2</span> <span class="p">);</span> </span><span id="L-1069"><a href="#L-1069"><span class="linenos" data-line="1069"></span></a> <span class="n">h</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">&quot;%x%x&quot;</span> <span class="p">);</span> </span><span id="L-1070"><a href="#L-1070"><span class="linenos" data-line="1070"></span></a> <span class="kr">if</span> <span class="n">h</span> <span class="kr">then</span> </span><span id="L-1071"><a href="#L-1071"><span class="linenos" data-line="1071"></span></a> <span class="kr">if</span> <span class="n">h</span> <span class="o">==</span> <span class="s2">&quot;00&quot;</span> <span class="kr">then</span> </span><span id="L-1072"><a href="#L-1072"><span class="linenos" data-line="1072"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;%00&quot;</span><span class="p">;</span> </span><span id="L-1073"><a href="#L-1073"><span class="linenos" data-line="1073"></span></a> <span class="kr">break</span><span class="p">;</span> <span class="c1">-- while i</span> </span><span id="L-1074"><a href="#L-1074"><span class="linenos" data-line="1074"></span></a> <span class="kr">end</span> </span><span id="L-1075"><a href="#L-1075"><span class="linenos" data-line="1075"></span></a> <span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">;</span> </span><span id="L-1076"><a href="#L-1076"><span class="linenos" data-line="1076"></span></a> <span class="kr">else</span> </span><span id="L-1077"><a href="#L-1077"><span class="linenos" data-line="1077"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;%&quot;</span> <span class="o">..</span> <span class="n">s</span><span class="p">;</span> </span><span id="L-1078"><a href="#L-1078"><span class="linenos" data-line="1078"></span></a> <span class="kr">break</span><span class="p">;</span> <span class="c1">-- while i</span> </span><span id="L-1079"><a href="#L-1079"><span class="linenos" data-line="1079"></span></a> <span class="kr">end</span> </span><span id="L-1080"><a href="#L-1080"><span class="linenos" data-line="1080"></span></a> <span class="kr">end</span> </span><span id="L-1081"><a href="#L-1081"><span class="linenos" data-line="1081"></span></a> <span class="kr">end</span> <span class="c1">-- while i</span> </span><span id="L-1082"><a href="#L-1082"><span class="linenos" data-line="1082"></span></a> <span class="kr">return</span> <span class="n">r</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 class="c1">-- URIutil.isEscValid()</span> </span><span id="L-1084"><a href="#L-1084"><span class="linenos" data-line="1084"></span></a> </span><span id="L-1085"><a href="#L-1085"><span class="linenos" data-line="1085"></span></a> </span><span id="L-1086"><a href="#L-1086"><span class="linenos" data-line="1086"></span></a> </span><span id="L-1087"><a href="#L-1087"><span class="linenos" data-line="1087"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">isGTINvalid</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1088"><a href="#L-1088"><span class="linenos" data-line="1088"></span></a> <span class="c1">-- Is this GTIN (EAN) formally correct (check digit)?</span> </span><span id="L-1089"><a href="#L-1089"><span class="linenos" data-line="1089"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1090"><a href="#L-1090"><span class="linenos" data-line="1090"></span></a> <span class="c1">-- attempt -- string with presumable GTIN</span> </span><span id="L-1091"><a href="#L-1091"><span class="linenos" data-line="1091"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1092"><a href="#L-1092"><span class="linenos" data-line="1092"></span></a> <span class="c1">-- Returns GTIN length</span> </span><span id="L-1093"><a href="#L-1093"><span class="linenos" data-line="1093"></span></a> <span class="c1">-- false if not correct, bad data or check digit wrong</span> </span><span id="L-1094"><a href="#L-1094"><span class="linenos" data-line="1094"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1095"><a href="#L-1095"><span class="linenos" data-line="1095"></span></a> <span class="kd">local</span> <span class="n">gtin</span> <span class="o">=</span> <span class="n">factory</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="kc">false</span> <span class="p">);</span> </span><span id="L-1096"><a href="#L-1096"><span class="linenos" data-line="1096"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">gtin</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-1097"><a href="#L-1097"><span class="linenos" data-line="1097"></span></a> <span class="kr">if</span> <span class="n">gtin</span><span class="p">.</span><span class="n">type</span> <span class="o">==</span> <span class="mi">13</span> <span class="kr">then</span> </span><span id="L-1098"><a href="#L-1098"><span class="linenos" data-line="1098"></span></a> <span class="kr">if</span> <span class="n">GTINfaith</span><span class="p">(</span> <span class="n">gtin</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1099"><a href="#L-1099"><span class="linenos" data-line="1099"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">gtin</span><span class="p">.</span><span class="n">type</span><span class="p">;</span> </span><span id="L-1100"><a href="#L-1100"><span class="linenos" data-line="1100"></span></a> <span class="kr">end</span> </span><span id="L-1101"><a href="#L-1101"><span class="linenos" data-line="1101"></span></a> <span class="kr">else</span> </span><span id="L-1102"><a href="#L-1102"><span class="linenos" data-line="1102"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1103"><a href="#L-1103"><span class="linenos" data-line="1103"></span></a> <span class="kr">end</span> </span><span id="L-1104"><a href="#L-1104"><span class="linenos" data-line="1104"></span></a> <span class="kr">else</span> </span><span id="L-1105"><a href="#L-1105"><span class="linenos" data-line="1105"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1106"><a href="#L-1106"><span class="linenos" data-line="1106"></span></a> <span class="kr">end</span> </span><span id="L-1107"><a href="#L-1107"><span class="linenos" data-line="1107"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1108"><a href="#L-1108"><span class="linenos" data-line="1108"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.isGTINvalid()</span> </span><span id="L-1109"><a href="#L-1109"><span class="linenos" data-line="1109"></span></a> </span><span id="L-1110"><a href="#L-1110"><span class="linenos" data-line="1110"></span></a> </span><span id="L-1111"><a href="#L-1111"><span class="linenos" data-line="1111"></span></a> </span><span id="L-1112"><a href="#L-1112"><span class="linenos" data-line="1112"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">isHandle</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1113"><a href="#L-1113"><span class="linenos" data-line="1113"></span></a> <span class="c1">-- Is this a meaningful handle for handle.net?</span> </span><span id="L-1114"><a href="#L-1114"><span class="linenos" data-line="1114"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1115"><a href="#L-1115"><span class="linenos" data-line="1115"></span></a> <span class="c1">-- attempt -- string with presumable handle code</span> </span><span id="L-1116"><a href="#L-1116"><span class="linenos" data-line="1116"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1117"><a href="#L-1117"><span class="linenos" data-line="1117"></span></a> <span class="c1">-- Returns number of primary authority, if valid</span> </span><span id="L-1118"><a href="#L-1118"><span class="linenos" data-line="1118"></span></a> <span class="c1">-- false if not correct, bad character or syntax</span> </span><span id="L-1119"><a href="#L-1119"><span class="linenos" data-line="1119"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^%s*([^/%s]+)/%S+%s*$&quot;</span> <span class="p">);</span> </span><span id="L-1120"><a href="#L-1120"><span class="linenos" data-line="1120"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1121"><a href="#L-1121"><span class="linenos" data-line="1121"></span></a> <span class="kd">local</span> <span class="n">k</span> <span class="o">=</span> <span class="n">r</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="s2">&quot;.&quot;</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-1122"><a href="#L-1122"><span class="linenos" data-line="1122"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="kr">then</span> </span><span id="L-1123"><a href="#L-1123"><span class="linenos" data-line="1123"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">1</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">&quot;%.$&quot;</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1124"><a href="#L-1124"><span class="linenos" data-line="1124"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</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">else</span> </span><span id="L-1126"><a href="#L-1126"><span class="linenos" data-line="1126"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="mi">1</span><span class="p">,</span> <span class="n">k</span> <span class="o">-</span> <span class="mi">1</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><span id="L-1129"><a href="#L-1129"><span class="linenos" data-line="1129"></span></a> <span class="kr">if</span> <span class="n">r</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="kr">if</span> <span class="n">r</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^[1-9][0-9]+$&quot;</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1131"><a href="#L-1131"><span class="linenos" data-line="1131"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1132"><a href="#L-1132"><span class="linenos" data-line="1132"></span></a> <span class="kr">else</span> </span><span id="L-1133"><a href="#L-1133"><span class="linenos" data-line="1133"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1134"><a href="#L-1134"><span class="linenos" data-line="1134"></span></a> <span class="kr">end</span> </span><span id="L-1135"><a href="#L-1135"><span class="linenos" data-line="1135"></span></a> <span class="kr">end</span> </span><span id="L-1136"><a href="#L-1136"><span class="linenos" data-line="1136"></span></a> <span class="kr">else</span> </span><span id="L-1137"><a href="#L-1137"><span class="linenos" data-line="1137"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</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><span id="L-1139"><a href="#L-1139"><span class="linenos" data-line="1139"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1140"><a href="#L-1140"><span class="linenos" data-line="1140"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.isHandle()</span> </span><span id="L-1141"><a href="#L-1141"><span class="linenos" data-line="1141"></span></a> </span><span id="L-1142"><a href="#L-1142"><span class="linenos" data-line="1142"></span></a> </span><span id="L-1143"><a href="#L-1143"><span class="linenos" data-line="1143"></span></a> </span><span id="L-1144"><a href="#L-1144"><span class="linenos" data-line="1144"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">isISBN</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1145"><a href="#L-1145"><span class="linenos" data-line="1145"></span></a> <span class="c1">-- Is this a syntactically correct ISBN?</span> </span><span id="L-1146"><a href="#L-1146"><span class="linenos" data-line="1146"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1147"><a href="#L-1147"><span class="linenos" data-line="1147"></span></a> <span class="c1">-- attempt -- string with presumable ISBN</span> </span><span id="L-1148"><a href="#L-1148"><span class="linenos" data-line="1148"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1149"><a href="#L-1149"><span class="linenos" data-line="1149"></span></a> <span class="c1">-- Returns</span> </span><span id="L-1150"><a href="#L-1150"><span class="linenos" data-line="1150"></span></a> <span class="c1">-- 1 -- 10 if 10 digits and hyphens; also X at end of ISBN-10</span> </span><span id="L-1151"><a href="#L-1151"><span class="linenos" data-line="1151"></span></a> <span class="c1">-- 13 if 13 digits and hyphens; beginning with bookland</span> </span><span id="L-1152"><a href="#L-1152"><span class="linenos" data-line="1152"></span></a> <span class="c1">-- false if not an ISBN</span> </span><span id="L-1153"><a href="#L-1153"><span class="linenos" data-line="1153"></span></a> <span class="c1">-- 2 -- internal table, if (1)</span> </span><span id="L-1154"><a href="#L-1154"><span class="linenos" data-line="1154"></span></a> <span class="c1">-- number; no string or bad length or data</span> </span><span id="L-1155"><a href="#L-1155"><span class="linenos" data-line="1155"></span></a> <span class="c1">-- 0 -- no string</span> </span><span id="L-1156"><a href="#L-1156"><span class="linenos" data-line="1156"></span></a> <span class="c1">-- &gt;0 -- unexpected char at position (trimmed)</span> </span><span id="L-1157"><a href="#L-1157"><span class="linenos" data-line="1157"></span></a> <span class="c1">-- -1 -- bad digit count</span> </span><span id="L-1158"><a href="#L-1158"><span class="linenos" data-line="1158"></span></a> <span class="c1">-- -2 -- bad bookland</span> </span><span id="L-1159"><a href="#L-1159"><span class="linenos" data-line="1159"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1160"><a href="#L-1160"><span class="linenos" data-line="1160"></span></a> <span class="kd">local</span> <span class="n">isbn</span> <span class="o">=</span> <span class="n">ISBNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1161"><a href="#L-1161"><span class="linenos" data-line="1161"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">isbn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-1162"><a href="#L-1162"><span class="linenos" data-line="1162"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">isbn</span><span class="p">.</span><span class="n">type</span><span class="p">;</span> </span><span id="L-1163"><a href="#L-1163"><span class="linenos" data-line="1163"></span></a> <span class="kr">else</span> </span><span id="L-1164"><a href="#L-1164"><span class="linenos" data-line="1164"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1165"><a href="#L-1165"><span class="linenos" data-line="1165"></span></a> <span class="kr">end</span> </span><span id="L-1166"><a href="#L-1166"><span class="linenos" data-line="1166"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">,</span> <span class="n">isbn</span><span class="p">;</span> </span><span id="L-1167"><a href="#L-1167"><span class="linenos" data-line="1167"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.isISBN()</span> </span><span id="L-1168"><a href="#L-1168"><span class="linenos" data-line="1168"></span></a> </span><span id="L-1169"><a href="#L-1169"><span class="linenos" data-line="1169"></span></a> </span><span id="L-1170"><a href="#L-1170"><span class="linenos" data-line="1170"></span></a> </span><span id="L-1171"><a href="#L-1171"><span class="linenos" data-line="1171"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">isISBNvalid</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1172"><a href="#L-1172"><span class="linenos" data-line="1172"></span></a> <span class="c1">-- Is this ISBN formally correct (check digit)?</span> </span><span id="L-1173"><a href="#L-1173"><span class="linenos" data-line="1173"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1174"><a href="#L-1174"><span class="linenos" data-line="1174"></span></a> <span class="c1">-- attempt -- string with presumable ISBN</span> </span><span id="L-1175"><a href="#L-1175"><span class="linenos" data-line="1175"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1176"><a href="#L-1176"><span class="linenos" data-line="1176"></span></a> <span class="c1">-- Returns</span> </span><span id="L-1177"><a href="#L-1177"><span class="linenos" data-line="1177"></span></a> <span class="c1">-- 1 -- 10 if 10 digits and hyphens; also X at end of ISBN-10</span> </span><span id="L-1178"><a href="#L-1178"><span class="linenos" data-line="1178"></span></a> <span class="c1">-- 13 if 13 digits and hyphens; beginning with bookland</span> </span><span id="L-1179"><a href="#L-1179"><span class="linenos" data-line="1179"></span></a> <span class="c1">-- false if not correct, bad data or check digit wrong</span> </span><span id="L-1180"><a href="#L-1180"><span class="linenos" data-line="1180"></span></a> <span class="c1">-- 2 -- internal table, if (1)</span> </span><span id="L-1181"><a href="#L-1181"><span class="linenos" data-line="1181"></span></a> <span class="c1">-- number; no string or bad length or data</span> </span><span id="L-1182"><a href="#L-1182"><span class="linenos" data-line="1182"></span></a> <span class="c1">-- 0 -- no string</span> </span><span id="L-1183"><a href="#L-1183"><span class="linenos" data-line="1183"></span></a> <span class="c1">-- &gt;0 -- unexpected char at position (trimmed)</span> </span><span id="L-1184"><a href="#L-1184"><span class="linenos" data-line="1184"></span></a> <span class="c1">-- -1 -- bad digit count</span> </span><span id="L-1185"><a href="#L-1185"><span class="linenos" data-line="1185"></span></a> <span class="c1">-- -2 -- bad bookland</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">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1187"><a href="#L-1187"><span class="linenos" data-line="1187"></span></a> <span class="kd">local</span> <span class="n">isbn</span> <span class="o">=</span> <span class="n">ISBNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1188"><a href="#L-1188"><span class="linenos" data-line="1188"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">isbn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-1189"><a href="#L-1189"><span class="linenos" data-line="1189"></span></a> <span class="kr">if</span> <span class="n">ISBNfaith</span><span class="p">(</span> <span class="n">isbn</span> <span class="p">)</span> <span class="kr">then</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">isbn</span><span class="p">.</span><span class="n">type</span><span class="p">;</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">r</span><span class="p">,</span> <span class="n">isbn</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">-- URIutil.isISBNvalid()</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="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">isISSNvalid</span><span class="p">(</span> <span class="n">attempt</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">-- Is this ISSN formally correct (check digit)?</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">-- attempt -- string with presumable ISSN</span> </span><span id="L-1202"><a href="#L-1202"><span class="linenos" data-line="1202"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1203"><a href="#L-1203"><span class="linenos" data-line="1203"></span></a> <span class="c1">-- Returns 8 if 8 digits and up to 1 hyphen; also X at end</span> </span><span id="L-1204"><a href="#L-1204"><span class="linenos" data-line="1204"></span></a> <span class="c1">-- 13 if 13 digits and hyphens; beginning with 977</span> </span><span id="L-1205"><a href="#L-1205"><span class="linenos" data-line="1205"></span></a> <span class="c1">-- false if not correct, bad data or check digit wrong</span> </span><span id="L-1206"><a href="#L-1206"><span class="linenos" data-line="1206"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1207"><a href="#L-1207"><span class="linenos" data-line="1207"></span></a> <span class="kd">local</span> <span class="n">issn</span> <span class="o">=</span> <span class="n">ISSNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1208"><a href="#L-1208"><span class="linenos" data-line="1208"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">issn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-1209"><a href="#L-1209"><span class="linenos" data-line="1209"></span></a> <span class="kr">if</span> <span class="n">ISSNfaith</span><span class="p">(</span> <span class="n">issn</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1210"><a href="#L-1210"><span class="linenos" data-line="1210"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">issn</span><span class="p">.</span><span class="n">type</span><span class="p">;</span> </span><span id="L-1211"><a href="#L-1211"><span class="linenos" data-line="1211"></span></a> <span class="kr">end</span> </span><span id="L-1212"><a href="#L-1212"><span class="linenos" data-line="1212"></span></a> <span class="kr">end</span> </span><span id="L-1213"><a href="#L-1213"><span class="linenos" data-line="1213"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1214"><a href="#L-1214"><span class="linenos" data-line="1214"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.isISSNvalid()</span> </span><span id="L-1215"><a href="#L-1215"><span class="linenos" data-line="1215"></span></a> </span><span id="L-1216"><a href="#L-1216"><span class="linenos" data-line="1216"></span></a> </span><span id="L-1217"><a href="#L-1217"><span class="linenos" data-line="1217"></span></a> </span><span id="L-1218"><a href="#L-1218"><span class="linenos" data-line="1218"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">isLCCN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">allow</span> <span class="p">)</span> </span><span id="L-1219"><a href="#L-1219"><span class="linenos" data-line="1219"></span></a> <span class="c1">-- Is this a syntactically correct LCCN?</span> </span><span id="L-1220"><a href="#L-1220"><span class="linenos" data-line="1220"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1221"><a href="#L-1221"><span class="linenos" data-line="1221"></span></a> <span class="c1">-- attempt -- string with presumable LCCN</span> </span><span id="L-1222"><a href="#L-1222"><span class="linenos" data-line="1222"></span></a> <span class="c1">-- allow -- false or string: &quot;/&quot;</span> </span><span id="L-1223"><a href="#L-1223"><span class="linenos" data-line="1223"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1224"><a href="#L-1224"><span class="linenos" data-line="1224"></span></a> <span class="c1">-- Returns string with LCCN formatted aa9999-99999999</span> </span><span id="L-1225"><a href="#L-1225"><span class="linenos" data-line="1225"></span></a> <span class="c1">-- false if not correct, bad data</span> </span><span id="L-1226"><a href="#L-1226"><span class="linenos" data-line="1226"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1227"><a href="#L-1227"><span class="linenos" data-line="1227"></span></a> <span class="kd">local</span> <span class="n">lccn</span> <span class="o">=</span> <span class="n">LCCNfactory</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">allow</span> <span class="p">);</span> </span><span id="L-1228"><a href="#L-1228"><span class="linenos" data-line="1228"></span></a> <span class="kr">if</span> <span class="n">lccn</span> <span class="kr">then</span> </span><span id="L-1229"><a href="#L-1229"><span class="linenos" data-line="1229"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">LCCNformat</span><span class="p">(</span> <span class="n">lccn</span><span class="p">,</span> <span class="s2">&quot;-&quot;</span> <span class="p">);</span> </span><span id="L-1230"><a href="#L-1230"><span class="linenos" data-line="1230"></span></a> <span class="kr">end</span> </span><span id="L-1231"><a href="#L-1231"><span class="linenos" data-line="1231"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1232"><a href="#L-1232"><span class="linenos" data-line="1232"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.isLCCN()</span> </span><span id="L-1233"><a href="#L-1233"><span class="linenos" data-line="1233"></span></a> </span><span id="L-1234"><a href="#L-1234"><span class="linenos" data-line="1234"></span></a> </span><span id="L-1235"><a href="#L-1235"><span class="linenos" data-line="1235"></span></a> </span><span id="L-1236"><a href="#L-1236"><span class="linenos" data-line="1236"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">linkDNBopac</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">about</span><span class="p">,</span> <span class="n">allow</span><span class="p">,</span> <span class="n">abbr</span><span class="p">,</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-1237"><a href="#L-1237"><span class="linenos" data-line="1237"></span></a> <span class="c1">-- Retrieve bracketed titled external DNB opac link</span> </span><span id="L-1238"><a href="#L-1238"><span class="linenos" data-line="1238"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1239"><a href="#L-1239"><span class="linenos" data-line="1239"></span></a> <span class="c1">-- attempt -- string with presumable DNB ID</span> </span><span id="L-1240"><a href="#L-1240"><span class="linenos" data-line="1240"></span></a> <span class="c1">-- about -- title, or false</span> </span><span id="L-1241"><a href="#L-1241"><span class="linenos" data-line="1241"></span></a> <span class="c1">-- allow -- true: permit invalid ID</span> </span><span id="L-1242"><a href="#L-1242"><span class="linenos" data-line="1242"></span></a> <span class="c1">-- abbr -- true: link DNB abbreviation</span> </span><span id="L-1243"><a href="#L-1243"><span class="linenos" data-line="1243"></span></a> <span class="c1">-- alert -- string with title of maintenance category, or nil</span> </span><span id="L-1244"><a href="#L-1244"><span class="linenos" data-line="1244"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1245"><a href="#L-1245"><span class="linenos" data-line="1245"></span></a> <span class="c1">-- Returns link, or plain string if bad DNB</span> </span><span id="L-1246"><a href="#L-1246"><span class="linenos" data-line="1246"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">allow</span> <span class="ow">or</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isDNBvalid</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1247"><a href="#L-1247"><span class="linenos" data-line="1247"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;DNB&quot;</span><span class="p">;</span> </span><span id="L-1248"><a href="#L-1248"><span class="linenos" data-line="1248"></span></a> <span class="kr">if</span> <span class="n">abbr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">about</span> <span class="kr">then</span> </span><span id="L-1249"><a href="#L-1249"><span class="linenos" data-line="1249"></span></a> <span class="kd">local</span> <span class="n">cnf</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;config&quot;</span> <span class="p">);</span> </span><span id="L-1250"><a href="#L-1250"><span class="linenos" data-line="1250"></span></a> <span class="kr">if</span> <span class="n">cnf</span><span class="p">.</span><span class="n">supportDNB</span> <span class="ow">and</span> <span class="n">cnf</span><span class="p">.</span><span class="n">supportDNB</span> <span class="o">~=</span> <span class="n">fullPageName</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-1251"><a href="#L-1251"><span class="linenos" data-line="1251"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[[%s|DNB]]&quot;</span><span class="p">,</span> <span class="n">cnf</span><span class="p">.</span><span class="n">supportDNB</span> <span class="p">);</span> </span><span id="L-1252"><a href="#L-1252"><span class="linenos" data-line="1252"></span></a> <span class="kr">end</span> </span><span id="L-1253"><a href="#L-1253"><span class="linenos" data-line="1253"></span></a> <span class="kr">end</span> </span><span id="L-1254"><a href="#L-1254"><span class="linenos" data-line="1254"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1255"><a href="#L-1255"><span class="linenos" data-line="1255"></span></a> <span class="kr">if</span> <span class="n">about</span> <span class="kr">then</span> </span><span id="L-1256"><a href="#L-1256"><span class="linenos" data-line="1256"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">about</span><span class="p">;</span> </span><span id="L-1257"><a href="#L-1257"><span class="linenos" data-line="1257"></span></a> <span class="kr">else</span> </span><span id="L-1258"><a href="#L-1258"><span class="linenos" data-line="1258"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">;</span> </span><span id="L-1259"><a href="#L-1259"><span class="linenos" data-line="1259"></span></a> <span class="kr">end</span> </span><span id="L-1260"><a href="#L-1260"><span class="linenos" data-line="1260"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s&amp;nbsp;[%s%s%s%s%s %s]&quot;</span><span class="p">,</span> </span><span id="L-1261"><a href="#L-1261"><span class="linenos" data-line="1261"></span></a> <span class="n">s</span><span class="p">,</span> </span><span id="L-1262"><a href="#L-1262"><span class="linenos" data-line="1262"></span></a> <span class="s2">&quot;https://portal.dnb.de/opac.htm&quot;</span><span class="p">,</span> </span><span id="L-1263"><a href="#L-1263"><span class="linenos" data-line="1263"></span></a> <span class="s2">&quot;?referrer=Wikipedia&quot;</span><span class="p">,</span> </span><span id="L-1264"><a href="#L-1264"><span class="linenos" data-line="1264"></span></a> <span class="s2">&quot;&amp;method=simpleSearch&amp;cqlMode=true&quot;</span><span class="p">,</span> </span><span id="L-1265"><a href="#L-1265"><span class="linenos" data-line="1265"></span></a> <span class="s2">&quot;&amp;query=idn%3D&quot;</span><span class="p">,</span> </span><span id="L-1266"><a href="#L-1266"><span class="linenos" data-line="1266"></span></a> <span class="n">attempt</span><span class="p">,</span> </span><span id="L-1267"><a href="#L-1267"><span class="linenos" data-line="1267"></span></a> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1268"><a href="#L-1268"><span class="linenos" data-line="1268"></span></a> <span class="kr">else</span> </span><span id="L-1269"><a href="#L-1269"><span class="linenos" data-line="1269"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s&amp;nbsp;%s&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">attempt</span> <span class="p">);</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="n">about</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">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s %s&quot;</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">about</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="n">alert</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">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">flop</span><span class="p">(</span> <span class="n">alert</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="kr">end</span> </span><span id="L-1277"><a href="#L-1277"><span class="linenos" data-line="1277"></span></a> <span class="kr">return</span> <span class="n">r</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 class="c1">-- URIutil.linkDNBopac()</span> </span><span id="L-1279"><a href="#L-1279"><span class="linenos" data-line="1279"></span></a> </span><span id="L-1280"><a href="#L-1280"><span class="linenos" data-line="1280"></span></a> </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 class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">linkDOI</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">any1</span><span class="p">,</span> <span class="n">any2</span><span class="p">,</span> <span class="n">any3</span><span class="p">,</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-1283"><a href="#L-1283"><span class="linenos" data-line="1283"></span></a> <span class="c1">-- Retrieve bracketed titled external link on DOI resolver</span> </span><span id="L-1284"><a href="#L-1284"><span class="linenos" data-line="1284"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1285"><a href="#L-1285"><span class="linenos" data-line="1285"></span></a> <span class="c1">-- attempt -- string with presumable DOI</span> </span><span id="L-1286"><a href="#L-1286"><span class="linenos" data-line="1286"></span></a> <span class="c1">-- any1 -- intentionally dummy parameter</span> </span><span id="L-1287"><a href="#L-1287"><span class="linenos" data-line="1287"></span></a> <span class="c1">-- any2 -- intentionally dummy parameter</span> </span><span id="L-1288"><a href="#L-1288"><span class="linenos" data-line="1288"></span></a> <span class="c1">-- any3 -- intentionally dummy parameter</span> </span><span id="L-1289"><a href="#L-1289"><span class="linenos" data-line="1289"></span></a> <span class="c1">-- alert -- string with title of maintenance category, or nil</span> </span><span id="L-1290"><a href="#L-1290"><span class="linenos" data-line="1290"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1291"><a href="#L-1291"><span class="linenos" data-line="1291"></span></a> <span class="c1">-- Returns external link, or false</span> </span><span id="L-1292"><a href="#L-1292"><span class="linenos" data-line="1292"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isDOI</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1293"><a href="#L-1293"><span class="linenos" data-line="1293"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1294"><a href="#L-1294"><span class="linenos" data-line="1294"></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">&quot;span&quot;</span> <span class="p">)</span> </span><span id="L-1295"><a href="#L-1295"><span class="linenos" data-line="1295"></span></a> <span class="p">:</span><span class="n">addClass</span><span class="p">(</span> <span class="s2">&quot;uri-handle&quot;</span> <span class="p">)</span> </span><span id="L-1296"><a href="#L-1296"><span class="linenos" data-line="1296"></span></a> <span class="p">:</span><span class="n">css</span><span class="p">(</span> <span class="s2">&quot;white-space&quot;</span><span class="p">,</span> <span class="s2">&quot;nowrap&quot;</span> <span class="p">);</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">s</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">s</span><span class="p">,</span> <span class="n">r</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^%s*(10%.[1-9][0-9]+/)(.+)%s*$&quot;</span> <span class="p">);</span> </span><span id="L-1299"><a href="#L-1299"><span class="linenos" data-line="1299"></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">decode</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="s2">&quot;PATH&quot;</span> <span class="p">);</span> </span><span id="L-1300"><a href="#L-1300"><span class="linenos" data-line="1300"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[%s/%s%s %s%s]&quot;</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">&quot;https://doi.org&quot;</span><span class="p">,</span> </span><span id="L-1302"><a href="#L-1302"><span class="linenos" data-line="1302"></span></a> <span class="n">s</span><span class="p">,</span> </span><span id="L-1303"><a href="#L-1303"><span class="linenos" data-line="1303"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">uri</span><span class="p">.</span><span class="n">encode</span><span class="p">(</span> <span class="n">r</span> <span class="p">):</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">&quot;#$&quot;</span><span class="p">,</span> <span class="s2">&quot;%23&quot;</span> <span class="p">),</span> </span><span id="L-1304"><a href="#L-1304"><span class="linenos" data-line="1304"></span></a> <span class="n">s</span><span class="p">,</span> </span><span id="L-1305"><a href="#L-1305"><span class="linenos" data-line="1305"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">encode</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="s2">&quot;&lt;&gt;&amp;%]&quot;</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-1306"><a href="#L-1306"><span class="linenos" data-line="1306"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">e</span><span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">r</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-1307"><a href="#L-1307"><span class="linenos" data-line="1307"></span></a> <span class="kr">else</span> </span><span id="L-1308"><a href="#L-1308"><span class="linenos" data-line="1308"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">flop</span><span class="p">(</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-1309"><a href="#L-1309"><span class="linenos" data-line="1309"></span></a> <span class="kr">end</span> </span><span id="L-1310"><a href="#L-1310"><span class="linenos" data-line="1310"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1311"><a href="#L-1311"><span class="linenos" data-line="1311"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.linkDOI()</span> </span><span id="L-1312"><a href="#L-1312"><span class="linenos" data-line="1312"></span></a> </span><span id="L-1313"><a href="#L-1313"><span class="linenos" data-line="1313"></span></a> </span><span id="L-1314"><a href="#L-1314"><span class="linenos" data-line="1314"></span></a> </span><span id="L-1315"><a href="#L-1315"><span class="linenos" data-line="1315"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">linkHandle</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">any1</span><span class="p">,</span> <span class="n">any2</span><span class="p">,</span> <span class="n">any3</span><span class="p">,</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-1316"><a href="#L-1316"><span class="linenos" data-line="1316"></span></a> <span class="c1">-- Retrieve bracketed titled external link on handle resolver</span> </span><span id="L-1317"><a href="#L-1317"><span class="linenos" data-line="1317"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1318"><a href="#L-1318"><span class="linenos" data-line="1318"></span></a> <span class="c1">-- attempt -- string with presumable handle</span> </span><span id="L-1319"><a href="#L-1319"><span class="linenos" data-line="1319"></span></a> <span class="c1">-- any1 -- intentionally dummy parameter</span> </span><span id="L-1320"><a href="#L-1320"><span class="linenos" data-line="1320"></span></a> <span class="c1">-- any2 -- intentionally dummy parameter</span> </span><span id="L-1321"><a href="#L-1321"><span class="linenos" data-line="1321"></span></a> <span class="c1">-- any3 -- intentionally dummy parameter</span> </span><span id="L-1322"><a href="#L-1322"><span class="linenos" data-line="1322"></span></a> <span class="c1">-- alert -- string with title of maintenance category, or nil</span> </span><span id="L-1323"><a href="#L-1323"><span class="linenos" data-line="1323"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1324"><a href="#L-1324"><span class="linenos" data-line="1324"></span></a> <span class="c1">-- Returns external link, or false</span> </span><span id="L-1325"><a href="#L-1325"><span class="linenos" data-line="1325"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isHandle</span><span class="p">(</span> <span class="n">attempt</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">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1327"><a href="#L-1327"><span class="linenos" data-line="1327"></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">&quot;span&quot;</span> <span class="p">)</span> </span><span id="L-1328"><a href="#L-1328"><span class="linenos" data-line="1328"></span></a> <span class="p">:</span><span class="n">addClass</span><span class="p">(</span> <span class="s2">&quot;uri-handle&quot;</span> <span class="p">)</span> </span><span id="L-1329"><a href="#L-1329"><span class="linenos" data-line="1329"></span></a> <span class="p">:</span><span class="n">css</span><span class="p">(</span> <span class="s2">&quot;white-space&quot;</span><span class="p">,</span> <span class="s2">&quot;nowrap&quot;</span> <span class="p">);</span> </span><span id="L-1330"><a href="#L-1330"><span class="linenos" data-line="1330"></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">decode</span><span class="p">(</span> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">trim</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">),</span> <span class="s2">&quot;PATH&quot;</span> <span class="p">);</span> </span><span id="L-1331"><a href="#L-1331"><span class="linenos" data-line="1331"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[%s%s %s]&quot;</span><span class="p">,</span> </span><span id="L-1332"><a href="#L-1332"><span class="linenos" data-line="1332"></span></a> <span class="s2">&quot;https://hdl.handle.net/&quot;</span><span class="p">,</span> </span><span id="L-1333"><a href="#L-1333"><span class="linenos" data-line="1333"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">uri</span><span class="p">.</span><span class="n">encode</span><span class="p">(</span> <span class="n">r</span> <span class="p">),</span> </span><span id="L-1334"><a href="#L-1334"><span class="linenos" data-line="1334"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">text</span><span class="p">.</span><span class="n">encode</span><span class="p">(</span> <span class="n">r</span><span class="p">,</span> <span class="s2">&quot;&lt;&gt;&amp;%]&quot;</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-1335"><a href="#L-1335"><span class="linenos" data-line="1335"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">e</span><span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">r</span> <span class="p">)</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">flop</span><span class="p">(</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-1338"><a href="#L-1338"><span class="linenos" data-line="1338"></span></a> <span class="kr">end</span> </span><span id="L-1339"><a href="#L-1339"><span class="linenos" data-line="1339"></span></a> <span class="kr">return</span> <span class="n">r</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 class="c1">-- URIutil.linkHandle()</span> </span><span id="L-1341"><a href="#L-1341"><span class="linenos" data-line="1341"></span></a> </span><span id="L-1342"><a href="#L-1342"><span class="linenos" data-line="1342"></span></a> </span><span id="L-1343"><a href="#L-1343"><span class="linenos" data-line="1343"></span></a> </span><span id="L-1344"><a href="#L-1344"><span class="linenos" data-line="1344"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">linkISBN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">allow</span><span class="p">,</span> <span class="n">abbr</span><span class="p">,</span> <span class="n">adhere</span><span class="p">,</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-1345"><a href="#L-1345"><span class="linenos" data-line="1345"></span></a> <span class="c1">-- Retrieve bracketed titled wikilink on booksources page with &quot;ISBN&quot;</span> </span><span id="L-1346"><a href="#L-1346"><span class="linenos" data-line="1346"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1347"><a href="#L-1347"><span class="linenos" data-line="1347"></span></a> <span class="c1">-- attempt -- string with presumable ISBN</span> </span><span id="L-1348"><a href="#L-1348"><span class="linenos" data-line="1348"></span></a> <span class="c1">-- allow -- true: permit invalid check digit or digit count</span> </span><span id="L-1349"><a href="#L-1349"><span class="linenos" data-line="1349"></span></a> <span class="c1">-- abbr -- true or string: link ISBN abbreviation</span> </span><span id="L-1350"><a href="#L-1350"><span class="linenos" data-line="1350"></span></a> <span class="c1">-- adhere -- true: use &amp;nbsp; else: use simple space</span> </span><span id="L-1351"><a href="#L-1351"><span class="linenos" data-line="1351"></span></a> <span class="c1">-- alert -- string with title of maintenance category, or nil</span> </span><span id="L-1352"><a href="#L-1352"><span class="linenos" data-line="1352"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1353"><a href="#L-1353"><span class="linenos" data-line="1353"></span></a> <span class="c1">-- Returns link</span> </span><span id="L-1354"><a href="#L-1354"><span class="linenos" data-line="1354"></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">&quot;span&quot;</span> <span class="p">);</span> </span><span id="L-1355"><a href="#L-1355"><span class="linenos" data-line="1355"></span></a> <span class="kd">local</span> <span class="n">source</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-1356"><a href="#L-1356"><span class="linenos" data-line="1356"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[[Special:Booksources/%s|&quot;</span><span class="p">,</span> <span class="n">source</span> <span class="p">);</span> </span><span id="L-1357"><a href="#L-1357"><span class="linenos" data-line="1357"></span></a> <span class="kd">local</span> <span class="n">isbn</span> <span class="o">=</span> <span class="n">ISBNfactory</span><span class="p">(</span> <span class="n">source</span> <span class="p">);</span> </span><span id="L-1358"><a href="#L-1358"><span class="linenos" data-line="1358"></span></a> <span class="kd">local</span> <span class="n">lapsus</span><span class="p">;</span> </span><span id="L-1359"><a href="#L-1359"><span class="linenos" data-line="1359"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">isbn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-1360"><a href="#L-1360"><span class="linenos" data-line="1360"></span></a> <span class="kd">local</span> <span class="n">lenient</span><span class="p">;</span> </span><span id="L-1361"><a href="#L-1361"><span class="linenos" data-line="1361"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">allow</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1362"><a href="#L-1362"><span class="linenos" data-line="1362"></span></a> <span class="n">lenient</span> <span class="o">=</span> <span class="p">(</span> <span class="n">allow</span> <span class="o">~=</span> <span class="s2">&quot;0&quot;</span> <span class="p">);</span> </span><span id="L-1363"><a href="#L-1363"><span class="linenos" data-line="1363"></span></a> <span class="kr">else</span> </span><span id="L-1364"><a href="#L-1364"><span class="linenos" data-line="1364"></span></a> <span class="n">lenient</span> <span class="o">=</span> <span class="n">allow</span><span class="p">;</span> </span><span id="L-1365"><a href="#L-1365"><span class="linenos" data-line="1365"></span></a> <span class="kr">end</span> </span><span id="L-1366"><a href="#L-1366"><span class="linenos" data-line="1366"></span></a> <span class="kr">if</span> <span class="n">lenient</span> <span class="kr">then</span> </span><span id="L-1367"><a href="#L-1367"><span class="linenos" data-line="1367"></span></a> <span class="n">lapsus</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1368"><a href="#L-1368"><span class="linenos" data-line="1368"></span></a> <span class="kr">else</span> </span><span id="L-1369"><a href="#L-1369"><span class="linenos" data-line="1369"></span></a> <span class="n">lapsus</span> <span class="o">=</span> <span class="p">(</span> <span class="ow">not</span> <span class="n">ISBNfaith</span><span class="p">(</span> <span class="n">isbn</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-1370"><a href="#L-1370"><span class="linenos" data-line="1370"></span></a> <span class="kr">end</span> </span><span id="L-1371"><a href="#L-1371"><span class="linenos" data-line="1371"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">ISBNformat</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">isbn</span> <span class="p">);</span> </span><span id="L-1372"><a href="#L-1372"><span class="linenos" data-line="1372"></span></a> <span class="kr">else</span> </span><span id="L-1373"><a href="#L-1373"><span class="linenos" data-line="1373"></span></a> <span class="n">lapsus</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">allow</span><span class="p">;</span> </span><span id="L-1374"><a href="#L-1374"><span class="linenos" data-line="1374"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">source</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">end</span> </span><span id="L-1376"><a href="#L-1376"><span class="linenos" data-line="1376"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="s2">&quot;]]&quot;</span><span class="p">;</span> </span><span id="L-1377"><a href="#L-1377"><span class="linenos" data-line="1377"></span></a> <span class="n">e</span><span class="p">:</span><span class="n">css</span><span class="p">(</span> <span class="s2">&quot;white-space&quot;</span><span class="p">,</span> <span class="s2">&quot;nowrap&quot;</span> <span class="p">);</span> </span><span id="L-1378"><a href="#L-1378"><span class="linenos" data-line="1378"></span></a> <span class="kr">if</span> <span class="n">lapsus</span> <span class="kr">then</span> </span><span id="L-1379"><a href="#L-1379"><span class="linenos" data-line="1379"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">fault</span><span class="p">(</span> <span class="s2">&quot;(?!?!)&quot;</span> <span class="p">);</span> </span><span id="L-1380"><a href="#L-1380"><span class="linenos" data-line="1380"></span></a> <span class="n">e</span><span class="p">:</span><span class="n">addClass</span><span class="p">(</span> <span class="s2">&quot;invalid-ISBN&quot;</span> <span class="p">)</span> </span><span id="L-1381"><a href="#L-1381"><span class="linenos" data-line="1381"></span></a> <span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1382"><a href="#L-1382"><span class="linenos" data-line="1382"></span></a> <span class="n">r</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-1383"><a href="#L-1383"><span class="linenos" data-line="1383"></span></a> <span class="kr">if</span> <span class="n">alert</span> <span class="kr">then</span> </span><span id="L-1384"><a href="#L-1384"><span class="linenos" data-line="1384"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">flop</span><span class="p">(</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-1385"><a href="#L-1385"><span class="linenos" data-line="1385"></span></a> <span class="kr">end</span> </span><span id="L-1386"><a href="#L-1386"><span class="linenos" data-line="1386"></span></a> <span class="kr">else</span> </span><span id="L-1387"><a href="#L-1387"><span class="linenos" data-line="1387"></span></a> <span class="n">e</span><span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1388"><a href="#L-1388"><span class="linenos" data-line="1388"></span></a> <span class="n">r</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-1389"><a href="#L-1389"><span class="linenos" data-line="1389"></span></a> <span class="kr">end</span> </span><span id="L-1390"><a href="#L-1390"><span class="linenos" data-line="1390"></span></a> <span class="kr">if</span> <span class="n">adhere</span> <span class="kr">then</span> </span><span id="L-1391"><a href="#L-1391"><span class="linenos" data-line="1391"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;&amp;nbsp;&quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1392"><a href="#L-1392"><span class="linenos" data-line="1392"></span></a> <span class="kr">else</span> </span><span id="L-1393"><a href="#L-1393"><span class="linenos" data-line="1393"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1394"><a href="#L-1394"><span class="linenos" data-line="1394"></span></a> <span class="kr">end</span> </span><span id="L-1395"><a href="#L-1395"><span class="linenos" data-line="1395"></span></a> <span class="kr">if</span> <span class="n">abbr</span> <span class="kr">then</span> </span><span id="L-1396"><a href="#L-1396"><span class="linenos" data-line="1396"></span></a> <span class="kd">local</span> <span class="n">cnf</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;config&quot;</span> <span class="p">);</span> </span><span id="L-1397"><a href="#L-1397"><span class="linenos" data-line="1397"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">cnf</span><span class="p">.</span><span class="n">supportISBN</span><span class="p">;</span> </span><span id="L-1398"><a href="#L-1398"><span class="linenos" data-line="1398"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1399"><a href="#L-1399"><span class="linenos" data-line="1399"></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">&quot;string&quot;</span> </span><span id="L-1400"><a href="#L-1400"><span class="linenos" data-line="1400"></span></a> <span class="ow">or</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> </span><span id="L-1401"><a href="#L-1401"><span class="linenos" data-line="1401"></span></a> <span class="ow">or</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-1402"><a href="#L-1402"><span class="linenos" data-line="1402"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1403"><a href="#L-1403"><span class="linenos" data-line="1403"></span></a> <span class="kr">end</span> </span><span id="L-1404"><a href="#L-1404"><span class="linenos" data-line="1404"></span></a> <span class="kr">else</span> </span><span id="L-1405"><a href="#L-1405"><span class="linenos" data-line="1405"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;International Standard Book Number&quot;</span><span class="p">;</span> </span><span id="L-1406"><a href="#L-1406"><span class="linenos" data-line="1406"></span></a> <span class="kr">end</span> </span><span id="L-1407"><a href="#L-1407"><span class="linenos" data-line="1407"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="ow">and</span> <span class="n">s</span> <span class="o">~=</span> <span class="n">fullPageName</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-1408"><a href="#L-1408"><span class="linenos" data-line="1408"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[[%s|ISBN]]&quot;</span><span class="p">,</span> <span class="n">s</span> <span class="p">);</span> </span><span id="L-1409"><a href="#L-1409"><span class="linenos" data-line="1409"></span></a> <span class="kr">else</span> </span><span id="L-1410"><a href="#L-1410"><span class="linenos" data-line="1410"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;ISBN&quot;</span><span class="p">;</span> </span><span id="L-1411"><a href="#L-1411"><span class="linenos" data-line="1411"></span></a> <span class="kr">end</span> </span><span id="L-1412"><a href="#L-1412"><span class="linenos" data-line="1412"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s&amp;#160;%s&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1413"><a href="#L-1413"><span class="linenos" data-line="1413"></span></a> <span class="kr">else</span> </span><span id="L-1414"><a href="#L-1414"><span class="linenos" data-line="1414"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;ISBN&quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1415"><a href="#L-1415"><span class="linenos" data-line="1415"></span></a> <span class="kr">end</span> </span><span id="L-1416"><a href="#L-1416"><span class="linenos" data-line="1416"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1417"><a href="#L-1417"><span class="linenos" data-line="1417"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.linkISBN()</span> </span><span id="L-1418"><a href="#L-1418"><span class="linenos" data-line="1418"></span></a> </span><span id="L-1419"><a href="#L-1419"><span class="linenos" data-line="1419"></span></a> </span><span id="L-1420"><a href="#L-1420"><span class="linenos" data-line="1420"></span></a> </span><span id="L-1421"><a href="#L-1421"><span class="linenos" data-line="1421"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">linkISSN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">allow</span><span class="p">,</span> <span class="n">abbr</span><span class="p">,</span> <span class="n">adhere</span><span class="p">,</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-1422"><a href="#L-1422"><span class="linenos" data-line="1422"></span></a> <span class="c1">-- Retrieve bracketed titled external link on ISSN DB with &quot;ISSN&quot;</span> </span><span id="L-1423"><a href="#L-1423"><span class="linenos" data-line="1423"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1424"><a href="#L-1424"><span class="linenos" data-line="1424"></span></a> <span class="c1">-- attempt -- string with presumable ISSN</span> </span><span id="L-1425"><a href="#L-1425"><span class="linenos" data-line="1425"></span></a> <span class="c1">-- allow -- true: permit invalid check digit</span> </span><span id="L-1426"><a href="#L-1426"><span class="linenos" data-line="1426"></span></a> <span class="c1">-- abbr -- true: link ISSN abbreviation</span> </span><span id="L-1427"><a href="#L-1427"><span class="linenos" data-line="1427"></span></a> <span class="c1">-- adhere -- true: use &amp;nbsp; else: use simple space;</span> </span><span id="L-1428"><a href="#L-1428"><span class="linenos" data-line="1428"></span></a> <span class="c1">-- alert -- string with title of maintenance category, or nil</span> </span><span id="L-1429"><a href="#L-1429"><span class="linenos" data-line="1429"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1430"><a href="#L-1430"><span class="linenos" data-line="1430"></span></a> <span class="c1">-- Returns link</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">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">targetISSN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">allow</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-1432"><a href="#L-1432"><span class="linenos" data-line="1432"></span></a> <span class="kr">if</span> <span class="n">adhere</span> <span class="kr">then</span> </span><span id="L-1433"><a href="#L-1433"><span class="linenos" data-line="1433"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;&amp;#160;&quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1434"><a href="#L-1434"><span class="linenos" data-line="1434"></span></a> <span class="kr">else</span> </span><span id="L-1435"><a href="#L-1435"><span class="linenos" data-line="1435"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1436"><a href="#L-1436"><span class="linenos" data-line="1436"></span></a> <span class="kr">end</span> </span><span id="L-1437"><a href="#L-1437"><span class="linenos" data-line="1437"></span></a> <span class="kr">if</span> <span class="n">abbr</span> <span class="kr">then</span> </span><span id="L-1438"><a href="#L-1438"><span class="linenos" data-line="1438"></span></a> <span class="kd">local</span> <span class="n">cnf</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;config&quot;</span> <span class="p">);</span> </span><span id="L-1439"><a href="#L-1439"><span class="linenos" data-line="1439"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">cnf</span><span class="p">.</span><span class="n">supportISSN</span><span class="p">;</span> </span><span id="L-1440"><a href="#L-1440"><span class="linenos" data-line="1440"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1441"><a href="#L-1441"><span class="linenos" data-line="1441"></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">&quot;string&quot;</span> </span><span id="L-1442"><a href="#L-1442"><span class="linenos" data-line="1442"></span></a> <span class="ow">or</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> </span><span id="L-1443"><a href="#L-1443"><span class="linenos" data-line="1443"></span></a> <span class="ow">or</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-1444"><a href="#L-1444"><span class="linenos" data-line="1444"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1445"><a href="#L-1445"><span class="linenos" data-line="1445"></span></a> <span class="kr">end</span> </span><span id="L-1446"><a href="#L-1446"><span class="linenos" data-line="1446"></span></a> <span class="kr">else</span> </span><span id="L-1447"><a href="#L-1447"><span class="linenos" data-line="1447"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;International Standard Serial Number&quot;</span><span class="p">;</span> </span><span id="L-1448"><a href="#L-1448"><span class="linenos" data-line="1448"></span></a> <span class="kr">end</span> </span><span id="L-1449"><a href="#L-1449"><span class="linenos" data-line="1449"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="ow">and</span> <span class="n">s</span> <span class="o">~=</span> <span class="n">fullPageName</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-1450"><a href="#L-1450"><span class="linenos" data-line="1450"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;ISSN&quot;</span> <span class="kr">then</span> </span><span id="L-1451"><a href="#L-1451"><span class="linenos" data-line="1451"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;[[ISSN]]&quot;</span><span class="p">;</span> </span><span id="L-1452"><a href="#L-1452"><span class="linenos" data-line="1452"></span></a> <span class="kr">else</span> </span><span id="L-1453"><a href="#L-1453"><span class="linenos" data-line="1453"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[[%s|ISSN]]&quot;</span><span class="p">,</span> <span class="n">s</span> <span class="p">);</span> </span><span id="L-1454"><a href="#L-1454"><span class="linenos" data-line="1454"></span></a> <span class="kr">end</span> </span><span id="L-1455"><a href="#L-1455"><span class="linenos" data-line="1455"></span></a> <span class="kr">else</span> </span><span id="L-1456"><a href="#L-1456"><span class="linenos" data-line="1456"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;ISSN&quot;</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><span id="L-1458"><a href="#L-1458"><span class="linenos" data-line="1458"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s%s&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1459"><a href="#L-1459"><span class="linenos" data-line="1459"></span></a> <span class="kr">else</span> </span><span id="L-1460"><a href="#L-1460"><span class="linenos" data-line="1460"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;ISSN&quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1461"><a href="#L-1461"><span class="linenos" data-line="1461"></span></a> <span class="kr">end</span> </span><span id="L-1462"><a href="#L-1462"><span class="linenos" data-line="1462"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1463"><a href="#L-1463"><span class="linenos" data-line="1463"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.linkISSN()</span> </span><span id="L-1464"><a href="#L-1464"><span class="linenos" data-line="1464"></span></a> </span><span id="L-1465"><a href="#L-1465"><span class="linenos" data-line="1465"></span></a> </span><span id="L-1466"><a href="#L-1466"><span class="linenos" data-line="1466"></span></a> </span><span id="L-1467"><a href="#L-1467"><span class="linenos" data-line="1467"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">linkLCCN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">achieve</span><span class="p">,</span> <span class="n">any1</span><span class="p">,</span> <span class="n">any2</span><span class="p">,</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-1468"><a href="#L-1468"><span class="linenos" data-line="1468"></span></a> <span class="c1">-- Retrieve bracketed titled external LCCN permalink</span> </span><span id="L-1469"><a href="#L-1469"><span class="linenos" data-line="1469"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1470"><a href="#L-1470"><span class="linenos" data-line="1470"></span></a> <span class="c1">-- attempt -- string with presumable LCCN</span> </span><span id="L-1471"><a href="#L-1471"><span class="linenos" data-line="1471"></span></a> <span class="c1">-- achieve -- additional title formatting desires, like &quot;-&quot;</span> </span><span id="L-1472"><a href="#L-1472"><span class="linenos" data-line="1472"></span></a> <span class="c1">-- any1 -- intentionally dummy parameter</span> </span><span id="L-1473"><a href="#L-1473"><span class="linenos" data-line="1473"></span></a> <span class="c1">-- any2 -- intentionally dummy parameter</span> </span><span id="L-1474"><a href="#L-1474"><span class="linenos" data-line="1474"></span></a> <span class="c1">-- alert -- string with title of maintenance category, or nil</span> </span><span id="L-1475"><a href="#L-1475"><span class="linenos" data-line="1475"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1476"><a href="#L-1476"><span class="linenos" data-line="1476"></span></a> <span class="c1">-- Returns link, or false if bad LCCN</span> </span><span id="L-1477"><a href="#L-1477"><span class="linenos" data-line="1477"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">LCCNforward</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">achieve</span> <span class="p">);</span> </span><span id="L-1478"><a href="#L-1478"><span class="linenos" data-line="1478"></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-1479"><a href="#L-1479"><span class="linenos" data-line="1479"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">flop</span><span class="p">(</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-1480"><a href="#L-1480"><span class="linenos" data-line="1480"></span></a> <span class="kr">end</span> </span><span id="L-1481"><a href="#L-1481"><span class="linenos" data-line="1481"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1482"><a href="#L-1482"><span class="linenos" data-line="1482"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.linkLCCN()</span> </span><span id="L-1483"><a href="#L-1483"><span class="linenos" data-line="1483"></span></a> </span><span id="L-1484"><a href="#L-1484"><span class="linenos" data-line="1484"></span></a> </span><span id="L-1485"><a href="#L-1485"><span class="linenos" data-line="1485"></span></a> </span><span id="L-1486"><a href="#L-1486"><span class="linenos" data-line="1486"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">linkPMID</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">any</span><span class="p">,</span> <span class="n">abbr</span><span class="p">,</span> <span class="n">adhere</span><span class="p">,</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-1487"><a href="#L-1487"><span class="linenos" data-line="1487"></span></a> <span class="c1">-- Retrieve external PMID link with &quot;PMID&quot;</span> </span><span id="L-1488"><a href="#L-1488"><span class="linenos" data-line="1488"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1489"><a href="#L-1489"><span class="linenos" data-line="1489"></span></a> <span class="c1">-- attempt -- string or number with presumable PMID</span> </span><span id="L-1490"><a href="#L-1490"><span class="linenos" data-line="1490"></span></a> <span class="c1">-- any -- intentionally dummy parameter</span> </span><span id="L-1491"><a href="#L-1491"><span class="linenos" data-line="1491"></span></a> <span class="c1">-- abbr -- true: link PMID abbreviation</span> </span><span id="L-1492"><a href="#L-1492"><span class="linenos" data-line="1492"></span></a> <span class="c1">-- adhere -- true: use &amp;nbsp; else: use simple space;</span> </span><span id="L-1493"><a href="#L-1493"><span class="linenos" data-line="1493"></span></a> <span class="c1">-- alert -- string with title of maintenance category, or nil</span> </span><span id="L-1494"><a href="#L-1494"><span class="linenos" data-line="1494"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1495"><a href="#L-1495"><span class="linenos" data-line="1495"></span></a> <span class="c1">-- Returns link</span> </span><span id="L-1496"><a href="#L-1496"><span class="linenos" data-line="1496"></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">attempt</span> <span class="p">);</span> </span><span id="L-1497"><a href="#L-1497"><span class="linenos" data-line="1497"></span></a> <span class="kd">local</span> <span class="n">legal</span><span class="p">,</span> <span class="n">r</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">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</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">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-1500"><a href="#L-1500"><span class="linenos" data-line="1500"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</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="s2">&quot;PMID&quot;</span><span class="p">;</span> </span><span id="L-1502"><a href="#L-1502"><span class="linenos" data-line="1502"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;empty&quot;</span><span class="p">;</span> </span><span id="L-1503"><a href="#L-1503"><span class="linenos" data-line="1503"></span></a> <span class="kr">end</span> </span><span id="L-1504"><a href="#L-1504"><span class="linenos" data-line="1504"></span></a> <span class="kr">elseif</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;number&quot;</span> <span class="kr">then</span> </span><span id="L-1505"><a href="#L-1505"><span class="linenos" data-line="1505"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1506"><a href="#L-1506"><span class="linenos" data-line="1506"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;string&quot;</span><span class="p">;</span> </span><span id="L-1507"><a href="#L-1507"><span class="linenos" data-line="1507"></span></a> <span class="kr">else</span> </span><span id="L-1508"><a href="#L-1508"><span class="linenos" data-line="1508"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;PMID&quot;</span><span class="p">;</span> </span><span id="L-1509"><a href="#L-1509"><span class="linenos" data-line="1509"></span></a> <span class="kr">end</span> </span><span id="L-1510"><a href="#L-1510"><span class="linenos" data-line="1510"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1511"><a href="#L-1511"><span class="linenos" data-line="1511"></span></a> <span class="n">legal</span> <span class="o">=</span> <span class="n">r</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^[1-9]%d*$&quot;</span> <span class="p">);</span> </span><span id="L-1512"><a href="#L-1512"><span class="linenos" data-line="1512"></span></a> <span class="kr">if</span> <span class="n">legal</span> <span class="kr">then</span> </span><span id="L-1513"><a href="#L-1513"><span class="linenos" data-line="1513"></span></a> <span class="kd">local</span> <span class="n">cnf</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;config&quot;</span> <span class="p">);</span> </span><span id="L-1514"><a href="#L-1514"><span class="linenos" data-line="1514"></span></a> <span class="kr">if</span> <span class="n">cnf</span> <span class="kr">then</span> </span><span id="L-1515"><a href="#L-1515"><span class="linenos" data-line="1515"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">cnf</span><span class="p">.</span><span class="n">pmid</span><span class="p">;</span> </span><span id="L-1516"><a href="#L-1516"><span class="linenos" data-line="1516"></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">&quot;string&quot;</span> <span class="ow">and</span> </span><span id="L-1517"><a href="#L-1517"><span class="linenos" data-line="1517"></span></a> <span class="n">s</span> <span class="o">~=</span> <span class="s2">&quot;-&quot;</span> <span class="ow">and</span> </span><span id="L-1518"><a href="#L-1518"><span class="linenos" data-line="1518"></span></a> <span class="n">s</span> <span class="o">~=</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-1519"><a href="#L-1519"><span class="linenos" data-line="1519"></span></a> <span class="kd">local</span> <span class="n">sep</span><span class="p">;</span> </span><span id="L-1520"><a href="#L-1520"><span class="linenos" data-line="1520"></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">&quot;$1&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1521"><a href="#L-1521"><span class="linenos" data-line="1521"></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">&quot;%$1&quot;</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1522"><a href="#L-1522"><span class="linenos" data-line="1522"></span></a> <span class="kr">else</span> </span><span id="L-1523"><a href="#L-1523"><span class="linenos" data-line="1523"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1524"><a href="#L-1524"><span class="linenos" data-line="1524"></span></a> <span class="kr">end</span> </span><span id="L-1525"><a href="#L-1525"><span class="linenos" data-line="1525"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[%s %s]&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1526"><a href="#L-1526"><span class="linenos" data-line="1526"></span></a> <span class="kr">if</span> <span class="n">adhere</span> <span class="kr">then</span> </span><span id="L-1527"><a href="#L-1527"><span class="linenos" data-line="1527"></span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot;&amp;#160;&quot;</span><span class="p">;</span> </span><span id="L-1528"><a href="#L-1528"><span class="linenos" data-line="1528"></span></a> <span class="kr">else</span> </span><span id="L-1529"><a href="#L-1529"><span class="linenos" data-line="1529"></span></a> <span class="n">sep</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">;</span> </span><span id="L-1530"><a href="#L-1530"><span class="linenos" data-line="1530"></span></a> <span class="kr">end</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="n">abbr</span> <span class="kr">then</span> </span><span id="L-1532"><a href="#L-1532"><span class="linenos" data-line="1532"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">cnf</span><span class="p">.</span><span class="n">supportPMID</span><span class="p">;</span> </span><span id="L-1533"><a href="#L-1533"><span class="linenos" data-line="1533"></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">&quot;string&quot;</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="n">s</span> <span class="o">~=</span> <span class="s2">&quot;-&quot;</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="n">s</span> <span class="o">~=</span> <span class="s2">&quot;&quot;</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="n">s</span> <span class="o">~=</span> <span class="n">fullPageName</span><span class="p">()</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="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;PMID&quot;</span> <span class="kr">then</span> </span><span id="L-1538"><a href="#L-1538"><span class="linenos" data-line="1538"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;[[PMID]]&quot;</span><span class="p">;</span> </span><span id="L-1539"><a href="#L-1539"><span class="linenos" data-line="1539"></span></a> <span class="kr">else</span> </span><span id="L-1540"><a href="#L-1540"><span class="linenos" data-line="1540"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[[%s|PMID]]&quot;</span><span class="p">,</span> <span class="n">s</span> <span class="p">);</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">else</span> </span><span id="L-1543"><a href="#L-1543"><span class="linenos" data-line="1543"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;PMID&quot;</span><span class="p">;</span> </span><span id="L-1544"><a href="#L-1544"><span class="linenos" data-line="1544"></span></a> <span class="kr">end</span> </span><span id="L-1545"><a href="#L-1545"><span class="linenos" data-line="1545"></span></a> <span class="kr">else</span> </span><span id="L-1546"><a href="#L-1546"><span class="linenos" data-line="1546"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;PMID&quot;</span><span class="p">;</span> </span><span id="L-1547"><a href="#L-1547"><span class="linenos" data-line="1547"></span></a> <span class="kr">end</span> </span><span id="L-1548"><a href="#L-1548"><span class="linenos" data-line="1548"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s%s%s&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">sep</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1549"><a href="#L-1549"><span class="linenos" data-line="1549"></span></a> <span class="kr">else</span> </span><span id="L-1550"><a href="#L-1550"><span class="linenos" data-line="1550"></span></a> <span class="n">cnf</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1551"><a href="#L-1551"><span class="linenos" data-line="1551"></span></a> <span class="kr">end</span> </span><span id="L-1552"><a href="#L-1552"><span class="linenos" data-line="1552"></span></a> <span class="kr">end</span> </span><span id="L-1553"><a href="#L-1553"><span class="linenos" data-line="1553"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">cnf</span> <span class="kr">then</span> </span><span id="L-1554"><a href="#L-1554"><span class="linenos" data-line="1554"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;PMID %s&quot;</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1555"><a href="#L-1555"><span class="linenos" data-line="1555"></span></a> <span class="kr">end</span> </span><span id="L-1556"><a href="#L-1556"><span class="linenos" data-line="1556"></span></a> <span class="kr">else</span> </span><span id="L-1557"><a href="#L-1557"><span class="linenos" data-line="1557"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;PMID %s&quot;</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1558"><a href="#L-1558"><span class="linenos" data-line="1558"></span></a> <span class="kr">end</span> </span><span id="L-1559"><a href="#L-1559"><span class="linenos" data-line="1559"></span></a> <span class="kr">end</span> </span><span id="L-1560"><a href="#L-1560"><span class="linenos" data-line="1560"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">legal</span> <span class="kr">then</span> </span><span id="L-1561"><a href="#L-1561"><span class="linenos" data-line="1561"></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">&quot;span&quot;</span> <span class="p">)</span> </span><span id="L-1562"><a href="#L-1562"><span class="linenos" data-line="1562"></span></a> <span class="p">:</span><span class="n">addClass</span><span class="p">(</span> <span class="s2">&quot;invalid-PMID&quot;</span> <span class="p">)</span> </span><span id="L-1563"><a href="#L-1563"><span class="linenos" data-line="1563"></span></a> <span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1564"><a href="#L-1564"><span class="linenos" data-line="1564"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">e</span> <span class="p">)</span> <span class="o">..</span> <span class="n">fault</span><span class="p">(</span> <span class="s2">&quot;(?!?!)&quot;</span> <span class="p">);</span> </span><span id="L-1565"><a href="#L-1565"><span class="linenos" data-line="1565"></span></a> <span class="kr">if</span> <span class="n">alert</span> <span class="kr">then</span> </span><span id="L-1566"><a href="#L-1566"><span class="linenos" data-line="1566"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">flop</span><span class="p">(</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-1567"><a href="#L-1567"><span class="linenos" data-line="1567"></span></a> <span class="kr">end</span> </span><span id="L-1568"><a href="#L-1568"><span class="linenos" data-line="1568"></span></a> <span class="kr">end</span> </span><span id="L-1569"><a href="#L-1569"><span class="linenos" data-line="1569"></span></a> <span class="kr">return</span> <span class="n">r</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">end</span> <span class="c1">-- URIutil.linkPMID()</span> </span><span id="L-1571"><a href="#L-1571"><span class="linenos" data-line="1571"></span></a> </span><span id="L-1572"><a href="#L-1572"><span class="linenos" data-line="1572"></span></a> </span><span id="L-1573"><a href="#L-1573"><span class="linenos" data-line="1573"></span></a> </span><span id="L-1574"><a href="#L-1574"><span class="linenos" data-line="1574"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">linkURN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">alter</span><span class="p">,</span> <span class="n">any1</span><span class="p">,</span> <span class="n">any2</span><span class="p">,</span> <span class="n">alert</span><span class="p">,</span> <span class="n">at</span><span class="p">,</span> <span class="n">alone</span> <span class="p">)</span> </span><span id="L-1575"><a href="#L-1575"><span class="linenos" data-line="1575"></span></a> <span class="c1">-- Retrieve bracketed titled external URN link</span> </span><span id="L-1576"><a href="#L-1576"><span class="linenos" data-line="1576"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1577"><a href="#L-1577"><span class="linenos" data-line="1577"></span></a> <span class="c1">-- attempt -- string, with presumable URN, starting with &quot;urn:&quot;</span> </span><span id="L-1578"><a href="#L-1578"><span class="linenos" data-line="1578"></span></a> <span class="c1">-- alter -- alternative handler</span> </span><span id="L-1579"><a href="#L-1579"><span class="linenos" data-line="1579"></span></a> <span class="c1">-- any1 -- intentionally dummy parameter</span> </span><span id="L-1580"><a href="#L-1580"><span class="linenos" data-line="1580"></span></a> <span class="c1">-- any2 -- intentionally dummy parameter</span> </span><span id="L-1581"><a href="#L-1581"><span class="linenos" data-line="1581"></span></a> <span class="c1">-- alert -- string, with title of maintenance category, or nil</span> </span><span id="L-1582"><a href="#L-1582"><span class="linenos" data-line="1582"></span></a> <span class="c1">-- at -- fragment, or nil</span> </span><span id="L-1583"><a href="#L-1583"><span class="linenos" data-line="1583"></span></a> <span class="c1">-- alone -- true, if link text not preceded by &quot;urn:&quot;</span> </span><span id="L-1584"><a href="#L-1584"><span class="linenos" data-line="1584"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1585"><a href="#L-1585"><span class="linenos" data-line="1585"></span></a> <span class="c1">-- Returns</span> </span><span id="L-1586"><a href="#L-1586"><span class="linenos" data-line="1586"></span></a> <span class="c1">-- 1. linked ID, or plain string if bad URN</span> </span><span id="L-1587"><a href="#L-1587"><span class="linenos" data-line="1587"></span></a> <span class="c1">-- 2. true, if to be preceded by &quot;urn:&quot;</span> </span><span id="L-1588"><a href="#L-1588"><span class="linenos" data-line="1588"></span></a> <span class="kd">local</span> <span class="n">r2</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> </span><span id="L-1589"><a href="#L-1589"><span class="linenos" data-line="1589"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1590"><a href="#L-1590"><span class="linenos" data-line="1590"></span></a> <span class="kr">if</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">mayURN</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1591"><a href="#L-1591"><span class="linenos" data-line="1591"></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">&quot;span&quot;</span> <span class="p">)</span> </span><span id="L-1592"><a href="#L-1592"><span class="linenos" data-line="1592"></span></a> <span class="p">:</span><span class="n">addClass</span><span class="p">(</span> <span class="s2">&quot;invalid-URN&quot;</span> <span class="p">);</span> </span><span id="L-1593"><a href="#L-1593"><span class="linenos" data-line="1593"></span></a> <span class="kd">local</span> <span class="n">serial</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">;</span> </span><span id="L-1594"><a href="#L-1594"><span class="linenos" data-line="1594"></span></a> <span class="kd">local</span> <span class="n">suffix</span> <span class="o">=</span> <span class="n">flop</span><span class="p">(</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-1595"><a href="#L-1595"><span class="linenos" data-line="1595"></span></a> <span class="kr">if</span> <span class="n">serial</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">4</span> <span class="p">):</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;urn:&quot;</span> <span class="kr">then</span> </span><span id="L-1596"><a href="#L-1596"><span class="linenos" data-line="1596"></span></a> <span class="n">serial</span> <span class="o">=</span> <span class="n">serial</span><span class="p">:</span><span class="n">sub</span><span class="p">(</span> <span class="mi">5</span> <span class="p">);</span> </span><span id="L-1597"><a href="#L-1597"><span class="linenos" data-line="1597"></span></a> <span class="kr">end</span> </span><span id="L-1598"><a href="#L-1598"><span class="linenos" data-line="1598"></span></a> <span class="n">e</span><span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">serial</span> <span class="p">);</span> </span><span id="L-1599"><a href="#L-1599"><span class="linenos" data-line="1599"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">e</span> <span class="p">)</span> <span class="o">..</span> <span class="n">fault</span><span class="p">(</span> <span class="s2">&quot;(?!?!)&quot;</span> <span class="p">);</span> </span><span id="L-1600"><a href="#L-1600"><span class="linenos" data-line="1600"></span></a> <span class="kr">if</span> <span class="n">suffix</span> <span class="kr">then</span> </span><span id="L-1601"><a href="#L-1601"><span class="linenos" data-line="1601"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">suffix</span><span class="p">;</span> </span><span id="L-1602"><a href="#L-1602"><span class="linenos" data-line="1602"></span></a> <span class="kr">end</span> </span><span id="L-1603"><a href="#L-1603"><span class="linenos" data-line="1603"></span></a> <span class="kr">else</span> </span><span id="L-1604"><a href="#L-1604"><span class="linenos" data-line="1604"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^%s*[uU][rR][nN]:(%S+)%s*$&quot;</span> <span class="p">);</span> </span><span id="L-1605"><a href="#L-1605"><span class="linenos" data-line="1605"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</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">space</span><span class="p">,</span> <span class="n">sign</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">&quot;^(%w+):(.+)$&quot;</span> <span class="p">);</span> </span><span id="L-1607"><a href="#L-1607"><span class="linenos" data-line="1607"></span></a> <span class="kr">if</span> <span class="n">space</span> <span class="kr">then</span> </span><span id="L-1608"><a href="#L-1608"><span class="linenos" data-line="1608"></span></a> <span class="kd">local</span> <span class="n">defs</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;urn&quot;</span> <span class="p">);</span> </span><span id="L-1609"><a href="#L-1609"><span class="linenos" data-line="1609"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">defs</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-1610"><a href="#L-1610"><span class="linenos" data-line="1610"></span></a> <span class="kd">local</span> <span class="n">resolver</span> <span class="o">=</span> <span class="n">defs</span><span class="p">.</span><span class="n">resolver</span><span class="p">;</span> </span><span id="L-1611"><a href="#L-1611"><span class="linenos" data-line="1611"></span></a> <span class="n">space</span> <span class="o">=</span> <span class="n">space</span><span class="p">:</span><span class="n">lower</span><span class="p">();</span> </span><span id="L-1612"><a href="#L-1612"><span class="linenos" data-line="1612"></span></a> <span class="n">resolver</span> <span class="o">=</span> <span class="n">resolver</span><span class="p">[</span> <span class="n">space</span> <span class="p">];</span> </span><span id="L-1613"><a href="#L-1613"><span class="linenos" data-line="1613"></span></a> <span class="n">r2</span> <span class="o">=</span> <span class="p">(</span> <span class="n">resolver</span> <span class="o">~=</span> <span class="kc">true</span> <span class="p">);</span> </span><span id="L-1614"><a href="#L-1614"><span class="linenos" data-line="1614"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">resolver</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-1615"><a href="#L-1615"><span class="linenos" data-line="1615"></span></a> <span class="n">r</span><span class="p">,</span> <span class="n">sign</span> <span class="o">=</span> <span class="n">URNresolve</span><span class="p">(</span> <span class="n">resolver</span><span class="p">,</span> <span class="n">sign</span><span class="p">,</span> <span class="n">alter</span> <span class="p">);</span> </span><span id="L-1616"><a href="#L-1616"><span class="linenos" data-line="1616"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s:%s&quot;</span><span class="p">,</span> <span class="n">space</span><span class="p">,</span> <span class="n">sign</span> <span class="p">);</span> </span><span id="L-1617"><a href="#L-1617"><span class="linenos" data-line="1617"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1618"><a href="#L-1618"><span class="linenos" data-line="1618"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span> <span class="s2">&quot;%$1&quot;</span><span class="p">,</span> <span class="s2">&quot;urn:&quot;</span> <span class="o">..</span> <span class="n">s</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">if</span> <span class="n">at</span> <span class="kr">then</span> </span><span id="L-1620"><a href="#L-1620"><span class="linenos" data-line="1620"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s#%s&quot;</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">at</span> <span class="p">);</span> </span><span id="L-1621"><a href="#L-1621"><span class="linenos" data-line="1621"></span></a> <span class="kr">end</span> </span><span id="L-1622"><a href="#L-1622"><span class="linenos" data-line="1622"></span></a> <span class="kr">if</span> <span class="n">alone</span> <span class="kr">then</span> </span><span id="L-1623"><a href="#L-1623"><span class="linenos" data-line="1623"></span></a> <span class="n">r2</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> </span><span id="L-1624"><a href="#L-1624"><span class="linenos" data-line="1624"></span></a> <span class="kr">else</span> </span><span id="L-1625"><a href="#L-1625"><span class="linenos" data-line="1625"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;urn:&quot;</span> <span class="o">..</span> <span class="n">s</span><span class="p">;</span> </span><span id="L-1626"><a href="#L-1626"><span class="linenos" data-line="1626"></span></a> <span class="kr">end</span> </span><span id="L-1627"><a href="#L-1627"><span class="linenos" data-line="1627"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[%s %s]&quot;</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-1628"><a href="#L-1628"><span class="linenos" data-line="1628"></span></a> <span class="kr">end</span> </span><span id="L-1629"><a href="#L-1629"><span class="linenos" data-line="1629"></span></a> <span class="kr">elseif</span> <span class="n">r2</span> <span class="kr">then</span> </span><span id="L-1630"><a href="#L-1630"><span class="linenos" data-line="1630"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">defs</span><span class="p">.</span><span class="n">sns</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1631"><a href="#L-1631"><span class="linenos" data-line="1631"></span></a> <span class="n">s</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">space</span> <span class="p">);</span> </span><span id="L-1632"><a href="#L-1632"><span class="linenos" data-line="1632"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">defs</span><span class="p">.</span><span class="n">sns</span><span class="p">:</span><span class="n">find</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="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-1633"><a href="#L-1633"><span class="linenos" data-line="1633"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1634"><a href="#L-1634"><span class="linenos" data-line="1634"></span></a> <span class="kr">end</span> </span><span id="L-1635"><a href="#L-1635"><span class="linenos" data-line="1635"></span></a> <span class="kr">else</span> </span><span id="L-1636"><a href="#L-1636"><span class="linenos" data-line="1636"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1637"><a href="#L-1637"><span class="linenos" data-line="1637"></span></a> <span class="kr">end</span> </span><span id="L-1638"><a href="#L-1638"><span class="linenos" data-line="1638"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1639"><a href="#L-1639"><span class="linenos" data-line="1639"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s:%s&quot;</span><span class="p">,</span> <span class="n">space</span><span class="p">,</span> <span class="n">sign</span> <span class="p">);</span> </span><span id="L-1640"><a href="#L-1640"><span class="linenos" data-line="1640"></span></a> <span class="kr">else</span> </span><span id="L-1641"><a href="#L-1641"><span class="linenos" data-line="1641"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;%s&amp;#58;%s&quot;</span><span class="p">,</span> </span><span id="L-1642"><a href="#L-1642"><span class="linenos" data-line="1642"></span></a> <span class="n">space</span><span class="p">,</span> <span class="n">sign</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">end</span> </span><span id="L-1644"><a href="#L-1644"><span class="linenos" data-line="1644"></span></a> <span class="n">r2</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">alone</span><span class="p">;</span> </span><span id="L-1645"><a href="#L-1645"><span class="linenos" data-line="1645"></span></a> <span class="kr">else</span> </span><span id="L-1646"><a href="#L-1646"><span class="linenos" data-line="1646"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;link&quot;</span> <span class="o">..</span> <span class="n">space</span><span class="p">:</span><span class="n">upper</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">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">[</span> <span class="n">s</span> <span class="p">](</span> <span class="n">sign</span><span class="p">,</span> <span class="n">alter</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-1648"><a href="#L-1648"><span class="linenos" data-line="1648"></span></a> <span class="kr">end</span> </span><span id="L-1649"><a href="#L-1649"><span class="linenos" data-line="1649"></span></a> <span class="kr">else</span> </span><span id="L-1650"><a href="#L-1650"><span class="linenos" data-line="1650"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">fault</span><span class="p">(</span> <span class="s2">&quot;Bad structure in Module:URIutil/urn&quot;</span> <span class="p">);</span> </span><span id="L-1651"><a href="#L-1651"><span class="linenos" data-line="1651"></span></a> <span class="kr">end</span> </span><span id="L-1652"><a href="#L-1652"><span class="linenos" data-line="1652"></span></a> <span class="kr">end</span> </span><span id="L-1653"><a href="#L-1653"><span class="linenos" data-line="1653"></span></a> <span class="kr">end</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">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1656"><a href="#L-1656"><span class="linenos" data-line="1656"></span></a> <span class="kr">if</span> <span class="n">alert</span> <span class="kr">then</span> </span><span id="L-1657"><a href="#L-1657"><span class="linenos" data-line="1657"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">flop</span><span class="p">(</span> <span class="n">alert</span> <span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-1658"><a href="#L-1658"><span class="linenos" data-line="1658"></span></a> <span class="kr">if</span> <span class="n">attempt</span> <span class="kr">then</span> </span><span id="L-1659"><a href="#L-1659"><span class="linenos" data-line="1659"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">attempt</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1660"><a href="#L-1660"><span class="linenos" data-line="1660"></span></a> <span class="kr">end</span> </span><span id="L-1661"><a href="#L-1661"><span class="linenos" data-line="1661"></span></a> <span class="kr">else</span> </span><span id="L-1662"><a href="#L-1662"><span class="linenos" data-line="1662"></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-1663"><a href="#L-1663"><span class="linenos" data-line="1663"></span></a> <span class="kr">end</span> </span><span id="L-1664"><a href="#L-1664"><span class="linenos" data-line="1664"></span></a> <span class="n">r2</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1665"><a href="#L-1665"><span class="linenos" data-line="1665"></span></a> <span class="kr">end</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="n">r</span><span class="p">,</span> <span class="n">r2</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">-- URIutil.linkURN()</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">URIutil</span><span class="p">.</span><span class="nf">mayDOI</span><span class="p">(</span> <span class="n">attempt</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">-- Is this a syntactically correct DOI, or empty?</span> </span><span id="L-1673"><a href="#L-1673"><span class="linenos" data-line="1673"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1674"><a href="#L-1674"><span class="linenos" data-line="1674"></span></a> <span class="c1">-- attempt -- string with presumable DOI</span> </span><span id="L-1675"><a href="#L-1675"><span class="linenos" data-line="1675"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1676"><a href="#L-1676"><span class="linenos" data-line="1676"></span></a> <span class="c1">-- Returns number of organization</span> </span><span id="L-1677"><a href="#L-1677"><span class="linenos" data-line="1677"></span></a> <span class="c1">-- 0 if empty</span> </span><span id="L-1678"><a href="#L-1678"><span class="linenos" data-line="1678"></span></a> <span class="c1">-- false if not empty and not a DOI</span> </span><span id="L-1679"><a href="#L-1679"><span class="linenos" data-line="1679"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1680"><a href="#L-1680"><span class="linenos" data-line="1680"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1681"><a href="#L-1681"><span class="linenos" data-line="1681"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">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-1682"><a href="#L-1682"><span class="linenos" data-line="1682"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">s</span> <span class="o">&gt;=</span> <span class="mi">10</span> <span class="kr">then</span> </span><span id="L-1683"><a href="#L-1683"><span class="linenos" data-line="1683"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isDOI</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1684"><a href="#L-1684"><span class="linenos" data-line="1684"></span></a> <span class="kr">elseif</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-1685"><a href="#L-1685"><span class="linenos" data-line="1685"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-1686"><a href="#L-1686"><span class="linenos" data-line="1686"></span></a> <span class="kr">else</span> </span><span id="L-1687"><a href="#L-1687"><span class="linenos" data-line="1687"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1688"><a href="#L-1688"><span class="linenos" data-line="1688"></span></a> <span class="kr">end</span> </span><span id="L-1689"><a href="#L-1689"><span class="linenos" data-line="1689"></span></a> <span class="kr">else</span> </span><span id="L-1690"><a href="#L-1690"><span class="linenos" data-line="1690"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1691"><a href="#L-1691"><span class="linenos" data-line="1691"></span></a> <span class="kr">end</span> </span><span id="L-1692"><a href="#L-1692"><span class="linenos" data-line="1692"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1693"><a href="#L-1693"><span class="linenos" data-line="1693"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.mayDOI()</span> </span><span id="L-1694"><a href="#L-1694"><span class="linenos" data-line="1694"></span></a> </span><span id="L-1695"><a href="#L-1695"><span class="linenos" data-line="1695"></span></a> </span><span id="L-1696"><a href="#L-1696"><span class="linenos" data-line="1696"></span></a> </span><span id="L-1697"><a href="#L-1697"><span class="linenos" data-line="1697"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">mayHandle</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1698"><a href="#L-1698"><span class="linenos" data-line="1698"></span></a> <span class="c1">-- Is this a meaningful handle, or empty?</span> </span><span id="L-1699"><a href="#L-1699"><span class="linenos" data-line="1699"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1700"><a href="#L-1700"><span class="linenos" data-line="1700"></span></a> <span class="c1">-- attempt -- string with presumable handle</span> </span><span id="L-1701"><a href="#L-1701"><span class="linenos" data-line="1701"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1702"><a href="#L-1702"><span class="linenos" data-line="1702"></span></a> <span class="c1">-- Returns number of organization</span> </span><span id="L-1703"><a href="#L-1703"><span class="linenos" data-line="1703"></span></a> <span class="c1">-- 0 if empty</span> </span><span id="L-1704"><a href="#L-1704"><span class="linenos" data-line="1704"></span></a> <span class="c1">-- false if not empty and not a DOI</span> </span><span id="L-1705"><a href="#L-1705"><span class="linenos" data-line="1705"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1706"><a href="#L-1706"><span class="linenos" data-line="1706"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</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">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">attempt</span> <span class="p">);</span> </span><span id="L-1708"><a href="#L-1708"><span class="linenos" data-line="1708"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">s</span> <span class="o">&gt;</span> <span class="mi">5</span> <span class="kr">then</span> </span><span id="L-1709"><a href="#L-1709"><span class="linenos" data-line="1709"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isHandle</span><span class="p">(</span> <span class="n">attempt</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">elseif</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-1711"><a href="#L-1711"><span class="linenos" data-line="1711"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-1712"><a href="#L-1712"><span class="linenos" data-line="1712"></span></a> <span class="kr">else</span> </span><span id="L-1713"><a href="#L-1713"><span class="linenos" data-line="1713"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1714"><a href="#L-1714"><span class="linenos" data-line="1714"></span></a> <span class="kr">end</span> </span><span id="L-1715"><a href="#L-1715"><span class="linenos" data-line="1715"></span></a> <span class="kr">else</span> </span><span id="L-1716"><a href="#L-1716"><span class="linenos" data-line="1716"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</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">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1719"><a href="#L-1719"><span class="linenos" data-line="1719"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.mayHandle()</span> </span><span id="L-1720"><a href="#L-1720"><span class="linenos" data-line="1720"></span></a> </span><span id="L-1721"><a href="#L-1721"><span class="linenos" data-line="1721"></span></a> </span><span id="L-1722"><a href="#L-1722"><span class="linenos" data-line="1722"></span></a> </span><span id="L-1723"><a href="#L-1723"><span class="linenos" data-line="1723"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">mayISBN</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1724"><a href="#L-1724"><span class="linenos" data-line="1724"></span></a> <span class="c1">-- Is this a syntactically correct ISBN, or empty?</span> </span><span id="L-1725"><a href="#L-1725"><span class="linenos" data-line="1725"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1726"><a href="#L-1726"><span class="linenos" data-line="1726"></span></a> <span class="c1">-- attempt -- string with presumable ISBN</span> </span><span id="L-1727"><a href="#L-1727"><span class="linenos" data-line="1727"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1728"><a href="#L-1728"><span class="linenos" data-line="1728"></span></a> <span class="c1">-- Returns 10 if 10 digits and hyphens; also X at end of ISBN-10</span> </span><span id="L-1729"><a href="#L-1729"><span class="linenos" data-line="1729"></span></a> <span class="c1">-- 13 if 13 digits and hyphens; beginning with bookland</span> </span><span id="L-1730"><a href="#L-1730"><span class="linenos" data-line="1730"></span></a> <span class="c1">-- 0 if empty</span> </span><span id="L-1731"><a href="#L-1731"><span class="linenos" data-line="1731"></span></a> <span class="c1">-- false if not empty and not an ISBN</span> </span><span id="L-1732"><a href="#L-1732"><span class="linenos" data-line="1732"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1733"><a href="#L-1733"><span class="linenos" data-line="1733"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1734"><a href="#L-1734"><span class="linenos" data-line="1734"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">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-1735"><a href="#L-1735"><span class="linenos" data-line="1735"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">s</span> <span class="o">&gt;=</span> <span class="mi">10</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">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isISBN</span><span class="p">(</span> <span class="n">attempt</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">elseif</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-1738"><a href="#L-1738"><span class="linenos" data-line="1738"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-1739"><a href="#L-1739"><span class="linenos" data-line="1739"></span></a> <span class="kr">else</span> </span><span id="L-1740"><a href="#L-1740"><span class="linenos" data-line="1740"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1741"><a href="#L-1741"><span class="linenos" data-line="1741"></span></a> <span class="kr">end</span> </span><span id="L-1742"><a href="#L-1742"><span class="linenos" data-line="1742"></span></a> <span class="kr">else</span> </span><span id="L-1743"><a href="#L-1743"><span class="linenos" data-line="1743"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1744"><a href="#L-1744"><span class="linenos" data-line="1744"></span></a> <span class="kr">end</span> </span><span id="L-1745"><a href="#L-1745"><span class="linenos" data-line="1745"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1746"><a href="#L-1746"><span class="linenos" data-line="1746"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.mayISBN()</span> </span><span id="L-1747"><a href="#L-1747"><span class="linenos" data-line="1747"></span></a> </span><span id="L-1748"><a href="#L-1748"><span class="linenos" data-line="1748"></span></a> </span><span id="L-1749"><a href="#L-1749"><span class="linenos" data-line="1749"></span></a> </span><span id="L-1750"><a href="#L-1750"><span class="linenos" data-line="1750"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">mayISSN</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1751"><a href="#L-1751"><span class="linenos" data-line="1751"></span></a> <span class="c1">-- Is this a correct ISSN, or empty?</span> </span><span id="L-1752"><a href="#L-1752"><span class="linenos" data-line="1752"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1753"><a href="#L-1753"><span class="linenos" data-line="1753"></span></a> <span class="c1">-- attempt -- string with presumable ISSN</span> </span><span id="L-1754"><a href="#L-1754"><span class="linenos" data-line="1754"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1755"><a href="#L-1755"><span class="linenos" data-line="1755"></span></a> <span class="c1">-- Returns 8 if 8 digits and hyphens; also X at end</span> </span><span id="L-1756"><a href="#L-1756"><span class="linenos" data-line="1756"></span></a> <span class="c1">-- 13 if 13 digits and hyphens; beginning with issnland</span> </span><span id="L-1757"><a href="#L-1757"><span class="linenos" data-line="1757"></span></a> <span class="c1">-- 0 if empty</span> </span><span id="L-1758"><a href="#L-1758"><span class="linenos" data-line="1758"></span></a> <span class="c1">-- false if not empty and not an ISSN</span> </span><span id="L-1759"><a href="#L-1759"><span class="linenos" data-line="1759"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1760"><a href="#L-1760"><span class="linenos" data-line="1760"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1761"><a href="#L-1761"><span class="linenos" data-line="1761"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">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-1762"><a href="#L-1762"><span class="linenos" data-line="1762"></span></a> <span class="kr">if</span> <span class="o">#</span><span class="n">s</span> <span class="o">&gt;=</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-1763"><a href="#L-1763"><span class="linenos" data-line="1763"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isISSNvalid</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1764"><a href="#L-1764"><span class="linenos" data-line="1764"></span></a> <span class="kr">elseif</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-1765"><a href="#L-1765"><span class="linenos" data-line="1765"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-1766"><a href="#L-1766"><span class="linenos" data-line="1766"></span></a> <span class="kr">else</span> </span><span id="L-1767"><a href="#L-1767"><span class="linenos" data-line="1767"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1768"><a href="#L-1768"><span class="linenos" data-line="1768"></span></a> <span class="kr">end</span> </span><span id="L-1769"><a href="#L-1769"><span class="linenos" data-line="1769"></span></a> <span class="kr">else</span> </span><span id="L-1770"><a href="#L-1770"><span class="linenos" data-line="1770"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1771"><a href="#L-1771"><span class="linenos" data-line="1771"></span></a> <span class="kr">end</span> </span><span id="L-1772"><a href="#L-1772"><span class="linenos" data-line="1772"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1773"><a href="#L-1773"><span class="linenos" data-line="1773"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.mayISSN()</span> </span><span id="L-1774"><a href="#L-1774"><span class="linenos" data-line="1774"></span></a> </span><span id="L-1775"><a href="#L-1775"><span class="linenos" data-line="1775"></span></a> </span><span id="L-1776"><a href="#L-1776"><span class="linenos" data-line="1776"></span></a> </span><span id="L-1777"><a href="#L-1777"><span class="linenos" data-line="1777"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">mayLCCN</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1778"><a href="#L-1778"><span class="linenos" data-line="1778"></span></a> <span class="c1">-- Is this a syntactically correct LCCN?</span> </span><span id="L-1779"><a href="#L-1779"><span class="linenos" data-line="1779"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1780"><a href="#L-1780"><span class="linenos" data-line="1780"></span></a> <span class="c1">-- attempt -- string with presumable LCCN</span> </span><span id="L-1781"><a href="#L-1781"><span class="linenos" data-line="1781"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1782"><a href="#L-1782"><span class="linenos" data-line="1782"></span></a> <span class="c1">-- Returns string with LCCN formatted aa9999-99999999</span> </span><span id="L-1783"><a href="#L-1783"><span class="linenos" data-line="1783"></span></a> <span class="c1">-- 0 if empty</span> </span><span id="L-1784"><a href="#L-1784"><span class="linenos" data-line="1784"></span></a> <span class="c1">-- false if not recognized</span> </span><span id="L-1785"><a href="#L-1785"><span class="linenos" data-line="1785"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1786"><a href="#L-1786"><span class="linenos" data-line="1786"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1787"><a href="#L-1787"><span class="linenos" data-line="1787"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">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-1788"><a href="#L-1788"><span class="linenos" data-line="1788"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;&quot;</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="mi">0</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">URIutil</span><span class="p">.</span><span class="n">isLCCN</span><span class="p">(</span> <span class="n">s</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="kr">else</span> </span><span id="L-1794"><a href="#L-1794"><span class="linenos" data-line="1794"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</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="p">;</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">-- URIutil.mayLCCN()</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">URIutil</span><span class="p">.</span><span class="nf">mayURI</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">ascii</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">-- Is this a syntactically correct URI, or empty?</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">-- attempt -- string with presumable URI</span> </span><span id="L-1805"><a href="#L-1805"><span class="linenos" data-line="1805"></span></a> <span class="c1">-- ascii -- limit to ASCII (no IRI)</span> </span><span id="L-1806"><a href="#L-1806"><span class="linenos" data-line="1806"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1807"><a href="#L-1807"><span class="linenos" data-line="1807"></span></a> <span class="c1">-- Returns false if no problem</span> </span><span id="L-1808"><a href="#L-1808"><span class="linenos" data-line="1808"></span></a> <span class="c1">-- string with violation</span> </span><span id="L-1809"><a href="#L-1809"><span class="linenos" data-line="1809"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">isEscValid</span><span class="p">(</span> <span class="n">attempt</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">if</span> <span class="ow">not</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1811"><a href="#L-1811"><span class="linenos" data-line="1811"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">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-1812"><a href="#L-1812"><span class="linenos" data-line="1812"></span></a> <span class="n">r</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">&quot;%s(.+)$&quot;</span> <span class="p">);</span> </span><span id="L-1813"><a href="#L-1813"><span class="linenos" data-line="1813"></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-1814"><a href="#L-1814"><span class="linenos" data-line="1814"></span></a> <span class="n">r</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">&quot;#(.*)$&quot;</span> <span class="p">);</span> </span><span id="L-1815"><a href="#L-1815"><span class="linenos" data-line="1815"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1816"><a href="#L-1816"><span class="linenos" data-line="1816"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;&amp;#35;&quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1817"><a href="#L-1817"><span class="linenos" data-line="1817"></span></a> <span class="kr">elseif</span> <span class="n">ascii</span> <span class="kr">then</span> </span><span id="L-1818"><a href="#L-1818"><span class="linenos" data-line="1818"></span></a> <span class="kd">local</span> <span class="n">p</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-1819"><a href="#L-1819"><span class="linenos" data-line="1819"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">char</span><span class="p">(</span> <span class="mi">128</span><span class="p">,</span><span class="mi">45</span><span class="p">,</span><span class="mi">255</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-1820"><a href="#L-1820"><span class="linenos" data-line="1820"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">match</span><span class="p">(</span> <span class="n">s</span><span class="p">,</span> <span class="n">p</span> <span class="p">);</span> </span><span id="L-1821"><a href="#L-1821"><span class="linenos" data-line="1821"></span></a> <span class="kr">end</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">end</span> </span><span id="L-1824"><a href="#L-1824"><span class="linenos" data-line="1824"></span></a> <span class="kr">return</span> <span class="n">r</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">end</span> <span class="c1">-- URIutil.mayURI()</span> </span><span id="L-1826"><a href="#L-1826"><span class="linenos" data-line="1826"></span></a> </span><span id="L-1827"><a href="#L-1827"><span class="linenos" data-line="1827"></span></a> </span><span id="L-1828"><a href="#L-1828"><span class="linenos" data-line="1828"></span></a> </span><span id="L-1829"><a href="#L-1829"><span class="linenos" data-line="1829"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">mayURN</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1830"><a href="#L-1830"><span class="linenos" data-line="1830"></span></a> <span class="c1">-- Is this a syntactically correct URN, or empty?</span> </span><span id="L-1831"><a href="#L-1831"><span class="linenos" data-line="1831"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1832"><a href="#L-1832"><span class="linenos" data-line="1832"></span></a> <span class="c1">-- attempt -- string with presumable URN, starting with &quot;urn:&quot;</span> </span><span id="L-1833"><a href="#L-1833"><span class="linenos" data-line="1833"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1834"><a href="#L-1834"><span class="linenos" data-line="1834"></span></a> <span class="c1">-- Returns false if no problem</span> </span><span id="L-1835"><a href="#L-1835"><span class="linenos" data-line="1835"></span></a> <span class="c1">-- string with violation</span> </span><span id="L-1836"><a href="#L-1836"><span class="linenos" data-line="1836"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">mayURI</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="kc">true</span> <span class="p">);</span> </span><span id="L-1837"><a href="#L-1837"><span class="linenos" data-line="1837"></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-1838"><a href="#L-1838"><span class="linenos" data-line="1838"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">:</span><span class="n">match</span><span class="p">(</span> <span class="s2">&quot;^%s*[uU][rR][nN]:(.+)$&quot;</span> <span class="p">);</span> </span><span id="L-1839"><a href="#L-1839"><span class="linenos" data-line="1839"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1840"><a href="#L-1840"><span class="linenos" data-line="1840"></span></a> <span class="kd">local</span> <span class="n">space</span><span class="p">,</span> <span class="n">id</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">&quot;^(%w+):(.+)$&quot;</span> <span class="p">);</span> </span><span id="L-1841"><a href="#L-1841"><span class="linenos" data-line="1841"></span></a> <span class="kr">if</span> <span class="n">space</span> <span class="kr">then</span> </span><span id="L-1842"><a href="#L-1842"><span class="linenos" data-line="1842"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">URNnamespace</span><span class="p">(</span> <span class="n">space</span><span class="p">:</span><span class="n">lower</span><span class="p">(),</span> <span class="n">id</span> <span class="p">);</span> </span><span id="L-1843"><a href="#L-1843"><span class="linenos" data-line="1843"></span></a> <span class="kr">else</span> </span><span id="L-1844"><a href="#L-1844"><span class="linenos" data-line="1844"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">s</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">end</span> </span><span id="L-1846"><a href="#L-1846"><span class="linenos" data-line="1846"></span></a> <span class="kr">else</span> </span><span id="L-1847"><a href="#L-1847"><span class="linenos" data-line="1847"></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">attempt</span> <span class="p">);</span> </span><span id="L-1848"><a href="#L-1848"><span class="linenos" data-line="1848"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-1849"><a href="#L-1849"><span class="linenos" data-line="1849"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1850"><a href="#L-1850"><span class="linenos" data-line="1850"></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">&quot;^https?://&quot;</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1851"><a href="#L-1851"><span class="linenos" data-line="1851"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;http:&quot;</span><span class="p">;</span> </span><span id="L-1852"><a href="#L-1852"><span class="linenos" data-line="1852"></span></a> <span class="kr">else</span> </span><span id="L-1853"><a href="#L-1853"><span class="linenos" data-line="1853"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;urn:&quot;</span><span class="p">;</span> </span><span id="L-1854"><a href="#L-1854"><span class="linenos" data-line="1854"></span></a> <span class="kr">end</span> </span><span id="L-1855"><a href="#L-1855"><span class="linenos" data-line="1855"></span></a> <span class="kr">end</span> </span><span id="L-1856"><a href="#L-1856"><span class="linenos" data-line="1856"></span></a> <span class="kr">end</span> </span><span id="L-1857"><a href="#L-1857"><span class="linenos" data-line="1857"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1858"><a href="#L-1858"><span class="linenos" data-line="1858"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.mayURN()</span> </span><span id="L-1859"><a href="#L-1859"><span class="linenos" data-line="1859"></span></a> </span><span id="L-1860"><a href="#L-1860"><span class="linenos" data-line="1860"></span></a> </span><span id="L-1861"><a href="#L-1861"><span class="linenos" data-line="1861"></span></a> </span><span id="L-1862"><a href="#L-1862"><span class="linenos" data-line="1862"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">plainISBN</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">)</span> </span><span id="L-1863"><a href="#L-1863"><span class="linenos" data-line="1863"></span></a> <span class="c1">-- Format ISBN as digits (and &#39;X&#39;) only string</span> </span><span id="L-1864"><a href="#L-1864"><span class="linenos" data-line="1864"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1865"><a href="#L-1865"><span class="linenos" data-line="1865"></span></a> <span class="c1">-- attempt -- string with presumable ISBN</span> </span><span id="L-1866"><a href="#L-1866"><span class="linenos" data-line="1866"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1867"><a href="#L-1867"><span class="linenos" data-line="1867"></span></a> <span class="c1">-- Returns string with 10 or 13 chars</span> </span><span id="L-1868"><a href="#L-1868"><span class="linenos" data-line="1868"></span></a> <span class="c1">-- false if not empty and not an ISBN</span> </span><span id="L-1869"><a href="#L-1869"><span class="linenos" data-line="1869"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1870"><a href="#L-1870"><span class="linenos" data-line="1870"></span></a> <span class="kd">local</span> <span class="n">isbn</span> <span class="o">=</span> <span class="n">ISBNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1871"><a href="#L-1871"><span class="linenos" data-line="1871"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">isbn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-1872"><a href="#L-1872"><span class="linenos" data-line="1872"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">ISBNflat</span><span class="p">(</span> <span class="n">isbn</span> <span class="p">);</span> </span><span id="L-1873"><a href="#L-1873"><span class="linenos" data-line="1873"></span></a> <span class="kr">else</span> </span><span id="L-1874"><a href="#L-1874"><span class="linenos" data-line="1874"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1875"><a href="#L-1875"><span class="linenos" data-line="1875"></span></a> <span class="kr">end</span> </span><span id="L-1876"><a href="#L-1876"><span class="linenos" data-line="1876"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1877"><a href="#L-1877"><span class="linenos" data-line="1877"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.plainISBN()</span> </span><span id="L-1878"><a href="#L-1878"><span class="linenos" data-line="1878"></span></a> </span><span id="L-1879"><a href="#L-1879"><span class="linenos" data-line="1879"></span></a> </span><span id="L-1880"><a href="#L-1880"><span class="linenos" data-line="1880"></span></a> </span><span id="L-1881"><a href="#L-1881"><span class="linenos" data-line="1881"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">targetISSN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">allow</span><span class="p">,</span> <span class="n">any1</span><span class="p">,</span> <span class="n">any2</span><span class="p">,</span> <span class="n">alert</span> <span class="p">)</span> </span><span id="L-1882"><a href="#L-1882"><span class="linenos" data-line="1882"></span></a> <span class="c1">-- Retrieve bracketed titled external link on ISSN DB without &quot;ISSN&quot;</span> </span><span id="L-1883"><a href="#L-1883"><span class="linenos" data-line="1883"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1884"><a href="#L-1884"><span class="linenos" data-line="1884"></span></a> <span class="c1">-- attempt -- string with presumable ISSN</span> </span><span id="L-1885"><a href="#L-1885"><span class="linenos" data-line="1885"></span></a> <span class="c1">-- allow -- true: permit invalid check digit</span> </span><span id="L-1886"><a href="#L-1886"><span class="linenos" data-line="1886"></span></a> <span class="c1">-- any1 -- intentionally dummy parameter</span> </span><span id="L-1887"><a href="#L-1887"><span class="linenos" data-line="1887"></span></a> <span class="c1">-- any2 -- intentionally dummy parameter</span> </span><span id="L-1888"><a href="#L-1888"><span class="linenos" data-line="1888"></span></a> <span class="c1">-- alert -- string with title of maintenance category, or nil</span> </span><span id="L-1889"><a href="#L-1889"><span class="linenos" data-line="1889"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1890"><a href="#L-1890"><span class="linenos" data-line="1890"></span></a> <span class="c1">-- Returns link</span> </span><span id="L-1891"><a href="#L-1891"><span class="linenos" data-line="1891"></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">&quot;span&quot;</span> <span class="p">);</span> </span><span id="L-1892"><a href="#L-1892"><span class="linenos" data-line="1892"></span></a> <span class="kd">local</span> <span class="n">cnf</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;config&quot;</span> <span class="p">);</span> </span><span id="L-1893"><a href="#L-1893"><span class="linenos" data-line="1893"></span></a> <span class="kd">local</span> <span class="n">issn</span> <span class="o">=</span> <span class="n">ISSNfactory</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1894"><a href="#L-1894"><span class="linenos" data-line="1894"></span></a> <span class="kd">local</span> <span class="n">lapsus</span><span class="p">,</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1895"><a href="#L-1895"><span class="linenos" data-line="1895"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">issn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-1896"><a href="#L-1896"><span class="linenos" data-line="1896"></span></a> <span class="kd">local</span> <span class="n">lenient</span><span class="p">;</span> </span><span id="L-1897"><a href="#L-1897"><span class="linenos" data-line="1897"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">allow</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1898"><a href="#L-1898"><span class="linenos" data-line="1898"></span></a> <span class="n">lenient</span> <span class="o">=</span> <span class="p">(</span> <span class="n">allow</span> <span class="o">~=</span> <span class="s2">&quot;0&quot;</span> <span class="p">);</span> </span><span id="L-1899"><a href="#L-1899"><span class="linenos" data-line="1899"></span></a> <span class="kr">else</span> </span><span id="L-1900"><a href="#L-1900"><span class="linenos" data-line="1900"></span></a> <span class="n">lenient</span> <span class="o">=</span> <span class="n">allow</span><span class="p">;</span> </span><span id="L-1901"><a href="#L-1901"><span class="linenos" data-line="1901"></span></a> <span class="kr">end</span> </span><span id="L-1902"><a href="#L-1902"><span class="linenos" data-line="1902"></span></a> <span class="kr">if</span> <span class="n">lenient</span> <span class="kr">then</span> </span><span id="L-1903"><a href="#L-1903"><span class="linenos" data-line="1903"></span></a> <span class="n">lapsus</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1904"><a href="#L-1904"><span class="linenos" data-line="1904"></span></a> <span class="kr">else</span> </span><span id="L-1905"><a href="#L-1905"><span class="linenos" data-line="1905"></span></a> <span class="n">lapsus</span> <span class="o">=</span> <span class="p">(</span> <span class="ow">not</span> <span class="n">ISSNfaith</span><span class="p">(</span> <span class="n">issn</span> <span class="p">)</span> <span class="p">);</span> </span><span id="L-1906"><a href="#L-1906"><span class="linenos" data-line="1906"></span></a> <span class="kr">end</span> </span><span id="L-1907"><a href="#L-1907"><span class="linenos" data-line="1907"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">ISSNformat</span><span class="p">(</span> <span class="n">issn</span><span class="p">,</span> <span class="n">issn</span><span class="p">.</span><span class="n">type</span> <span class="p">);</span> </span><span id="L-1908"><a href="#L-1908"><span class="linenos" data-line="1908"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">cnf</span><span class="p">.</span><span class="n">issn</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1909"><a href="#L-1909"><span class="linenos" data-line="1909"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">cnf</span><span class="p">.</span><span class="n">issn</span> </span><span id="L-1910"><a href="#L-1910"><span class="linenos" data-line="1910"></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">&quot;$1&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="kc">true</span> <span class="p">)</span> <span class="kr">then</span> </span><span id="L-1911"><a href="#L-1911"><span class="linenos" data-line="1911"></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">&quot;%$1&quot;</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1912"><a href="#L-1912"><span class="linenos" data-line="1912"></span></a> <span class="kr">else</span> </span><span id="L-1913"><a href="#L-1913"><span class="linenos" data-line="1913"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1914"><a href="#L-1914"><span class="linenos" data-line="1914"></span></a> <span class="kr">end</span> </span><span id="L-1915"><a href="#L-1915"><span class="linenos" data-line="1915"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[%s %s]&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1916"><a href="#L-1916"><span class="linenos" data-line="1916"></span></a> <span class="kr">end</span> </span><span id="L-1917"><a href="#L-1917"><span class="linenos" data-line="1917"></span></a> <span class="kr">else</span> </span><span id="L-1918"><a href="#L-1918"><span class="linenos" data-line="1918"></span></a> <span class="n">lapsus</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> </span><span id="L-1919"><a href="#L-1919"><span class="linenos" data-line="1919"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">attempt</span><span class="p">;</span> </span><span id="L-1920"><a href="#L-1920"><span class="linenos" data-line="1920"></span></a> <span class="kr">end</span> </span><span id="L-1921"><a href="#L-1921"><span class="linenos" data-line="1921"></span></a> <span class="n">e</span><span class="p">:</span><span class="n">css</span><span class="p">(</span> <span class="s2">&quot;white-space&quot;</span><span class="p">,</span> <span class="s2">&quot;nowrap&quot;</span> <span class="p">)</span> </span><span id="L-1922"><a href="#L-1922"><span class="linenos" data-line="1922"></span></a> <span class="p">:</span><span class="n">wikitext</span><span class="p">(</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1923"><a href="#L-1923"><span class="linenos" data-line="1923"></span></a> <span class="kr">if</span> <span class="n">lapsus</span> <span class="kr">then</span> </span><span id="L-1924"><a href="#L-1924"><span class="linenos" data-line="1924"></span></a> <span class="n">e</span><span class="p">:</span><span class="n">addClass</span><span class="p">(</span> <span class="s2">&quot;invalid-ISSN&quot;</span> <span class="p">);</span> </span><span id="L-1925"><a href="#L-1925"><span class="linenos" data-line="1925"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">e</span> <span class="p">)</span> <span class="o">..</span> <span class="n">fault</span><span class="p">(</span> <span class="s2">&quot;(?!?!)&quot;</span> <span class="p">);</span> </span><span id="L-1926"><a href="#L-1926"><span class="linenos" data-line="1926"></span></a> <span class="kr">if</span> <span class="n">alert</span> <span class="kr">then</span> </span><span id="L-1927"><a href="#L-1927"><span class="linenos" data-line="1927"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span> <span class="o">..</span> <span class="n">flop</span><span class="p">(</span> <span class="n">alert</span> <span class="p">);</span> </span><span id="L-1928"><a href="#L-1928"><span class="linenos" data-line="1928"></span></a> <span class="kr">end</span> </span><span id="L-1929"><a href="#L-1929"><span class="linenos" data-line="1929"></span></a> <span class="kr">else</span> </span><span id="L-1930"><a href="#L-1930"><span class="linenos" data-line="1930"></span></a> <span class="n">r</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-1931"><a href="#L-1931"><span class="linenos" data-line="1931"></span></a> <span class="kr">end</span> </span><span id="L-1932"><a href="#L-1932"><span class="linenos" data-line="1932"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1933"><a href="#L-1933"><span class="linenos" data-line="1933"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.targetISSN()</span> </span><span id="L-1934"><a href="#L-1934"><span class="linenos" data-line="1934"></span></a> </span><span id="L-1935"><a href="#L-1935"><span class="linenos" data-line="1935"></span></a> </span><span id="L-1936"><a href="#L-1936"><span class="linenos" data-line="1936"></span></a> </span><span id="L-1937"><a href="#L-1937"><span class="linenos" data-line="1937"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">uriDOI</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">anything</span><span class="p">,</span> <span class="n">abbr</span> <span class="p">)</span> </span><span id="L-1938"><a href="#L-1938"><span class="linenos" data-line="1938"></span></a> <span class="c1">-- Retrieve linked URI on DOI resolver</span> </span><span id="L-1939"><a href="#L-1939"><span class="linenos" data-line="1939"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1940"><a href="#L-1940"><span class="linenos" data-line="1940"></span></a> <span class="c1">-- attempt -- string with presumable DOI</span> </span><span id="L-1941"><a href="#L-1941"><span class="linenos" data-line="1941"></span></a> <span class="c1">-- anything -- intentionally dummy parameter</span> </span><span id="L-1942"><a href="#L-1942"><span class="linenos" data-line="1942"></span></a> <span class="c1">-- abbr -- true or string: link doi: abbreviation</span> </span><span id="L-1943"><a href="#L-1943"><span class="linenos" data-line="1943"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">linkDOI</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1944"><a href="#L-1944"><span class="linenos" data-line="1944"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1945"><a href="#L-1945"><span class="linenos" data-line="1945"></span></a> <span class="kr">if</span> <span class="n">abbr</span> <span class="kr">then</span> </span><span id="L-1946"><a href="#L-1946"><span class="linenos" data-line="1946"></span></a> <span class="kd">local</span> <span class="n">s</span><span class="p">;</span> </span><span id="L-1947"><a href="#L-1947"><span class="linenos" data-line="1947"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">abbr</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1948"><a href="#L-1948"><span class="linenos" data-line="1948"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">abbr</span><span class="p">;</span> </span><span id="L-1949"><a href="#L-1949"><span class="linenos" data-line="1949"></span></a> <span class="kr">else</span> </span><span id="L-1950"><a href="#L-1950"><span class="linenos" data-line="1950"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;Digital Object Identifier&quot;</span><span class="p">;</span> </span><span id="L-1951"><a href="#L-1951"><span class="linenos" data-line="1951"></span></a> <span class="kr">end</span> </span><span id="L-1952"><a href="#L-1952"><span class="linenos" data-line="1952"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">~=</span> <span class="n">fullPageName</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-1953"><a href="#L-1953"><span class="linenos" data-line="1953"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[[%s|doi]]:%s&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1954"><a href="#L-1954"><span class="linenos" data-line="1954"></span></a> <span class="kr">else</span> </span><span id="L-1955"><a href="#L-1955"><span class="linenos" data-line="1955"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;doi:&quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1956"><a href="#L-1956"><span class="linenos" data-line="1956"></span></a> <span class="kr">end</span> </span><span id="L-1957"><a href="#L-1957"><span class="linenos" data-line="1957"></span></a> <span class="kr">else</span> </span><span id="L-1958"><a href="#L-1958"><span class="linenos" data-line="1958"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;doi:&quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1959"><a href="#L-1959"><span class="linenos" data-line="1959"></span></a> <span class="kr">end</span> </span><span id="L-1960"><a href="#L-1960"><span class="linenos" data-line="1960"></span></a> <span class="kr">end</span> </span><span id="L-1961"><a href="#L-1961"><span class="linenos" data-line="1961"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1962"><a href="#L-1962"><span class="linenos" data-line="1962"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.uriDOI()</span> </span><span id="L-1963"><a href="#L-1963"><span class="linenos" data-line="1963"></span></a> </span><span id="L-1964"><a href="#L-1964"><span class="linenos" data-line="1964"></span></a> </span><span id="L-1965"><a href="#L-1965"><span class="linenos" data-line="1965"></span></a> </span><span id="L-1966"><a href="#L-1966"><span class="linenos" data-line="1966"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">uriHandle</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">anything</span><span class="p">,</span> <span class="n">abbr</span> <span class="p">)</span> </span><span id="L-1967"><a href="#L-1967"><span class="linenos" data-line="1967"></span></a> <span class="c1">-- Retrieve linked URI on handle resolver</span> </span><span id="L-1968"><a href="#L-1968"><span class="linenos" data-line="1968"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-1969"><a href="#L-1969"><span class="linenos" data-line="1969"></span></a> <span class="c1">-- attempt -- string with presumable handle</span> </span><span id="L-1970"><a href="#L-1970"><span class="linenos" data-line="1970"></span></a> <span class="c1">-- anything -- intentionally dummy parameter</span> </span><span id="L-1971"><a href="#L-1971"><span class="linenos" data-line="1971"></span></a> <span class="c1">-- abbr -- true or string: link hdl: abbreviation</span> </span><span id="L-1972"><a href="#L-1972"><span class="linenos" data-line="1972"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-1973"><a href="#L-1973"><span class="linenos" data-line="1973"></span></a> <span class="c1">-- Returns combined linked URI, or false</span> </span><span id="L-1974"><a href="#L-1974"><span class="linenos" data-line="1974"></span></a> <span class="kd">local</span> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">.</span><span class="n">linkHandle</span><span class="p">(</span> <span class="n">attempt</span> <span class="p">);</span> </span><span id="L-1975"><a href="#L-1975"><span class="linenos" data-line="1975"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-1976"><a href="#L-1976"><span class="linenos" data-line="1976"></span></a> <span class="kd">local</span> <span class="n">s</span><span class="p">;</span> </span><span id="L-1977"><a href="#L-1977"><span class="linenos" data-line="1977"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span> <span class="n">abbr</span> <span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-1978"><a href="#L-1978"><span class="linenos" data-line="1978"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">abbr</span><span class="p">;</span> </span><span id="L-1979"><a href="#L-1979"><span class="linenos" data-line="1979"></span></a> <span class="kr">else</span> </span><span id="L-1980"><a href="#L-1980"><span class="linenos" data-line="1980"></span></a> <span class="kd">local</span> <span class="n">cnf</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;config&quot;</span> <span class="p">);</span> </span><span id="L-1981"><a href="#L-1981"><span class="linenos" data-line="1981"></span></a> <span class="kr">if</span> <span class="n">cnf</span> <span class="kr">then</span> </span><span id="L-1982"><a href="#L-1982"><span class="linenos" data-line="1982"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="n">cnf</span><span class="p">.</span><span class="n">supportHandle</span><span class="p">;</span> </span><span id="L-1983"><a href="#L-1983"><span class="linenos" data-line="1983"></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">&quot;string&quot;</span> <span class="ow">or</span> </span><span id="L-1984"><a href="#L-1984"><span class="linenos" data-line="1984"></span></a> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> <span class="ow">or</span> </span><span id="L-1985"><a href="#L-1985"><span class="linenos" data-line="1985"></span></a> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="ow">or</span> </span><span id="L-1986"><a href="#L-1986"><span class="linenos" data-line="1986"></span></a> <span class="n">s</span> <span class="o">==</span> <span class="n">fullPageName</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-1987"><a href="#L-1987"><span class="linenos" data-line="1987"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-1988"><a href="#L-1988"><span class="linenos" data-line="1988"></span></a> <span class="kr">end</span> </span><span id="L-1989"><a href="#L-1989"><span class="linenos" data-line="1989"></span></a> <span class="kr">end</span> </span><span id="L-1990"><a href="#L-1990"><span class="linenos" data-line="1990"></span></a> <span class="kr">end</span> </span><span id="L-1991"><a href="#L-1991"><span class="linenos" data-line="1991"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-1992"><a href="#L-1992"><span class="linenos" data-line="1992"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[[%s|hdl]]:%s&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-1993"><a href="#L-1993"><span class="linenos" data-line="1993"></span></a> <span class="kr">else</span> </span><span id="L-1994"><a href="#L-1994"><span class="linenos" data-line="1994"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;hdl:&quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1995"><a href="#L-1995"><span class="linenos" data-line="1995"></span></a> <span class="kr">end</span> </span><span id="L-1996"><a href="#L-1996"><span class="linenos" data-line="1996"></span></a> <span class="kr">end</span> </span><span id="L-1997"><a href="#L-1997"><span class="linenos" data-line="1997"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-1998"><a href="#L-1998"><span class="linenos" data-line="1998"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.uriHandle()</span> </span><span id="L-1999"><a href="#L-1999"><span class="linenos" data-line="1999"></span></a> </span><span id="L-2000"><a href="#L-2000"><span class="linenos" data-line="2000"></span></a> </span><span id="L-2001"><a href="#L-2001"><span class="linenos" data-line="2001"></span></a> </span><span id="L-2002"><a href="#L-2002"><span class="linenos" data-line="2002"></span></a><span class="kr">function</span> <span class="nc">URIutil</span><span class="p">.</span><span class="nf">uriURN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">anything</span><span class="p">,</span> <span class="n">alter</span><span class="p">,</span> <span class="n">alert</span><span class="p">,</span> <span class="n">at</span> <span class="p">)</span> </span><span id="L-2003"><a href="#L-2003"><span class="linenos" data-line="2003"></span></a> <span class="c1">-- Retrieve linked URI on URN resolver</span> </span><span id="L-2004"><a href="#L-2004"><span class="linenos" data-line="2004"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-2005"><a href="#L-2005"><span class="linenos" data-line="2005"></span></a> <span class="c1">-- attempt -- string with presumable URN, starting with &quot;urn:&quot;</span> </span><span id="L-2006"><a href="#L-2006"><span class="linenos" data-line="2006"></span></a> <span class="c1">-- anything -- intentionally dummy parameter</span> </span><span id="L-2007"><a href="#L-2007"><span class="linenos" data-line="2007"></span></a> <span class="c1">-- alter -- string with alternative handler, or nil</span> </span><span id="L-2008"><a href="#L-2008"><span class="linenos" data-line="2008"></span></a> <span class="c1">-- alert -- string with title of maintenance category, or nil</span> </span><span id="L-2009"><a href="#L-2009"><span class="linenos" data-line="2009"></span></a> <span class="c1">-- at -- fragment, or nil</span> </span><span id="L-2010"><a href="#L-2010"><span class="linenos" data-line="2010"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-2011"><a href="#L-2011"><span class="linenos" data-line="2011"></span></a> <span class="c1">-- Returns link, or plain string if bad URN</span> </span><span id="L-2012"><a href="#L-2012"><span class="linenos" data-line="2012"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">,</span> <span class="n">l</span> <span class="o">=</span> </span><span id="L-2013"><a href="#L-2013"><span class="linenos" data-line="2013"></span></a> <span class="n">URIutil</span><span class="p">.</span><span class="n">linkURN</span><span class="p">(</span> <span class="n">attempt</span><span class="p">,</span> <span class="n">alter</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="n">alert</span><span class="p">,</span> <span class="n">at</span><span class="p">,</span> <span class="kc">true</span> <span class="p">);</span> </span><span id="L-2014"><a href="#L-2014"><span class="linenos" data-line="2014"></span></a> <span class="kr">if</span> <span class="n">l</span> <span class="kr">then</span> </span><span id="L-2015"><a href="#L-2015"><span class="linenos" data-line="2015"></span></a> <span class="kd">local</span> <span class="n">s</span> <span class="o">=</span> <span class="n">fetch</span><span class="p">(</span> <span class="s2">&quot;config&quot;</span> <span class="p">).</span><span class="n">supportURN</span><span class="p">;</span> </span><span id="L-2016"><a href="#L-2016"><span class="linenos" data-line="2016"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="kr">then</span> </span><span id="L-2017"><a href="#L-2017"><span class="linenos" data-line="2017"></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">&quot;string&quot;</span> </span><span id="L-2018"><a href="#L-2018"><span class="linenos" data-line="2018"></span></a> <span class="ow">or</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;-&quot;</span> </span><span id="L-2019"><a href="#L-2019"><span class="linenos" data-line="2019"></span></a> <span class="ow">or</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-2020"><a href="#L-2020"><span class="linenos" data-line="2020"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-2021"><a href="#L-2021"><span class="linenos" data-line="2021"></span></a> <span class="kr">end</span> </span><span id="L-2022"><a href="#L-2022"><span class="linenos" data-line="2022"></span></a> <span class="kr">else</span> </span><span id="L-2023"><a href="#L-2023"><span class="linenos" data-line="2023"></span></a> <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;Uniform Resource Name&quot;</span><span class="p">;</span> </span><span id="L-2024"><a href="#L-2024"><span class="linenos" data-line="2024"></span></a> <span class="kr">end</span> </span><span id="L-2025"><a href="#L-2025"><span class="linenos" data-line="2025"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="ow">and</span> <span class="n">s</span> <span class="o">~=</span> <span class="n">fullPageName</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-2026"><a href="#L-2026"><span class="linenos" data-line="2026"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> <span class="s2">&quot;[[%s|urn]]:%s&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-2027"><a href="#L-2027"><span class="linenos" data-line="2027"></span></a> <span class="kr">else</span> </span><span id="L-2028"><a href="#L-2028"><span class="linenos" data-line="2028"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;urn:&quot;</span> <span class="o">..</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-2029"><a href="#L-2029"><span class="linenos" data-line="2029"></span></a> <span class="kr">end</span> </span><span id="L-2030"><a href="#L-2030"><span class="linenos" data-line="2030"></span></a> <span class="kr">end</span> </span><span id="L-2031"><a href="#L-2031"><span class="linenos" data-line="2031"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-2032"><a href="#L-2032"><span class="linenos" data-line="2032"></span></a><span class="kr">end</span> <span class="c1">-- URIutil.uriURN()</span> </span><span id="L-2033"><a href="#L-2033"><span class="linenos" data-line="2033"></span></a> </span><span id="L-2034"><a href="#L-2034"><span class="linenos" data-line="2034"></span></a> </span><span id="L-2035"><a href="#L-2035"><span class="linenos" data-line="2035"></span></a> </span><span id="L-2036"><a href="#L-2036"><span class="linenos" data-line="2036"></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-2037"><a href="#L-2037"><span class="linenos" data-line="2037"></span></a> <span class="c1">-- Retrieve versioning and check for compliance</span> </span><span id="L-2038"><a href="#L-2038"><span class="linenos" data-line="2038"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-2039"><a href="#L-2039"><span class="linenos" data-line="2039"></span></a> <span class="c1">-- atleast -- string, with required version</span> </span><span id="L-2040"><a href="#L-2040"><span class="linenos" data-line="2040"></span></a> <span class="c1">-- or wikidata|item|~|@ or false</span> </span><span id="L-2041"><a href="#L-2041"><span class="linenos" data-line="2041"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-2042"><a href="#L-2042"><span class="linenos" data-line="2042"></span></a> <span class="c1">-- Returns string -- with queried version/item, also if problem</span> </span><span id="L-2043"><a href="#L-2043"><span class="linenos" data-line="2043"></span></a> <span class="c1">-- false -- if appropriate</span> </span><span id="L-2044"><a href="#L-2044"><span class="linenos" data-line="2044"></span></a> <span class="c1">-- 2024-03-01</span> </span><span id="L-2045"><a href="#L-2045"><span class="linenos" data-line="2045"></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-2046"><a href="#L-2046"><span class="linenos" data-line="2046"></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">&quot;~&quot;</span> <span class="p">)</span> </span><span id="L-2047"><a href="#L-2047"><span class="linenos" data-line="2047"></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">&quot;@&quot;</span> <span class="p">)</span> </span><span id="L-2048"><a href="#L-2048"><span class="linenos" data-line="2048"></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">&quot;item&quot;</span> <span class="p">)</span> </span><span id="L-2049"><a href="#L-2049"><span class="linenos" data-line="2049"></span></a> <span class="kd">local</span> <span class="n">r</span> </span><span id="L-2050"><a href="#L-2050"><span class="linenos" data-line="2050"></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">&quot;wikidata&quot;</span> <span class="kr">then</span> </span><span id="L-2051"><a href="#L-2051"><span class="linenos" data-line="2051"></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-2052"><a href="#L-2052"><span class="linenos" data-line="2052"></span></a> <span class="n">since</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-2053"><a href="#L-2053"><span class="linenos" data-line="2053"></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">&quot;number&quot;</span> <span class="ow">and</span> <span class="n">item</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="kr">then</span> </span><span id="L-2054"><a href="#L-2054"><span class="linenos" data-line="2054"></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">&quot;Q%d&quot;</span><span class="p">,</span> <span class="n">item</span> <span class="p">)</span> </span><span id="L-2055"><a href="#L-2055"><span class="linenos" data-line="2055"></span></a> <span class="kr">if</span> <span class="n">link</span> <span class="kr">then</span> </span><span id="L-2056"><a href="#L-2056"><span class="linenos" data-line="2056"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">suited</span> </span><span id="L-2057"><a href="#L-2057"><span class="linenos" data-line="2057"></span></a> <span class="kr">else</span> </span><span id="L-2058"><a href="#L-2058"><span class="linenos" data-line="2058"></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-2059"><a href="#L-2059"><span class="linenos" data-line="2059"></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">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-2060"><a href="#L-2060"><span class="linenos" data-line="2060"></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">&quot;P348&quot;</span> </span><span id="L-2061"><a href="#L-2061"><span class="linenos" data-line="2061"></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-2062"><a href="#L-2062"><span class="linenos" data-line="2062"></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">&quot;table&quot;</span> <span class="ow">and</span> </span><span id="L-2063"><a href="#L-2063"><span class="linenos" data-line="2063"></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">&quot;string&quot;</span> <span class="ow">and</span> </span><span id="L-2064"><a href="#L-2064"><span class="linenos" data-line="2064"></span></a> <span class="n">vsn</span><span class="p">.</span><span class="n">value</span> <span class="o">~=</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-2065"><a href="#L-2065"><span class="linenos" data-line="2065"></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-2066"><a href="#L-2066"><span class="linenos" data-line="2066"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-2067"><a href="#L-2067"><span class="linenos" data-line="2067"></span></a> <span class="kr">elseif</span> <span class="n">linked</span> <span class="kr">then</span> </span><span id="L-2068"><a href="#L-2068"><span class="linenos" data-line="2068"></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-2069"><a href="#L-2069"><span class="linenos" data-line="2069"></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-2070"><a href="#L-2070"><span class="linenos" data-line="2070"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-2071"><a href="#L-2071"><span class="linenos" data-line="2071"></span></a> <span class="kr">else</span> </span><span id="L-2072"><a href="#L-2072"><span class="linenos" data-line="2072"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">suited</span> </span><span id="L-2073"><a href="#L-2073"><span class="linenos" data-line="2073"></span></a> <span class="kr">end</span> </span><span id="L-2074"><a href="#L-2074"><span class="linenos" data-line="2074"></span></a> <span class="kr">else</span> </span><span id="L-2075"><a href="#L-2075"><span class="linenos" data-line="2075"></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-2076"><a href="#L-2076"><span class="linenos" data-line="2076"></span></a> <span class="kr">end</span> </span><span id="L-2077"><a href="#L-2077"><span class="linenos" data-line="2077"></span></a> <span class="kr">end</span> </span><span id="L-2078"><a href="#L-2078"><span class="linenos" data-line="2078"></span></a> <span class="kr">end</span> </span><span id="L-2079"><a href="#L-2079"><span class="linenos" data-line="2079"></span></a> <span class="kr">end</span> </span><span id="L-2080"><a href="#L-2080"><span class="linenos" data-line="2080"></span></a> <span class="kr">elseif</span> <span class="n">link</span> <span class="kr">then</span> </span><span id="L-2081"><a href="#L-2081"><span class="linenos" data-line="2081"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-2082"><a href="#L-2082"><span class="linenos" data-line="2082"></span></a> <span class="kr">end</span> </span><span id="L-2083"><a href="#L-2083"><span class="linenos" data-line="2083"></span></a> <span class="kr">end</span> </span><span id="L-2084"><a href="#L-2084"><span class="linenos" data-line="2084"></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">&quot;nil&quot;</span> <span class="kr">then</span> </span><span id="L-2085"><a href="#L-2085"><span class="linenos" data-line="2085"></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">&lt;=</span> <span class="n">Failsafe</span><span class="p">.</span><span class="n">serial</span> <span class="kr">then</span> </span><span id="L-2086"><a href="#L-2086"><span class="linenos" data-line="2086"></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-2087"><a href="#L-2087"><span class="linenos" data-line="2087"></span></a> <span class="kr">else</span> </span><span id="L-2088"><a href="#L-2088"><span class="linenos" data-line="2088"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="kc">false</span> </span><span id="L-2089"><a href="#L-2089"><span class="linenos" data-line="2089"></span></a> <span class="kr">end</span> </span><span id="L-2090"><a href="#L-2090"><span class="linenos" data-line="2090"></span></a> <span class="kr">end</span> </span><span id="L-2091"><a href="#L-2091"><span class="linenos" data-line="2091"></span></a> <span class="kr">return</span> <span class="n">r</span> </span><span id="L-2092"><a href="#L-2092"><span class="linenos" data-line="2092"></span></a><span class="kr">end</span> <span class="c1">-- Failsafe.failsafe()</span> </span><span id="L-2093"><a href="#L-2093"><span class="linenos" data-line="2093"></span></a> </span><span id="L-2094"><a href="#L-2094"><span class="linenos" data-line="2094"></span></a> </span><span id="L-2095"><a href="#L-2095"><span class="linenos" data-line="2095"></span></a> </span><span id="L-2096"><a href="#L-2096"><span class="linenos" data-line="2096"></span></a><span class="kd">local</span> <span class="n">Template</span> <span class="o">=</span> <span class="kr">function</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-2097"><a href="#L-2097"><span class="linenos" data-line="2097"></span></a> <span class="c1">-- Retrieve library result for template access</span> </span><span id="L-2098"><a href="#L-2098"><span class="linenos" data-line="2098"></span></a> <span class="c1">-- Precondition:</span> </span><span id="L-2099"><a href="#L-2099"><span class="linenos" data-line="2099"></span></a> <span class="c1">-- frame -- object</span> </span><span id="L-2100"><a href="#L-2100"><span class="linenos" data-line="2100"></span></a> <span class="c1">-- action -- string; function name</span> </span><span id="L-2101"><a href="#L-2101"><span class="linenos" data-line="2101"></span></a> <span class="c1">-- Postcondition:</span> </span><span id="L-2102"><a href="#L-2102"><span class="linenos" data-line="2102"></span></a> <span class="c1">-- Returns appropriate string, or error message (development)</span> </span><span id="L-2103"><a href="#L-2103"><span class="linenos" data-line="2103"></span></a> <span class="kd">local</span> <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">URIutil</span><span class="p">[</span> <span class="n">action</span> <span class="p">],</span> </span><span id="L-2104"><a href="#L-2104"><span class="linenos" data-line="2104"></span></a> <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">&quot;&quot;</span><span class="p">,</span> </span><span id="L-2105"><a href="#L-2105"><span class="linenos" data-line="2105"></span></a> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">[</span> <span class="mi">2</span> <span class="p">],</span> </span><span id="L-2106"><a href="#L-2106"><span class="linenos" data-line="2106"></span></a> <span class="n">faculty</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">link</span><span class="p">,</span> <span class="kc">true</span> <span class="p">),</span> </span><span id="L-2107"><a href="#L-2107"><span class="linenos" data-line="2107"></span></a> <span class="n">faculty</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">nbsp</span><span class="p">,</span> <span class="kc">true</span> <span class="p">),</span> </span><span id="L-2108"><a href="#L-2108"><span class="linenos" data-line="2108"></span></a> <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-2109"><a href="#L-2109"><span class="linenos" data-line="2109"></span></a> <span class="n">frame</span><span class="p">.</span><span class="n">args</span><span class="p">.</span><span class="n">fragment</span> <span class="p">);</span> </span><span id="L-2110"><a href="#L-2110"><span class="linenos" data-line="2110"></span></a> <span class="kr">if</span> <span class="n">lucky</span> <span class="kr">then</span> </span><span id="L-2111"><a href="#L-2111"><span class="linenos" data-line="2111"></span></a> <span class="kr">if</span> <span class="n">r</span> <span class="kr">then</span> </span><span id="L-2112"><a href="#L-2112"><span class="linenos" data-line="2112"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> <span class="n">r</span> <span class="p">);</span> </span><span id="L-2113"><a href="#L-2113"><span class="linenos" data-line="2113"></span></a> <span class="kr">else</span> </span><span id="L-2114"><a href="#L-2114"><span class="linenos" data-line="2114"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-2115"><a href="#L-2115"><span class="linenos" data-line="2115"></span></a> <span class="kr">end</span> </span><span id="L-2116"><a href="#L-2116"><span class="linenos" data-line="2116"></span></a> <span class="kr">else</span> </span><span id="L-2117"><a href="#L-2117"><span class="linenos" data-line="2117"></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><span id="L-2118"><a href="#L-2118"><span class="linenos" data-line="2118"></span></a> <span class="kr">end</span> </span><span id="L-2119"><a href="#L-2119"><span class="linenos" data-line="2119"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-2120"><a href="#L-2120"><span class="linenos" data-line="2120"></span></a><span class="kr">end</span> <span class="c1">-- Template()</span> </span><span id="L-2121"><a href="#L-2121"><span class="linenos" data-line="2121"></span></a> </span><span id="L-2122"><a href="#L-2122"><span class="linenos" data-line="2122"></span></a> </span><span id="L-2123"><a href="#L-2123"><span class="linenos" data-line="2123"></span></a> </span><span id="L-2124"><a href="#L-2124"><span class="linenos" data-line="2124"></span></a><span class="c1">-- Provide template access and expose URIutil table to require()</span> </span><span id="L-2125"><a href="#L-2125"><span class="linenos" data-line="2125"></span></a> </span><span id="L-2126"><a href="#L-2126"><span class="linenos" data-line="2126"></span></a><span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{};</span> </span><span id="L-2127"><a href="#L-2127"><span class="linenos" data-line="2127"></span></a> </span><span id="L-2128"><a href="#L-2128"><span class="linenos" data-line="2128"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">coreISSN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2129"><a href="#L-2129"><span class="linenos" data-line="2129"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;coreISSN&quot;</span> <span class="p">);</span> </span><span id="L-2130"><a href="#L-2130"><span class="linenos" data-line="2130"></span></a><span class="kr">end</span> </span><span id="L-2131"><a href="#L-2131"><span class="linenos" data-line="2131"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">formatISBN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2132"><a href="#L-2132"><span class="linenos" data-line="2132"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;formatISBN&quot;</span> <span class="p">);</span> </span><span id="L-2133"><a href="#L-2133"><span class="linenos" data-line="2133"></span></a><span class="kr">end</span> </span><span id="L-2134"><a href="#L-2134"><span class="linenos" data-line="2134"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">formatISSN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2135"><a href="#L-2135"><span class="linenos" data-line="2135"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;formatISSN&quot;</span> <span class="p">);</span> </span><span id="L-2136"><a href="#L-2136"><span class="linenos" data-line="2136"></span></a><span class="kr">end</span> </span><span id="L-2137"><a href="#L-2137"><span class="linenos" data-line="2137"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">formatLCCN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2138"><a href="#L-2138"><span class="linenos" data-line="2138"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;formatLCCN&quot;</span> <span class="p">);</span> </span><span id="L-2139"><a href="#L-2139"><span class="linenos" data-line="2139"></span></a><span class="kr">end</span> </span><span id="L-2140"><a href="#L-2140"><span class="linenos" data-line="2140"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isDNBvalid</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2141"><a href="#L-2141"><span class="linenos" data-line="2141"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;isDNBvalid&quot;</span> <span class="p">);</span> </span><span id="L-2142"><a href="#L-2142"><span class="linenos" data-line="2142"></span></a><span class="kr">end</span> </span><span id="L-2143"><a href="#L-2143"><span class="linenos" data-line="2143"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isDOI</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2144"><a href="#L-2144"><span class="linenos" data-line="2144"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;isDOI&quot;</span> <span class="p">);</span> </span><span id="L-2145"><a href="#L-2145"><span class="linenos" data-line="2145"></span></a><span class="kr">end</span> </span><span id="L-2146"><a href="#L-2146"><span class="linenos" data-line="2146"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isEscValid</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2147"><a href="#L-2147"><span class="linenos" data-line="2147"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;isEscValid&quot;</span> <span class="p">);</span> </span><span id="L-2148"><a href="#L-2148"><span class="linenos" data-line="2148"></span></a><span class="kr">end</span> </span><span id="L-2149"><a href="#L-2149"><span class="linenos" data-line="2149"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isGTINvalid</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2150"><a href="#L-2150"><span class="linenos" data-line="2150"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;isGTINvalid&quot;</span> <span class="p">);</span> </span><span id="L-2151"><a href="#L-2151"><span class="linenos" data-line="2151"></span></a><span class="kr">end</span> </span><span id="L-2152"><a href="#L-2152"><span class="linenos" data-line="2152"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isHandle</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2153"><a href="#L-2153"><span class="linenos" data-line="2153"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;isHandle&quot;</span> <span class="p">);</span> </span><span id="L-2154"><a href="#L-2154"><span class="linenos" data-line="2154"></span></a><span class="kr">end</span> </span><span id="L-2155"><a href="#L-2155"><span class="linenos" data-line="2155"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isISBN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2156"><a href="#L-2156"><span class="linenos" data-line="2156"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;isISBN&quot;</span> <span class="p">);</span> </span><span id="L-2157"><a href="#L-2157"><span class="linenos" data-line="2157"></span></a><span class="kr">end</span> </span><span id="L-2158"><a href="#L-2158"><span class="linenos" data-line="2158"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isISBNvalid</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2159"><a href="#L-2159"><span class="linenos" data-line="2159"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;isISBNvalid&quot;</span> <span class="p">);</span> </span><span id="L-2160"><a href="#L-2160"><span class="linenos" data-line="2160"></span></a><span class="kr">end</span> </span><span id="L-2161"><a href="#L-2161"><span class="linenos" data-line="2161"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isISSNvalid</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2162"><a href="#L-2162"><span class="linenos" data-line="2162"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;isISSNvalid&quot;</span> <span class="p">);</span> </span><span id="L-2163"><a href="#L-2163"><span class="linenos" data-line="2163"></span></a><span class="kr">end</span> </span><span id="L-2164"><a href="#L-2164"><span class="linenos" data-line="2164"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">isLCCN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2165"><a href="#L-2165"><span class="linenos" data-line="2165"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;isLCCN&quot;</span> <span class="p">);</span> </span><span id="L-2166"><a href="#L-2166"><span class="linenos" data-line="2166"></span></a><span class="kr">end</span> </span><span id="L-2167"><a href="#L-2167"><span class="linenos" data-line="2167"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">linkDNBopac</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2168"><a href="#L-2168"><span class="linenos" data-line="2168"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;linkDNBopac&quot;</span> <span class="p">);</span> </span><span id="L-2169"><a href="#L-2169"><span class="linenos" data-line="2169"></span></a><span class="kr">end</span> </span><span id="L-2170"><a href="#L-2170"><span class="linenos" data-line="2170"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">linkDOI</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2171"><a href="#L-2171"><span class="linenos" data-line="2171"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;linkDOI&quot;</span> <span class="p">);</span> </span><span id="L-2172"><a href="#L-2172"><span class="linenos" data-line="2172"></span></a><span class="kr">end</span> </span><span id="L-2173"><a href="#L-2173"><span class="linenos" data-line="2173"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">linkHandle</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2174"><a href="#L-2174"><span class="linenos" data-line="2174"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;linkHandle&quot;</span> <span class="p">);</span> </span><span id="L-2175"><a href="#L-2175"><span class="linenos" data-line="2175"></span></a><span class="kr">end</span> </span><span id="L-2176"><a href="#L-2176"><span class="linenos" data-line="2176"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">linkISBN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2177"><a href="#L-2177"><span class="linenos" data-line="2177"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;linkISBN&quot;</span> <span class="p">);</span> </span><span id="L-2178"><a href="#L-2178"><span class="linenos" data-line="2178"></span></a><span class="kr">end</span> </span><span id="L-2179"><a href="#L-2179"><span class="linenos" data-line="2179"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">linkISSN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2180"><a href="#L-2180"><span class="linenos" data-line="2180"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;linkISSN&quot;</span> <span class="p">);</span> </span><span id="L-2181"><a href="#L-2181"><span class="linenos" data-line="2181"></span></a><span class="kr">end</span> </span><span id="L-2182"><a href="#L-2182"><span class="linenos" data-line="2182"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">linkLCCN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2183"><a href="#L-2183"><span class="linenos" data-line="2183"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;linkLCCN&quot;</span> <span class="p">);</span> </span><span id="L-2184"><a href="#L-2184"><span class="linenos" data-line="2184"></span></a><span class="kr">end</span> </span><span id="L-2185"><a href="#L-2185"><span class="linenos" data-line="2185"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">linkPMID</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2186"><a href="#L-2186"><span class="linenos" data-line="2186"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;linkPMID&quot;</span> <span class="p">);</span> </span><span id="L-2187"><a href="#L-2187"><span class="linenos" data-line="2187"></span></a><span class="kr">end</span> </span><span id="L-2188"><a href="#L-2188"><span class="linenos" data-line="2188"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">linkURN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2189"><a href="#L-2189"><span class="linenos" data-line="2189"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;linkURN&quot;</span> <span class="p">);</span> </span><span id="L-2190"><a href="#L-2190"><span class="linenos" data-line="2190"></span></a><span class="kr">end</span> </span><span id="L-2191"><a href="#L-2191"><span class="linenos" data-line="2191"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">mayDOI</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2192"><a href="#L-2192"><span class="linenos" data-line="2192"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;mayDOI&quot;</span> <span class="p">);</span> </span><span id="L-2193"><a href="#L-2193"><span class="linenos" data-line="2193"></span></a><span class="kr">end</span> </span><span id="L-2194"><a href="#L-2194"><span class="linenos" data-line="2194"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">mayHandle</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2195"><a href="#L-2195"><span class="linenos" data-line="2195"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;mayHandle&quot;</span> <span class="p">);</span> </span><span id="L-2196"><a href="#L-2196"><span class="linenos" data-line="2196"></span></a><span class="kr">end</span> </span><span id="L-2197"><a href="#L-2197"><span class="linenos" data-line="2197"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">mayISBN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2198"><a href="#L-2198"><span class="linenos" data-line="2198"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;mayISBN&quot;</span> <span class="p">);</span> </span><span id="L-2199"><a href="#L-2199"><span class="linenos" data-line="2199"></span></a><span class="kr">end</span> </span><span id="L-2200"><a href="#L-2200"><span class="linenos" data-line="2200"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">mayISSN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2201"><a href="#L-2201"><span class="linenos" data-line="2201"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;mayISSN&quot;</span> <span class="p">);</span> </span><span id="L-2202"><a href="#L-2202"><span class="linenos" data-line="2202"></span></a><span class="kr">end</span> </span><span id="L-2203"><a href="#L-2203"><span class="linenos" data-line="2203"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">mayLCCN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2204"><a href="#L-2204"><span class="linenos" data-line="2204"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;mayLCCN&quot;</span> <span class="p">);</span> </span><span id="L-2205"><a href="#L-2205"><span class="linenos" data-line="2205"></span></a><span class="kr">end</span> </span><span id="L-2206"><a href="#L-2206"><span class="linenos" data-line="2206"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">mayURI</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2207"><a href="#L-2207"><span class="linenos" data-line="2207"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;mayURI&quot;</span> <span class="p">);</span> </span><span id="L-2208"><a href="#L-2208"><span class="linenos" data-line="2208"></span></a><span class="kr">end</span> </span><span id="L-2209"><a href="#L-2209"><span class="linenos" data-line="2209"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">mayURN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2210"><a href="#L-2210"><span class="linenos" data-line="2210"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;mayURN&quot;</span> <span class="p">);</span> </span><span id="L-2211"><a href="#L-2211"><span class="linenos" data-line="2211"></span></a><span class="kr">end</span> </span><span id="L-2212"><a href="#L-2212"><span class="linenos" data-line="2212"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">plainISBN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2213"><a href="#L-2213"><span class="linenos" data-line="2213"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;plainISBN&quot;</span> <span class="p">);</span> </span><span id="L-2214"><a href="#L-2214"><span class="linenos" data-line="2214"></span></a><span class="kr">end</span> </span><span id="L-2215"><a href="#L-2215"><span class="linenos" data-line="2215"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">targetISSN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2216"><a href="#L-2216"><span class="linenos" data-line="2216"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;targetISSN&quot;</span> <span class="p">);</span> </span><span id="L-2217"><a href="#L-2217"><span class="linenos" data-line="2217"></span></a><span class="kr">end</span> </span><span id="L-2218"><a href="#L-2218"><span class="linenos" data-line="2218"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">uriDOI</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2219"><a href="#L-2219"><span class="linenos" data-line="2219"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;uriDOI&quot;</span> <span class="p">);</span> </span><span id="L-2220"><a href="#L-2220"><span class="linenos" data-line="2220"></span></a><span class="kr">end</span> </span><span id="L-2221"><a href="#L-2221"><span class="linenos" data-line="2221"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">uriHandle</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2222"><a href="#L-2222"><span class="linenos" data-line="2222"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;uriHandle&quot;</span> <span class="p">);</span> </span><span id="L-2223"><a href="#L-2223"><span class="linenos" data-line="2223"></span></a><span class="kr">end</span> </span><span id="L-2224"><a href="#L-2224"><span class="linenos" data-line="2224"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">uriURN</span><span class="p">(</span> <span class="n">frame</span> <span class="p">)</span> </span><span id="L-2225"><a href="#L-2225"><span class="linenos" data-line="2225"></span></a> <span class="kr">return</span> <span class="n">Template</span><span class="p">(</span> <span class="n">frame</span><span class="p">,</span> <span class="s2">&quot;uriURN&quot;</span> <span class="p">);</span> </span><span id="L-2226"><a href="#L-2226"><span class="linenos" data-line="2226"></span></a><span class="kr">end</span> </span><span id="L-2227"><a href="#L-2227"><span class="linenos" data-line="2227"></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-2228"><a href="#L-2228"><span class="linenos" data-line="2228"></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-2229"><a href="#L-2229"><span class="linenos" data-line="2229"></span></a> <span class="kd">local</span> <span class="n">since</span><span class="p">;</span> </span><span id="L-2230"><a href="#L-2230"><span class="linenos" data-line="2230"></span></a> <span class="kr">if</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;table&quot;</span> <span class="kr">then</span> </span><span id="L-2231"><a href="#L-2231"><span class="linenos" data-line="2231"></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-2232"><a href="#L-2232"><span class="linenos" data-line="2232"></span></a> <span class="kr">elseif</span> <span class="n">s</span> <span class="o">==</span> <span class="s2">&quot;string&quot;</span> <span class="kr">then</span> </span><span id="L-2233"><a href="#L-2233"><span class="linenos" data-line="2233"></span></a> <span class="n">since</span> <span class="o">=</span> <span class="n">frame</span><span class="p">;</span> </span><span id="L-2234"><a href="#L-2234"><span class="linenos" data-line="2234"></span></a> <span class="kr">end</span> </span><span id="L-2235"><a href="#L-2235"><span class="linenos" data-line="2235"></span></a> <span class="kr">if</span> <span class="n">since</span> <span class="kr">then</span> </span><span id="L-2236"><a href="#L-2236"><span class="linenos" data-line="2236"></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-2237"><a href="#L-2237"><span class="linenos" data-line="2237"></span></a> <span class="kr">if</span> <span class="n">since</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span> <span class="kr">then</span> </span><span id="L-2238"><a href="#L-2238"><span class="linenos" data-line="2238"></span></a> <span class="n">since</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </span><span id="L-2239"><a href="#L-2239"><span class="linenos" data-line="2239"></span></a> <span class="kr">end</span> </span><span id="L-2240"><a href="#L-2240"><span class="linenos" data-line="2240"></span></a> <span class="kr">end</span> </span><span id="L-2241"><a href="#L-2241"><span class="linenos" data-line="2241"></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">&quot;&quot;</span><span class="p">;</span> </span><span id="L-2242"><a href="#L-2242"><span class="linenos" data-line="2242"></span></a><span class="kr">end</span> <span class="c1">-- p.failsafe()</span> </span><span id="L-2243"><a href="#L-2243"><span class="linenos" data-line="2243"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">URIutil</span><span class="p">(</span> <span class="n">arg</span> <span class="p">)</span> </span><span id="L-2244"><a href="#L-2244"><span class="linenos" data-line="2244"></span></a> <span class="kd">local</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-2245"><a href="#L-2245"><span class="linenos" data-line="2245"></span></a> <span class="kr">if</span> <span class="n">arg</span> <span class="kr">then</span> </span><span id="L-2246"><a href="#L-2246"><span class="linenos" data-line="2246"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-2247"><a href="#L-2247"><span class="linenos" data-line="2247"></span></a> <span class="kr">else</span> </span><span id="L-2248"><a href="#L-2248"><span class="linenos" data-line="2248"></span></a> <span class="n">r</span> <span class="o">=</span> <span class="n">URIutil</span><span class="p">;</span> </span><span id="L-2249"><a href="#L-2249"><span class="linenos" data-line="2249"></span></a> <span class="kr">end</span> </span><span id="L-2250"><a href="#L-2250"><span class="linenos" data-line="2250"></span></a> <span class="kr">return</span> <span class="n">r</span><span class="p">;</span> </span><span id="L-2251"><a href="#L-2251"><span class="linenos" data-line="2251"></span></a><span class="kr">end</span> </span><span id="L-2252"><a href="#L-2252"><span class="linenos" data-line="2252"></span></a> </span><span id="L-2253"><a href="#L-2253"><span class="linenos" data-line="2253"></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-2254"><a href="#L-2254"><span class="linenos" data-line="2254"></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-2255"><a href="#L-2255"><span class="linenos" data-line="2255"></span></a> <span class="kr">return</span> <span class="n">Failsafe</span> </span><span id="L-2256"><a href="#L-2256"><span class="linenos" data-line="2256"></span></a> <span class="kr">end</span> <span class="p">}</span> <span class="p">)</span> </span><span id="L-2257"><a href="#L-2257"><span class="linenos" data-line="2257"></span></a> </span><span id="L-2258"><a href="#L-2258"><span class="linenos" data-line="2258"></span></a><span class="kr">return</span> <span class="n">p</span><span class="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&amp;type=1x1&amp;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:URIutil&amp;oldid=247451609">https://de.wikipedia.org/w/index.php?title=Modul:URIutil&amp;oldid=247451609</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&amp;returnto=Modul%3AURIutil" 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&amp;returnto=Modul%3AURIutil" 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:URIutil" 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:URIutil" 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:URIutil"><span>Lesen</span></a></li><li id="ca-viewsource" class="mw-list-item"><a href="/w/index.php?title=Modul:URIutil&amp;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:URIutil&amp;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&amp;wmf_medium=sidebar&amp;wmf_campaign=de.wikipedia.org&amp;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:URIutil" 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:URIutil" 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:URIutil&amp;oldid=247451609" 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:URIutil&amp;action=info" title="Weitere Informationen über diese Seite"><span>Seiten­­informationen</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Spezial:URL-K%C3%BCrzung&amp;url=https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FModul%3AURIutil"><span>Kurzlink</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Spezial:QrCode&amp;url=https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FModul%3AURIutil"><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&amp;page=Modul%3AURIutil&amp;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-wiktionary mw-list-item"><a href="https://de.wiktionary.org/wiki/Modul:URIutil" hreflang="de"><span>Wiktionary</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/Q19644443" 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:URIutil" title="Modul:URIutil – Schweizerdeutsch" lang="gsw" hreflang="gsw" data-title="Modul:URIutil" data-language-autonym="Alemannisch" data-language-local-name="Schweizerdeutsch" class="interlanguage-link-target"><span>Alemannisch</span></a></li><li class="interlanguage-link interwiki-bar mw-list-item"><a href="https://bar.wikipedia.org/wiki/Modul:URIutil" title="Modul:URIutil – Bairisch" lang="bar" hreflang="bar" data-title="Modul:URIutil" data-language-autonym="Boarisch" data-language-local-name="Bairisch" class="interlanguage-link-target"><span>Boarisch</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/Modulo:URIutil" title="Modulo:URIutil – Esperanto" lang="eo" hreflang="eo" data-title="Modulo:URIutil" data-language-autonym="Esperanto" data-language-local-name="Esperanto" class="interlanguage-link-target"><span>Esperanto</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:URIutil" title="پودمان:URIutil – Persisch" lang="fa" hreflang="fa" data-title="پودمان:URIutil" data-language-autonym="فارسی" data-language-local-name="Persisch" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-frr mw-list-item"><a href="https://frr.wikipedia.org/wiki/Modul:URIutil" title="Modul:URIutil – Nordfriesisch" lang="frr" hreflang="frr" data-title="Modul:URIutil" data-language-autonym="Nordfriisk" data-language-local-name="Nordfriesisch" class="interlanguage-link-target"><span>Nordfriisk</span></a></li><li class="interlanguage-link interwiki-gd mw-list-item"><a href="https://gd.wikipedia.org/wiki/M%C3%B2ideal:URIutil" title="Mòideal:URIutil – Gälisch (Schottland)" lang="gd" hreflang="gd" data-title="Mòideal:URIutil" data-language-autonym="Gàidhlig" data-language-local-name="Gälisch (Schottland)" class="interlanguage-link-target"><span>Gàidhlig</span></a></li><li class="interlanguage-link interwiki-gl mw-list-item"><a href="https://gl.wikipedia.org/wiki/M%C3%B3dulo:URIutil" title="Módulo:URIutil – Galicisch" lang="gl" hreflang="gl" data-title="Módulo:URIutil" data-language-autonym="Galego" data-language-local-name="Galicisch" class="interlanguage-link-target"><span>Galego</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:URIutil" title="モジュール:URIutil – Japanisch" lang="ja" hreflang="ja" data-title="モジュール:URIutil" data-language-autonym="日本語" data-language-local-name="Japanisch" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-lld mw-list-item"><a href="https://lld.wikipedia.org/wiki/Modulo:URIutil" title="Modulo:URIutil – Ladinisch" lang="lld" hreflang="lld" data-title="Modulo:URIutil" data-language-autonym="Ladin" data-language-local-name="Ladinisch" class="interlanguage-link-target"><span>Ladin</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/Module:URIutil" title="Module:URIutil – Mongolisch" lang="mn" hreflang="mn" data-title="Module:URIutil" data-language-autonym="Монгол" data-language-local-name="Mongolisch" 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:URIutil" title="Modul:URIutil – Niederdeutsch" lang="nds" hreflang="nds" data-title="Modul:URIutil" 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-stq mw-list-item"><a href="https://stq.wikipedia.org/wiki/Modul:URIutil" title="Modul:URIutil – Saterfriesisch" lang="stq" hreflang="stq" data-title="Modul:URIutil" data-language-autonym="Seeltersk" data-language-local-name="Saterfriesisch" class="interlanguage-link-target"><span>Seeltersk</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:URIutil" title="Модул:URIutil – Tadschikisch" lang="tg" hreflang="tg" data-title="Модул:URIutil" data-language-autonym="Тоҷикӣ" data-language-local-name="Tadschikisch" 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/Q19644443#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 6. August 2024 um 16:27 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:URIutil&amp;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:URIutil&amp;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-76d4c66f66-bw6nr","wgBackendResponseTime":814,"wgPageParseReport":{"limitreport":{"cputime":"0.034","walltime":"0.075","ppvisitednodes":{"value":238,"limit":1000000},"postexpandincludesize":{"value":9562,"limit":2097152},"templateargumentsize":{"value":160,"limit":2097152},"expansiondepth":{"value":9,"limit":100},"expensivefunctioncount":{"value":9,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":0,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 66.206 1 -total","100.00% 66.206 1 Modul:URIutil/Doku"," 96.55% 63.921 1 Vorlage:LuaModuleDoc"]},"scribunto":{"limitreport-timeusage":{"value":"0.019","limit":"10.000"},"limitreport-memusage":{"value":825886,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-76d4c66f66-bw6nr","timestamp":"20250302161348","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10