CINXE.COM
Vidi fonton por Modulo:Expr - Vikipedio
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available" lang="eo" dir="ltr"> <head> <meta charset="UTF-8"> <title>Vidi fonton por Modulo:Expr - Vikipedio</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available";var cookie=document.cookie.match(/(?:^|; )eowikimwclientpreferences=([^;]+)/);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":true,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat": "dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"4de2b53e-97ce-4c86-9c7a-56ac466a53c3","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Modulo:Expr","wgTitle":"Expr","wgCurRevisionId":8669874,"wgRevisionId":0,"wgArticleId":859984,"wgIsArticle":false,"wgIsRedirect":false,"wgAction":"edit","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Modulo:Expr","wgRelevantArticleId":859984,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":1}}},"wgStableRevisionId":8669874,"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":30000,"wgCodeEditorCurrentLanguage":"lua","wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.niceInfoboxes":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready", "ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.codeEditor.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.charinsert.styles":"ready","ext.flaggedRevs.basic":"ready","mediawiki.codex.messagebox.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.codeEditor","ext.scribunto.edit","mediawiki.action.edit.collapsibleFooter","site","mediawiki.page.ready","skins.vector.js","ext.centralNotice.geoIP","ext.charinsert","ext.flaggedRevs.advanced","ext.gadget.Rekta-ligilo-al-Komunejo","ext.gadget.DocTabs","ext.urlShortener.toolbar","ext.centralauth.centralautologin","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming", "ext.uls.interface","ext.cx.eventlogging.campaigns","ext.checkUser.clientHints","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=eo&modules=ext.charinsert.styles%7Cext.codeEditor.styles%7Cext.flaggedRevs.basic%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cmediawiki.codex.messagebox.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=eo&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=eo&modules=ext.gadget.niceInfoboxes&only=styles&skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=eo&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="noindex,nofollow,max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Vidi fonton por Modulo:Expr - Vikipedio"> <meta property="og:type" content="website"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//eo.m.wikipedia.org/wiki/Modulo:Expr"> <link rel="alternate" type="application/x-wiki" title="Redakti" href="/w/index.php?title=Modulo:Expr&action=edit"> <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="Vikipedio (eo)"> <link rel="EditURI" type="application/rsd+xml" href="//eo.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://eo.wikipedia.org/wiki/Modulo:Expr"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.eo"> <link rel="alternate" type="application/atom+xml" title="Vikipedio Atom-fonto" href="/w/index.php?title=Speciala%C4%B5o:Lastaj_%C5%9Dan%C4%9Doj&feed=atom"> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="codeeditor-loading skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject mw-editable page-Modulo_Expr rootpage-Modulo_Expr skin-vector-2022 action-edit"><a class="mw-jump-link" href="#bodyContent">Saltu al enhavo</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Retejo"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Ĉefa menuo" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Ĉefa menuo</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Ĉefa menuo</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">movigi al flanka panelo</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">kaŝi</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigado </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-desciption" class="mw-list-item"><a href="/wiki/Vikipedio:%C4%88efpa%C4%9Do"><span>Ĉefpaĝo</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Portalo:Komunumo" title="Pri la projekto, kion vi povas fari, kie vi povas trovi ion"><span>Komunuma portalo</span></a></li><li id="n-villagepump" class="mw-list-item"><a href="/wiki/Vikipedio:Diskutejo"><span>Diskutejo</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Vikipedio:Aktuala%C4%B5oj" title="Trovi fonajn informojn pri nunaj eventoj"><span>Aktualaĵoj</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Speciala%C4%B5o:Lastaj_%C5%9Dan%C4%9Doj" title="Listo de la lastaj ŝanĝoj en la vikio. [r]" accesskey="r"><span>Lastaj ŝanĝoj</span></a></li><li id="n-newpages" class="mw-list-item"><a href="/wiki/Speciala%C4%B5o:Novaj_pa%C4%9Doj"><span>Novaj paĝoj</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Speciala%C4%B5o:Hazarda_pa%C4%9Do" title="Iri al hazarda paĝo [x]" accesskey="x"><span>Hazarda paĝo</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Helpo:Enhavo" title="La loko por eltrovi"><span>Helpo</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Vikipedio:%C4%88efpa%C4%9Do" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Vikipedio" src="/static/images/mobile/copyright/wikipedia-wordmark-eo.svg" style="width: 6.875em; height: 1.125em;"> <img class="mw-logo-tagline" alt="" src="/static/images/mobile/copyright/wikipedia-tagline-eo.svg" width="109" height="13" style="width: 6.8125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Speciala%C4%B5o:Ser%C4%89i" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Serĉi tra Vikipedio [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Serĉi</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Serĉi tra Vikipedio" aria-label="Serĉi tra Vikipedio" autocapitalize="sentences" title="Serĉi tra Vikipedio [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Specialaĵo:Serĉi"> </div> <button class="cdx-button cdx-search-input__end-button">Serĉi</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personaj iloj"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Aspekto"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Aspekto" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Aspekto</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_eo.wikipedia.org&uselang=eo" class=""><span>Donaci</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Speciala%C4%B5o:Krei_konton&returnto=Modulo%3AExpr&returntoquery=action%3Dedit" title="Ni rekomendas ke vi kreu uzantokonton kaj ensalutu, kvankam tio ne estas deviga" class=""><span>Krei konton</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Speciala%C4%B5o:Ensaluti&returnto=Modulo%3AExpr&returntoquery=action%3Dedit" title="Ni rekomendas ke vi ensalutu, kvankam tio ne estas devige. [o]" accesskey="o" class=""><span>Ensaluti</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Pliaj agordoj" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personaj iloj" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personaj iloj</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Menuo de uzanto" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_eo.wikipedia.org&uselang=eo"><span>Donaci</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speciala%C4%B5o:Krei_konton&returnto=Modulo%3AExpr&returntoquery=action%3Dedit" title="Ni rekomendas ke vi kreu uzantokonton kaj ensalutu, kvankam tio ne estas deviga"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Krei konton</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Speciala%C4%B5o:Ensaluti&returnto=Modulo%3AExpr&returntoquery=action%3Dedit" title="Ni rekomendas ke vi ensalutu, kvankam tio ne estas devige. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Ensaluti</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Paĝoj por elsalutitaj redaktistoj <a href="/wiki/Helpo:Enkonduko" aria-label="Lernu pli pri redaktado"><span>Lernu pli</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Speciala%C4%B5o:Miaj_kontribuoj" title="Listo de redaktoj faritaj el ĉi tiu IPa adreso [y]" accesskey="y"><span>Kontribuoj</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Speciala%C4%B5o:Mia_diskutpa%C4%9Do" title="Diskuto pri redaktoj sub tiu ĉi IP adreso [n]" accesskey="n"><span>Diskuto</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Retejo"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <h1 id="firstHeading" class="firstHeading mw-first-heading">Vidi fonton por Modulo:Expr</h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Ĉi tiu artikolo ekzistas nur en ĉi tiu lingvo. Aldonu la artikolon por aliaj lingvoj" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-0" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">Aldoni lingvojn</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> <div class="after-portlet after-portlet-lang"><span class="uls-after-portlet-link"></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Nomspacoj"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-module" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Modulo:Expr" title="Rigardi la modul-paĝon [c]" accesskey="c"><span>Modulo</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Modulo-Diskuto:Expr" rel="discussion" class="mw-redirect" title="Diskuto pri la artikolo [t]" accesskey="t"><span>Diskuto</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Ŝanĝi lingvan varianton" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Vidoj"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="vector-tab-noicon mw-list-item"><a href="/wiki/Modulo:Expr"><span>Legi</span></a></li><li id="ca-edit" class="selected vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Modulo:Expr&action=edit" title="Redakti fontan kodon de tiu ĉi paĝo"><span>Redakti fonton</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Modulo:Expr&action=history" title="Antaŭaj versioj de ĉi tiu paĝo. [h]" accesskey="h"><span>Vidi historion</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Paĝaj iloj"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Iloj" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Iloj</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Iloj</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">movigi al flanka panelo</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">kaŝi</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Pliaj opcioj" > <div class="vector-menu-heading"> Agoj </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="vector-more-collapsible-item mw-list-item"><a href="/wiki/Modulo:Expr"><span>Legi</span></a></li><li id="ca-more-edit" class="selected vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Modulo:Expr&action=edit" title="Redakti fontan kodon de tiu ĉi paĝo [e]" accesskey="e"><span>Redakti fonton</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Modulo:Expr&action=history"><span>Vidi historion</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Ĝenerale </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Speciala%C4%B5o:Kio_ligas_%C4%89i_tien%3F/Modulo:Expr" title="Listo de ĉiuj vikiaj paĝoj kiuj ligas ĉi tien [j]" accesskey="j"><span>Ligiloj ĉi tien</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Speciala%C4%B5o:Rilataj_%C5%9Dan%C4%9Doj/Modulo:Expr" rel="nofollow" title="Lastaj ŝanĝoj en paĝoj kiuj ligas al ĉi tiu paĝo [k]" accesskey="k"><span>Rilataj ŝanĝoj</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard?uselang=eo" title="Alŝuti dosierojn [u]" accesskey="u"><span>Alŝuti dosieron</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Speciala%C4%B5o:Specialaj_pa%C4%9Doj" title="Listo de ĉiuj specialaj paĝoj [q]" accesskey="q"><span>Specialaj paĝoj</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Modulo:Expr&action=info" title="Pli da informo pri ĉi tiu paĝo"><span>Informoj pri la paĝo</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Speciala%C4%B5o:UrlShortener&url=https%3A%2F%2Feo.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DModulo%3AExpr%26action%3Dedit"><span>Akiri mallongigitan URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Speciala%C4%B5o:QrCode&url=https%3A%2F%2Feo.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DModulo%3AExpr%26action%3Dedit"><span>Elŝutu QR-kodon</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> En aliaj projektoj </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q54991461" title="Ligilo al konektita datuma ero [g]" accesskey="g"><span>Ero en Vikidatumoj</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Paĝaj iloj"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Aspekto"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Aspekto</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">movigi al flanka panelo</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">kaŝi</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> </div> <div id="contentSub"><div id="mw-content-subtitle">← <a href="/wiki/Modulo:Expr" title="Modulo:Expr">Modulo:Expr</a></div></div> <div id="mw-content-text" class="mw-body-content"><p>Vi ne rajtas redakti ĉi tiun paĝon, pro la jenaj kialoj: </p> <ul class="permissions-errors"><li class="mw-permissionerror-cascadeprotected">Ĉi paĝo estas protektita kontraŭ redaktado ĉar ĝi estas inkluzivita en jenaj paĝoj kiuj mem estas protektitaj kun kaskada protekto:</li><li class="mw-permissionerror-globalblocking-blockedtext-range"><b>Your IP address is in a range that has been <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Global_blocks" class="extiw" title="m:Special:MyLanguage/Global blocks">blocked on all Wikimedia Foundation wikis</a>.</b> The block was made by <a href="/wiki/Uzanto:Jon_Kolbert" title="Uzanto:Jon Kolbert">Jon Kolbert</a>. The reason given is <i><a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/NOP" class="extiw" title="m:Special:MyLanguage/NOP">Open proxy/Webhost</a>: See the <a href="https://meta.wikimedia.org/wiki/WM:OP/H" class="extiw" title="m:WM:OP/H">help page</a> if you are affected </i>. <ul><li>Start of block: 15:12, 27 aŭg. 2023</li> <li>Expiry of block: 15:12, 27 aŭg. 2028</li></ul> Your current IP address is 8.222.208.146. The blocked range is 8.222.128.0/17. Bonvolu inkluzivi ĉiujn suprajn detalojn en iuj demandoj, kiujn vi sendas. If you believe you were blocked by mistake, you can find additional information and instructions in the <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/No_open_proxies" class="extiw" title="m:Special:MyLanguage/No open proxies">No open proxies</a> global policy. Otherwise, to discuss the block please <a href="https://meta.wikimedia.org/wiki/Steward_requests/Global" class="extiw" title="m:Steward requests/Global">post a request for review on Meta-Wiki</a>. You could also send an email to the <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Stewards" class="extiw" title="m:Special:MyLanguage/Stewards">stewards</a> <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/VRT" class="extiw" title="m:Special:MyLanguage/VRT">VRT</a> queue at <kbd>stewards@wikimedia.org</kbd> including all above details.</li></ul><hr /> <p>Vi povas vidi kaj kopii la vikitekston de tiu ĉi paĝo: </p><textarea readonly="" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" class="mw-editfont-monospace" lang="en" dir="ltr" name="wpTextbox1">local Expr = { suite = "Expr", serial = "2022-09-12", item = 54991461 } --[==[ Expr * average * base62 * crossTotal * decimal2minsec * figure * max * min * minsec2decimal * modulo * percent * Ramanujan * random * sum * TemplateAverage * TemplateBooland * TemplateBoolor * TemplateMax * TemplateMin * TemplateSum ]==] local Failsafe = Expr Expr.messagePrefix = "lua-module-Expr-" Expr.l10nDef = {} Expr.l10nDef[ "en" ] = { ErrorExpr = "Error in mathematical expression, function#parameter" } Expr.l10nDef[ "de" ] = { ErrorExpr = "Fehler in mathematischem Ausdruck, Funktion#Parameter" } Expr.breakFigures = { [","] = ",", ["."] = "%.", ["'"] = "'", ["',"] = "[',]", ["'."] = "['%.]", ["U+20"] = " ", ["U+A0"] = mw.ustring.char( 0xA0 ), ["U+202F"] = mw.ustring.char( 0x202F ), ["%s"] = mw.ustring.char( 91, 0x20, 0xA0, 0x2009, 0x202F, 93 ), [".%s"] = mw.ustring.char( 91, 0x20, 0x2E, 0xA0, 0x2009, 0x202F, 93 ), ["'%s"] = mw.ustring.char( 91, 0x20, 0x27, 0xA0, 0x2009, 0x202F, 93 ), ["'.%s"] = mw.ustring.char( 91, 0x20, 0x27, 0x2E, 0xA0, 0x2009, 0x202F, 93 ) } Expr.signMinus = mw.ustring.char( 0x2212 ) local function factory( say ) -- Retrieve localized message string in content language -- Precondition: -- say -- string, message ID -- Postcondition: -- Return some message string -- Uses: -- > Expr.messagePrefix -- > Expr.l10nDef -- mw.language.getContentLanguage() -- mw.message.new() local slang = mw.language.getContentLanguage():getCode() local msg = mw.message.new( Expr.messagePrefix .. say ) local r = false if msg:isBlank() then local def = Expr.l10nDef[ slang ] if not def then def = Expr.l10nDef[ "en" ] end r = def[ say ] else msg:inLanguage( slang ) r = msg:plain() end if not r then r = "(((" .. say .. ")))" end return r end -- factory() local function faculty( analyze ) -- Test for boolean interpretation -- Precondition: -- analyze -- string or boolean or nil -- Postcondition: -- returns boolean local s = type( analyze ) local r if s == "string" then r = mw.text.trim( analyze ) if r == "" or r == "0" or r == "-" then r = false elseif r == "1" then r = true else r = r:lower() if r == "y" or r == "yes" or r == "true" or r == "on" then r = true elseif r == "n" or r == "no" or r == "false" or r == "off" then r = false else if r == "falsch" or r == "nein" then r = false -- error( "faculty@Expr", 0 ) else r = true end end end elseif s == "boolean" then r = analyze elseif s == "nil" then r = false else r = true end return r end -- faculty() local function expr( source, show ) -- Safe evaluation of presumable expression -- Precondition: -- source -- string, mathematical expression -- show -- string, details about source -- Postcondition: -- throws error, if expression failed -- returns number with resulting figure -- Uses: -- factory() local lucky, r = pcall( mw.ext.ParserFunctions.expr, source ) local n = tonumber( r, 10 ) if not ( lucky and n ) then r = r .. " " .. factory( "ErrorExpr" ) .. " ''" .. show .. "'' (" .. source .. ")" error( r, 0 ) else r = n end return r end -- expr() local function ellipse( a, epsilon ) -- Circumference of an ellipse. Approximation by Ramanujan's formula. -- Returns the approximation and a locical value (true, if the data is well) epsilon = tonumber(epsilon) or false; a = tonumber(a) or false; if not epsilon then return 0, false; end if not a then return 0, false; end if epsilon < 0 or epsilon > 1 then return 0, false; end a = math.abs(a); local b = a * math.sqrt (1 - epsilon * epsilon); local lambda = (a - b) / (a + b); local circumference = math.pi * (a + b) * (1 + (3 * lambda * lambda)/(10 + math.sqrt (4 - 3 * lambda * lambda))); if circumference then return circumference, true; else return 0, false; end end local function logicaland( args ) local r = "" for k, v in pairs( args ) do if mw.text.trim( v ) == "" then r = "" break -- for k, v else r = "1" end end -- for k, v return r end local function logicalor( args ) local r = "" for k, v in pairs( args ) do if faculty( v ) then r = "1" break -- for k, v end end -- for k, v return r end local function minmax( params, low, lazy ) -- Find extremum of unnamed params values -- Precondition: -- params -- table, like args -- .minus -- .zeroBlank -- low -- true: minimum, false: maximum -- lazy -- true: try numeric result, false: return string -- Postcondition: -- throws error, if expression failed -- returns number, or -- string if formatting required, or -- false if no data provided -- Uses: -- > Expr.signMinus -- expr() local light = ( params.minus ~= "-" ) local luxury = ( params.minus and light ) local r = false local n, scope for k, v in pairs( params ) do if type( k ) == "number" then scope = type( v ) if scope == "string" then v = mw.text.trim( v ) if v == "" then n = false else if mw.ustring.sub( v, 1, 1 ) == Expr.signMinus then luxury = light v = "-" .. mw.ustring.sub( v, 2 ) end n = Expr.figure( v, ".", true ) if not n then if low then scope = "min()#" else scope = "max()#" end scope = scope .. tostring( k ) expr( v, scope ) end end elseif scope == "number" then n = v else n = false end if n then if r then if low then if n < r then r = n end else if n > r then r = n end end else r = n end end end end -- for k, v if r then if luxury and r < 0 then r = Expr.signMinus .. tostring( -1 * r ) elseif not lazy then if r == 0 then if params.zeroBlank then r = "" else r = "0" end else r = tostring( r ) end end end return r end -- minmax() Expr.average = function ( array, ask ) -- Calculate average -- Precondition: -- array -- sequence table, with strings and/or numbers -- ask -- string or not, with figure format -- Postcondition: -- returns number, at least 0 local r, n = Expr.sum( array, ask ) if n > 1 then r = r / n end return r end -- Expr.average() Expr.base62 = function ( adjust ) -- Convert number from and to base62 encoding -- Precondition: -- adjust -- number or ASCII string to be converted -- number: to base62 -- string: base62 to number -- Lua limitation at 10^53; larger numbers are less precise -- Postcondition: -- returns string, or number, or false local r = false local state = type( adjust ) if state == "number" then local k = math.floor( adjust ) if k == adjust and adjust > 0 then local m r = "" while k > 0 do m = k % 62 k = ( k - m ) / 62 if m >= 36 then m = m + 61 elseif m >= 11 then m = m + 55 else m = m + 48 end r = string.char( m ) .. r end elseif adjust == 0 then r = "0" end elseif state == "string" then if adjust:match( "^%w+$" ) then local n = #adjust local k = 1 local c r = 0 for i = n, 1, -1 do c = adjust:byte( i, i ) if c >= 48 and c <= 57 then c = c - 48 elseif c >= 65 and c <= 90 then c = c - 55 elseif c >= 97 and c <= 122 then c = c - 61 else -- How comes? r = nil break -- for i end r = r + c * k k = k * 62 end -- for i end end return r end -- Expr.base62() Expr.crossTotal = function ( amount ) -- Calculate sum of digits in integer number -- Precondition: -- amount -- string or number, with integer -- Postcondition: -- returns number, at least 0 local r = 0 local s = Expr.figure( amount ) if s then if s < 0 then s = -1 * s end s = tostring( math.floor( s ) ) if s:match( "^%d+$" ) then for i = 1, #s do r = r + tonumber( s:sub( i, i ) ) end -- for i end end return r end -- Expr.crossTotal() Expr.decimal2minsec = function ( amount, align, ask, allow, frame ) -- Format coordinate value in degree, minutes, seconds -- Precondition: -- amount -- string or number, with decimal coordinate -- align -- string, number, nil, with number of decimal digits -- ask -- string or not, with figure format -- allow -- true, if unformatted result -- frame -- object, if available -- Postcondition: -- returns mw.html -- with formatted data, or -- string -- with "0" if any problem -- Uses: -- > Expr.signMinus local r = Expr.figure( amount, ask ) if r then local d = tonumber( align ) local e = mw.html.create( "span" ) local kd, km, low, sd if r < 0 then low = true r = -1 * r end kd = math.floor( r ) r = ( r - kd ) * 60 if kd > 360 then kd = kd - math.floor( kd / 360 ) * 360 end sd = tostring( kd ) if low then sd = Expr.signMinus .. sd end km = math.floor( r ) r = ( r - km ) * 60 if d and d >= 1 and d < 10 then local n = math.floor( r ) if r == n then r = tostring( n ) else local s = string.format( "%%.%df", math.floor( d ) ) r = tonumber( string.format( s, r ) ) if allow then r = tostring( r ) else if not Expr.frame then Expr.frame = frame or mw.getCurrentFrame() end r = Expr.frame:callParserFunction( "formatnum", r ) end end else r = tostring( math.floor( r + 0.5 ) ) end if not Expr.degminsec then Expr.degminsec = string.format( "%%s%s %%d%s %%s%s", mw.ustring.char( 0xB0 ), mw.ustring.char( 0x2032 ), mw.ustring.char( 0x2033 ) ) end r = string.format( Expr.degminsec, sd, km, r ) e:css( "white-space", "nowrap" ) :addClass( "coordinate-deg-min-sec" ) e:wikitext( r ) r = e else r = "0" end return r end -- Expr.decimal2minsec() Expr.figure = function ( amount, ask, advance, area ) -- Convert number from various formats -- Precondition: -- amount -- string (or number), with number -- ask -- string, with permitted formatting, defaults to "." -- advance -- true, if expressions permitted -- area -- string, or not, with permitted set -- Postcondition: -- returns number, or false -- Uses: -- > Expr.signMinus -- > Expr.breakFigures -- 2022-08-08 local seek = type( amount ) local r if seek == "string" then local scan = mw.text.trim( amount ) seek = ask or "." if scan == "" then seek = false elseif advance and not tonumber( scan ) and scan:find( "[+%-*/)]", 2 ) then local lucky lucky, r = pcall( mw.ext.ParserFunctions.expr, scan ) if lucky then seek = false r = tonumber( r ) else r = false end end if type( seek ) == "string" then if scan:find( "[Ee]" ) then scan = scan:match( "^[+%-]?([%.%d]+)[Ee][+%-]?%d+$" ) if scan and ( scan:match( "^%.%d+$" ) or scan:match( "^%d+%.?%d*$" ) ) then r = tonumber( amount ) end else local low, split seek = mw.text.trim( seek ) if seek == "" then seek = "." end split = seek:sub( -1 ) seek = seek:sub( 1, -2 ) if seek:sub( 1, 1 ) == "-" then seek = seek:sub( 2 ) if mw.ustring.sub( scan, 1, 1 ) == Expr.signMinus then low = true scan = mw.ustring.sub( scan, 2 ) end end if not low then if scan:sub( 1, 1 ) == "-" then low = true scan = scan:sub( 2 ) elseif scan:sub( 1, 1 ) == "+" then scan = scan:sub( 2 ) end end if ( split == "." or split == "," ) and not seek:find( split, 1, true ) then local i = scan:find( split, 1, true ) if i then split = scan:sub( i + 1 ) if split == "" then split = false end if i > 1 then r = scan:sub( 1, i - 1 ) elseif split then r = "" else r = false end else split = false r = scan end if r then seek = Expr.breakFigures[ seek ] if seek then local f = function ( a ) local rf = a if rf:find( "&.+;" ) then rf = mw.text.decode( rf, true ) end rf = mw.ustring.gsub( rf, seek, "%1%2" ) return rf end seek = "(%d)" .. seek .. "(%d)" if r ~= "" then r = f( r ) end if split then split = f( split ) end end if split and not split:match( "^%d+$" ) then r = false end if r and not r:match( "^%d+$" ) then r = false end if r and split then r = string.format( "%s.%s", r, split ) end end end if r then r = tonumber( r ) if low then r = -1 * r end end end end elseif seek == "number" then r = amount end if r and type( area ) == "string" then local set = mw.text.trim( area ) if set == "" then elseif set == "N" or set == "Z+" then if r < 0 or r ~= math.floor( r ) then r = false end elseif set == "Z" then if r ~= math.floor( r ) then r = false end elseif set == "Z-" then if r > 0 or r ~= math.floor( r ) then r = false end elseif set == "R+" then if r < 0 then r = false end elseif set == "R-" then if r > 0 then r = false end end end return r or false end -- Expr.figure() Expr.minsec2decimal = function ( aDeg, aMin, aSec, alter, ask ) -- Convert coordinate value from degree, minutes, seconds, letter -- Precondition: -- aDeg -- string or number, with degree -- aMin -- string or number, with minutes -- aSec -- string or number, with seconds -- alter -- string or boolean, true|S|W, negative sign -- ask -- string, with permitted formatting, defaults to "." local r = Expr.figure( aDeg, ask ) if r then local qm = Expr.figure( aMin, ask ) local qt = Expr.figure( aSec, ask ) local m = 360 local less if qm then r = r + qm * 0.0166666666666667 if qt then r = r + qt * 0.0002777777777777778 end elseif qt then r = false end if alter then local s = type( alter ) if s == "string" then s = mw.text.trim( alter ):upper() if s == "S" or s == "W" then less = true end if s == "N" or s == "S" then m = 180 end elseif s == "boolean" then less = alter end end if r then if r < 0 then r = -1 * r less = true end if r > 0 then r = r - math.floor( r / m ) * m end if less then r = -1 * r end end end return r or 0 end -- Expr.minsec2decimal() Expr.modulo = function ( amount, adjust, ask ) -- Retrieve modulo remainder -- Precondition: -- amount -- string or number, with total amount (dividend) -- adjust -- string or number, with modulo divisor, non-zero -- ask -- string or not, with figure format -- Postcondition: -- returns number -- with modulo remainder -- 0 -- if numbers are not available local qt = Expr.figure( amount, ask ) local qm = Expr.figure( adjust, ask ) local r if qt and qm and qm ~= 0 then r = qt - math.floor( qt / qm ) * qm else r = 0 end return r end -- Expr.modulo() Expr.percent = function ( amount, all, align, after, ask, allow, frame ) -- Retrieve percentage -- Precondition: -- amount -- string or number, with partial value -- all -- string or number, with base value (100%) -- align -- string, number, nil, with number of decimal digits -- after -- true, if trailing zeroes shall be kept -- ask -- string or not, with figure format -- allow -- true, if unformatted result -- frame -- object, if available -- Postcondition: -- returns string -- with formatted percentage, terminated by % -- 0 -- if numbers are not available local qp = Expr.figure( amount, ask ) local qb = Expr.figure( all, ask ) local r if qp and qb and qb ~= 0 then local d = tonumber( align ) r = qp * 100 / qb if d and d >= 1 and d < 10 then local s = string.format( "%%.%df", math.floor( d ) ) s = string.format( s, r ) if after then r = s else local n = math.floor( r ) if tonumber( s ) == n then r = tostring( n ) else r = s:gsub( "^(-?%d+%.%d*[1-9])0+$", "%1" ) end end else r = tostring( math.floor( r + 0.5 ) ) end if not allow then if not Expr.frame then Expr.frame = frame or mw.getCurrentFrame() end r = Expr.frame:callParserFunction( "formatnum", r ) end r = r .. " %" else r = 0 end return r end -- Expr.percent() Expr.sum = function ( array, ask ) -- Calculate sum -- Precondition: -- array -- sequence table, with strings and/or numbers -- ask -- string or not, with figure format -- Postcondition: -- returns -- 1, number, with sum, at least 0 -- -- 2, number, of summands, at least 0 local r1 = 0 local r2 = 0 if type( array ) == "table" then for k, v in pairs( array ) do v = Expr.figure( v, ask, true ) if v then r1 = r1 + v r2 = r2 + 1 end end -- for k, v end return r1, r2 end -- Expr.sum() Failsafe.failsafe = function ( atleast ) -- Retrieve versioning and check for compliance -- Precondition: -- atleast -- string, with required version -- or wikidata|item|~|@ or false -- Postcondition: -- returns string -- with queried version/item, also if problem -- false -- if appropriate -- 2020-08-17 local since = atleast local last = ( since == "~" ) local linked = ( since == "@" ) local link = ( since == "item" ) local r if last or link or linked or since == "wikidata" then local item = Failsafe.item since = false if type( item ) == "number" and item > 0 then local suited = string.format( "Q%d", item ) if link then r = suited else local entity = mw.wikibase.getEntity( suited ) if type( entity ) == "table" then local seek = Failsafe.serialProperty or "P348" local vsn = entity:formatPropertyValues( seek ) if type( vsn ) == "table" and type( vsn.value ) == "string" and vsn.value ~= "" then if last and vsn.value == Failsafe.serial then r = false elseif linked then if mw.title.getCurrentTitle().prefixedText == mw.wikibase.getSitelink( suited ) then r = false else r = suited end else r = vsn.value end end end end end end if type( r ) == "nil" then if not since or since <= Failsafe.serial then r = Failsafe.serial else r = false end end return r end -- Failsafe.failsafe() -- Export local p = {} function p.average( frame ) local d = { } for k, v in pairs( frame.args ) do k = tostring( k ) if k:match( "^%d+$" ) then table.insert( d, v ) end end -- for k, v return Expr.average( d, frame.args.parse ) end function p.base62( frame ) local r local s = frame.args[ 1 ] if s then local s2 = frame.args[ 2 ] if s2 then s2 = mw.text.trim( s2 ) end if s2 == "D2B" then s = tonumber( s ) else s = mw.text.trim( s ) s2 = false end r = Expr.base62( s ) if r and not s2 then r = string.format( "%17d", r ) end end return r or "" end function p.crossTotal( frame ) return Expr.crossTotal( frame.args[ 1 ] ) end function p.decimal2minsec( frame ) return tostring( Expr.decimal2minsec( frame.args[ 1 ], frame.args[ 2 ], frame.args.parse, faculty( frame.args.low ), frame ) ) end p.figure = function ( frame ) local r = Expr.figure( frame.args[ 1 ], frame.args.parse, faculty( frame.args.expr ), frame.args.set ) if r then r = tostring( r ) else r = "" end return r end -- p.figure function p.max( frame ) local lucky, r = pcall( minmax, frame.args, false, false ) return r or "" end function p.min( frame ) local lucky, r = pcall( minmax, frame.args, true, false ) return r or "" end function p.minsec2decimal( frame ) return Expr.minsec2decimal( frame.args[ 1 ], frame.args[ 2 ], frame.args[ 3 ], frame.args[ 4 ], frame.args.parse ) end function p.modulo( frame ) return Expr.modulo( frame.args[ 1 ], frame.args[ 2 ], frame.args[ 3 ] ) end function p.percent( frame ) local base = frame.args[ 2 ] local pars if base then pars = frame.args else pars = frame:getParent().args base = pars[ 2 ] end return Expr.percent( pars[ 1 ], base, pars[ 3 ], faculty( pars[ 4 ] ), pars.parse, faculty( pars.low ), frame ) end function p.Ramanujan( frame ) local semiaxis = frame.args[1] or 0; local eps = frame.args[2] or 0; local value, isOk = ellipse( semiaxis,eps ); if isOk then return tostring(value); else return '<span class="error">Funktion Ramanujan in Modul Expr: ungültige Parameter!</span>' end end function p.random( frame ) local n = Expr.figure( frame.args[ 1 ] ) if n and n >= 2 then n = math.floor( n ) else n = 100 end math.randomseed( math.floor( 100000 * os.clock() ) ) return math.random( 0, n - 1 ) end function p.sum( frame ) local d = { } local r, n for k, v in pairs( frame.args ) do k = tostring( k ) if k:match( "^%d+$" ) then table.insert( d, v ) end end -- for k, v r, n = Expr.sum( d, frame.args.parse ) return r end function p.TemplateAverage( frame ) return p.average( frame:getParent() ) end function p.TemplateBooland( frame ) return logicaland( frame:getParent().args ) end function p.TemplateBoolor( frame ) return logicalor( frame:getParent().args ) end function p.TemplateMax( frame ) return p.max( frame:getParent() ) end function p.TemplateMin( frame ) return p.min( frame:getParent() ) end function p.TemplateSum( frame ) return p.sum( frame:getParent() ) end p.failsafe = function ( frame ) -- Versioning interface local s = type( frame ) local since if s == "table" then since = frame.args[ 1 ] elseif s == "string" then since = frame end if since then since = mw.text.trim( since ) if since == "" then since = false end end return Failsafe.failsafe( since ) or "" end -- p.failsafe p.Expr = function () return Expr end -- p.Expr() setmetatable( p, { __call = function ( func, ... ) setmetatable( p, nil ); return Failsafe; end } ); return p </textarea><div id="mw-scribunto-console"></div><div class="templatesUsed"><div class="mw-templatesUsedExplanation"><p>Ŝablonoj uzitaj sur ĉi tiu paĝo: </p></div><ul> <li><a href="/wiki/Vikipedio:Lua/Modula_navigado" title="Vikipedio:Lua/Modula navigado">Vikipedio:Lua/Modula navigado</a> (<a href="/w/index.php?title=Vikipedio:Lua/Modula_navigado&action=edit" title="Vikipedio:Lua/Modula navigado">redakti</a>) </li><li><a href="/wiki/%C5%9Cablono:!)" title="Ŝablono:!)">Ŝablono:!)</a> (<a href="/w/index.php?title=%C5%9Cablono:!)&action=edit" title="Ŝablono:!)">vidi fontkodon</a>) (protektita)</li><li><a href="/wiki/%C5%9Cablono:(!" title="Ŝablono:(!">Ŝablono:(!</a> (<a href="/w/index.php?title=%C5%9Cablono:(!&action=edit" title="Ŝablono:(!">vidi fontkodon</a>) (protektita)</li><li><a href="/wiki/%C5%9Cablono:Dok/fino/modulo" title="Ŝablono:Dok/fino/modulo">Ŝablono:Dok/fino/modulo</a> (<a href="/w/index.php?title=%C5%9Cablono:Dok/fino/modulo&action=edit" title="Ŝablono:Dok/fino/modulo">vidi fontkodon</a>) (protektita)</li><li><a href="/wiki/%C5%9Cablono:Dok/komenco" title="Ŝablono:Dok/komenco">Ŝablono:Dok/komenco</a> (<a href="/w/index.php?title=%C5%9Cablono:Dok/komenco&action=edit" title="Ŝablono:Dok/komenco">vidi fontkodon</a>) (protektita)</li><li><a href="/wiki/%C5%9Cablono:Enhavtabelo_dekstre" title="Ŝablono:Enhavtabelo dekstre">Ŝablono:Enhavtabelo dekstre</a> (<a href="/w/index.php?title=%C5%9Cablono:Enhavtabelo_dekstre&action=edit" title="Ŝablono:Enhavtabelo dekstre">redakti</a>) </li><li><a href="/wiki/%C5%9Cablono:Individuaj_formatoj" title="Ŝablono:Individuaj formatoj">Ŝablono:Individuaj formatoj</a> (<a href="/w/index.php?title=%C5%9Cablono:Individuaj_formatoj&action=edit" title="Ŝablono:Individuaj formatoj">redakti</a>) </li><li><a href="/wiki/%C5%9Cablono:LuaModuleDoc" title="Ŝablono:LuaModuleDoc">Ŝablono:LuaModuleDoc</a> (<a href="/w/index.php?title=%C5%9Cablono:LuaModuleDoc&action=edit" title="Ŝablono:LuaModuleDoc">redakti</a>) </li><li><a href="/wiki/%C5%9Cablono:LuaModuleDoc/Global" title="Ŝablono:LuaModuleDoc/Global">Ŝablono:LuaModuleDoc/Global</a> (<a href="/w/index.php?title=%C5%9Cablono:LuaModuleDoc/Global&action=edit" title="Ŝablono:LuaModuleDoc/Global">redakti</a>) </li><li><a href="/wiki/%C5%9Cablono:PlenaLigilo" title="Ŝablono:PlenaLigilo">Ŝablono:PlenaLigilo</a> (<a href="/w/index.php?title=%C5%9Cablono:PlenaLigilo&action=edit" title="Ŝablono:PlenaLigilo">redakti</a>) </li><li><a href="/wiki/%C5%9Cablono:TOC-dekstre" class="mw-redirect" title="Ŝablono:TOC-dekstre">Ŝablono:TOC-dekstre</a> (<a href="/w/index.php?title=%C5%9Cablono:TOC-dekstre&action=edit" class="mw-redirect" title="Ŝablono:TOC-dekstre">redakti</a>) </li><li><a href="/wiki/%C5%9Cablono:Tlinks" title="Ŝablono:Tlinks">Ŝablono:Tlinks</a> (<a href="/w/index.php?title=%C5%9Cablono:Tlinks&action=edit" title="Ŝablono:Tlinks">redakti</a>) </li><li><a href="/wiki/%C5%9Cablono:Uzado" title="Ŝablono:Uzado">Ŝablono:Uzado</a> (<a href="/w/index.php?title=%C5%9Cablono:Uzado&action=edit" title="Ŝablono:Uzado">redakti</a>) </li><li><a href="/wiki/%C5%9Cablono:%C4%88u_modulo" title="Ŝablono:Ĉu modulo">Ŝablono:Ĉu modulo</a> (<a href="/w/index.php?title=%C5%9Cablono:%C4%88u_modulo&action=edit" title="Ŝablono:Ĉu modulo">vidi fontkodon</a>) (protektita)</li><li><a href="/wiki/Modulo:Expr" title="Modulo:Expr">Modulo:Expr</a> (<a href="/w/index.php?title=Modulo:Expr&action=edit" title="Modulo:Expr">redakti</a>) </li><li><a href="/wiki/Modulo:Expr/dokumentado" title="Modulo:Expr/dokumentado">Modulo:Expr/dokumentado</a> (<a href="/w/index.php?title=Modulo:Expr/dokumentado&action=edit" title="Modulo:Expr/dokumentado">redakti</a>) </li><li><a href="/wiki/Modulo:%C5%9Cablono:LuaModuleDoc" title="Modulo:Ŝablono:LuaModuleDoc">Modulo:Ŝablono:LuaModuleDoc</a> (<a href="/w/index.php?title=Modulo:%C5%9Cablono:LuaModuleDoc&action=edit" title="Modulo:Ŝablono:LuaModuleDoc">vidi fontkodon</a>) (duon-protektita)</li></ul></div><p id="mw-returnto">Reiri al <a href="/wiki/Modulo:Expr" title="Modulo:Expr">Modulo:Expr</a>.</p> <!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Elŝutita el "<a dir="ltr" href="https://eo.wikipedia.org/wiki/Modulo:Expr">https://eo.wikipedia.org/wiki/Modulo:Expr</a>"</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Regularo pri respekto de la privateco</a></li> <li id="footer-places-about"><a href="/wiki/Vikipedio:Enkonduko">Pri Vikipedio</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Vikipedio:Malgarantio">Malgarantioj</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Programistoj</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/eo.wikipedia.org">Statistikoj</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Deklaro pri kuketoj</a></li> <li id="footer-places-mobileview"><a href="//eo.m.wikipedia.org/w/index.php?title=Modulo:Expr&action=edit&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Poŝtelefona vido</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-6b7f745dd4-rr7dr","wgBackendResponseTime":193,"wgPageParseReport":{"limitreport":{"cputime":"0.004","walltime":"0.006","ppvisitednodes":{"value":18,"limit":1000000},"postexpandincludesize":{"value":715,"limit":2097152},"templateargumentsize":{"value":0,"limit":2097152},"expansiondepth":{"value":2,"limit":100},"expensivefunctioncount":{"value":0,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":0,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 0.000 1 -total"]},"cachereport":{"origin":"mw-web.codfw.main-6b7f745dd4-rr7dr","timestamp":"20241125104307","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>