Kromaĵo:Scribunto/Referenca manlibro pri Lua

This page is a translated version of the page Extension:Scribunto/Lua reference manual and the translation is 74% complete.
Outdated translations are marked like this.

Ĉi tiu manlibro dokumentas Lua kiel ĝi estas uzita en MediaWiki kun la Scribunto kromaĵo. Kelkaj partoj estas derivita el la referenca manlibro pri Lua 5.1, kiu estas havebla laŭ la MITa licenco.

Enkonduko

Ek!

En MediaWiki-a vikio kun Scribunto ebligita, kreu paĝon, kiu titolo komencas per "Module:", aŭ se la vikio havas la Esperanta lokaĵo ebligita "Modulo:" egale efikas, ekzemple "Module:Bananas". En ĉi tiu nova paĝo, kopiu la sekvantan tekston:

local p = {} --local p = {} -- p mallongigas pako

function p.hello( frame )
    return "Hello, world!"
end

return p

ŝpari tion, kaj en alia ne-modula paĝo, skribu:

{{#invoke:Bananas|hello}}

Escepte vi devus anstataŭigi "Bonvenigoj" kun io ajn, kion vi nomis vian modulon. Tio vokos la "saluti" elstaton (funkcion) elportita el la modulo. La kodo {{#invoke:Bananas|hello}} anstataŭiĝos kun la teksto, kiun la elstato provizis, tiukaze "Hello, world!".

Alvoki Lua-n kodon ekde ŝablona kunteksto estas ĝenerale bona ideo. Tio signifas ke laŭ la vokanta paĝo, la komponaĵo estas sendependa de la realigo, ĉu per Lua, ĉu per vikiteksto. Tio egale evitas la enkondukon de aldonita kompleksa sintakso ene de la enhava nomujo de la vikio.

Strukturo de modulo

La modulo mem endas liveri Lua ujon (tabelon), kiun enhavas la elstatojn vokeblajn per {{#invoke:}}. Ĝenerale, kiel montrita supre, loka statingo estas deklarata por enteni statujon, elstatoj estas aldonata al tiu ujo, kaj la ujo estas liverata ĉe la fino de la modulkodo.

Ajnaj elstatoj, kiuj ne estas aldonita al ĉi tiun ujon, ĉu loka, ĉu malloka, ne estos alirebla per {{#invoke:}}, sed mallokaj statingoj povus esti alirebla de aliaj ŝarĝataj moduloj per require(). Estas ĝenerale bona stilo por la modulo, kiam ĝi deklaras loke ĉiujn elstatojn kaj statingojn.

Aliri transvokatojn el vikiteksto

Elstatoj vokitaj per {{#invoke:}} estos pasita unuopa transvokato, tiu estanta kadra objekto. Por aliri transvokatoj pasitaj al {{#invoke:}}, kodo kutime uzos la args ujon de tiu kadra objekto. Estas ankaŭ ebla aliri la transvokatojn pasitajn al la ŝablono enhavanta la {{#invoke:}} per uzo de frame:getParent() kaj alirado al args por tiu kadro.

Tiu kadra objekto estas ankaŭ uzita por aliri situaciemivojn de la vikiteksto disponigilo, kiel voki disponigilajn elstatojn, elvolvi ŝablonojn kaj elvolvi arbitran vikitekstajn signvicojn (ĉenojn).

Tekstliverado

La modula elstato kutime devus leveri unuopan signvicon; kio ajn kiomo (valoro) estas liverato, ĝi estos vicigita per tostring() kaj tiam kunvicigita sen apartigila signo. Ĉi tiu vico enhaviĝas en la vikiteksto kiel la rezulto de {{#invoke:}}.

Al ĉi tiu punkto en la paĝanalizo, ŝablonoj jam estis elvolvitaj, disponigilaj elstatoj kaj elvolvaj etikedoj jam estis procezita kaj pre-ŝparaj transformoj (ekz. elvolvado de subskriba tildo kaj la dukta lertaĵo) jam okazis. Sekve la modulo ne povas uzi tiujn ivojn en ĝia produktada teksto. Ekzemple, se modulo liveras "Saluton, [[mondo]]! {{bonvenon}}", la paĝo legos "Saluton, mondo! {{bonveno}}".

Aliflanke, substituo estas pritraktita dum pli frua stadio de procezo, do kun {{subst:#invoke:}} nur aliaj postaj anstataŭigoj estos procezita. Pro tio ke la nesukcesa anstataŭigo restos en la vikiteksto, ili tiam estos procezata dum la sekvanta redakto. Tio ĉi estas ĝenerale evitinda.

Dokumentaro de modulo

Scribunto eblas dokumenti modulojn per aŭtomata asocio inter la modulo kaj paĝo de vikiteksta dokumentaro; defaŭlte la "/doc" subpaĝo de la kapsulo estas uzita por tia celo kaj estas transhavigi super la modulfontkodo de la modulo en la paĝo de la modulo. Ekzemple, la dokumentaro por "Modulo:Bonvenigoj" estus je "Modulo:Bonvenigoj/doc".

Tio estas agordebla per mesaĝoj de la Mediaviki-nomujo:

  • scribunto-doc-page-name — Fiksas la nomon de la paĝo uzita por dokumentaro. La nomo de la modulo (sen la Modulo: prefikso) estas pasita kiel $1. Se ili estas en la kapsulo nomujo, la paĝoj specifita ĉi tie estos interpretita kiel vikiteksto prefere ol Lua fonto kaj ne povas esti uzita kun {{#invoke:}}. Defaŭlte ĝi estas "Modulo:$1/doc", t.e. la /doc subpage de la modulo. Notu ke disponigilaj elstatoj kaj aliaj elvolvado de kuniga krampo ne povas esti uzita en tiu mesaĝo.
  • scribunto-doc-page-does-not-exist — Mesaĝo montrata kiam la dokumentara paĝo ne ekzistas. The name of the page is passed as $1. The default is empty.
  • scribunto-doc-page-showMessage displayed when the doc page does exist. The name of the page is passed as $1. The default is to transclude the documentation page.
  • scribunto-doc-page-headerHeader displayed when viewing the documentation page itself. The name of the module (with Module: prefix) being documented is passed as $1. The default simply displays a short explanation in italics.

Notu ke moduloj ne povas esti rekte Kategorigita kaj ne povas havi intervikiaj ligoj rekte aldonita. Tio estas almetebla en la dokumentara paĝo ene de ‎<includeonly>...‎</includeonly> etikedoj, kie ili estos aplikita al la modulo kiam la dokumentara paĝo estas transhavigita je la modula paĝo.


Renaming or moving modules

To rename or move a module, use the Move Page link in the Tools sidebar. You will want to move both the module itself, as well as the subpage containing its documentation.

To manually create a module redirect, use the following syntax:

return require [[Module:Foo]]

Replace Foo with the name of the module you'd like to redirect to.

Lua lingvo

Leksoj

En Lua, nomo' (ankaŭ nomita identigilo') povas esti ajna vico de leteroj, ciferoj kaj substrekoj, nekomencanta cifere. Nomoj estas usklecdistingaj; "ajn", "Ajn" kaj "AJN" estas ĉiuj malsamaj nomoj.

La sekvaj signoĉenoj estas rezervitaj kaj ne povas esti uzataj kiel nomoj:

  • and
  • break
  • do
  • else
  • elseif
  • end
  • false
  • for
  • function
  • if
  • in
  • local
  • nil
  • not
  • or
  • repeat
  • return
  • then
  • true
  • until
  • while

Nomoj komencantaj per substreko sekvita de majuskloj estas rezervitaj por internaj globalaj variabloj de Luao.

Aliaj leksoj estas:

  • #
  • %
  • (
  • )
  • *
  • +
  • ,
  • -
  • --
  • .
  • ..
  • ...
  • /
  • :
  • ;
  • <
  • <=
  • =
  • ==
  • >
  • >=
  • [
  • ]
  • ^
  • {
  • }
  • ~=

Komentoj

Komento komencas kun -- ie ajn ekster signvico. Se la -- estas tuj sekvita de longa eka krampo, la komento daŭras ĝis la responda ĉesa longa krampo; alie la komento daŭras ĝis la fino de la nuna linio.

-- Lua komento ekas kun du strekoj kaj adas ĝis la linifino.
--[[ Plur-linia signvicoj kaj komentoj
     estas ornamataj kun duoblaj kvadrataj kromoj. ]]
--[=[ Komentoj kiel ĉi tiu povas havi aliajn --[[komentojn]] ingitajn. ]=]
--[==[ Komentoj kiel ĉi tiu povas havi aliajn
      --[===[ longajn --[=[komentojn]=] --ingitajn
        ]===] multtempe, eĉ se ili ĉiuj estas
      --[[ ne limigitaj kun konrespondaj longajn kromojn! ]===]
  ]==]

Datentipoj

Lua estas meditipa lingvo. Tio signifas ke statingoj kaj kunvokatoj (elstataj kunvokataj statingoj) havas neniun tipon, nur kiomoj (valoroj) asignitaj al ili havas ĝin. Ĉiuj kiomoj portas tipon.

Lua havas ok bazajn datenajn tipojn, tamen nur ses estas aktuala laŭ la Scribunto etendaĵo. La type() elstato liveros la tipon de kiomo.

La tostring() elstato signvicigos kiomon. La tonumber() elstato nombrigos kiomon se ebla kaj alie liveros nil (nomo de la vakua kiomo). Ne estas eksplicitaj elstatoj por transtipi kiomon al aliaj datenaj tipoj.

Nombroj estas aŭtomate transtipita al signvicoj kiam uzvokeje atendita, ekzemple kiam uzita laŭ la alviciga elstatilo. Signvicoj rekonitaj de tonumber() estas aŭtomate transtipita al nombroj kiam uzita kun aritmetikaj elstatiloj. Kiam duopcia stato estas atendita, ĉiuj aliaj statoj ol nil (vakua) kaj false(falsa) estas konsiderita kiel vera.

Vakua

"nil" signas la datena tipo de nil, kiu ekzistas por reprezenti la vakuan kiomon.

nil ne povas esti uzita kiel indico en ujo kaj estas neniu diferenco inter malasignita uja indico kaj indico asignita kun vakua kiomo (nil).

Kiam signvicigita, la rezulto estas "nil". Kiam duopciigita, nil estas konsiderita false (falsa).

Duopcia

Duopciaj kiomoj (ankaŭ nomitaj buleaj valoroj) estas true (vera) kaj false (falsa).

Kiam signvicigita, la rezulto estas "true""false".

Malkiel multe aliaj lingvoj, duopciaj kiomoj estas nenombrigivaj. Plie, nur false (falsa) kaj nil (vakua) estas konsiderataj false por duopciaj transtipadoj; la nombro nulo (0) kaj la vakua signvico ("") ambaŭ estas konsiderita vera (true).

Signvica

Lua signvicoj estas konsiderataj serioj de 8-duumaj okopoj; la aplikaĵo interpretestras laŭ ajna aparta kodado.

Signvicoj rektstatoj (literaloj) limigivas per rektaj citiloj ĉu unustrekaj ĉu dustrekaj ('"); kiel Ĝavoskripto kaj malkiel PHP, ili semantike ne diferencas. La sekvantaj interpretŝaltaj sinsekvoj estas rekonitaj:

  • \a (pepo, okopo 7)
  • \b (retropaŝo, okopo 8)
  • \t (horizontala tabo, okopo 9)
  • \n (linifino, okopo 10)
  • \v (vertikala tabo, okopo 11)
  • \f (paĝosalto, okopo 12)
  • \r (ĉaretreveno, okopo 13)
  • \" (dustreka citilo, okopo 34)
  • \' (unustreka citilo, okopo 39)
  • \\ (sobstreko, okopo 92)

Linifina rektsigno enkludeblas en signvico per sobstreka prefikso. Okopoj specifeblas eskapan sinsekvon '\ddd, kie "ddd" estas la dekuma nombro de la okopo en la intervalo 0–255. Por enkludi Unikoda signoj per interpretŝaltaj sinsekvoj, la individuaj okopoj de la UTF-8 kodoprezento specifendas; ĝenerale, estos pli simpla enigi rekte la Unikodan signon.

Rektsignvicos ankaŭ difinivas per longaj krampoj. Eka longa krampoj konsistas de eka kvadrata krampo sekvita de nulo aŭ pli egalsignoj sekvita de alia eka kvadrata krampo, ekzemple [[, [=[, aŭ [=====[. La eka longa krampo respondendas al ĉesa longa krampo, ekzemple ]], ]=], or ]=====].. Kiel speciala kazo, se eka longa krampo estas tuj sekvita de linifino tiam la linifino ne estas enkludita en la vico, sed linifino tuj antaŭ la ĉesa longa krampo estas konservita. Interpretŝaltaj sinsekvoj ene de signvicoj limitigitaj per longaj krampoj ne estas interpretata.

-- Tiu longa signvico
foo = [[
bar\tbaz
]]

-- estas ekvivalenta al tiu citile limigita signvico
foo = 'bar\\tbaz\n'

Notu ke ĉiuj signvicoj estas konsideritaj veraj kiam transtipitaj al duopcia. Tio estas malsame de plejpartaj aliaj lingvoj, kie la vakua signvico estas kutime konsiderita falsa.

Nombra

Lua havas nur unu nombran tipon, kiu estas tipe reprezentita interne kiel duobleneta movalta kiomo. Laŭ tiu datenaranĝo, indukto inter -9007199254740992 kaj 9007199254740992 reprezentivas nete, dum pli grandaj kaj iomonaj nombroj eble elportas rondigan eraron.

Nombraj konstantoj estas specifita uzanta punkto (.) kiel ondisilo kaj sen grupiganta apartigilojn, ekzemple 123456.78. Nombroj ankaŭ povas esti reprezentita uzanta E notacio sen spacetoj, ekzemple 1.23e-10, 123.45e201.23E5.. Induktoj ankaŭ specifivas laŭ deksesuma notacio per 0x prefikso, ekze 0x3A.

Kvankam neniom kaj nefinioj ĉu pozitivaj ĉu estas ĝuste entenita kaj pritraktita, Lua ne provizas respondan rektkiomon. La konstanto math.huge estas pozitiva nefinio, kiel estas divido simila ol 1/0, kaj divido kiel 0/0 uzitivas por rapide produkti neniom.

Notu ke ĉiuj nombroj estas konsideritaj veraj kiam transtipita duopcie. Tio estas malsame ol plejpartaj aliaj lingvoj, kie la nombro 0 estas kutime konsiderita falsa. Kiam transformita al signvico, finiaj nombroj estas reprezentitaj ondisile, eble en E natacio; neniom estas "nan""-nan"; kaj nefinioj estas "inf""-inf".

Uja

Lua ujoj estas hakujoj, similege kiel PHPaj ujoj kaj Ĝavoskriptaj objektoj.

Ujoj estas kreita per kunigaj krampoj. La vakua ujo estas {}. Por plenigi kampojn dum kreo, kom- kaj/aŭ punktokomo-apartigita listo de kamp-specifiloj enkludivas interkrampoj. Tio prenas iun ajn el pluraj formoj:

  • [elvolvo1] = elvolvo2 uzas la (unua) kiomo de elvolvo1 kiel la indico kaj la (unua) kiomo el elvolvo2 kiel kiomo.
  • nomo = elvolvo estas ekvivalenta ol ["nomo"] = elvolvo
  • elvolvo estas krude ekvivalento ol [i] = elvolvo, kie i estas indukto komencanta ekde 1 kaj alkremanta po ĉiu kampo specifado de tiu formo. Se tio estas la lasta specifilo kaj la elvolvo havas multajn kiomojn, ĉiuj kiomoj estas uzitaj; alie nur la unua estas gardita.

La kampoj en ujo estas aliritaj per uzado de krampa notacio, ekzemple table[key]. Signvicaj indicoj kiuj estas ankaŭ validaj nomoj ankaŭ povas esti alirita per uzado de punkta notacio, ekzemple table.key estas ekvivalenta al table['key']. Voki elstaton kiu estas konservita en la ujo uzivas dupunktan notacion; ekzemple table:func( ... ), kiu estas ekvivalenta ol table['func']( table, ... )table.func( table, ... ).

Sinsekvo estas ujo kun ne-vakuaj kiomoj por ĉiuj pozitivaj induktoj ekde 1 ĝis iomego kaj seniomo (nil) por ĉiuj pozitivaj induktoj pli granda ol iomego. Multaj Luaj elstatoj elstatas nur por sinsekvoj kaj ignoras ne-pozitiva-induktaj indicoj.

Malsame multaj aliaj lingvoj kiel PHP aŭ Ĝavoskripto, ajna kiomo krom seniomo (nil) kaj neniomo (NaN) uzivas kiel indico kaj neniu transtipado estas elfarita. Ĉi tiuj estas ĉiuj validaj kaj apartaj:

-- Krei ujon
t = {}
t["foo"] = "foo"
t.bar = "bar"
t[1] = "one"
t[2] = "two"
t[3] = "three"
t[12] = "the number twelve"
t["12"] = "the string twelve"
t[true] = "true"
t[tonumber] = "yes, even functions may be table keys"
t[t] = "yes, a table may be a table key too. Even in itself."

-- Tio kreas ujon proksime ekvivalenta ol la supra
t2 = {
    foo = "foo",
    bar = "bar",
    "one",
    "two",
    [12] = "the number twelve",
    ["12"] = "the string twelve",
    "three",
    [true] = "true",
    [tonumber] = "yes, even functions may be table keys",
}
t2[t2] = "yes, a table may be a table key too. Even in itself."

Simile, ajna kiomo krom seniomo konservivas kiel kiomo en ujo. Konservi seniomo (nil) ekvivalentas forigi la indicon el la ujo, kaj aliri ajnan indicon, kiu ne estis fiksita liveros seniomo.

Notu ke ujoj estas neniam implice kopiita en Lua; se ujo estas pasita kiel elstata kunvokato kaj ke la elstato traktas la indicoj aŭ kiomoj en la ujo, tiuj ŝanĝoj estos videblaj el la vokanto.

Kiam signvicigita, la kutima rezulto estas "table" (ujo) sed ĝi povas esti superregata per __tostring metastatvojo (metametodo). Eĉ la vakua ujo estas konsiderita vera kiam duopciigita.

Elstataj

En Lua, elstatoj (funkcioj) estas plenaj kiomoj: ili kreivas sennome, kunvokatigivas, asignivas al ingoj, kaj tiel plu.

Elstatoj estas kreitaj per la function ĉeflekso, kaj vokita per krampoj. Kompona faciligo ekzistas por nomaj elstatojn, lokaj elstatoj, kaj elstatoj kiuj agas kiel ujano. Vidu elstataj deklaroj kaj elstataj vakadoj malsupre por detaloj.

Lua elstatoj estas fermiĝoj, tio estas ke ili tenadas referencon pri la trafejo en kiu ili estas deklaritaj kaj ke ili alirivas kaj traktivas statingojn en tiu trafejo.

Kiel ujoj, se elstato estas asignita al malsama statingo aŭ pasita kiel kunvokato al alia elstato, ĝi estas ankoraŭ la sama fundamenta "elstata objekto" kiu estos vokita.

Kiam signvicigita, la rezulto estas "function".

Neapogitaj tipoj

La uzantdatena tipo estas uzita por enteni opakaj kiomoj por kromaĵoj de Lua skribitaj per aliaj lingvoj; ekzemple, uzantdatenoj uzivus por enteni C indikilon (pointer) aŭ sturkturon (struct). Por permesi la uzado de Scribunto en gastigaj medioj kie propr-tradukitaj kodoj ne estas permesita, nenia estas uzita.

La fadena tipo reprezentas la pritraktoj por kunprogramoj, kiuj ne havivas mediujon de Scribunto.

Kromujoj

Ĉiu ujo povas havi rilatan ujo nomita kromujo. La kampoj en la kromujo estas uzita de kelkaj elstatiloj kaj elstatoj por specifi malsaman aŭ retrodefaŭlta konduto por la ujo. La kromujo de ujo alirivas per la getmetatable() elstato kaj asignita per la setmetatable() elstato.

Ilia kromsolviloj alirivas per rawget().

Kromujaj kampoj kiuj influas la ujo mem estas:

__index
Tio estas uzita kiam aja aliro ujo[indico] provizus seniomo (nil). Se la kiomo de tiu kampo estas ujo, la aliro estos ripetita en tiu ujo, tio estas __index[indico] (kiu povas alvoki la __index de la kromujo de tiu ujo). Se la kiomo de tiu kampo estas elstato, la elstato estos vokita kiel __index( ujo, indico ). La rawget() elstato ĉirkaŭiras tiu krommetodo.
__newindex
Tio estas uzita dum indica asignado al ujo ujo[indico] = kiomo kiam $rawget( ujo, indico ) provizus seniomo (nil). Se la kiomo de tiu kampo estas ujo, la asignato estos ripetita en tiu ujo, tio estas __newindex[indico] = kiomo (kiu povas alvoki la __newindex de la kromujon de tiu ujo). Se la kiomo de tiu kampo estas solilo, la elstato estos vokita kiel __newindex( ujo, indico, kiomo ). La rawset() elstato ĉirkaŭiras tiun kromujon.
__call
Tio estas uzita kiam la elstatvoka komponaĵo estas uzita kun ujo, ujo( ··· ). La kiomo devas estas elstata, vokita simile ol __call(ujo, ··· ).
__mode
Tio estas uzita por fari ujon, kiuj entenas feblajn referencojn. La kiomo estendas signvicon. Defaŭlte, ajna kiomo kiu estas uzita kiel indico aŭ kiel kiomo en ujo ne estos senrubigata. Sed se tiu metakampo enhavas la leteron 'k', indicoj povas esti senrubigota se ne estas malfeblaj referencoj kaj se ĝi enhavas 'v' kiomojn eble; ambaŭkaze, ambaŭ la responda indico kaj la kiomo estas forigita de la ujo. Notu ke la konduto estas nedifinata se tiu kampo estas ŝanĝita post la ujo estas uzita kiel metaujo.

Alia metaujaj kampoj inkludas:

Por duloka elstatiloj, Lua rigardas unue la metaujon de la statinga kunvokato (se iu ajn) kaj poste al la kioma kiam serĉanta por uzebla metastatvojo.
Por interrilataj elstatiloj, la metastatvojoj estas nur uzita se la sama elstato estas specifita en metaujoj de ambaŭ kunvokatoj. Malsamaj sennomaj elstatoj, eĉ kun identa kodenhavo kaj fermo, ne povas esti konsiderita la sama.
*
__metatable
(metaujo) influas ambaŭ getmetatable() kaj setmetatable()

Notu: En Lua, ĉiuj signvicoj ankaŭ kunhavigas ununuran metaujo, en kiu __index rilatas al la string ujo. Tiu metaujo ne estas alirebla en Scribunto nek estas la referencita string ujo; la string ujo disponebla en moduloj estas kopio.

Statingoj

Statingoj estas lokoj kiuj ŝparas kiomoj. Estas tri specoj de statingoj en Lua: ĉies statingoj, lokaj statingoj kaj ujaj kampoj.

Nomo reprezentas ĉies aŭ lokan statingo (aŭ elstata kunvokato, kiu estas nur speco de loka statingo). Statingos estas supozita malloka krom se eksplicite deklarita kiel loka uzanta la local ĉeflekso. Ajna statingo kiu ne estis asignita kiomon estas konsiderita kiel senioma kiomo (nil).

Mallokaj statingoj estas ŝparitaj en norma Lua ujo nomita environment (medio); tiu ujo estas ofte disponebla kiel la ĉies statingo _G. Ĝi estas ebla fiksi metaujo por ĉi tiu ĉies statinga ujo; la __indekso kaj __newindex metastatvojoj estos vokitaj por alirojn kaj asignadoj al ĉies statingoj tiel ili estus pro aliroj kaj asignadoj al kampoj en ajna alia ujo.

La medio por elstato alirivas per la getfenv() elstato kaj ŝanĝivas per setfenv() elstato; en Scribunto, tiuj elstatoj estas severe restriktita se ili estas disponeblaj aŭ tute ne estas disponeblaj.

Lokaj statingoj estas leksikologie trafebla; vidu Deklaroj de lokaj statingoj por detaloj.

Elvolvoj

Elvolvo estas io kiu havas kiomojn: rektstatoj (nombroj, signvicoj, vera, falsa, senioma), deklaroj de sennoma elstato, anigiloj de ujo, referencoj de statingo, elstataj vokoj, la elvolvo de varia kunvokataro, elvolvoj envolvitaj en kromoj, unuloka elstatiloj aplikita al elvoloj, kaj elvolvoj kombinitaj kun dulokaj elstatiloj.

Plejpartoj de elvolvoj havas unu kiomon; elstataj vokoj kaj la elvolvoj de varia kunvokataro povas havi ajnan nombron. Notu ke envolvi elvolvo de elstata voko aŭ varia kunvokataro inter kromoj perdigos ĉiujn ilin krom la unua kiomo.

Elvolvaj listoj estas komo-apartigitaj listojn de elvolvoj. Ĉiuj krom la lasta elvolvo estas devigita al unu valoro (foriganta pluajn kiomojn aŭ uzanta nil se la elvolvo havas neniujn kiomojn); ĉiuj kiomoj de la lasta elvolvo estas inkludita en la kiomoj de la elvolva listo.

Aritmetikaj elstatiloj

Lua provizas la kutimajn aritmetikajn elstatilojn: adicio, subtraho, multipliko, divido, modulo, potencigo kaj negacio.

Kiam ĉiuj elstatatoj estas nombroj aŭ signvicoj por kiuj tonumber() liveras ne-seniom, la elstatadoj havas ilian kutimajn signifojn.

Se ajna elstatato estas ujo kun taŭga metastatvojo, la metastatvojo estos vokita.

Elstatilo Elstato Ekzemplo Metastatvojo Notoj
+ Adicio a + b __add
- Subtraho a - b __sub
* Multipliko a * b __mul
/ Divido a / b __div divido per nulo ne estas eraro; neniom aŭ nefinio estos liverota
% Modulo a % b __mod Difinita kiel a % b == a - math.floor( a / b ) * b
^ Potencigo a ^ b __pow Ne-induktaj alteco (eksponento) estas permesitaj
- Negacio -a __unm

Rilataj elstatiloj

La rilataj elstatiloj en Lua estas ==, ~=, <, >, <=, kaj >=. La rezulto de rilata elstatilo estas ĉiam duopcia.

Egaleco (==) unue komparas la tipojn de ĝiaj elstatatoj; se ili estas malsamaj, la rezulto estas falsa. Tiam ĝi komparas la kiomojn: vakua, duopcia, nombra kaj signvicaj estas komparitaj en la atendata maniero. Elstatoj estas egalaj se ili referas al la tutsamaj elstataj objektoj; function() end == function() end liveros falsan kiomon, kiel ĝi komparas du malsamajn sennomajn elstatojn. Ujoj estas defaŭlte komparitaj sammaniere, sed tio povas esti ŝanĝita per la __eq metastatvojo.

Malegaleco (~=) estas la plena negacio de egaleco.

Por la ordonantaj elstatiloj, se ambaŭ estas nombroj aŭ ambaŭ estas signvicoj, ili estas komparitaj rekte. Sekve, metastatvojoj estas kontrolitaj:

  • a < b uzas __lt
  • a <= b uzas __le se disponebla, aŭ se __lt estas disponebla tiam ĝi estas konsiderat ekvivalenta al not ( b < a )
  • a > b estas konsiderat ekvivalenta al b < a
  • a >= b estas konsiderat ekvivalenta al b <= a

Se la necesa metastatvojoj ne estas disponeblaj, eraro estas pelata.

Logikaj elstatiloj

La logikaj elstatiloj estas and (kaj), or (aŭ) kaj not (ne). Ĉiuj uzas la norman interpreton kie vakua kaj falsa estas konsideritaj falsaj kaj io ajn alia estas konsiderita vera.

Pro kaj, se la unua elstatato estas konsiderita falsa tiam ĝi estas liverota kaj la dua elstatato ne estas elstatigota; alie la dua elstatato estas liverota.

Por , se la unua elstatato estas konsiderita veran tiam ĝi estas liverota kaj la dua elstatato ne estas statigota; alie la dua elstatato estas liverota.

Por not, la rezulto ĉiam estas vera aŭ falsa.

Notu ke kaj kaj or kurtvojas. Ekzemple, ami() aŭ umi() nur vokos umi() se ami() liveras falsan aŭ nil kiel ĝia unua kiomo.

Ĉena elstatilo

La ĉena elstatilo estas du punktoj, uzita amo .. belo. Se ambaŭ elstatatoj estas nombroj aŭ signvico, ili estas transtipataj al signvicoj kaj kunĉenataj. Alie se __concat metastatvojo estas disponebla, ĝi estas uzita. Alie, eraro estas pelata.

Notu ke Lua signvicoj estas malŝanĝebla kaj Lua ne provizas ajnan specon de "signvica konstruilo", do ciklilo kiu multfoje faras amo = amo .. belo necesos krei novan signvicon por ĉiu iteracio kaj poste senrubigi la malnovajn signvicojn. Se multaj signvicoj ĉenendas, povas esti pli rapida uzi string.format() aŭ enmeti ĉiujn la vicsignojn en sinsekvo kaj uzi table.concat() ĉe la fino.

Longeca elstatilo

La longeca elstatilo estas #, uzita kiel #amo. Se amo estas signvico, ĝi liveras la okopan longecon. Se amo estas sinsekva ujo, ĝi liveras la longecon de la sinsekvo.

Se amo estas ujo kiu ne estas sinsekvo, la #amo povas liverunta ajnan kiomon tiom tia ke amo[tiom] ne estas nil kaj amo[tiom+1] estas nil, eĉ se estas ne-seniomaj kiomojn laŭ sekvantaj indeksoj. Ekzemple,

-- Tio ne estas sinsekvo, ĉar amo[3] estas nil kaj amo[4] ne estas nil.
a = { 1, 2, nil, 4 }

-- Tio povas eligi aŭ 2 aŭ 4.
-- Kaj tio povas ŝanĝi eĉ se la ujo ne estas modifita.
mw.log( #a )

Elstatilaj antaŭeco

La elstatila antaŭeco de Lua aŭ ordo de elstatoj, de plej antaŭeca al plej posteca:

  1. ^
  2. not # - (negacio)
  3. * / %
  4. + - (subtraho)
  5. ..
  6. < > <= >= ~= ==
  7. and
  8. or

Ene de antaŭeca nivelo, plej multe dulokaj elstatiloj estas unualoko-asociecaj, t.e. amo / belo / celo estas interpretita kiel (amo / belo) / celo. Potencigo kaj ĉenigo estas dualoko-asociecaj, t.e. amo ^ belo ^ celo estas interpretita kiel amo ^ (belo ^ celo).

Elstataj vokoj

Lua elstataj vokoj similas tiujn en plejpartaj aliaj programlingvoj: nomo sekvita de listo de argumentoj inter kromoj:

elstato( elvolvo-listo )

Kiel estas kutima kun elvolvaj listoj en Lua, la lasta elvolvo en la listo povas provizi plurajn kunvokatajn kiomojn.

Se la elstato estas vokita kun malpli da valoroj en la elvolva listo ol estas kunvokatoj en la elstata difino, la ekstraj kunvokatoj havos nil kiel kiomo. Se la elvolva listo enhavas pli da kiomoj ol estas kunvokatoj, la ekscesaj kiomoj estas ignorita. Ĝi estas ankaŭ ebla por funkcio preni varian nombron de argumentoj; vidas Elstataj deklaroj por detaloj.

Lua ankaŭ permesas rektan vokon de elstata liverata kiomo, t.e. ami()(). Se elvolvo pli kompleksa ol varia aliro estas necesa por determini la vokenda elstato, kromata elvolvo povas esti uzita anstataŭ de la varia aliro.

Lua havas komponaĵa faciligo por du oftaj kazoj. La unua estas kiam ujo estas uzata kiel objekto kaj la elstato estas vokota kiel statvojo de la objekto. La komponaĵo

ujo:nomo( elvolvo-listo )

estas tute ekvivalenta al

ujo.nomo( ujo, elvolvo-listo )

La dua ofta kazo estas la tekniko de Lua por efektivigi nomitajn kunvokantojn per pasanta ujo kiu enhavas la nom-al-kiomajn mapigojn kiel la unika pozicia kunvokato al la elstato. Tiukaze, la kromoj ĉirkaŭ la kunvokat-listo povas esti preterlasita. Tio ankaŭ efikas se la elstato estas pasota kiel unuopa rekstata signvico. Ekzemple, la vokoj

func{ arg1 = exp, arg2 = exp }
func"string"

estas ekvivalentaj al

func( { arg1 = exp, arg2 = exp } )
func( "string" )

Tiuj povas esti kombinitaj; la sekvantaj vokoj estas ekvivalentaj:

table:name{ arg1 = exp, arg2 = exp }
table.name( table, { arg1 = exp, arg2 = exp } )

Elstataj deklaradoj

La komponaĵo de elstataj deklaroj prezentas kiel:

function nameoptional ( var-listoptional )
    block
end

Ĉiuj statingoj en statingo-listo estas loka al la elstato, kun kiomoj asignitaj el la elvolva listo en la elstata voko. Suplementaj lokaj statingoj povas esti deklarata en la kodingo.

Kiam la elstato estas vokata, la ordonoj en kodingo estas rulata post lokaj statingoj respondantaj al statingo-listo estas kreitaj kaj asignitaj kiomojn. Se elŝaltila ordono estas atingita, la kodingo estas elirita kaj la kiomoj de la elstatovoka elvolvo estas tiuj donita per la elŝatila ordono. Se rulo atingas la finon de la kodingo de la elstato sen renkonti elŝatila ordono, la rezulto de la elstatovoka elvolo havas nulajn valorojn.

Lua elstatoj estas leksikaj fermoj. Kutima idiomaĵo estas deklari "privatajn transvokajn" statingoj kiel lokaj en la trafejo kie la elstato estas deklarita. Ekzemple,

-- Tio liveras elstato, kiu aldonas nombron al ĝia kunvokato.
function makeAdder( n )
    return function( x )
        -- The variable n from the outer scope is available here to be added to x
        return x + n
    end
end

local add5 = makeAdder( 5 )
mw.log( add5( 6 ) )
-- presas 11

Elstato povas esti deklarita por akcepti varian nombron da kunvokatoj, per uzo de ... kiel fina ero en la statingo-listo:

function nameoptional ( var-list, ... )
    block
end
-- or
function nameoptional ( ... )
    block
end

Ene de la kodingo, la variakunvokata elvolvo ... povas esti uzita, kun la rezulto estanta ĉiuj la kromaj kiomoj de la elstata voko. Ekzemple,

local join = function ( separator, ... )
    -- get the extra arguments as a new table
    local args = { ... }
    -- get the count of extra arguments, correctly
    local n = select( '#', ... )
    return table.concat( args, separator, 1, n )
end

join( ', ', 'foo', 'bar', 'baz' )
-- provizas la signvico "ama odo uzu iri ene"

La select() elstato estas konceptita por labori kun la sternata elvolvo; precipe , select( '#', ... ) uzendus anstataŭ #{ ... } por kalkuli la nombron de kunvokatoj en la sternata elvolvo, ĉar { ... } ne povas esti sinsekvo.

Lua provizas kompona faciligo por kombini elstatan deklaron kaj asignadon al statingo; vidu elstato deklaro ordo por detaloj.

Notu ke tio ne laboros:

local factorial = function ( n )
    if n <= 2 then
        return n
    else
        return n * factorial( n - 1 )
    end
end

Pro tio ke la elstata deklaro estas procezita antaŭ la asignado de loka statingo estas kompleta, "faktoriali" en la elstata enhavo rilatas al la (verŝajne nedifinita) tielnomita statingo en ekstera trafejo. Tiu problemo estas evitebla per deklarado de la loka statingo unue kaj tiam asigni ĝin en sekvanta ordono aŭ per komponaĵo de la elstato-deklara ordono.

Ordonoj

Ordono estas la baza unuo de rulo: unu asignado, ŝaltpelo, elstata voko, statinga deklaro, ktp.

Kodono (angle chunck, litere peco) estas sinsekvo de ordonoj, opcie apartigitaj per punktokomoj. Kodono estas konsiderata la enhavo de anonima elstato, do ĝi povas deklari lokan statingoj, ricevi kunvokatoj kaj liveri kiomojn.

Kodingo estas ankaŭ sinsekvo de ordonoj, kiel kodono. Kodingo povas esti limdifinita por krei unuopan ordono: do kodingo end. Tiuj povas esti uzita por limigi la trafejon de lokaj statingoj aŭ aldoni returnbreak ene de alia kodingo.

Alsignadoj

varia-listo = elvola-listo

La varia-listo estas komo-apartigita liston de statingoj; la elvolvo-listo estas komo-apartigita liston de unu aŭ pli da elvolvoj. Ĉiuj elvolvoj estas statigita antaŭ ajnaj ordonoj estas elfarita, do amo, belo = belo, amo, interŝanĝos la valorojn de amo kaj belo.

Lokaj statingo-deklaroj

local statinga-listo

local statinga-listo = elvolva-listo

Lokaj statingoj povas esti deklarita ie ajn ene de kodingokodono. La unua formo, sen elvolva listo, deklaras la statingoj sed ne asignas kiomon do ĉiuj statingoj havas nil kiel kiomo. La dua formo asignas valorojn al la lokaj statingoj, kiel priskribita en Komisioj antaŭe.

Notu ke trafebleco de la loka statingo komencas kun la ordono post la loka statingo-deklaro. Do deklaro kiel local io = io deklaras lokan statingo io kaj asignas ĝin la valoro de io de la ekstera trafejo. La lokaj statingoj restas en trafejo ĝis la fino de la plejena kodingo enhavanta la loka statingo deklaro.

Ŝaltpeliloj

while elvolvo do kodingo end

La while (dum) ordono ripetas kodingo ĝis la elvolvo statigas al vera kiomo.

repeat kodingo until elvolvo

La repeat (ripete) ordono ripetas kodingon ĝis elvolvo statigas al vera kiomo. Lokaj statingoj deklaritaj en la kodingo povas esti alirata en la elvolvo.

for nomo = ekelvolvo, lastelvolvo, poelvolvo do kodingo end
for nomo = ekelvolvo, lastelvolvo do kodingo end

Tiu unua formo de la for (por) ciklilo deklaros lokan statingon kaj ripetos la kodingo por kiomoj de ekelvolvo al lastelvolvo aldonanta poelvolvo dum ĉiu iteracio. Notu ke poelvolvo povas esti tute ne-informata, en kiu kazo 1 estas uzata, sed ne-nombraj kiomoj kiel nil kaj false estas eraro. Ĉiuj elvolvoj estas statigitaj unufoje antaŭ ekcikli.

Tiu formo de la for ciklilo estas proksime ekvivalenta al

do
    local var, limit, step = tonumber( exp1 ), tonumber( exp2 ), tonumber( exp3 )
    if not ( var and limit and step ) then
        error()
    end
    while ( step > 0 and var <= limit ) or ( step <= 0 and var >= limit ) do
        local name = var
        block
        var = var + step
    end
end

escepte ke la statingoj ero, limo, kaj volvo ne estas trafebla de ie ajn alia. Notu ke la statingo nomo estas loka al la kodingo; por uzi la kiomon post la ciklilo, ĝi devas esti kopiita al statingo deklarita ekster la ciklilo.

for statingo-listo in elvolvo-listo do kodingo end

La dua formo de la for ciklilo efikas kun iteraciaj statiloj. Kiel en la unua formo, la elvolvo-listo estas statigita nur unufoje antaŭ ekcikli.

Ĉi tiu formo de la for ciklilo estas proksime ekvivalenta al

do
    local func, static, var = expression-list
    while true do
        local var-list = func( static, var )
        var = var1  -- ''var1'' is the first variable in ''var-list''
        if var == nil then
            break
        end
        block
    end
end

Escepte ke denove la statingoj elstato, komunigo kaj vartejo ne estas trafebla ie ajn alia. Notu ke la statingoj en statingo-listo estas lokaj al la kodingo; por uzi ilin post la ciklilo, ili devas esti kopiita al statingoj deklaritaj ekster la ciklilo.

Ofte la elvolvo-listo estas unuopa elstata voko kiu liveras la tri valoroj. Se la iteracia elstato estas skribebla tiel ke ĝi nur dependas el la transvokatoj provizitaj al ĝi, tio estus la plej efika. Alie, Programado en Lua sugestas ke fermo estas preferata ol liveri ujon kiel la komuna statingo kaj ĝisdatigi ĝiajn anojn dum ĉiu iteracio.

if ĉefelvolvo then ĉefkondingo elseif kromelvolvo then kromkodingo else lastblokingo end

Rulas ĉefkodingo se ĉefelvolvo liveras true, alie rulas kromkodingo se kromelvolvo liveras true kaj lastblokindo alie. La else lastkodingo parto estas opcia kaj la elseif kromelvolvo then kromkodingo parto estas ripetebla kaj opcia kiel necesa.

return elvolvo-listo

La return ordono estas uzita por liveri kiomojn de elstato aŭ kodono (kiu estas nur elstato). La elvolvo-listo estas komo-apartigita liston enhavanta nulo aŭ pli da elvolvoj.

Lua efektivigas postaj vokoj: se elvolvo-listo konsistas de nur unu elvolvo kiu estas elstata voko, la nuna staka framo estos reuzota por la voko al tiu elstato. Tio havas implicojn por elstatoj kiuj traktas la vokan stakon, kiel getfenv() kaj debug.traceback().

La return ordono devas esti la lasta ordono en ĝia kodingo. Se por ajn ialo return estas necesa antaŭe en la kodingo, eksplicita kodingo do return end estas uzebla.

break

La break ordono estas uzita por fini la rulon de while, repeatfor ciklilo, ŝaltanta al la sekvanta ordono post la ciklilo.

La break ordono devas esti la lasta ordono en ĝia kodingo. Se por ial ajn break estas necesa antaŭe, eksplicita kodingo do break end estas uzebla.

Unlike some other languages, Lua does not have a "continue" statement for loops (i.e. a statement to move onto the next iteration without breaking the loop altogether).

It is straightforward to achieve the same effect by nesting a repeat ... until true block immediately inside the main loop, which will only ever iterate once for each iteration of the main loop (as its condition is always true). Using break will only end the inner loop, which has the practical effect of causing the main loop to continue onto the next iteration.

If it is necessary to use break on the main loop, simply declare a variable which is checked each time the inner loop completes, and set it when necessary.

Elstataj vokoj kiel ordonoj

Elstataj vokoj estas uzeblaj kiel ordono; tiukaze, la elstato estas vokata nur por ajnaj flankaj efikoj ĝi povas havi (ekz. mw.log() protokolaj kiomoj) kaj ajnaj liveratajn kiomojn estas ignorota.

Elstato-deklaraj ordonoj

Lua provizas kompona faciligo por fari deklaro de elstato kaj asigni ĝin al elstato pli natura. La sekvantaj paroj de deklaroj estas ekvivalentaj

-- Basic declaration
function func( var-list ) block end
func = function ( var-list ) block end
-- Local function
local function func( var-list ) block end
local func; func = function ( var-list ) block end
-- Function as a field in a table
function table.func( var-list ) block end
table.func = function ( var-list ) block end
-- Function as a method in a table
function table:func( var-list ) block end
table.func = function ( self, var-list ) block end

Notu la dupunktan notacion ĉi tie egalas la dupunktan notacion por elstataj vokoj, aldonanta implican kunvokaton nomita self (mem) kiel unua ero de la kunvokata listo.

Eraro-traktado

Eraroj povas esti "ĵetata" per la eror() kaj asert() elstatoj. Por "kapti" erarojn, uzu pcall()xpcall(). Notu ke kelkaj internaj eraroj de Scribunto estas nekaptebla en Lua kodo.

Senrubigo

Lua elfaras aŭtomatan memoran procedon. Tio signifas ke vi bezonas prizorgi nek pri asigni memoron por novaj objektoj nek pri liberigi ĝin kiam la objektoj ne plu estas necesaj. Lua procedas memoron aŭtomate per ruli senrubigilon fojfoje por kolekti ĉiuj senutilaj objektoj (tio estas, objektoj kiu estas ne plu trafebla el Lua) kaj objektoj kiuj estas nur trafeblaj per feblaj referencoj. Tuto da memoro uzata de Lua estas submetata al aŭtomata procedo: ujoj, elstatoj, signvicoj, ktp.

Senrubigo okazas aŭtomate kaj ne povas esti agordata ene de Scribunto.

Normaj elordontekoj

La normaj elordontekoj de Lua provizas havendajn servojn kaj elfaro-kritikaj elstatoj al Lua. Nur tiuj partoj de la normaj elordontekoj kiuj estas havebla en Scribunto estas dokumentita ĉi tie.

Bazaj elstatoj

_G

Tiu statingo entenas referenco al la nuna ĉiea statinga ujo; la ĉiea statingo amo ankaŭ esti trafebla per _G.amo. Notu, tamen, ke estas nenio speciala pri _G mem; ĝi estas reasignebla en la sama maniero ol ajna alia statingo:

foo = 1
mw.log( foo ) -- logs "1"
_G.foo = 2
mw.log( foo ) -- logs "2"
_G = {}       -- _G no longer points to the global variable table
_G.foo = 3
mw.log( foo ) -- still logs "2"

La ĉiea statinga ujo povas esti uzita tute kiel ajna alia ujo. Ekzemple,

-- Call a function whose name is stored in a variable
_G[var]()

-- Log the names and stringified values of all global variables
for k, v in pairs( _G ) do
   mw.log( k, v )
end

-- Log the creation of new global variables
setmetatable( _G, {
    __newindex = function ( t, k, v )
         mw.log( "Creation of new global variable '" .. k .. "'" )
         rawset( t, k, v )
    end
} )

_VERSION

Signvico enhavanta la rulanta versio de Lua, ekz. "Lua 5.1".

assert

assert( v, message, ... )

Se kiomo estas nilfalse, eligas eraron. En ĉi tiu kazo, sciigo estas uzita kiel teksto de la eraro: se ĝi estas nil (aŭ nespecifita), la teksto estas "assertion failed!" ("aserto malsukcesis!"); se ĝi estas signvico aŭ nombro, la teksto estas tiu kiomo; alie asert mem pelos eraron.

Se kiomo estas iu ajn alia kiomo, assertliveras ĉiujn opelstatoj, kiomo kaj sciigo inklude.

Iom kutima idiomaĵo en Lua estas ke elstatoj liveras true kiomon en ordinara elstatado kaj laŭ malsukceso liveras nilfalse kiel la unua kiomo kaj erara sciigo kiel la dua kiomo. Flua erara kontrolado povas tiam esti efektivigita per envolvado de la voko en alia voko al assert:

-- This doesn't check for errors
local result1, result2, etc = func( ... )

-- This works the same, but does check for errors
local result1, result2, etc = assert( func( ... ) )

error

error( message, level )

Eldonas eraron, kun la teksto sciigo.

error normale aldonas iun informon pri la loko de la eraro. Se nivelo estas 1 aŭ neinformita, tiu informo estas la loko de la voko al error mem; 2 uzas la loko de la voko de la elstato kiu vokis error; kaj tiel plu. Pasanta 0 ne malinkludas la informon pri loko.

getfenv

getfenv( f )

Notu ke tiu funkcio povas esti malhavebla, depende de allowEnvFuncs en la maŝina agordo.

Liveras medion (malloka statinga ujo), kiel specifita per objekto:

  • Se ĝi tiomas 1, nil aŭ ne estas informata, liveras la medion de la elstato vokanta getfenv. Ofte tio estos la sama ol _G.
  • Induktoj inter 2 kaj 10 liveras la medio de elstatoj pli antaŭ en la vokstako. Ekzemple, 2 liveras la medio por la elstato kiu vokis la nunan elstaton, 3 liveras la medio por la elstato vokanta tiu elstato, kaj tiel plu. Eraro estos pelata se la kiomo estas pli alta ol la nombro da elstataj vokoj en la stako aŭ se la celata staknivelo liveris posta voko.
  • Pasado de elstato liveras la medion kiu estos uzota kiam tiu elstato estas vokota.

La medioj uzitaj de ĉiuj normaj elordontekaj elstatoj kaj elordontekaj elstatoj de Scribunto estas protektataj. Provado de aliro al ĉi tiujn mediojn per getfenv liveros nil anstataŭ.

getmetatable

getmetatable( table )

Liveras la metaujo de ujo. Iu ajn alia tipo liveros nil.

Se la metaujo havas __metatable kampo, tiu kiomo estos liverita anstataŭ la efektiva metaujo.

ipairs

ipairs( t )

Liveras tri kiomoj: laŭciklila elstato, la ujo ujo kaj 0. Tio ĉi estas celita por uzo en la laŭciklila formo de for:

for i, v in ipairs( t ) do
    -- process each index-value pair
end

Tio laŭciklos la parojn ( 1, ujo[1] ), ( 2, ujo[2] ), kaj tiel plu, haltanta kiam ujo[i] estus nil.

La norma konduto povas esti superregata per provizado de __ipairs metastatvojo. Se tiu metametodo ekzistas, la alvoko al ipairs redonos la tri valorojn redonitajn je __ipairs( t ) anstataŭe.

next

next( table, key )

Tio permesas iteracii laŭ la eroj el ujo. Se ero estas nil aŭ nespecifita, liveras la "unuan" eron el la ujo kaj ĝian kiomon; alie, ĝi liveras la "sekvantan" eron kaj ĝian kiomon. Kiam ne plu estas haveblaj eroj, liveras nil. Eblas kontroli ĉu ujo estas vakua per la elvolo next( t ) == nil.

Notu ke la ordo en kiu la eroj estas liverataj ne estas specifita, eĉ por numeraj ujoj. Por transiri ujojn laŭ numera ordo, uzu numera foripairs.

Konduto estas nedifinita se, kiam uzi next por trairi, ajna ne-ekzistanta eron estas asignita kiomo. Asignado de nova kiomo (inklude nil) al ekzistanta kampo estas permesita.

pairs

pairs( t )

Liveras tri kiomoj: laŭciklila elstato (<cedo>next aŭ iu simil-efika), la ujo ujo kaj nil. Tio estas celita por uzo en la laŭciklila formo de for:

for k, v in pairs( t ) do
    -- process each key-value pair
end

Tio iteracios laŭ la noma-kiomaj paroj en ujo tute kiel next efektivigus; vudu la dokumentaron pri next por restriktoj rilate al modifi la ujon dum trairado.

La norma konduto superprengius per provizado de __pairs metastatvojo. Se tiu metastatvojo ekzistas, la voko al pairs liveros la tri kiomoj liverota per __pairs( ujo ) anstataŭ.

pcall

pcall( f, ... )

Vokas la elstato elstato kun la donita argumentojn per protektita modo. Tio signifas ke se eraro estas levita dum la voko al elstato, pcall liveros false kaj la erara-mesaĝo levita. Se neniu eraro okazas, pcall liveros false kaj ĉiuj kiomoj liverotaj per la voko.

Je pseŭdokodo, pcall povus esti difinita jene:

function pcall( f, ... )
    try
        return true, f( ... )
    catch ( message )
        return false, message
    end
end

rawequal

rawequal( a, b )

Tio estas ekvivalenta al amo == belo escepte ke ĝi ignoras ajna __eq metastatvojo.

rawget

rawget( table, k )

Tio estas ekvivalenta al ujo[ero] escepte ke ĝi ignoras ajnan __indeksan metastatvojo.

rawset

rawset( table, k, v )

Tio estas ekvivalenta al table[k] = v escepte ke ĝi ignoras ajna __newindex metastatvojo.

select

select( index, ... )

Se indico estas nombro, liveras ĉiuj argumentoj en ... post la indico. Se indico estas la signvico '#', liveras la nombro da ero en ....

Alivorte, select estas io proksimume kiel la jena, escepte ke ĝi efikas korekte eĉ kiam ... enhavas nil kiomoj (vidu dokumentaron pri # kaj unpack por la problemo pri seniomoj).

function select( index, ... )
    local t = { ... }
    if index == '#' then
        return #t
    else
        return unpack( t, index )
    end
end

setmetatable

setmetatable( table, metatable )

Statigas la metastatvojo de ujo. metastatvojo povas esti senioma (nil), sed devas esti eksplicite provizita.

Se la nuna metastatvojo havas __metatable kampo, setmetatable pelos eraron.

tonumber

tonumber( value, base )

Provas transformi je kiomo al nombro. Se ĝi jam estas nombro aŭ signvico transtipebla al nombro, tiam tonumber liveras tiun nombron; alie, ĝi liveras nil.

La opcia bazo (defaŭlte 10) specifas la bazon por interpreti la numeralon. La bazo povas esti ajna integralo inter 2 kaj 36, inklude. En bazoj super 10, la letero 'A' (ajna usklece) reprezentas 10, 'B' reprezentas 11 kaj tiel antaŭen, kun 'Z' reprezentanta 35.

En bazo 10, la kiomo povas havi decimalan parton, povas esti esprimita laŭ scienca "E" notacio kaj povas komenci per "0x" por indiki bazon 16. En aliaj bazoj, nur sensignumaj induktoj estas akceptitaj.

tostring

tostring( value )

Transtipas je value al signvico. Vidu datenajn tipojn supre por detaloj pri kiel ĉiu tipo estas transtipita.

La norma konduto por ujoj estas superregita per provizado de __tostring metastatvojo. Se tiu metastatvojo ekzistas, la voko al __tostring liveros la unikan kiomon liverita per __tostring( value ) anstataŭ.

type

type( value )

Liveras la tipo de value kiel signvico: "nil", "number", "string", "boolean", "table", aŭ "function".

unpack

unpack( table, i, j )

Liveras kiomojn el la provizita ujo, simile ol tiu ke table[i], table[i+1], ···, table[j] liverus se elskribita mane. Se i aŭ ne provizita, ekero defaŭltas al 1 kaj j defaŭltas al #table.

Notu ke rezultoj estas nedeterminismaj se ujo ne estas sinsekvo kaj finero estas nil aŭ nespecifita; vidu Longeca elstatilo por detaloj.

xpcall

xpcall( f, errhandler )

Tio estas similege al pcall, escepte ke la eraro-mesaĝo estas pasita al la elstato errhandler antaŭ liveri ĝin.

Laŭ pseŭdocode, xpcall povus esti difinita simile ol tiu:

function xpcall( f, errhandler )
    try
        return true, f()
    catch ( message )
        message = errhandler( message )
        return false, message
    end
end

Erarserĉa elordonteko

debug.traceback

debug.traceback( sciigo, nivelo )

Liveras signvicon kun retrospuro de la vokstako. Opcia sciiga signvico estas almetita al la komenco de la retrospuro. Opcia nivela nombro indikas laŭ kiu staka nivelo komenci la retrospuro.

Matematika elordonteko

math.abs

math.abs( x )

Liveras la absolutan kiomo de iom.

math.acos

math.acos( x )

Liveras la arkokosinuso de iom (esprimita per radianoj).

math.asin

math.asin( x )

Liveras la arksinuso de iom (esprimita per radianoj).

math.atan

math.atan( x )

Liveras la arktangenton de iom (esprimita per radianoj).

math.atan2

math.atan2( y, x )

Liveras la arktangento de denominatorono el numeratoro numeratoro / denominatoro (esprimita per radianoj), uzanta la signumoj de ambaŭ kunvokatoj por trovi la kvadranton de la rezulto.

math.ceil

math.ceil( x )

Liveras la plej malgrandan indukton kiu estas pli granda aŭ egala ol iom.

math.cos

math.cos( x )

Liveras la kosinuso de iom (esprimita en radianoj).

math.cosh

math.cosh( x )

Liveras la hiperbolan kosinuson de iom.

math.deg

math.deg( x )

Liveras la angulon iom, esprimata en radianoj, en gradoj.

math.exp

math.exp( x )

Liveras la kiomo de  , tio estas bazo de la funkcio de natura logaritmo pezigite (potencigite) per iom.

math.floor

math.floor( x )

Liveras la plej grandan indukton pli malgranda aŭ egala ol iom.

math.fmod

math.fmod( x, y )

Liveras la reston de la divido de numeratoro per denominatoro kiu rondigas la kvocienton al nulo. Ekzemple, matematiko.math.fmod( 10, 3 ) liveras 1.

math.frexp

math.frexp( x )

Liveras du kiomojn ununormafrakcio kaj pezo tiel

  • Se   estas finia kaj ne-nula:  , pezo estas indukto kaj la absoluta kiomo de ununormafrakcio estas en la intervalo  ,
  • Se iom estas nulo:ununormafrakcio kaj pezo estas 0
  • Se iom estas neniom (NaN) aŭ nefinio: ununormafrakcio estas iom kajpezo ne estas specifita

math.huge

La kiomo reprezentanta pozitivan nefinio; pli granda aŭ egala ol iu ajn alia nombra kiomo.

math.ldexp

math.ldexp( m, e )

Returns   (e should be an integer).

math.log

math.log( x )

Liveras la ĉefproentelekiomo (natura logaritmo) de tiom.

math.log10

math.log10( x )

Liveras la dekumo-baza proentelekiom (logaritmo) de iom.

math.max

math.max( x, ... )

Liveras la maksimuman kiomon inter ĝiaj kunvokatoj.

Konduto kun neniom NaN ne estas specifita. Kun la nuna efektivigo, NaN estos liverota se iom estas NaN, sed aliaj sekvantaj NaN estos ignorata.

math.min

math.min( x, ... )

Liveras la minimuman kiomon inter ĝiaj kunvokatoj.

Konduto kun neniom NaN ne estas specifita. Kun la nuna efektivigo, NaN estos liverota se iom estas NaN, sed aliaj sekvantaj NaN estos ignorata.

math.modf

math.modf( x )

Liveras du nombroj, la entjera parto de iom kaj la frakcia parto de iom. Ekzemple, math.modf( 1.25 ) liveras 1, 0.25.

math.pi

La kiomo de traonĉirkaŭiom ( ).

math.pow

math.pow( x, y )

Ekvivalenta ol bazo^{pezo}.

math.rad

math.rad( x )

Liveras la angulon iom (esprimita per gradoj) en radioj.

math.random

math.random( m, n )

Liveras pseŭdo-hazarda nombro.

La lokoj tiom kaj aliom povas esti neinformataj, sed se specifataj ili induktigeblendas.

  • Senlokate, liveras rean nombron el la intervalo  
  • Kun unu lokato, liveras indukton el la intervalo  
  • Kun du lokatoj, liveras indukton el la intervalo  

Note that incorrect output may be produced if m or n are less than −2147483648 or greater than 2147483647, or if n - m is greater than 2147483646.

math.randomseed

math.randomseed( x )

Asignas iom kiel la semo por la pseŭdo-hazarda generilo.

Notu ke uzi la saman semon kaŭzos math.random eligi la saman sinsekvon de nombroj.

math.sin

math.sin( x )

Liveras la sinuson de iom (esprimata per radianoj)

math.sinh

math.sinh( x )

Revenas la hiperbolan sine de x.

math.sqrt

math.sqrt( x )

Liveras la duonan (kvadratan) radikon de x. Ekvivalenta ol iom^0.5.

math.tan

math.tan( x )

Liveras la tangento de iom (esprimata per radianoj).

math.tanh

math.tanh( x )

Liveras la hiperbola tangento de iom.

Estrila elordonteko

os.clock

os.clock()

Liveras proksimumon en sekundoj de procesoro tempuzado per la elordono.

os.date

os.date( format, time )

formatDate el lingva elordonteko estas uzebla por pli ampleksa datenaranĝo

Liveras signvicon aŭ ujon enhavanta daton kaj tempon, aranĝita laŭ prezento. Se la prezento ne estas informat aŭ nil, "%c" estas uzota.

Se tempo estas provizita, ĝi estas la aranĝenda tempo (vidu os.time()). Alie la nuna tempo estas uzota.

Se prezento komencas kun '!', tiam la dato estas aranĝita laŭ UTK prefere ol la loka tempo de la servilo. Post tiu opcia signo, se prezento estas la signvico "*t", tiam dato liveras ujon kun la sekvantaj kampoj:

  • year, plena jaro
  • month (1–12), monato
  • day (1–31), tago
  • hour (0–23), horo
  • min (0–59), minuto
  • sec (0–59), (escepto: la dua salto = 60)
  • wday, labortago, dimanĉo estas 1
  • yday, tago de la jaro
  • isdst (duopcia), taglumo savanta flagon; povas esti neĉeesta se la informo ne estas havebla

Se prezento ne estas "*t", tiam date liveras la daton kiel vicsigno, aranĝita laŭ la samaj reguloj kiel la C elstato strftime.

os.difftime

os.difftime( t2, t1 )

Liveras la nombron de sekundoj ekede ektempo ĝis halttempo.

os.time

os.time( table )

Liveras nombron, kiu reprezentas la nunan tempon.

Kiam vokata senlokate, liveras la nunan tempon. Se ujo estas pasita, la tempo kodita en la ujo estas analizota. La ujo havendas la kampon "year" (jaro), "month" (monato) kaj "day" (tago), kaj ankaŭ povas inkludi "hour" (horo, defaŭlte uzas 12), "min" (minutoj, defaŭlte uzas 0), "sec" (sekundoj defaŭlte uzas 0) kaj "isdst" (taglumo savanta flago).

Paka elordonteko

require

require( modulename )

Ŝargas la specifitan modulon.

Unue, ĝi konsideras package.loaded[modulonomo] por determini se la modulo estas jam ŝargita. Tiakaze, ĝi liveraspackage.loaded[modulonomo].

Alie, ĝi vokas ĉiu ŝargilo en la package.loaders sinsekvo por provi trovi ŝargilon de la modulo. Se iu ŝargilo estas trovata, tiu ĉi estas vokata. La kiomo liverata per la sârgilo estas ŝparita en package.loaded[modulonomo] kaj estas liverata.

Vidu la dokumentaron por package.loaders por informoj pri la haveblaj ŝargilojn.

Ekzemple, se vi havas modulon "Modulo:Donanto" enhavanta la jeno:

local p = {}

p.someDataValue = p.iudateniom = 'Saluton!'

return p

Vi povas ŝargi ĝin en alia modulo kun kodo kiel jena:

local giving = require( "Module:Giving" )

local value = giving.someDataValue -- local kiomo = donanto.iudateniom -- kiomo nun estas 'Saluton!'

package.loaded

Tiu ujo entenas la ŝargitan modulon. La indicoj estas la modulaj nomoj, kaj la kiomoj estas la kiomoj liveritaj kiam la modulo estis ŝargita.

package.loaders

Tiu ujo entenas la sinsekvon de serĉilaj elstatoj uzeblaj dum modula ŝargado. Ĉiu serĉila elstato estas vokata kun unuopa lokato, la nomo de la modulo ŝargenda. Se la modulo estas trovita, la serĉilo devas liveri elstaton kiu efektive ŝargos la modulon kaj liveros la kiomon liverata el require. Alie, ĝi devas liveri nil.

Scribunto provizas du serĉiloj:

  1. konsidere package.preload[modulename] por la serĉila elstato
  2. konsidere moduloj provizitaj per Scribunto por la modula nomo kaj, se tio malsukcesas, konsidere la Modulo: nomujo. La "Modulo:" prefikso devas esti provizata.

Notu ke la normaj ŝargiloj de Lua ne estas inkludataj.

package.preload

Tiu ujo entenas ŝargilajn elstatojn, uzitaj de la unua serĉilo ke Scribunto inkludas en package.loaders.

package.seeall

package.seeall( table )

Asignas la __index metastatvojon por ujo al _G.

Ĉena elordonteko

En ĉiuj ĉenaj (signovicaj) elstatioj, la unua signo lokiĝas en pozicio 1, ne en pozicio 0 kiel en C, PHP kaj Ĝavoskripto. Indicoj povas esti negativaj, en kiu kazo ili numeras ekde la fino de la ĉeno: pozicio -1 estas la lasta signo en la ĉeno, -2 estas la antaŭlasta, kaj tiel plu.

Averto: La ĉenateko supozas unu-okopajn signkodadojn. 'Ĝi ne povas pritrakti Unikodajn signojn. Por pritrakti Unikodajn ĉenojn, uzu la respondajn statvojon el la Unikodaĉena elordonteko de Scribunto.

string.byte

string.byte( s, i, j )

Se la ĉeno estas konsderita kiel vico da okopoj, liveras la okopajn kiomojn porvicov[ekero], vicov[ekero+1], ···, vico[finero]. La defaŭlta kiomo por ekero estas 1; La defaŭlta kiomo por finero estas ekero. Identa al mw.ustring.byte().

string.char

string.char( ... )

Liveras nulon aŭ pli da induktoj. Liveras ĉenon, kiun longecon egalas la nombro de lokatoj, en kiu ĉiu signo havas la okopan kiomon egala al ĝia responda lokato.

local value = string.char( 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x21 ) --local kiomo = string.char( 0x53, 0x61, 0x6c, 0x75, 0x74, 0x6f, 0x6e, 0x21 ) -- kiomo nun estas 'Saluton!'

Vidu mw.ustring.char() por simila elstato kiu uzas Unikoda signonumero anstataŭ okopaj kiomoj.

string.find

string.find( s, pattern, init, plain )

Serĉas la unuan kongruon de pattern en la ĉeno s. Se ĝi trovas kongruon, tiam find liveras la deŝovon (pozicion) en s kie tiu okazo komencas kaj finas; alie, ĝi liveras nil. Se la skemo havas kaptilojn, tiam kiam sukcese kongrui la kaptitaj kiomojn estas ankaŭ liverata post la du indicoj.

Tria, opcia nombra lokato ekero specifas kie komenci la serĉon; defaŭlte ĝi tiomas 1 kaj povas esti negativa. Se la kvara opcia lokato rekte tiomas true, tio malebligas la kongruivon, do la elstato faras rektan "subĉenan trovadon", kun neniu signo el skemo konsiderita kiel "skema".

Notu ke se rekte estas provizata, tiam ekero devas esti donita ankaŭ.

Vidu mw.ustring.find() por simila elstato etendita kiel priskribita en Unikoda-ĉenaj skemoj kaj kie la ekero deŝovo estas en signoj anstataŭ okopoj.

string.format

string.format( formatstring, ... )

Liveras formigitan version de ĝia varia nombro de kunvokatoj, kiuj sekvantas la priskribon donitan en ĝia unua kunvokato (kiu devas esti ĉeno).

La formĉeno uzas liman subaron de la printf formigaj specifiloj:

  • Rekonitaj flagojn estas '-', '+',' ', '#' kaj'0'.
  • Induktaj kampo-larĝoj ĝis 99 estas apogita. '*' ne estas apogita.
  • Induktaj precizecoj ĝis 99 estas apogita. '*' Ne estas apogita.
  • Longecaj modifiloj ne estas apogita.
  • Rekonitaj transtipi-specifiloj estas 'c', 'd', 'i', 'o', 'u', 'x', 'X', 'e', 'E', 'f', 'g', 'G', -a', '%' kaj la ne-norma 'q'.
  • Poziciaj specifiloj (ekz. "%2$s") ne estas apogita.

La transtipi-specifilo 'q' estas kiel 's', sed formas la ĉenon en formo taŭga por sekure relegi per la Lua interpretilo: la ĉeno estas skribita inter dustrekaj rektaj citiloj kaj ĉiuj dustrekaj citiloj, linifinoj, enkorpigitaj nuloj kaj sobstrekoj en la ĉeno estas korekte sencoŝaltitaj kiam skribitaj.

Transtipado inter ĉenoj kaj nombroj estas elfarita kiel specifita en datenaj tipoj; aliaj tipoj ne estas aŭtomate transtipitaj al ĉenoj. Ĉenoj enhavanta la NUL nula signojn (okopo kiu tiomas 0) ne estas konvene pritraktita.

Identa al mw.ustring.format().

string.gmatch

string.gmatch( s, pattern )

Liveras laŭciklilan elstaton kiu liveras la sekvantajn kaptatojn de skemo laŭ ĉeno signvico po unu por ĉiu voko. Se skemo specifas neniun kaptilon, tiam la tuta kongruo estas produktita por ĉiu voko.

Por tiu elstato, ĉapelo '^' ne konsiderata kiel speciala skema signo kiam ĝi estas la unua signo de la ĉeno, kiel tio antaŭhaltigus la cikladon. Ĝi estas traktita kiel rektsigno.

Vidu mw.ustring.gmatch() por simila elstato por kiu la skemo estas etendita kiel priskribita en unikodaĉenaj skemoj.

string.gsub

string.gsub( s, pattern, repl, n )

Liveras kopion de signvico el kiu okozoj de skemo estis anstataŭita per la anstataŭo, tipunta kiel ĉena, uja aŭ elstata. Se la opcia ripeto estas provizita, ĝi limas la nombron da anstataŭigo, alie ĉiuj okazoj estas anstataŭitaj. gsub ankaŭ liveras duakiome la totalan nombron da kongruo kiu okazis.

Se anstataŭo estas ĉeno, tiam ĝia kiomo estas uzita por anstataŭado. La signo % efikas kiel sencŝalto: ajna sinsekvo en anstataŭo laŭ la formo %iom, kie iom estas inter 1 kaj 9, figuras la kiomo de la iom-a kaptato subĉeno. La sinsekvo %0 figuras la tuta kongruo, kaj la sinsekvo %% figuras rektsola %.

Se anstataŭo estas ujo, tiam la ujo estas petata por ĉiu kongruo, uzanta la unuan kapton kiel la indico; se la skemo specifas neniun kaptilon, tiam la tuta kongruo estas uzita kiel indico.

Se anstataŭo estas elstato, tiam tiu elstato estas vokita por ĉiutempe kongruo okazas, kun ĉiuj kaptitaj subĉenoj pasitaj kiel kunvokatoj samorde; se la skemo specifas neniun kaptilon, tiam la tuta kongruo estas pasita kiel unika kunvokato.

Se la kiomo liverata per la uja peto aŭ de la elstata voko estas ĉeno aŭ nombro, tiam ĝi estas uzita kiel la anstataŭaĵa ĉeno; alie, se ĝi estas falsa aŭ seniom, tiam estas neniu anstataŭado (tio estas, la originala kongruo estas konservita en la ĉeno).

Vidu mw.ustring.gsub() por simila elstato en kiu la skemo estas etendita kiel priskribita en Unikodaĉenaj skemoj.

string.len

string.len( s )

Liveras la longecon de la ĉeno, esprimata en okopoj. Bone pritraktas la ASCIIan nulsignon NUL. Ekvivalenta al #signvico.

Vidu mw.ustring.len() por simila elstato, kiu uzas Unikodajn signonumerojn anstataŭ okopoj.

string.lower

string.lower( s )

Liveras kopion de tiu ĉeno kun ĉiuj ASCIIaj majusklaj leteroj ŝanĝitaj al minuskloj. Ĉiuj aliaj signoj estas senŝanĝe lasitaj.

Vidu mw.ustring.lower() por simila elstato en kiu ĉiuj signoj kun majusklaj al minusklaj difinoj en Unikodo estas transuskitaj.

string.match

string.match( s, pattern, init )

Serĉas la unuan kongruon de skemo en la ĉeno. Se ĝi trovas iun, tiam kongruo liveras la kaptatojn de la skemo; alie ĝi liveras%s nil. Se skemo specifas neniun kapton, tiam la tuta kongruon estas liverita.

Tria, opcia nombra kunvokato ekero specifas kie komenci la serĉon; ĝi defaŭlte valoras 1 kaj povas esti negativa.

Vidu mw.ustring.match() por simila elstato en kiu la skemo estas etendita kiel priskribita en Unikodaĉenaj skemoj kaj la ekero deŝovo estas signoj anstataŭ okopoj.

string.rep

string.rep( s, n )

Liveras ĉenon kiu estas la kunĉenigo de n da kopioj de la ĉeno s. Identa al mw.ustring.rep().

string.reverse

string.reverse( s )

Liveras ĉenon kiu estas la laŭokopa inversa de la ĉeno s.

string.sub

string.sub( s, i, j )

Liveras la subĉenon el s kiu numere komencas al la i kaj ĉesas al j; i kaj j povas esti negativaj. Se j estas nula aŭ preterlasita, ĝi daŭros ĝis la fino de la ĉeno.

Aparte, la voko string.sub(signvico, 1, iom) liveras iom-longan prefikson de signvico kaj string.sub(signvico, -iom) liveras iom-longan sufikson de signvico.

Vidu mw.ustring.sub() por simila elstato kie la deŝovoj estas en signoj anstataŭ okopoj.

string.ulower

string.ulower( s )

An alias for mw.ustring.lower().

string.upper

string.upper( s )

Liveras kopion de tiu ĉeno kun ĉiuj ASCIIaj minusklaj leteroj ŝanĝitaj al majuskloj. Ĉiuj aliaj signoj estas senŝanĝe lasitaj.

Vidu mw.ustring.upper() por simila elstato en kiu ĉiuj signoj kun minusklaj al majusklaj difinoj en Unikodo estas transuskitaj.

string.uupper

string.uupper( s )

An alias for mw.ustring.upper().

Skemoj

Notu ke la skemoj de Lua estas similaj al skemvolvoj, sed ne estas identaj. Aparte, notu la sekvantajn diferencojn de skemvolvoj kaj Perl-kongruaj skemvolvoj:

  • La citilsigno estas procento (%), ne sobstreko (\).
  • Punkto (.) ĉiam kongruas kun ĉiuj signoj, inklude linifino.
  • Neniu neuskleciva modo.
  • Neniu alterno (la elstatilo |).
  • Kvantigiloj (*, +, ? kaj -) nur povas esti aplikita al unuopaj signoj aŭ signaj klasoj, ne el kaptgrupojn.
  • La unika nekaptema kvantigilo estas -, kiu estas ekvivalenta al Perl-kongruskemvolvaj kvantigilo *?.
  • No generalized finite quantifier (e.g. the {n,m} quantifier in PCRE).
  • The only zero-width assertions are ^, $, and the %f[set] "frontier" pattern; assertions such as PCRE's \b or (?=···) are not present.
  • Patterns themselves do not recognize character escapes such as "\ddd". However, since patterns are strings these sort of escapes may be used in the string literals used to create the pattern-string.

Ankaŭ notu ke skemo ne povas enhavi enkorpigitan nulan okopon (ASCIIa NUL, "\0"). Uzu %z anstataŭ.

Ankaŭ vidu Ustring patterns por simila skem-kaptado aranĝo uzanta Unikodaj signoj.

Signa klaso

Signa klaso estas uzita por reprezenti aron de signoj. La sekvantaj kombinaĵoj estas permesitaj kiam priskribi signan klason:

x * o:(kie x ne estas unu el la skemaj signoj el ^$()%.[]+-?) reprezentas la signon x mem.
. * .: (punkto) reprezentas ĉiuj signoj.
%a * %a: (percento) reprezentas ĉiuj ASCIIaj leteroj.
%c * %c: reprezentas ĉiuj ASCIIaj kontrolaj signoj.
%d Represents all digits.
%l Represents all ASCII lowercase letters.
%p Represents all punctuation characters.
%s Represents all ASCII space characters.
%u Represents all ASCII uppercase letters.
%w Represents all ASCII alphanumeric characters.
%x Represents all hexadecimal digits.
%z Represents ASCII NUL, the zero byte.
%A All characters not in %a.
%C All characters not in %c.
%D All characters not in %d.
%L All characters not in %l.
%P All characters not in %p.
%S All characters not in %s.
%U All characters not in %u.
%W All characters not in %w.
%X All characters not in %x.
%Z All characters not in %z.
%x (where x is any non-alphanumeric character) represents the character x. This is the standard way to escape the magic characters. Any punctuation character (even the non magic) can be preceded by a '%' when used to represent itself in a pattern.
[set]

Represents the class which is the union of all characters in set. A range of characters can be specified by separating the end characters of the range with a '-'. All classes %x described above can also be used as components in set. All other characters in set represent themselves. For example, [%w_] (or [_%w]) represents all alphanumeric characters plus the underscore, [0-7] represents the octal digits, and [0-7%l%-] represents the octal digits plus the lowercase letters plus the '-' character.

The interaction between ranges and classes is not defined. Therefore, patterns like [%a-z] or [a-%%] have no meaning.

[^set] Represents the complement of set, where set is interpreted as above.

Skemaj eroj

Skema ero povas esti

  • unuopa signa klaso, kiu kongruas kun ajnan unuopan signon en la klaso;
  • unuopa signa klaso sekvita de '*', kiu kongruas kun 0 aŭ pli da ripetoj de signoj en la klaso. Tiuj ripetaj eroj ĉiam kongruos kun la sinsekvo kiu estas plej longa ebla;
  • unuopa signa klaso sekvita de '+', kiu kongruas kun 1 aŭ pli da ripetoj de signoj en la klaso. Tiuj ripetaj eroj ĉiam kongruos kun la sinsekvo kiu estas la plej longa ebla;
  • a single character class followed by '-', which also matches 0 or more repetitions of characters in the class. Unlike '*', these repetition items will always match the shortest possible sequence;
  • a single character class followed by '?', which matches 0 or 1 occurrence of a character in the class;
  • %n, for n between 1 and 9; such item matches a substring equal to the n-th captured string (see below);
  • %bxy, where x and y are two distinct characters; such item matches strings that start with x, end with y, and where the x and y are balanced. This means that, if one reads the string from left to right, counting +1 for an x and -1 for a y, the ending y is the first y where the count reaches 0. For instance, the item %b() matches expressions with balanced parentheses.
  • %f[set], a frontier pattern; such item matches an empty string at any position such that the next character belongs to set and the previous character does not belong to set. The set set is interpreted as previously described. The beginning and the end of the subject are handled as if they were the character '\0'.


Note that frontier patterns were present but undocumented in Lua 5.1, and officially added to Lua in 5.2. The implementation in Lua 5.2.1 is unchanged from that in 5.1.0.

Skemo

Skemo estas sinsekvo de skemaj eroj.

'^' ĉe komenco de skemo fiksas la kongruon ĉe la komenco de la tema ĉeno. '$' ĉe la fino de skemo fiksas la kongruon ĉe la fino de la tema ĉeno. Ĉe aliaj pozicioj, '^' kaj '$' havas ne specialan signifon kaj reprezentas ili mem.

Kaptoj

Skemo povas enhavi sub-skemoj envolvitaj inter kromoj; ili priskribas kaptojn. Kiam kongruo sukcesas, la subĉenoj de la tema ĉeno kiu kongruas kun kaptojn estas ŝparitaj ("kaptitaj") por estonta uzo. Kaptoj estas numerataj laŭ iliaj ovraj kromoj. Ekzemple, en la skemo (a*(.)%w(%s*)), la parto de la ĉeno kongruanta kun a*(.)%w(%s*) estas ŝparita kiel la unua kapto (kaj sekve havas numero 1); la signo kongruanta kun . estas kaptita kun numero 2 kaj la parto kongruanta kun %s* havas numeron 3.

Kaptaj referencoj povas aperi en la skema ĉeno ĝin mem kaj retroreferi al teksto kiu estis kaptita antaŭe en la kongruo. Ekzemple, ([a-z])%1 kongruos kun ajna paro de ASCIIaj identaj minusklaj leteroj, dum ([a-z])([a-z])([a-z])[a-z]%3%2%1 kongruos kun ajna 7-letera palindromo.

Kiel speciala kazo, la vakua kapto () kaptas la nunan laŭĉenan pozicion (numeron). Ekzemple, aplikante la skemon "()aa()" al la ĉeno "flaaap", estos du kaptoj: 3 kaj 5.

Known limitations: Unlike Ustring library patterns, String library patterns may not contain more than 32 captures. If the pattern has more, then the String function will throw an error. Because the Ustring library has its own maximum of 10,000 bytes for patterns (unlike the String library), it is therefore impossible to use a pattern which exceeds both limits, as it will be incompatible with both libraries.

Uja elordonteko

Plejpartaj de elstatoj en la uja elordonteko supozas ke la ujo reprezentas sinsekvon.

La elstatoj table.foreach(), table.foreachi(), kaj table.getn() povas esti havebla sed estas evitindaj. Uzu for ciklilon kun pairs(), for ciklilon kun ipairs(), kaj la longecan elstatilon anstataŭe.

table.concat

table.concat( table, sep, i, j )

Provizitan ujon kie ĉiuj eroj estas ĉenoj aŭ nombroj, liveras ujo[ekero] .. ligo .. ujo[ekero+1] ··· ligo .. ujo[finero].

Defaŭlte ligo estas la vakua ĉeno, ekero estas 1 kaj finero estas la longeco de la ujo. Se ekero estas pli granda ol finero, la vakua ĉeno estas liverota.

table.insert

table.insert( table, value )
table.insert( table, pos, value )

Enmetas eron stato al pozicio ejo en ujo, ŝovanta poste aliaj eroj al aperta spaco, se necesa. Defaŭlte pos estas la longeco de la ujo plus 1, do kiam vokata table.insert(ujo, iom) enmetas iom ĉe la fino de ujo

Eroj ĝis #ujo estas ŝovitaj; vidu Longeca elstatilo por avertoj pri kiam la ujo ne estas sinsekvo.

Note: when using the pos parameter, value should not be nil. Attempting to insert an explicit nil value into the middle of a table will result in undefined behaviour, which may delete elements in the table unpredictably.

table.maxn

table.maxn( table )

Liveras la plej grandan pozitivan nombran indicon el la donita ujo aŭ nulo se la ujo ne havas pozitivajn nombrajn indicojn.

Por fari tion, ĝi traciklas laŭ la tuta ujo. Tio estas proksime ekvivalenta al

function table.maxn( table )
    local maxn, k = 0, nil
    repeat
        k = next( table, k )
        if type( k ) == 'number' and k > maxn then
            maxn = k
        end
    until not k
    return maxn
end

table.remove

table.remove( table, pos )

Forigas de ujo la ero ĉe pozicio ejo, ŝovanta antaŭen la aliaj eroj por densigi la spacon, se necesa. Liveras la kiomon de la forigita ero. Defaŭlte ejo estas la longeco de la ujo, por ke la voko table.remove( ujo ) forigas la lastan eron de ujo.

Eroj ĝis #ujo estas ŝovitaj; vidu Longeca elstatilo por avertoj pri kiam la ujo ne estas sinsekvo.

table.sort

table.sort( table, comp )

Ordigas la ujaj eroj laŭ provitaj ordo, ĉi-tiea, el ujo[1] al ujo[#ujo].

Se ordigo estas donita, tiam ĝi devas esti elstato kiu prenas du ujajn kunvokatojn kaj liveras veran kiam la unua estas malpli granda ol la dua (do kiam not ordigo(ero[iom+1],ero[iom]) estos vera post la ordigo). Se ordigo ne estas provizita, tiam la norma Lua elstatilo < estas uzita anstataŭ.

If comp is given, then it must be a function that receives two table elements, and returns true when the first is less than the second (so that not comp(a[i+1],a[i]) will be true after the sort). If comp is not given, then the standard Lua operator < is used instead.

La ordiga ciklsolvilo ne estas stabila; tio estas, eroj konsideritaj egalaj laŭ la provizita ordo povas havi iliajn relativajn poziciojn ŝanĝita per la ordigo.

Scribuntaj elordontekoj

Ĉiuj Scribuntaj elordontekoj estas lokitaj en la ujo mw.

Bazaj elstatoj

mw.addWarning

mw.addWarning( text )

Aldonas averton kiu estas montrita supre de la antaŭprezento kiam antaŭprezentanta redakto. teksto estas analizita kiel vikiteksto.

mw.allToString

mw.allToString( ... )

Vokas tostring() laŭ ĉiuj kunvokatojn, tiam kunĉenas ilin kun taboj kiel apartigiloj.

mw.clone

mw.clone( value )

Kreas plenkopion de kiomo. Ĉiuj ujoj (kaj ilia metaujoj) estas reekkonstruita. Tamen, elstatoj estas ankoraŭ komunaj.

mw.getCurrentFrame

mw.getCurrentFrame()

Liveras la nunan kadran objekton, kutime la kadra objekto de la plej lastatempa #invoke.

mw.incrementExpensiveFunctionCount

mw.incrementExpensiveFunctionCount()

Aldonas unu al la "altekosta disponigila elstato" nombrado kaj pelas escepton se ĝi preterpasas la limon (vidu $wgExpensiveParserFunctionLimit ).

mw.isSubsting

mw.isSubsting()

Liveras veran se la nuna #invoke estas substituata, falsan alie. Vidu liverantan tekston supre por diskuto pri diferencoj inter substituado kaj nesubstituado.

mw.loadData

mw.loadData( module )

Foje modulo necesas ampleksan ujo da dateno; ekzemple, ĝenerala-cela modulo por konverti unuojn de mezuro povus necesi ampleksan ujon de rekonitaj unuoj kaj iliaj konvertadaj faktorojn. Kaj foje tiuj moduloj estos uzitaj multfoje mempaĝe. Disponigi la ampleksan datenan ujon por ĉiu {{#invoke:}} povas uzi gravan kvanton da tempo. Por eviti tiun aferon, mw.loadData() estas provizita.

mw.loadData efikas kiel require(), kun la jenaj aliecoj:

  • La ŝargita modulo estas statigita nur unu fojo paĝŝarge, anstataŭ unu fojo voke de {{#invoke:}}
  • La ŝargita modulo ne estas registrita en package.loaded.
  • La kiomo liverita de la ŝargita modulo devas esti ujo. Aliaj datenaj tipoj ne estas apogitaj.
  • La liverita ujo (kaj ĉiuj subujoj) povas enhavi nuran duopcioj, nombroj, ĉenoj kaj aliaj ujoj. Aliaj datenaj tipoj, precipe elstatoj, ne estas permesitaj.
  • La liverita ujo (kaj ĉiuj subujoj) ne povas havi metaujo.
  • Ĉiuj ujaj kiuoj devas esti duopciaj, nombroj aŭ ĉenoj.
  • La ujo efektive liverita de mw.loadData() havas metastatvojoj kiuj provizas nurlegajn alirojn al la ujo liverita el la modulo. Pro tio ke ĝi ne enhavas la datenon rekte, pairs() kaj ipairs() efikos sed aliaj metodoj, inklude #value, next(), kaj la elstatoj en la Uja elordonteko, ne efikos korekte.

La hipoteza unuo-konvertila modulo menciita supre povus enteni ĝian kodon en "Modulo:Konvertilo" kaj ĝia dateno en "Modulo:Konvertilo/dateno" kaj "Modulo:Konvertilo" uzus local dateno = mw.loadData( 'Modulo:Konvertilo/dateno' ) por efike ŝarĝi la datenojn.

mw.loadJsonData

mw.loadJsonData( page )

This is the same as mw.loadData() above, except it loads data from JSON pages rather than Lua tables. The JSON content must be an array or object. See also mw.text.jsonDecode().

mw.dumpObject

mw.dumpObject( object )

Seriigas objekto al homo-legebla prezento, tiam liveras la rezultontan ĉenon.

mw.log

mw.log( ... )

Pasas la kunvokatojn al mw.allToString(), kaj tiam almetas la rezultintan ĉenon al la protokla bufro.

En la erarseĉa konzolo, la elstato print() estas alinomo por tiu elstato.

mw.logObject

mw.logObject( object )
mw.logObject( object, prefix )

Vokas mw.dumpObject() kaj alfiksas la rezultintan ĉenon al la protokola bufro. Se prefikso estas donita, ĝi estos aldonota al la protokola bufro, sekvota de egalsigno antaŭ la seriigita ĉeno estas alfiksita (t.e. la protokol teksto estos "prefikso = objekto-ĉeno").

Kadra objekto

La kadra objekto estas la fasado al la transvokatoj pasitaj al {{#invoke:}}, kaj al la disponigilo.

Note that there is no frame library, and there is no global variable named frame. A frame object is typically obtained by being passed as a parameter to the function called by {{#invoke:}}, and can also be obtained from mw.getCurrentFrame().

frame.args

Ujo por aliri la kunvokatojn pasitajn al la kadro. Ekzemple, se modulo estas vokita ekde vikiteksto kun

{{#invoke:module|function|arg1|arg2|name=arg3}}

tiem frame.args[1] liveros "ekkunvokato", frame.args[2] liveros "mezkunvokato", kaj frame.args['nomo'] (aŭ frame.args.nomo) liveros "finkunvokato". Estas ankaŭ ebla tracikli la laŭ kunvokatoj per pairs( frame.args )ipairs( frame.args ). However, due to how Lua implements table iterators, iterating over arguments will return them in an unspecified order, and there's no way to know the original order as they appear in wikitext.

Notu ke valoroj en tiu ujo estas ĉiam ĉenoj; tonumber() povas esti uzita por nombratipigi ilin, se necesa. Kiuoj, tamen, estas nombroj eĉ se eksplicite provizitaj en la alvokado: {{#invoke:module|function|1|2=2}} provizas ĉenajn kiomojn "1" kaj "2", numere indicitaj per 1 kaj 2.

Kiel en Mediavikiaj ŝablonaj alvokadoj, nomitaj kunvokatojn havos ekstremajn blankspacojn forigitaj de ambaŭ la nomo kaj la kiomo antaŭ ke ili estas pasitaj al Lua, dum nenomitaj kunvokatoj ne havos blankspacojn viŝitajn.

Por rendimentaj kialoj, frame.args uzas metaujoj, anstataŭ rekte enhavi la kunvokatojn. Kunvokataj kiomoj estas petita de Mediavikio laŭ demando. Tio signifas ke plejparto de aliaj tablaj statvojoj ne laboros korekte, inklude #frame.args, next( frame.args ), kaj elstatoj en uja elordonteko.

Se antaŭprocesora sintakso kiel ŝablonaj alvokoj kaj trioblaj krampaj argumentoj estas inkluzivita ene de argumento al #invoke, ili ne pligrandiĝos, post esti pasigitaj al Lua, ĝis iliaj valoroj estos petitaj en Lua. Se kelkaj specialaj etikedoj estas skribitaj en XMLa notacio, kiel <pre>, <nowiki>, <gallery> kaj <ref>, estas inkluditaj kiel kunvokatoj de #invoke, tiam tiuj etikedoj estos transformita "senigaj signoj" — specialaj ĉenoj kiuj komencas kun foriga signo (ASCIIa 127), anstataŭenda kun HTMLo post ili estas liverota de #invoke.

frame:callParserFunction

  • frame:callParserFunction( name, args )
  • frame:callParserFunction( name, ... )
  • frame:callParserFunction{ name = string, args = table }
Notu la uzon de nomitaj kunvokatojn.

Voku disponigila elstato, liveranta konvena ĉeno. Kiam ebla, soklaj elstatoj de Lua aŭ de Scribunto-a elstatoteko devus esti preferata al tiu elvokingaro.

La sekvantaj vokoj estas proksimume ekvivalentaj al la indikitaj vikitekstoj:

-- {{ns:0}}
frame:callParserFunction( 'ns', { 0 } )
frame:callParserFunction( 'ns', 0 )
frame:callParserFunction{ name = 'ns', args = { 0 } }

-- {{#tag:nowiki|some text}}
frame:callParserFunction( '#tag', { 'nowiki', 'some text' } )
frame:callParserFunction( '#tag', 'nowiki', 'some text' )
frame:callParserFunction( '#tag:nowiki', 'some text' )
frame:callParserFunction{ name = '#tag', args = { 'nowiki', 'some text' } }

-- {{#tag:ref|some text|name=foo|group=bar}}
frame:callParserFunction( '#tag', { 'ref',
    'some text', name = 'foo', group = 'bar'
} )

Notu ke, kiel kun frame:expandTemplate(), la elstata nomo kaj kunvokatoj ne estas preprocezitaj antaŭ ke ili estas pasitaj al la disponigila elstato.

frame:expandTemplate

frame:expandTemplate{ title = title, args = table }

Notu la uzon de nomitaj kunvokatojn.

This is equivalent to a call to frame:callParserFunction() with function name 'msg' (see Help:Magic words#Transclusion modifiers) and with title prepended to args.

Tio ĉi estas transkludo. La voko

frame:expandTemplate{ title = 'template', args = { 'arg1', 'arg2', name = 'arg3' } }

faras proksimume la saman efikon per Lua ol {{ŝablono|ekkunvokato|mezkunvokato|nomo=finkunvokato}} faras per vikiteksto. Kiel en transhavigo, se la pasita titolo ne enhavas nomuja prefikso ĝi estos supozita esti en la Ŝablono: nomujo.

Noto ke la titolo kaj kunvokatoj ne estas preprocezita antaŭ ili estas pasitaj al la ŝablono:

-- Tio estas proksimume ekvivalenta al vikiteksto kiel {{template|{{!}}}}
frame:expandTemplate{ title = 'template', args = { '|' } }
frame:callParserFunction{ 'msg', { 'template', '|' } }

-- Tio estas proksimume ekvivalenta al vikiteksto kiel {{template|{{((}}!{{))}}}}
frame:expandTemplate{ title = 'template', args = { '{{!}}' } }
frame:callParserFunction{ 'msg', { 'template', '{{!}}' } }

frame:extensionTag

  • frame:extensionTag( name, content, args )
  • frame:extensionTag{ name = string, content = string, args = table_or_string }

Tio estas ekvivalenta kun voko al frame:callParserFunction() kune kun elstata nomo '#tag:' .. nomo kaj kun content prefiksita al args.

-- Tiuj estas ekvivalentaj
frame:extensionTag( 'ref', 'some text', { name = 'foo', group = 'bar' } )
frame:extensionTag{ name = 'ref', content = 'some text', args = { name = 'foo', group = 'bar' } }
frame:callParserFunction( '#tag', { 'ref' ,
    'some text', name = 'foo', group = 'bar'
} )

-- Tiuj estas ekvivalentaj
frame:extensionTag{ name = 'ref', content = 'some text', args = { 'some other text' } }
frame:callParserFunction( '#tag', { 'ref',
    'some text', 'some other text'
} )

frame:getParent

frame:getParent()

Vokita sur la kadro kreita fare de {{#invoke:}}, liveras la kadron por la paĝo kiu vokis {{#invoke:}}. Vokita sur tiu kadro, liveras nil.

Ekzemple, se la ŝablono{{Ekzemplo}} enhavas la kodon {{#invoke:ModuleName}}, kaj paĝo transhavigas tiun ŝablonon kaj provizas transvokatojn al ĝi ({{Ekzemplo|ekero|finero}}), vokado de mw.getCurrentFrame():getParent().args[1], mw.getCurrentFrame():getParent().args[2] en Modulo:ModuloNomo liveros "ekero", "finero".

frame:getTitle

frame:getTitle()

Liveras la titolon asociitan kun la kadro kiel ĉeno. Por la kadro kreita fare de {{#invoke:}}, tio ĉi estas la titolo de la modulo alvokita.

frame:newChild

frame:newChild{ title = title, args = table }

Notu la uzon de nomitaj kunvokatojn.

Kreas novan kadran objekton kiu estas ido de la nuna kadro, kun opciaj kunvokatoj kaj titolo.

Tio estas ĉefe celita por uzo en la spura konsolo por elprovantaj elstatoj kiuj normale estus vokita per {{#invoke:}}. La nombro de kadroj kreeblaj unuopatempe estas limigita.

frame:preprocess

  • frame:preprocess( string )
  • frame:preprocess{ text = string }

Tio elvolvas vikitekston en la vokejo de la kadro, t.e. ŝablonoj, disponigilaj elstattoj kaj transvokatoj kiel {{{1}}} estas elvolvitaj. Kelkaj specialaj etikedoj skribitaj laŭ XML-stila notacio, kiel <pre>, <nowiki>, <gallery> kaj <ref>, estos anstataŭigita kun "senigaj signoj" — specialaj ĉenoj kiuj komencas kun foriga signo (ASCIIa 127), estas anstataŭigataj kun HTMLo post ili estas liverota de #invoke.

Se vi estas elvolvanta unuopa ŝablono, uzu frame:expandTemplate anstataŭ provi konstruadon de vikiteksta ĉeno pasebla al ĉi tiu statvojo. Ĝi estas pli rapida kaj malpli erarema se la kunvokatoj enhavas ortstrekon aŭ alian vikimarkilon.

If you are expanding a single parser function, use frame:callParserFunction for the same reasons.

frame:getArgument

  • frame:getArgument( arg )
  • frame:getArgument{ name = arg }

Akiras objekton por la specifita kunvokato aŭ tiomas nil se la argumento ne estas provizita.

La liverita objekto havas statvojo, objekto:expand(), kiu liveras la elvolvita vikiteksto de la kunvokato.

frame:newParserValue

  • frame:newParserValue( text )
  • frame:newParserValue{ text = text }

Liveras objekton kun statvojo objekto:expand(), kiu liveras la rezulto de frame:preprocess( teksto ).

frame:newTemplateParserValue

frame:newTemplateParserValue{ title = title, args = table }

Notu la uzon de nomitaj kunvokatojn.

Liveras objekton kun statvojo objekto:expand(), kiu liveras la rezulto de frame:expandTemplate vokita kun la provizitaj kunvokatoj.

frame:argumentPairs

frame:argumentPairs()

Same ol pairs( frame.args ). Inkludita por retrokongrueco.

Hakteko

mw.hash.hashValue

mw.hash.hashValue( ciklsolvilo, kiomo )

Haku ĉenan kiomon kun la specifita ciklsolvilo. Validaj ciklsolviloj povas esti ŝargita per mw.hash.listAlgorithms().

mw.hash.listAlgorithms

mw.hash.listAlgorithms()

Liveras liston de apogita hakantaj ciklsolviloj, uzebla per mw.hash.hashValue().

HTMLa elstatteko

mw.html estas flua fasado por konstrui kompleksan HTML ekde Lua. mw.html objekto estas kreebla per mw.html.create.

Elstatoj dokumentitaj kiel mw.html.name estas haveblaj laŭ la ĉiea mw.html ujo; elstatoj dokumentitaj kielmw.html:name kaj html:name estas statvojoj de mw.html objekto (vidu mw.html.create).

Baza ekzemplo povus aspekti jene:

local div = mw.html.create( 'div' )
div
     :attr( 'id', 'testdiv' )
     :css( 'width', '100%' )
     :wikitext( 'Some text' )
     :tag( 'hr' )
return tostring( div )
-- Output: <div id="testdiv" style="width:100%;">Some text<hr /></div>

mw.html.create

mw.html.create( tagName, args )

Kreas novan mw.html objecto kiu enhavas tagName HTMLan eron. Vi ankaŭ povas pasi vakua ĉeno aŭ nil kiel tagName por krei vakua mw.html objekto.

kunvokatoj povas esti ujo kun la sekvantaj indicoj:

  • kunvokatoj.selfClosing: Devigas la nunan etikedon esti mem-fermo, eĉ se mw.html ne rekonas ĝin kiel mem-fermo
  • kunvokatoj.parents: antaŭanto de la nuna mw.html anaĵo (celita al interna uzado)

mw.html:node

html:node( builder )

Almetas idan mw.html-an (konstruilo) nodon al la nuna mw.html anaĵo. Se nil transvokato estas pasita, tio estas vakigo. Ĉiu (konstruilo) nodo estas ĉena prezento de HTMLa ero.

mw.html:wikitext

html:wikitext( ... )

Almetas nedeterminitan nombron de vikiteksta ĉeno al la mw.html objekto.

Notu ke tiu ĉesas ĉe la unua nil ero.

mw.html:newline

html:newline()

Almetas linifino al la mw.html objekto.

mw.html:tag

html:tag( tagName, args )

Almetas novan idan nodon kun la donita etikedoname al la konstruilo, kaj liveras mw.html anaĵo prezentanta tiun novan nodon. La args transvokato estas identa al tio de mw.html.create

Note that contrarily to other methods such as html:node(), this method doesn't return the current mw.html instance, but the mw.html instance of the newly inserted tag.

Make sure to use html:done() to go up to the parent mw.html instance, or html:allDone() if you have nested tags on several levels.

mw.html:attr

html:attr( name, value )
html:attr( table )

Asignas HTMLan atributon kun la donita nomo kaj kiomo al la nodo. Alternative ujo entenanta nomo->kiomo paroj de asignenda povas esti pasita. En la unua formo, vakua kiomo nil kaŭzas ajnan atributon kun la donita nomo esti malasignota se ĝi estis antaŭe asignita.

mw.html:getAttr

html:getAttr( name )

Akiras la kiomo de HTMLa atributo antaŭe fiksita per html:attr() kun la donita nomo.

mw.html:addClass

html:addClass( class )

Aldonas klasan nomon al la klasa atributo de la nodo. Se nil kunvokato estas pasita, tiu estas vakigo.

mw.html:css

html:css( name, value )
html:css( table )

Asignas CSSan atributon kun la donita nomo kaj kiomo al la nodo. Alternative ujo entenanta nomo->kiomo paroj de asignendaj atributoj povas esti pasita. En la unua formo, vakua kiomo nil kaŭzas ajnan atributon kun la donita nomo esti malasignota se ĝi estis antaŭe asignita.

mw.html:cssText

html:cssText( css )

Aldonas kelkajn krudajn CSS (sternstiligo) al la style atributo de la nodo. Se nil kunvokato estas pasita, tio estas vakigo.

mw.html:done

html:done()

Liveras la antaŭantan nodon sub kiu la nuna nodo estis kreita. Kiel jQuery.end, tio estas oportuna elstato por ebli la konstruon de pluraj idaj nodoj esti ĉenita kune en unuopa ordono.

mw.html:allDone

html:allDone()

Kiel html:done(), sed plentransiras ĝis la radika nodo de la arbo kaj liveras ĝin.

Lingvoteko

Lingvaj kodoj estas priskribita en rilata dokumentaro. Multaj de la lingvaj kodoj el Mediavikio estas similaj al IETFaj lingvaj etikedoj, sed ne ĉiuj Mediavikiaj lingvaj kodoj estas validaj IETFaj etikedoj aŭ inverse.

Elstatoj dokumentitaj kiel mw.language.nomo estas haveblaj el la ĉiea mw.language ujo; elstatoj dokumentitaj kiel mw.language:nomo estas stavojoj de lingva objekto (vidu mw.language.new).

mw.language.fetchLanguageName

mw.language.fetchLanguageName( code, inLanguage )

La plena nomo de la lingvo por la donita lingva kodo: indiĝena noma (endonomo) defaŭlte, nomo tradukita en cela lingvo se kiomo estas donita por inLanguage.

mw.language.fetchLanguageNames

mw.language.fetchLanguageNames()
mw.language.fetchLanguageNames( inLanguage )
mw.language.fetchLanguageNames( inLanguage, include )

Venigas la liston de lingvoj konitaj de Mediavikio, liveranta ujo kiu mapigas lingvan kodon al lingva nomo.

Defaŭlte la nomo liverata estas la endonomo de la lingvo; pasi lingvan kodon per cellingvo liveras ĉiuj nomoj en tiu lingvo.

Defaŭlte, nur lingvaj nomoj konitaj en Mediavikio estas liveritaj; pasanta 'all' pro include liveros ĉiujn haveblajn lingvojn (ekz. de Extension:CLDR ), dum pasanta 'mwfile' inkludos nur lingvojn enhavantaj akomodaj mesaĝoj inkluditaj kun Mediavikia kerno aŭ ebigitaj kromaĵoj. Por eksplicite elekti la defaŭlton, 'mw' povas esti pasita.

mw.language.getContentLanguage

mw.language.getContentLanguage()
mw.getContentLanguage()

Liveras novan lingvan objekton por la defaŭlta enhava lingvo de la vikio.

mw.language.getFallbacksFor

 
Fallback chains

mw.language.getFallbacksFor( code )

Liveras liston de retrodefaŭlta lingvaj kodoj el Mediavikio por la specifa kodo.

mw.language.isKnownLanguageTag

mw.language.isKnownLanguageTag( code )

Liveras veran se lingva kodo estas konata de Mediavikio.

lingva kodo estas "konita" se ĝi estas "valida praa kodo" (t.e. ĝi liveras veran por mw.language.isValidBuiltInCode) kaj liveras ne-vakuan ĉenon por mw.language.fetchLanguageName.

mw.language.isSupportedLanguage

mw.language.isSupportedLanguage( code )

Kontrolas ĉu ajna lokaĵo estas havebla por tiu lingva kodo en Mediavikio.

lingva kodo estas "apogita" se ĝi estas "valida" kodo (liveras veran por mw.language.isValidCode), enhavas neniun majusklan signon kaj havas mesaĝan dosieron en la nunrulanta versio de Mediavikio.

Eblas por lingva kodo esti "apogita" sed ne "konita" (t.e. liveranta veran por mw.language.isKnownLanguageTag). Ankaŭ notu ke kelaj kodoj estas "apogita" malgraŭ ke mw.language.isValidBuiltInCode liveras falsan.

mw.language.isValidBuiltInCode

mw.language.isValidBuiltInCode( code )

Liveras veran se lingva kodo estas valida formo laŭ la celoj de interna adaptado de Mediavikio.

La kodo povas ne efektive respondi al ajna konata lingvo.

Lingva kodo estas "valida praa kodo" se ĝi estas "valida" kodo (t.e. ĝi liveras veran por mw.language.isValidCode); enhavas nur ASCIIajn literojn, nombrojn kaj strekoj; kaj longestas almenaŭ du signoj.

Notu ke kelkaj kodoj estas "apogita" (t.e. liveras veran por mw.language.isSupportedLanguage) kvankam tiu elstato liveras falsan.

mw.language.isValidCode

mw.language.isValidCode( code )

Liveras veran se lingvokoda ĉeno estas valida formo, ĉu ĝi ekzistas aŭ ne. Tio inkludas kodojn, kiujn estas uzitaj nur por akomado tra la Mediavikia nomujo.

La kodo povas ne efektive respondi al ajna konata lingvo.

Lingva kodo estas valida se ĝi ne enhavas kelkajn nesekurajn signojn (dupunktoj, unuopa- aŭ duopa-citiloj, sorstrekoj, sobstrekoj, angulaj krampoj, kaj-signoj aŭ ASCIIaj nulsignoj) kaj estas alie permesita en paĝa titolo.

mw.language.new

mw.language.new( code )
mw.getLanguage( code )

Kreas novan lingvan objekton. Lingvaj objektoj ne havas ajnan publike alireblajn ecojn, sed ili ja havas plurajn statvojojn, kiujn estas dokumentita malsupre.

Estas limo pri la nombro de distingaj lingvaj kodoj kiuj povas esti uzitaj en iu paĝo. Preterpasi tiun limon rezultos en erarojn.

mw.language:getCode

lang:getCode()

Liveras la lingvan kodon por tiu lingva objekto.

mw.language:toBcp47Code

lang:toBcp47Code()

Returns the standard BCP-47 language code for this language object. This is the code string which is appropriate to use in HTML, for example as the value of a lang attribute.

mw.language:getFallbackLanguages

lang:getFallbackLanguages()

Liveras liston de retrodefaŭltaj lingvaj kodoj de Mediavikio por ĉi tiu lingva objekto. Ekvivalenta al mw.language.getFallbacksFor( lang:getCode() ).

mw.language:isRTL

lang:isRTL()

Liveras veran se la lingvo estas skribita liven, falsa se ĝi estas skribita dekstren.

mw.language:lc

lang:lc( s )

Transusklas la ĉenon al minusklo, honorantaj ajnaj specialaj regulojn por la donita lingvon.

Kiam la Unikodoĉena eldonteko estas ŝargita, la mw.ustring.lower() elstato estas efektivigita kiel voko al mw.language.getContentLanguage():lc( signvico ).

mw.language:lcfirst

lang:lcfirst( s )

Transusklas la unuan signon de la ĉeno al minusklo, kiel kun lang:lc().

mw.language:uc

lang:uc( s )

Transusklas la ĉenon al majusklo, honoranta ajnaj specialaj regulojn por la donita lingvo.

Kiam la Unikodoĉena eldonteko estas ŝargita, la mw.ustring.upper() elstato estas efektivigita kiel voko al mw.language.getContentLanguage():uc( signvico ).

mw.language:ucfirst

lang:ucfirst( s )

Transusklas la unuan signon de la ĉeno al majusklo, kiel kun lang:uc().

mw.language:caseFold

lang:caseFold( s )

Transusklas la ĉenon al reprezentado konvena por neuskleciva komparo. Notu ke la rezulto ne povas fari ajnan signifon kiam montrita.

mw.language:formatNum

lang:formatNum( n )
lang:formatNum( n, options )

Formatas nombron kun grupaj kaj ona apartigiloj konvenaj por la donita lingvon. Donita 123456.78, tio povus produkti "123,456.78", "123.456,78" aŭ eĉ io kiel "١٢٣٬٤٥٦٫٧٨" depende de la lingvo kaj vikia agordo.

opcioj estas ujo de opcioj, kiuj povas esti:

  • noCommafy: Fiksu veran por formeti grupiganta apartigilojn kaj uzu punkton (.) kiel dekuman apartigilon. Digit transformation may still occur, which may include transforming the decimal separator.

mw.language:formatDate

lang:formatDate( format, timestamp, local )

Formatas daton laŭ la donita formĉenon. Se timestamp estas neinformita, la defaŭlto estas la nuna tempo. La kiomo por lokaĵige devas esti duopcia aŭ vakua (nil); se vera, la tempo estas fomigita laŭ la lokaĵa tempo de la vikio anstataŭ UTC.

La formĉeno kaj apogitaj kiomoj por timestamp estas identaj al tiuj por la tempa disponigila elstato de Extension:ParserFunctions . Notu tamen ke sobstreko povas necesi dufojigon en Lua rektĉeno, pro tio ke Lua ankaŭ uzas sobstreko kiel sencŝalta signo dum vikiteksto ne faras tion:

-- Tiu rektsignvico enhavas linifinon, ne la du signoj "\n", do ĝi ne estas ekvivalenta al <code>{{#time:\n}}</code>.
lang:formatDate( '\n' )

-- Tio estas ekvivalenta al <code>{{#time:\n}}</code>, ne al <code>{{#time:\\n}}</code>.
lang:formatDate( '\\n' )

-- Tio estas ekvivalenta al <code>{{#time:\\n}}</code>, ne al <code>{{#time:\\\\n}}</code>.
lang:formatDate( '\\\\n' )

mw.language:formatDuration

lang:formatDuration( seconds )
lang:formatDuration( seconds, chosenIntervals )

Rompas sekundan tempodaŭron laŭ pli homa-legeblaj unuoj, ekz. 12345 al 3 horoj, 25 minutoj kaj 45 sekundoj, liveranta la rezulton kiel ĉeno.

permesintervaloj, se donita, estas ujo kun kiomoj nomantaj la intervalaj unuojn uzenda en la respondo. Tio inkludas 'millennia' (jarmiloj), 'centuries' (jarcentoj), 'decades' (jardekoj), 'years' (jaroj), 'weeks' (semajnoj), 'days' (tagoj), 'hours' (horoj), 'minutes' (minutoj), and 'seconds' (sekundoj).

mw.language:parseFormattedNumber

lang:parseFormattedNumber( s )

Tio prenas nombron kiel prezentigita el lang:formatNum() kaj liveras la efektivan nombron. Aliavorte, tio estas resume lingvo-konscia versio de tonumber().

mw.language:convertPlural

lang:convertPlural( n, ... )
lang:convertPlural( n, forms )
lang:plural( n, ... )
lang:plural( n, forms )

Tio elektas la konvenan gramatikan formon el formoj (kiu devas esti sinsekva ujo) aŭ ... laŭ la kiomo nombro. Ekzemple, en la angla vi povus uzi nombro .. ' ' .. lang:plural( nombro, 'sock', 'socks' )nombro .. ' ' .. lang:plural( nombro, { 'sock', 'socks' } ) por produkti gramatikekorektan tekston ĉu estas nur 1 sock (ŝtrumpeto) aŭ 200 ŝtrumpetoj.

La necesaj kiomoj por la sinsekvo estas lingvo-dependa, vidu lokecigon de magiaj vortoj kaj la respondaron de translatewiki pri PLURALO por kelkaj detaloj.

mw.language:convertGrammar

lang:convertGrammar( word, case )
lang:grammar( case, word )

Notu la malsaman transvokatan ordon inter la du alinomoj. ConvertGrammar kongruas la ordon de la samnoma statvojo el la Lingva objekto de Mediavikio, dum grammar kongruas la ordon de la samnoma disponigila elstato, dokumentita en rilata dokumentaro.

Tio elektas la konvenan fleksian formon de vorto por la donita fleksia kodo kazo.

La eblaj kiomoj por vorto kaj kazo estas lingvo-dependa, vidu Special:MyLanguage/Help:Magic words#Localisation kaj tradukvikio:Gramatiko por kelkaj detaloj.

mw.language:gender

lang:gender( what, masculine, feminine, neutral )
lang:gender( what, { masculine, feminine, neutral } )

Elektas la ĉenon respondanta al la genro de kio, kiu povas esti "male" (iĉa), "female" (ina) aŭ registrita uzantan nomon.

mw.language:getArrow

lang:getArrow( direction )

Liveras Unikoda saga signo respondanta al direkto:

  • "forwards" (fluen): Ĉu "→" ĉu "←" laŭ la direkteco de la lingvo.
  • "backwards" (malfluen): Ĉu "←" ĉu "→" laŭ la direkteco de la lingvo.
  • "left" (liven): "←"
  • "right" (dekstren): "→"
  • "up" (supren): "↑"
  • "down" (malsupren): "↓"

mw.language:getDir

lang:getDir()

Liveras "ltr""rtl", laŭ la direkteco de la lingvo.

mw.language:getDirMark

lang:getDirMark( opposite )

Liveras ĉenon enhavanta aŭ U+200E (la liva-al-dekstra marko) aŭ U+200F (la deskstra-al-liva marko), dependanta de la direkteco de la lingvo kaj ĉu kontraŭdirekte estas vera aŭ falsa kiomo.

mw.language:getDirMarkEntity

lang:getDirMarkEntity( opposite )

Liveras "&lrm;" aŭ "&rlm;", depende de la direkteco de la lingvo kaj ĉu kontraŭdirekte estas vera aŭ falsa kiomo.

mw.language:getDurationIntervals

lang:getDurationIntervals( seconds )
lang:getDurationIntervals( seconds, chosenIntervals )

Disigas sekundan tempodaŭron al pli homa-legeblaj unuoj, ekzemple 12345 al 3 horoj, 25 minutoj kaj 45 sekundoj, liveranta la rezulton kiel ujo kiu mapigas unuajn nomojn al nombroj.

permesintervaloj, se donita, estas ujo kun kiomoj nomantaj la intertempaj unuoj uzendaj en la respondo. Tiuj inkludas 'millennia' (jarmiloj), 'centuries' (jarcentoj), 'decades' (jardekoj), 'years' (jaroj), 'days' (tagoj), 'hours' (horoj), 'minutes' (minutoj), and 'seconds' (sekundoj).

Those unit keywords are also the keys used in the response table. Only units with a non-zero value are set in the response, unless the response would be empty in which case the smallest unit is returned with a value of 0.

Mesaĝa elstatteko

Tiu elordonteko estas fasado al la lokecigaj mesaĝoj kaj la Mediawiki: nomujo.

Elstatoj dokumentitaj kiel mw.message.name estas tra la ĉiealirebla mw.message ujo; elstatoj dokumentitaj kielmw.message:name estas statvojoj de mesaĝa objekto (vidu mw.message.new).

mw.message.new

mw.message.new( key, ... )

Kreas novan mesaĝan objekton por la donita mesaĝan kiuo. The remaining parameters are passed to the new object's params() method.

La mesaĝa objekto havas neniun econ, sed havas plurajn statvojojn dokumentataj ĉi malantaŭe.

mw.message.newFallbackSequence

mw.message.newFallbackSequence( ... )

Kreas novan mesaĝan objekton por la donita mesaĝojn (la unua kiu ekzistas estos uzota).

La mesaĝa objekto havas neniun econ, sed havas plurajn statvojojn dokumentataj ĉi malantaŭe.

mw.message.newRawMessage

mw.message.newRawMessage( msg, ... )

Kreas novan mesaĝan objekton, uzanta la donita tekston rekte anstataŭ elserĉi internaciigitan mesaĝon. La restantaj kunvokatoj estas pasitaj al la nova objekto params() statvojo.

La mesaĝa objekto havas neniun econ, sed havas plurajn statvojojn dokumentataj ĉi malantaŭe.

mw.message.rawParam

mw.message.rawParam( value )

Volvas la kiomon por ke ĝi ne estas analizota kiel vikiteksto per msg:parse().

mw.message.numParam

mw.message.numParam( value )

Volvas la valoron por ke ĝi aŭtomate estos prezentigota kiel de lang:formatNum(). Notu ke tio ne dependas de la lingva elordonteko efektive estanta havebla.

mw.message.getDefaultLanguage

mw.message.getDefaultLanguage()

Liveras Language lingvan objekton por la defaŭlta lingvo.

mw.message:params

msg:params( ... )
msg:params( params )

Aldonu parametrojn al la mesaĝo, kiuj povas esti pasita kiel unuopaj kunvokatoj aŭ kiel sinsekva ujo. Transvokatoj devas esti nombroj, ĉenoj aŭ la specialaj kiomoj liverita el mw.message.numParam()mw.message.rawParam(). Se sinsekva ujo estas uzita, transvokatoj devas esti rekte ĉea en la ujo; referencoj uzantaj la __indekso metastatvojo ne efikos.

Liveras la msg objekto, por ebli vokĉenadon.

mw.message:rawParams

msg:rawParams( ... )
msg:rawParams( params )

Kiel :params(), sed havas la efikon antaŭe trakti ĉiujn la kunvokatojn per mw.message.rawParam().

Liveras la msg objekto, por ebli vokĉenado.

mw.message:numParams

msg:numParams( ... )
msg:numParams( params )

Kiel :params(), sed havas la efikon antaŭe pasi ĉiuj la transvokatoj tra mw.message.numParam().

Liveras la msg objekto, por ebli vokĉenado.

mw.message:inLanguage

msg:inLanguage( lang )

Specifas la lingvon uzenda dum mesaĝa procezo. lingvo povas esti ĉeno aŭ ujo kun getCode() statvojo (t.e. Lingva objekto).

La defaŭlta lingvo estas tiun liverita el mw.message.getDefaultLanguage().

Liveras la msg objekto, por ebli vokĉenado.

mw.message:useDatabase

msg:useDatabase( bool )

Specifas ĉu elserĉi mesaĝojn en la MediaWiki: nomujo (t.e. serĉi en la datenbazo) aŭ nur uzi la defaŭltajn mesaĝojn distribuitaj kun Mediavikio.

Defaŭlte estas vera.

Liveras la msg objekto, por ebli vokĉenado.

mw.message:plain

msg:plain()

Anstataŭigas la transvokatoj kaj liveras la mesaĝan vikitekston senŝanĝe. Ŝablonaj vokoj kaj disponigilaj elstatoj estas senŝanĝaj.

mw.message:exists

msg:exists()

Liveras duopcia kiomo indikanta ĉu la mesaĝa kiuo ekzistas.

mw.message:isBlank

msg:isBlank()

Liveras duopcia kiomo indikanta ĉu la mesaĝa kiuo havas enhavon. Liveras veran se la mesaĝa kiuo ne ekzistas aŭ la mesaĝo estas la vakua ĉeno.

mw.message:isDisabled

msg:isDisabled()

Liveras duopcia kiomo indikanta ĉu la mesaĝa kiuo estas malebligita. Liveras veran se la mesaĝa kiuo ne ekzistas aŭ se la mesaĝo estas la vakua ĉeno aŭ la ĉeno "-".

Retejateko

mw.site.currentVersion

Ĉeno tenanta la nuna versio de Mediavikio.

mw.site.scriptPath

La kiomo de $wgScriptPath .

mw.site.server

La kiomo de $wgServer .

mw.site.siteName

La kiomo de $wgSitename .

mw.site.stylePath

La kiomo de $wgStylePath .

mw.site.namespaces

Ujo tenanta datenon por ĉiuj nomujoj, indicitaj nombre.

La datenoj havebla estas:

  • 'id' (identigilo): nomuja nombro.
  • name: Local namespace name.
  • canonicalName: Canonical namespace name.
  • displayName: Set on namespace 0, the name to be used for display (since the name is often the empty string).
  • hasSubpages: Whether subpages are enabled for the namespace.
  • hasGenderDistinction: Whether the namespace has different aliases for different genders.
  • isCapitalized: Whether the first letter of pages in the namespace is capitalized.
  • isContent: Whether this is a content namespace.
  • isIncludable: Whether pages in the namespace can be transcluded.
  • isMovable: Whether pages in the namespace can be moved.
  • isSubject: Whether this is a subject namespace.
  • isTalk: Whether this is a talk namespace.
  • defaultContentModel: The default content model for the namespace, as a string.
  • aliases: List of aliases for the namespace.
  • subject: Reference to the corresponding subject namespace's data.
  • talk: Reference to the corresponding talk namespace's data.
  • associated: Reference to the associated namespace's data.

Metaujo estas ankaŭ aro kiu eblas elserĉi nomujon (lokeciga aŭ ĉefforma). Ekzemple, ambaŭ mw.site.namespaces[4] and mw.site.namespaces.Project liveros informojn pri la projekta nomujo.

mw.site.contentNamespaces

Ujo tenanta nur la enhavaj nomujoj, indicitaj nombre. Vidu mw.site.namespaces por detaloj.

mw.site.subjectNamespaces

Ujo tenanta nur la temaj nomujoj, indicitaj nombre. Vidu mw.site.namespaces por detaloj.

mw.site.talkNamespaces

Ujo tenanta nur la diskutaj nomujoj, indicitaj nombre. Vidu mw.site.namespaces por detaloj.

mw.site.stats

Ujo tenanta la retejaj statistikoj. Disponeblaj statistikoj estas:

  • pages (paĝoj): Nombro da paĝoj en la vikio.
  • articles (artikoloj): Nombro da artikoloj en la vikio.
  • files (dosieroj): Nombro da dosieroj en la vikio.
  • edits (redaktoj): Nombro da redaktoj en la vikio.
  • views (vidoj): Nombro da vidoj en la vikio.
  • users (uzantoj): Nombro da uzantoj en la vikio.
  • activeUsers (agemuzantoj): Nombro da agemaj uzantoj en la vikio.
  • admins (estroj): Nombro da uzantoj en la grupo sysop (sistemoperatoro) en la vikio.

mw.site.stats.pagesInCategory

mw.site.stats.pagesInCategory( kategorio, kiuo )

Tiu elstato estas altekosta

Akiras statistikojn pri la kategorio. Se kiuo estas nespecifita, nil"*", liveras ujon kun la sekvantaj ecoj:

  • 'all' (ĉiuj): Totala nombro da paĝoj, dosieroj kaj subkategorioj.
  • 'subcats' (subkategorioj): Nombro da subkategorioj.
  • 'files' (dosieroj): Nombro da dosieroj.
  • 'pages' (paĝoj): Nombro da paĝoj.

Se kiuo estas unu el la supraj ĉenoj, nur la responda valoro estas liverita anstataŭ.

Ĉiu nova kategorio petita alkrementos la nombron da altekostaj elstatoj.

mw.site.stats.pagesInNamespace

mw.site.stats.pagesInNamespace( nomspaco )

Liveras la nombron de paĝoj en la donita nomujo (specifita per nombro).

mw.site.stats.usersInGroup

mw.site.stats.usersInGroup( grupo )

Liveras la nombron da uzantoj en la donita grupo.

mw.site.interwikiMap

mw.site.interwikiMap( filtrilo )

Liveras ujon, kiu entenas datenoj pri havebla intervikiaj prefiksoj. Se filtrilo estas la ĉeno "local", tiam nur datenoj por lokaj intervikiaj prefiksoj estas liveritaj. Se filtrilo estas la ĉeno "!local", tiam nur datenoj por ne-lokaj prefiksoj estas liveritaj. Se neniu filtrilo estas specifita, dateno por ĉiuj prefiksoj estas liverita. "Loka" prefikso en ĉi tiu kunteksto estas iu kiu estas por la sama projekto. Ekzemple, sur la angla Vikipedio, alilingvoj Vikipedioj estas konsideritaj lokaj, kontraŭe al Vikivortaro kaj aliaj tiaj Vikimediaj projektoj.

Kiuoj en la ujo liverita per la elstato estas intervikiaj prefiksoj, kaj kiomoj estas subujoj kun la jenaj ecoj:

  • prefix - la interwiki
  • url - the URL that the interwiki points to. The page name is represented by the parameter $1.
  • isLocal - whether the URL is for a site in the current project.
  • isCurrentWiki - whether the URL is for the current wiki.
  • displayText - for links listed in $wgExtraInterlanguageLinkPrefixes, this is the display text shown for the interlanguage link. Nil if not specified.
  • tooltip - for links listed in $wgExtraInterlanguageLinkPrefixes, this is the tooltip text shown when users hover over the interlanguage link. Nil if not specified.

Teksta elstatteko

La teksta elordonteko provizas iujn komunajn elstatojn de teksta traktado mankanta en la ĉena elordonteko kaj la Unikodaĉena elordonteko. Tiuj funkcioj estas senmisaj por uzo kun UTF-8 ĉenoj.

mw.text.decode

mw.text.decode( signvico )
mw.text.decode( signvico, nomaentomalkode )

Anstataŭigas HTMLaj entoj en la ĉeno kun la respondaj signoj.

Se nomitaentomalkode estas nespecifita aŭ falsa, la nuraj rekonitaj nomitaj entoj estas '&lt;', '&gt;', '&amp;', '&quot;', kaj '&nbsp;'. Alie, la listo de HTML5 nomitaj entoj rekonenda estas ŝargita el PHPa [$url get_html_translation_table] elstato. Otherwise, the list of HTML5 named entities to recognize is loaded from PHP's get_html_translation_table function.

Known bugs: Approximately 600 of around 2 200 named entities in the HTML5 standard do not get decoded, even when decodeNamedEntities is used; this includes approximately 40 of around 250 entities which are also included in HTML4. This occurs because PHP's get_html_translation_table function returns only one mapping for each character, so for example &rarr; is not decoded since PHP returns only &srarr; as the mapping for .

mw.text.encode

mw.text.encode( signvico )
mw.text.encode( signvico, signokodo )

Anstataŭigas signojn en ĉeno kun HTMLaj entoj. Signoj '<', '>', '&', '"' kaj la nerompebla spaceto estas anstataŭigita kun la konvenaj nomitaj entojn; ĉiuj aliaj estas anstataŭigitaj kun nombraj entoj. Five characters are replaced with the appropriate named entities: <, >, &, " and the non-breaking space (U+00A0). All others are replaced with numeric entities.

Se signokodo estas provizita, ĝi devus esti ĉeno kiel konvena por iri inter krampoj de unikodaĉena skemo, t.e. la "aro" en [aro]. La defaŭlta signokodo estas '<>&"\' '. (la spaceto ĉe la fino estas la nerompebla spacon, U+00A0).

mw.text.jsonDecode

mw.text.jsonDecode( signvico )
mw.text.jsonDecode( signvico, flagoj )

Malkodas JSONan ĉenon. flagoj estas 0 aŭ kombinaĵo (uzanta +) de la flagoj mw.text.JSON_PRESERVE_KEYS kaj mw.text.JSON_TRY_FIXING.

Kutime ek-nulaj ujoj de JSON estas renumeritaj al Lua ek-unuaj sinsekvaj ujoj; por malhelpi tion, pasu mw.text.JSON_PRESERVE_KEYS.

Por eviti kelkajn postulojn en JSON, kiel neniu fina komo en aroj aŭ objektoj, pasu mw.text.JSON_TRY_FIXING. Tio ne estas rekomendita.

Limoj:

  • Malkodita JSONaj ujoj povas ne esti Lua sinsekvoj se la ujo enhavas nulajn kiomojn.
  • JSONaj objektoj forigos kiuojn kun nulaj kiomoj.
  • Maleblas rekte diri ĉu la enigo estis JSONa ujo aŭ JSONa objekto kun sinsekvaj induktaj kiuoj.
  • JSONa objekto kun sinsekvaj induktaj kiuoj unu-eka malkodos al la sama uja strukturo ol JSONa ujo kun la samaj kiomoj, malgraŭ tiuj tute ne estanta ekvivalentaj, krom mw.text.JSON_PRESERVE_KEYS estas uzita.

mw.text.jsonEncode

mw.text.jsonEncode( kiomo )
mw.text.jsonEncode( kiomo, flagoj )

Kodas JSONan ĉenon. Eraroj estas levitaj se la pasita kiomo ne povas esti kodita per JSON. flagoj estas 0 aŭ kombinaĵo (uzu +) de la flagoj mw.text.JSON_PRESERVE_KEYS kaj mw.text.JSON_PRETTY.

Kutime Lua ekunuaj sinsekvaj ujoj estas koditaj kiel JSON eknulaj ujoj; kiam mw.text.JSON_PRESERVE_KEYS estas fiksita en flagoj, eknulaj sinsekvaj ujoj estas koditaj kiel JSONaj ujoj.

Limoj:

  • Vakuaj ujoj estas ĉiam koditaj kiel vakuaj ujoj ([]), ne vakuaj objektojn ({}).
  • Sinsekvaj ujoj ne povas esti koditaj kiel JSONaj objektoj sen aldoni "lokokupan" eron.
  • Por produkti objektojn aŭ ujojn kun nil kiomoj, artifikema efektivigo de la __pairs metastatvojo estas necesa.
  • Lua ujo kun sinsekvaj induktivaj kiuoj kiuj komencas kun 0 kodos kiel JSONa ujo, same ol Lua ujo kuninduktivaj kiuoj kiuj komencas kun 1, krom se mw.text.JSON_PRESERVE_KEYS estas uzita.
  • Kiam ambaŭ nombra kaj la ĉena prezentoj de tiu nombro estas uzitaj kiel kiuo en la sama ujo, konduto estas nespecifita.

mw.text.killMarkers

mw.text.killMarkers( signvico )

Forigas ĉiuj Mediavikia senigaj signoj el ĉeno.

mw.text.listToText

mw.text.listToText( listo )
mw.text.listToText( listo, apartigilo, konjunkcio )

Kuniĝas liston prozo-stile. Alivorte, ĝi estas kiel table.concat() sed kun malsamaj apartigiloj antaŭ la fina ero.

La defaŭlta apartigilo estas prenita el MediaWiki:comma-separator laŭ la enhava lingvo de la vikio kaj la defaŭlta konjunkcio estas MediaWiki:and ĉenita per MediaWiki:word-separator.

Ekzemploj, kun la defaŭltaj kiomoj por la mesaĝoj:

 -- Liveras la vakuan ĉenon
 mw.text.listToText( {} )
 
 -- Liveras <code>"1"</code>.
 mw.text.listToText( { 1 } )
 
 -- Liveras <code>"1 kaj 2"</code>.
 mw.text.listToText( { 1, 2 } )
 
 -- Liveras <code>"1, 2, 3, 4 kaj 5"</code>.
 mw.text.listToText( { 1, 2, 3, 4, 5 } )
 
 -- Liveras <code>"1; 2; 3; 4 aŭ 5"</code>.
 mw.text.listToText( { 1, 2, 3, 4, 5 }, '; ', ' or ' )

mw.text.nowiki

mw.text.nowiki( signvico )

Anstataŭigas diversajn signoj en la ĉeno kun HTMLaj entoj por malhelpi ilian sencigon kiel vikiteksto. Tio inkludas:

  • La sekvantaj signoj: '"', '&', "'", '<', '=', '>', '[', ']', '{', '|', '}'
  • La sekvantaj signoj ĉe la komenco de la ĉeno aŭ tuj post linifino: '#', '*', ':', ';', space, tab ('\t')
  • Blankaj linioj havos unu el la rilata linifina aŭ ĉaretrevena signoj sencŝaltita
  • "----" ĉe la komenco de la ĉeno aŭ tuj post linifino havos la unuan streko '-' sencŝaltitan
  • "__" havos unu substrekon sencŝaltitan
  • "://" havos la dupunkton sencŝaltitan
  • Blankspaca signo kiu sevkas "ISBN", "RFC" aŭ "PMID" estos sencŝaltita

mw.text.split

mw.text.split( signvico, skemo, rekte )

Disigas la ĉenon al subĉenoj ĉe limoj kongruantaj kun la unikodaĉena skemo skemo. Se rekte estas specifita kaj vera, skemo estos sencigita kiel rektsignvico anstataŭ Lua skemo (tiel kun la samnoma transvokato demw.ustring.find()). Liveras ujon kiu enhavas la subĉenojn.

Ekzemple, mw.text.split( 'a b\tc\nĉ', '%s' ) liverus ujon { 'a', 'b', 'c', 'ĉ' }.

Se skemo kongruas kun la vakua ĉeno signvico estos fendota en apartaj signoj.

mw.text.gsplit

mw.text.gsplit( signvico, skemo, rekte )

Liveras laŭciklila elstato kiu traciklos laŭ la subĉenoj kiu estus liverita per la ekvivalenta voko al mw.text.split().

mw.text.tag

mw.text.tag( nomo, atributoj, enhavo )
mw.text.tag{ name = signvico, attrs = ujo, content = signvico|falsa }

Notu la uzon de nomitaj kunvokatojn.

Produktas HTML-stila etikedo por nomo.

Se attrs estas donita, ĝi devas esti ujo kun ĉenaj kiuoj. Ĉenaj kaj nombraj kiomoj estas uzita kiel la kiomo de la eco; duopcia vero rezultas al la kiuo estanta eligota kiel HTML5 senkioma transvokato; duopcia falso plene nespecifas la kiuon; kaj io ajn alia estas eraro.

Se content (enhavo) ne estas donita (aŭ estas nil), nur la eketikedo estas liverita. Se content estas duopcia falso, mem-ferma etikedo estas liverita. Alie ĝi devas esti ĉeno aŭ nombro, en kiu kazo tiu enhavo estas envolvita en la konstruita komencan kaj fermanta etikedon. Notu ke la enhavo ne estas aŭtomate HTMLe-kodita; uzu mw.text.encode() se necesa.

Por bone liveri etendaĵajn etikedojn kiel ‎<ref>, uzu frame:extensionTag() anstataŭ.

mw.text.trim

mw.text.trim( signvico )
mw.text.trim( signvico, signokodo )

Forigas blankspacojn aŭ aliajn signojn el la komenco kaj la fino de ĉeno.

Se signokodo estas provizita, ĝi devus esti ĉeno kiel konvena por iri inter krampoj de unikodaĉena skemo, t.e. la "aro" en [aro]. La defaŭlta signokodo estas ASCIIa blankspaco, "\t\r\n\f".

mw.text.truncate

mw.text.truncate( teksto, longeco )
mw.text.truncate( teksto, longeco, elipsmarko )
mw.text.truncate( teksto, longeco, elipsmarko, akomodalongeco )

Kurtigas tekston al la specifa longeco, aldonanta elipsmarko se kurtigo estis elfarita. Se longeco estas pozitiva, la fino de la ĉeno estos kurtigita; se ĝi estas negativa, la komenco estos forigita. Se akomodalongeco estas donita kaj vera, la rezultinta ĉeno inklude elipsmarko ne estos pli longa ol la specifa longeco.

La defaŭlta kiomo por elipsmarko estas prenita de MediaWiki:ellipsis el la enhava lingvo de la vikio.

Ekzemploj, kun la defaŭltaj "..." elipsmarkoj:

-- Returns "foobarbaz"
mw.text.truncate( "foobarbaz", 9 )

-- Returns "fooba..."
mw.text.truncate( "foobarbaz", 5 )

-- Returns "...arbaz"
mw.text.truncate( "foobarbaz", -5 )

-- Returns "foo..."
mw.text.truncate( "foobarbaz", 6, nil, true )

-- Returns "foobarbaz", because that's shorter than "foobarba..."
mw.text.truncate( "foobarbaz", 8 )

mw.text.unstripNoWiki

mw.text.unstripNoWiki( signvico )

Anstataŭigas Mediavikia <nowiki> senigaj signoj kun la responda teksto. Aliaj tipoj de senigaj signoj ne estas ŝanĝitaj.

mw.text.unstrip

mw.text.unstrip( signvico )

Ekvivalenta al mw.text.killMarkers( mw.text.unstripNoWiki( signvico ) ).

Tio ne plu rivelas la HTMLo uzita por speciala paĝa transhavigo, <ref> etikedoj, kaj tiel plu kiel ĝi faris en pli fruaj versioj de Scribunto.

Titola elstateko

mw.title.equals

mw.title.equals( nomo, alinomo )

Testas ĉu du titoloj estas egalaj. Notu ke fragmentoj estas ignoritaj en la komparo.

mw.title.compare

mw.title.compare( nomo, alinomo )

Liveras -1, 01 por indiki ĉu la titolo nomo estas malpli ol, egala al aŭ pli granda ol titolo alinomo.

Tio komparas titolojn laŭ intervikiaj prefiksoj (se iu ajn) kiel ĉenoj, tiam de nomuja nombro, tiam de la neprefiksita titola teksto kiel ĉeno. Tiuj ĉenaj komparoj uzas la norma < elstatilo de Lua.

mw.title.getCurrentTitle

mw.title.getCurrentTitle()

Liveras la titolan objekton de la nuna paĝo.

mw.title.new

mw.title.new( teksto, nomujo )
mw.title.new( identigilo )

Tiu elstato estas altekosta kiam vokita kun idendigilo

Kreas novan titolan objekton.

Se nombro identigilo estas donita, objekto estas kreita por la titolo kun tiu paĝo-identigilo. La titolo referencita estos nombrita kiel ligita el la nuna paĝo. Se la paĝo-identigilo ne ekzistas, liveras nil. La nombro da altekostaj elstatoj estos alkrementita se la kreita titola objekto ne estas por iu titolo kiu jam estis ŝargita.

Se ĉeno teksto estas donita anstataŭ, objekto estas kreita por tiu titolo (eĉ se la paĝo ne ekzistas). Se la teksta ĉeno ne specifas nomujo, nomujo (kiu povas esti ajna kiuo trovebla en mw.site.namespaces) estos uzita. Se la teksto ne estas valida titolo, nil estas liverota.

mw.title.makeTitle

mw.title.makeTitle( nomujo, titolo, fragmento, intervikio )

Kreas titolan objekton kun titolo titolo ennomujo nomujo, opcie kun la specifita fragmento kaj intervikio prefiksoj. nomujo povas esti ajna kiuo trovebla en mw.site.namespaces. Se la rezultinta titolo ne estas valida, liveras nil.

Notu ke, malsame al mw.title.new(), tiu statvojo ĉiam aplikos la specifitan nomujon. Ekzemple, mw.title.makeTitle( 'Ŝablono', 'Modulo:Amo' ) kreos objekton por la paĝo Ŝablono:Modulo:Amo, dum mw.title.new( 'Modulo:Amo', 'Ŝablono' ) kreos objekton por la paĝo Modulo:Amo.

Note also that functionality for interwiki titles is limited to interwiki / isExternal / isLocal and URL-related methods; other methods might not behave as expected.

Titolaj objektoj

Titola objekto havas nombron da ecoj kaj statvojoj. Plejparto de la ecoj estas nurlega.

Notu ke kampoj finantaj kun teksto liveras titoloj kiel ĉenaj kiomoj dum la kampoj finantaj kun titolo liveras titolajn objektojn.

  • id: La paĝa identigilo. 0 se la paĝo ne ekzistas.

This may be expensive.

  • interwiki: The interwiki prefix, or the empty string if none.
  • namespace: The namespace number.
  • fragment: The fragment (aka section/anchor linking), or the empty string. May be assigned.
  • nsText: The text of the namespace for the page.
  • subjectNsText: The text of the subject namespace for the page.
  • talkNsText: The text of the talk namespace for the page, or nil if this title cannot have a talk page. (added in MediaWiki 1.42.0-wmf.15, refs T180911)
  • text: The title of the page, without the namespace or interwiki prefixes.
  • prefixedText: The title of the page, with the namespace and interwiki prefixes.
  • fullText: The title of the page, with the namespace and interwiki prefixes and the fragment. Interwiki is not returned if equal to the current.
  • rootText: If this is a subpage, the title of the root page without prefixes. Otherwise, the same as title.text.
  • baseText: If this is a subpage, the title of the page it is a subpage of without prefixes. Otherwise, the same as title.text.
  • subpageText: If this is a subpage, just the subpage name. Otherwise, the same as title.text.
  • canTalk: Whether the page for this title could have a talk page.
  • exists: Whether the page exists. Alias for file.exists for Media-namespace titles. For File-namespace titles this checks the existence of the file description page, not the file itself. This may be expensive.
  • isContentPage: Whether this title is in a content namespace.
  • isExternal: Whether this title has an interwiki prefix.
  • isLocal: Whether this title is in this project. For example, on the English Wikipedia, any other Wikipedia is considered "local" while Wiktionary and such are not.
  • isRedirect: Whether this is the title for a page that is a redirect. This may be expensive.
  • isSpecialPage: Whether this is the title for a possible special page (i.e. a page in the Special: namespace).
  • isSubpage: Whether this title is a subpage of some other title.
  • isTalkPage: Whether this is a title for a talk page.
  • isSubpageOf( title2 ): Whether this title is a subpage of the given title.
  • inNamespace( ns ): Whether this title is in the given namespace. Namespaces may be specified by anything that is a key found in mw.site.namespaces.
  • inNamespaces( ... ): Whether this title is in any of the given namespaces. Namespaces may be specified by anything that is a key found in mw.site.namespaces.
  • hasSubjectNamespace( ns ): Whether this title's subject namespace is in the given namespace. Namespaces may be specified by anything that is a key found in mw.site.namespaces.
  • contentModel: The content model for this title, as a string. This may be expensive.
  • basePageTitle: The same as mw.title.makeTitle( title.namespace, title.baseText ).
  • rootPageTitle: The same as mw.title.makeTitle( title.namespace, title.rootText ).
  • talkPageTitle: The same as mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text ), or nil if this title cannot have a talk page.
  • subjectPageTitle: The same as mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text ).
  • redirectTarget: Returns a title object of the target of the redirect page if the page is a redirect and the page exists, returns false otherwise.
  • protectionLevels: The page's protection levels. This is a table with keys corresponding to each action (e.g., "edit" and "move"). The table values are arrays, the first item of which is a string containing the protection level. If the page is unprotected, either the table values or the array items will be nil. This is expensive.
  • cascadingProtection: The cascading protections applicable to the page. This is a table with keys "restrictions" (itself a table with keys like protectionLevels has) and "sources" (an array listing titles where the protections cascade from). If no protections cascade to the page, "restrictions" and "sources" will be empty. This is expensive.
  • subPageTitle( text ): The same as mw.title.makeTitle( title.namespace, title.text .. '/' .. text ).
  • partialUrl(): Returns title.text encoded as it would be in a URL.
  • fullUrl( query, proto ): Returns the full URL (with optional query table/string) for this title. proto may be specified to control the scheme of the resulting url: "http", "https", "relative" (the default), or "canonical".
  • localUrl( query ): Returns the local URL (with optional query table/string) for this title.
  • canonicalUrl( query ): Returns the canonical URL (with optional query table/string) for this title.
  • getContent(): Returns the (unparsed) content of the page, or nil if there is no page. The page will be recorded as a transclusion.

Titolaj objektoj povas esti komparitaj per rilataj elstatiloj. tostring( titolo ) liveros titolo.prefixedText.

Note that accessing any expensive field on a title object records a "link" to the page (as shown on Special:WhatLinksHere, for example). Using the title object's getContent() method or accessing the redirectTarget field records it as a "inkludo", and accessing the title object's file or fileExists fields records it as a "ligilo al dosiero".

Dosiera metadateno

Titolaj objektoj prezentanta paĝon en la Dosiero aŭ Media nomujo havos econ nomitan file. Tio estas altekosta. Tio estas ujo, strukturita kiel sekvanta:

  • fileExists: Ĉu la dosiero ekzistas. Ĝi estos registrita kiel bilda uzado. La fileExists eco sur titola objekto ekzistas por retrokongruecaj kialoj kaj estas alinomo por ĉi tiu eco. Se tio ĉi estas falsa, ĉiuj aliaj dosieraj ecoj estos nil.
  • width: La larĝo de la dosiero. Se la dosiero enhavas multoblajn paĝojn, tio ĉi estas la larĝo de la unua paĝo.
  • height: La alto de la dosiero. Se la dosiero enhavas multoblajn paĝojn, tio ĉi estas la alto de la unua paĝo.
  • pages: If the file format supports multiple pages, this is a table containing tables for each page of the file; otherwise, it is nil. The # operator can be used to get the number of pages in the file. Each individual page table contains a width and height property.
  • size: The size of the file in bytes.
  • length: The length (duration) of the media file in seconds. Zero for media types which do not support length.

Altekostaj ecoj

La ecoj id, isRedirect, exists, kaj contentModel necesas ŝargi datenon pri la titolo de la datenbazo. Por tiu kialo, la nombron da altekostaj elstatoj estas alkrementata la unua fojo ke unu el ili estas alirita por paĝo alia ol la nuna paĝo. Postaj aliroj de iu ajn de ĉi tiuj ecoj por tiu paĝo ne inkrementos denove la nombron da altekostaj elstatoj.

Aliaj ecoj markitaj kiel altekostaj ĉiam alkrementos la nombro da altekostaj elstatoj dum la unua tempo ili estas alirita por paĝo alia ol la nuna paĝo.

URIa elordonteko

mw.uri.encode

mw.uri.encode( signvico, kodtipo )

Procenta-kodas la ĉenon. La defaŭlta tipo, "QUERY", kodas spacetojn uzanta '+' por uzo en petaj ĉenoj; "PATH" kodas spacetojn kiel %20; kaj "WIKI" kodas spacetojn kiel '_'.

Notu ke la "vikia" perzento ne estas tute inversigebla, ĉar ambaŭ spacetoj kaj substrekoj estas kodita kiel '_'.

mw.uri.decode

mw.uri.decode( signvico, kodtipo )

Procento-malkodas la ĉenon. La defaŭlta tipo, "QUERY", malkodas '+' al spaceto; "PATH" ne elfaras ajnan kroman malkodadon; kaj "WIKI" malkodas '_' al spaceto.

mw.uri.anchorEncode

mw.uri.anchorEncode( signvico )

Kodas ĉeno por uzo en Mediavikia URIa fragmento.

mw.uri.buildQueryString

mw.uri.buildQueryString( ujo )

Kodas ujon kiel URIa peta ĉeno. Kiuo devus esti ĉenoj; kiomoj povas esti ĉenoj aŭ nombroj, sinsekvaj ujoj aŭ duopcia falso.

mw.uri.parseQueryString

mw.uri.parseQueryString( signvico, ekero, finero )

Malkodas la petan ĉenon signvico al ujo. Kiuoj en la ĉeno sen kiomoj havos falsan kiomon; kiuoj ripetitaj plujfoje havos sinsekvajn ujon kiel kiomoj; kaj aliaj havos ĉenojn kiel kiomoj.

La opciaj nombraj kunvokatoj ekero kaj finero povas esti uzitaj por specifi subĉeno disponigebla, anstataŭ la tuta ĉeno. ekero estas la pozicio de la unua signo de la subĉeno kaj defaŭlte kiomas 1. finero estas la pozicio de la lasta signo de la subĉeno kaj defaŭlte kiomas la longecon de la ĉeno. Ambaŭ ekero kaj finero povas esti negativa, kiel en string.sub.

mw.uri.canonicalUrl

mw.uri.canonicalUrl( paĝo, peto )

Liveras URIan objekton por la ĉefforma URLo de paĝo, kun opcia peta ĉeno/ujo.

mw.uri.fullUrl

mw.uri.fullUrl( paĝo, peto )

Liveras URIan objekton por la plena URLo de paĝo, kun opcia peta ĉeno/ujo.

mw.uri.localUrl

mw.uri.localUrl( paĝo, peto )

Liveras URIan objekton por la loka URLo de paĝo, kun opcia peta ĉeno/ujo.

mw.uri.new

mw.uri.new( signvico )

Konstruas novan URIan objekton por la pasita ĉeno aŭ ujo. Vidu la priskribon de URIaj objektoj por la eblaj kampoj en la ujo.

mw.uri.validate

mw.uri.validate( ujo )

Konfirmas la pasitan ujon (aŭ URIan objekton). Liveras duopcion indikantan ĉu la ujo estis validita aŭ, kiam malsukcesas, ĉeno klariga kiuj problemoj estis trovitaj.

URIa objekto

La URIa objekto havas la sekvantajn kampojn, kelkaj aŭ ĉiuj de kiu povas kiomi nil:

  • protocol: ĉena protokolo/skemo
  • user: ĉena uzanto
  • password: ĉena pasvorto
  • host: ĉena gastinganta nomo
  • port: induktiva pordo
  • path: ĉena vojo
  • query: ujo, kiel el mw.uri.parseQueryString
  • fragment: ĉena fragmento.

La sekvantaj ecoj ankaŭ estas haveblaj:

  • userInfo: ĉena uzanto kaj pasvorto
  • hostPort: ĉena gastigo kaj pordo
  • authority: ĉena uzanto, pasvorto, gastigo kaj pordo
  • queryString: ĉena versio de la peta ujo
  • relativePath: ĉena vojo, peta ĉeno kaj fragmento

tostring() provizos la URIan ĉenon

Statvojoj de la URIa objekto estas:

mw.uri:parse

uri:parse( signvico )

Disponigas ĉenon en la nuna URIa objekto. Iu ajn kampo specifita en la ĉeno estos anstataŭigita en la nuna objekto; kampoj ne specifitaj ŝparos iliajn malnovajn kiomojn.

mw.uri:clone

uri:clone()

Faras kopion de la URIa objekto.

mw.uri:extend

uri:extend( transvokatoj )

Kunfandas la transvokata ujo en la peta ujo de la objekto.

Unikodaĉena elordonteko

La unikoda ĉena elordonteko celas esti rekta reefektivigo de la norma ĉena elordonteko, escepte ke la statvojoj efikas laŭ signoj en UTF-8aj kodaj ĉenoj anstataŭ okopoj.

Plejpartoj de elstatoj pelos eraron se la ĉeno ne estas valida UTF-8; esceptoj estas notitaj.

mw.ustring.maxPatternLength

La maksimuma permesita longeco de skemo, en okopoj.

mw.ustring.maxStringLength

La maksimuma permesita longeco de ĉeno, en okopoj.

mw.ustring.byte

mw.ustring.byte( s, i, j )

Liveras unuopan duumokopon; identa al string.byte().

mw.ustring.byteoffset

mw.ustring.byteoffset( s, l, i )

Liveras la okopan deŝovon de indicita signo en la ĉeno. Defaŭlte ambaŭ loko kaj indico tiomas 1. indico povas esti negativa, en kiu kazo ĝi nombras ekde la fino de la ĉeno.

La signo ĉe loko == 1 estas la unua signo komencanta ĉe aŭ post la okopo indicita per indico; la signo ĉe loko == 0 estas la unua signo komencanta ĉe aŭ antaŭ okopo indicita per indico. Notu ke tio ĉi povas esti la sama signo. Pli grandaj aŭ malpliaj kiomoj de loko estas nombrita relative al ĉi tiuj.

mw.ustring.char

mw.ustring.char( ... )

Similege al string.char(), escepte ke la induktivoj estas unikodaj signonumeroj anstataŭ okopaj kiomoj.

local value = mw.ustring.char( 0x41f, 0x440, 0x438, 0x432, 0x435, 0x442, 0x21 ) -- sciigo nun estas 'Привет!'

mw.ustring.codepoint

mw.ustring.codepoint( s, i, j )

Similige kiel string.byte(), escepte ke la liverataj kiomoj estas signonumeroj kaj la deŝovoj estas signoj anstataŭ okopoj.

mw.ustring.find

mw.ustring.find( s, pattern, init, plain )

Similige kiel string.find(), escepte ke la skemo estas etendita kiel priskribita en Unikodaĉenaj skemoj kaj la ekero deŝovo estas en signoj anstataŭ okopoj.

mw.ustring.format

mw.ustring.format( format, ... )

Identa al string.format(). Larĝoj kaj precizecoj por ĉenoj estas esprimitaj per okopoj, ne per signonumeroj.

mw.ustring.gcodepoint

mw.ustring.gcodepoint( s, i, j )

Liveras tri kiomoj por tracikli laŭ la signonumeroj en la ĉeno. ekero defaŭltas al 1 kaj finero al -1. Tio estas celita por uzo en la tracikla formo de for :

for codepoint in mw.ustring.gcodepoint( s ) do
     -- bloko
end

mw.ustring.gmatch

mw.ustring.gmatch( s, pattern )

Similige kiel string.gmatch(), escepte ke la skemo estas etendita kiel priskribita en Unikodaĉenaj skemoj.

Known bugs: When used with a lone frontier pattern (%f[set]), the function will get stuck in an infinite loop. For example, the following loop never terminates:

for capture in mw.ustring.gmatch( "foo bar", "%f[%w]" ) do
     -- block
end

mw.ustring.gsub

mw.ustring.gsub( s, pattern, repl, n )

Similige kiel string.gsub(), escepte ke la skemo estas etendita kiel priskribita en Unikodaĉenaj skemoj.

Known bugs: When repl is a table, it is possible to use numbers as keys instead of strings (e.g. to replace instances of "5" in a string, the value at key [5] or ["5"] would be used); as such, the output is not predictable if they have different (non-nil) values.

This is not an issue for string.gsub(), which ignores any numbers as keys.

mw.ustring.isutf8

mw.ustring.isutf8( s )

Liveras veran se la ĉeno estas valida UTF-8a ĉeno, falsan alie.

mw.ustring.len

mw.ustring.len( s )

Liveras la longecon da signonumeroj de la ĉeno, aŭ nil se la ĉeno ne estas valida UTF-8a ĉeno.

Vidu string.len() por similaj elstatoj kiuj uzas okopaj longecoj anstataŭ signonumeroj.

mw.ustring.lower

mw.ustring.lower( s )

Similige kiel string.lower(), escepte ke ĉiuj signoj kun difinoj de minusklo al majuklo en unikodo estas transusklataj.

Se la Lingva elordonteko estas ankaŭ ŝargita, tio anstataŭe vokos lc() por la defaŭlt-lingva objekto.

mw.ustring.match

mw.ustring.match( s, pattern, init )

Similige kiel string.match(), escepte ke la skemo priskribita en Unikodaĉenaj skemoj kaj la ekero deŝovo estas en signoj anstataŭ okopoj.

mw.ustring.rep

mw.ustring.rep( s, n )

Identa al string.rep().

mw.ustring.sub

mw.ustring.sub( s, i, j )

Similige kiel string.sub(), escepte ke la deŝovoj estas signoj anstataŭ okopoj.

mw.ustring.toNFC

mw.ustring.toNFC( s )

Transformas la ĉenon al Normiga Formo C. Liveras nil se la ĉeno ne estas valida UTF-8a ĉeno.

mw.ustring.toNFD

mw.ustring.toNFD( s )

Transformas la ĉenon al Normiga Formo D. Liveras nil se la ĉeno ne estas valida UTF-8a ĉeno.

mw.ustring.toNFKC

mw.ustring.toNFKC( s )

Converts the string to Normalization Form KC (also known as Normalization Form Compatibility Composition). Returns nil if the string is not valid UTF-8.

mw.ustring.toNFKD

mw.ustring.toNFKD( s )

Converts the string to Normalization Form KD (also known as Normalization Form Compatibility Decomposition). Returns nil if the string is not valid UTF-8.

mw.ustring.upper

mw.ustring.upper( s )

Similige kiel string.upper(), escepte ke ĉiuj signoj kun difinoj de majuklo al de minusklo en unikodo estas transusklataj.

Se la Lingva elordonteko estas ankaŭ ŝargita, tio anstataŭe vokos uc() por la defaŭlt-lingva objekto.

Unikodaĉenaj skemoj

Skemoj en la unikodaĉenaj elestatoj uzas la samajn komponaĵojn ol la ĉeno-elordontekaj

skemoj. La grava diferenco estas ke la signaj klasoj estas redifinita kiel Unicoda-signaj ecoj:
  • %a: prezentas ĉiujn signojn kun genera kategorio "Letter" (litero).
  • %c: prezentas ĉiujn signojn kun genera kategorio "Control" (kontrolo).
  • %d: prezentas ĉiujn signojn kun genera kategorio "Number, decimal digit" (nombro, dekuma cifero).
  • %l: prezentas ĉiujn signojn kun genera kategorio "Lowercase Letter" (minuskla litero).
  • %p: prezentas ĉiujn signojn kun genera kategorio "Punctuation" (interpunkcio).
  • %s: prezentas ĉiujn signojn kun genera kategorio "Separator" (apartigilo), plus tabo, linisalto, ĉaretreveno, vertikala tabo, kaj paĝosalto.
  • %u: prezentas ĉiujn signojn kun genera kategorio "Uppercase Letter" (majuksla litero).
  • %w: prezentas ĉiujn signojn kun genera kategorio "Letter" (litero) or "Decimal Number" (dekuma nombro).
  • %x: aldonas plenlarĝajn signajn versiojn de deksesumaj nombroj.
  • %c: represents all characters with General Category "Control".
  • %d: represents all characters with General Category "Number, decimal digit".
  • %l: represents all characters with General Category "Lowercase Letter".
  • %p: represents all characters with General Category "Punctuation".
  • %s: represents all characters with General Category "Separator", plus tab, linefeed, carriage return, vertical tab, and form feed.
  • %u: represents all characters with General Category "Uppercase Letter".
  • %w: represents all characters with General Category "Letter" or "Decimal Number".
  • %x: adds fullwidth character versions of the hex digits.

Like in String library patterns, %A, %C, %D, %L, %P, %S, %U kaj %W here represent the complementary set ("all characters without given General Category").

Ĉiukaze, signoj estas sencigitaj kiel Unicodaj signoj anstataŭ okopoj, do intervaloj kiel [0-9], skemoj kiel %b«» kaj kvantigiloj aplikitaj al plurokopaj signoj efikas korekte. Vakua kaptoj kaptos la pozicion en signonumero anstataŭ okopoj.

Known limitations: Unlike String library patterns, Ustring library patterns have a maximum length of 10,000 bytes. If the pattern exceeds this length, then the Ustring function will throw an error. Because the String library has its own maximum of 32 captures (unlike the Ustring library), it is therefore impossible to use a pattern which exceeds both limits, as it will be incompatible with both libraries.

Note: 9 ASCII characters, $, +, <, =, >, ^, `, |, ~, can be matched by %p in the string library but not in the ustring library, as Unicode classifies them as Symbols rather than Punctuation.

Ŝargeblaj elordontekoj

Ĉi tiuj elordontekoj ne estas inkluditaj defaŭlte, sed se devita povas esti ŝargita per require().

tridekduopa-duumo

Ĉi imitado de la Lua 5.2 bit32 elordonteko povas esti ŝargita per

 bit32 = require( 'bit32' )

La bit32 elordonteko provizas laŭduumaj operacioj por sensignuma tridekduopa induktoj. Enigaj nombroj estas kurtigitaj al induktoj (per nesspecifita maniero) kaj reduktitaj laŭ modulo 232 do la kiomo estas en la intervalo 0 al 232−1; liverata kiomo estas ankaŭ en ĉi tiu intervalo.

Kiam duumoj estas nombritaj (kiel en bit32.extract()), 0 estas la malpli-peza duumo (tia kun la kiomo 20) kaj 31 estas la plej-peza (tia kun kiomo 231).

bit32.band

bit32.band( ... )

Liveras la laŭduuma KAJ de ĝiaj kunvokatoj: la rezulto havas fiksita duumo nur se tiu samloka duumo estas fiksita en ĉiuj kunvokatoj.

Se donita neniom kunvokatoj, la rezulto havas ĉiuj duumoj fiksitaj.

bit32.bnot

bit32.bnot( iom )

Liveras la laŭduuman komplementon de iom.

bit32.bor

bit32.bor( ... )

Liveras la laŭduuma AŬ de ĝiaj kunvokatoj: la rezulto havas duumo fiksita se iu ajn samloka duumo estas fiksita el kunvokatoj.

Se donita neniom kunvokato, la rezulto havas ĉiuj duumoj senigitaj.

bit32.btest

bit32.btest( ... )

Ekvivalenta al bit32.band( ... ) ~= 0

bit32.bxor

bit32.bxor( ... )

Liveras la laŭduuma malinkluziva AŬ de ĝiaj argumentoj: la rezulto havas fiksitan duumon se la samloka duumo estas fiksita en nepara nombro da kunvokatoj.

Se donita neniom kunvokato, la rezulto havas ĉiuj duumoj senigitaj.

bit32.extract

bit32.extract( iom, kampo, larĝo )

Eltiras larĝo da duumo el iom, komencanta kun la kampo-loka duumo. Aliri duumojn ekstere de la intervalo inter 0 kaj 31 estas eraro.

Se ne specifita, la defaŭlta por larĝo estas 1.

bit32.replace

bit32.replace( iom, kiomo, kampo, larĝo )

Anstataŭas larĝo da duumoj en iom, komencanta kun la malalta kampo duumoj ekde kiomo. Aliri duumon ekstere de la gamo inter 0 kaj 31 estas eraro.

Se ne specifita, la defaŭlta por larĝo estas 1.

bit32.lshift

bit32.lshift( iom, ŝoveco )

Liveras la nombron iom ŝovita alten per ŝoveco da duumo. Tio estas logika ŝovo: insertitaj duumoj estas 0. Tio ĉi estas ĝenerale ekvivalenta al multobligi per 2ŝoveco.

Notu ke deŝovado pli alta ol 31 rezultos en 0.

bit32.rshift

bit32.rshift( iom, ŝoveco )

Liveras la nombron iom ŝovita malalten per ŝoveco da duumo. Tio estas logika ŝovo: insertitaj duumoj estas 0. Tio ĉi estas ĝenerale ekvivalenta al onigi per 2ŝoveco.

Notu ke deŝovado pli alta ol 31 rezultos en 0.

bit32.arshift

bit32.arshift( iom, ŝoveco )

Liveras la nombron iom ŝovita malalten per ŝoveco da duumo. Tio estas aritmetika ŝovo: seŝoveco estas pozitiva, insertitaj duumoj estos la samaj ol la 31a duumo el la origina nombro.

Notu ke deŝovado pli alta ol 31 rezultos en 0 aŭ 4294967295.

bit32.lrotate

bit32.lrotate( iom, ŝoveco )

Liveras la nombron iom |rotaciita je ŝoveco da duumoj alte.

Notu ke rotacioj estas ekvivalentaj module 32: rotacio de 32 estas la sama ol rotacio de 0, 33 estas la sama ol 1, kaj tiel plu.

bit32.rrotate

bit32.rrotate( iom, ŝoveco )

Liveras la nombron iom |rotaciita je ŝoveco da duumoj malalte.

Notu ke rotacioj estas ekvivalentaj module 32: rotacio de 32 estas la sama ol rotacio de 0, 33 estas la sama ol 1, kaj tiel plu.

tekutilo

Ĉi tiu elordonoteko enhavas statvojo utila kiam efektiviganta Scribunto elordonotekoj. Ĝi povas esti ŝarĝita uzanta

 libraryUtil = require( 'libraryUtil' )

libraryUtil.checkType

libraryUtil.checkType( nomo, loko, kunvokataro, atendatipo, nulbone )

Levas eraron se type( kunvokataro ) ne kongruas kun atentotipo. Krome, neniu eraro estos levita se argumentaro kiomas nil kaj nulbone estas vera.

nomo estas la nomo de la vokanta elstato kaj loko estas la pozicio de la kunvokato en la kunvokataro. Tiuj estas uzitaj por aranĝo erara mesaĝo.

libraryUtil.checkTypeMulti

libraryUtil.checkTypeMulti( nomo, loko, kunvokataro, atendatipo )

Pelas eraron se tipo( kunvokataro ) ne respondas al iu ajn ĉeno en la aro atendatipo.

Tio estas por kunvokatoj kiuj havas pli ol unu valida tipo.

libraryUtil.checkTypeForIndex

libraryUtil.checkTypeForIndex( indico, kiomo, atendatipo )

Pelas eraron se tipo( kiom ) ne egalas atendatipo.

Tio ĉi estas celita por uzo en efektiviganta __newindex metastatvojo.

libraryUtil.checkTypeForNamedArg

libraryUtil.checkTypeForNamedArg( nomo, loko, kunvokataro, atendatipo, nulbone )

Pelas eraron se type( kunvokataro ) ne egalas atendatipo. Krome, neniu eraro estos pelita se kunvokaro estas nil kaj nulbone estas vera.

Tio estas celita por uzo kiel ekvivalento al libraryUtil.checkType() en statvojoj vokitaj per Lua "nomita kunvokato" komponaĵo, elstato{ nomo = kiomo }.

libraryUtil.makeCheckSelfFunction

libraryUtil.makeCheckSelfFunction( elordonteknomo, statingnomo, memobjekto, memobjektopriskribo )

Tio estas celita por uzo en efektiviganta "statvojoj" en objektaj ujoj kiuj estas celitaj por vokado per objekto:statvojo() komponaĵo. Ĝi liveras elstaton kiu devus esti vokita ĉe la supro de ĉi tiuj statvojoj kun la self (mem) argumento kaj la statvoja nomo, kio pelos eraron se tiu self objekto ne estas memobjekto.

Tiu elstato ĝenerale estos uzita en konstruila elstato de elordonteko, io kiel:

 function myLibrary.new()
     local obj = {}
     local checkSelf = libraryUtil.makeCheckSelfFunction( 'myLibrary', 'obj', obj, 'myLibrary object' )
 
     function obj:method()
         checkSelf( self, 'method' )
     end
 
     function obj:method2()
         checkSelf( self, 'method2' )
     end
 
     return obj
 end

luabit

La luabit elordonteko moduloj "bit" (duuma) kaj "hex" (deksesuma) povas esti ŝargita per

 bit = require( 'luabit.bit' )
 hex = require( 'luabit.hex' )

Notu ke la bit32 elordonteko enhavas la samajn operaciojn ol "luabit.bit" kaj la operacioj en "luabit.hex" povas esti elfarita per string.format() kaj $tonumber_funkcio.

La luabit modulo "noki" ne estas havebla, kiel ĝi estas tute senutila en Scribunto. La luabit modulo "utf8" estas ankaŭ ne havebla, kiel ĝi estis konsiderita redunda kun la Ustring biblioteko.

strict

The strict library is not a normal library; it causes an error to be raised whenever a new variable is used that is not explicitly scoped as a local variable (e.g., global variable assignment references). This functionality is typically enabled by loading at the top of a module using:

 require( 'strict' )

On many Wikimedia wikis this was formerly implemented in Module:No globals. It is in part derived from strict.lua.

ustring

La pure-Lua ŝajnfasko al la Ustring elordonteko povas esti ŝargita per

 ustring = require( 'ustring' )

Ĉiel la Ustring elordonteko (mw.ustring) devus esti uzita anstataŭ, kiel ĝi anstataŭigas multaj el la pli malrapida kaj pli memoro-intensaj operacioj kun retrovokoj al PHPa kodo.

Etendaĵaj elordontekoj

Iuj MediaWiki-etendaĵoj provizas aldonajn bibliotekojn Scribunto. Ĉi tiuj ankaŭ troviĝas en la tabelo mw, kutime en la tabelo mw.ext, tamen ili ĉeestas nur kiam iuj etendaĵoj estas instalitaj (aldone al la etendaĵo Scribunto mem).

Tiaj etendaĵoj uzas Scribunto-provizitajn hokojn:

Skribado de bibliotekoj Scribunto donas informojn pri kiel tiaj bibliotekoj povas esti disvolvitaj por provizi interfacojn Lua por MediaWiki-etendaĵoj.

mw.wikibase

Wikibase Client provides access to localizable structured data, most notably Wikidata. See docs_topics_lua.html and Extension:Wikibase Client/Lua .

mw.wikibase.lexeme

WikibaseLexeme provides access to Wikibase Lexeme entities. This is supported by Wikidata:Lexicographical data.

mw.wikibase.mediainfo

WikibaseMediaInfo provides access to Wikibase MediaInfo entities. See WikibaseMediaInfo/Lua . This is supported by Structured Data on Commons. See Structured data/Lua.

mw.bcmath

BCmath provides arbitrary-precision arithmetic to Lua modules. See BCmath documentation via "LDoc" link at BCmath § Usage.

mw.smw

Semantic Scribunto provides native Scribunto support for the Semantic MediaWiki extension.

mw.ext.data

JsonConfig provides access to localizable tabular and map data. See JsonConfig/Tabular . Tabular Data and GeoJSON Map Data is supported in the "Data:" namespace at Commons.

  • mw.ext.data.get( pagename )

mw.ext.cargo

Cargo provides a means to query its data store from Lua. See Extension:Cargo/Other features#Lua support .

mw.ext.cattools

CategoryToolbox provides a means to check from Lua if a certain page belongs to a category. Is is experimental and not enabled on public WikiMedia wikis.

mw.ext.FlaggedRevs

FlaggedRevs provides a means to access the stability settings of a page from Lua.

mw.ext.TitleBlacklist

TitleBlacklist provides a means to test and obtain information about blacklisted page naming entries from Lua.

mw.ext.ParserFunctions

ParserFunctions provides a means from Lua to evaluate expressions in the same way as its PHP-based parser function #expr .

mw.ext.proofreadPage

Proofread Page provides access to Index and Page namespaces. See Extension:Proofread Page/Lua reference . This is supported by Wikisource:ProofreadPage. See Help:Extension:ProofreadPage .

mw.ext.articlePlaceholder

ArticlePlaceholder provides a means to override default Wikibase renderings from Lua. See Extension:ArticlePlaceholder/Module:AboutTopic .

mw.ext.externalData

ExternalData provides a means to get structured data from Internet from Lua. See Extension:External Data/Lua .

mw.ext.UnlinkedWikibase

See UnlinkedWikibase

  • mw.ext.UnlinkedWikibase.getEntity( id )
  • mw.ext.UnlinkedWikibase.query( sparql )

mw.ext.seo

WikiSEO provides a means to set SEO Data for the current page. See Extension:WikiSEO#Usage in lua modules.

mw.slots

WSSlots provides a number of Lua functions for working with MCR slots:

  • mw.slots.slotContent(slotName, pageName)
  • mw.slots.slotTemplates(slotName, pageName) (deprecated)
  • mw.slots.slotContentModel(slotName, pageName)
  • mw.slots.slotData(slotName, pageName)

Diferencoj de norma Lua

Ŝanĝitaj elstatoj

La sekvantaj elstatoj estis modifitaj:

setfenv()
getfenv()
Eble ne esti haveblaj, dependanta de la agordo. Se havebla, malsukcesos provoj de aliri antaŭantajn mediojn.
getmetatable()
Laboroj sur ujoj nur antaŭhaltigas nepermesitajn aliron al antaŭantaj medioj.
tostring()
Referencaj adresoj de ujoj kaj elstatoj ne estas provizitaj. Tio estas por fari memoro-koruptan atakeblon pli malfacila ekspluatebla.
pairs()
ipairs()
Apogo por la __pairs kaj __ipairs metastatvojoj (aldonita en Lua 5.2) estis aldonita.
pcall()
xpcall()
Kelkaj internaj eraroj ne povas esti kaptitaj.
require()
Povas ŝargi kelkajn praajn modulojn, kiuj estas distribuitaj kun Scribunto, kaj moduloj enhavataj en la Modulo nomujo de la vikio. Por ŝargi vikiajn modulojn, uzu la plenan paĝnomon, nomujo inklude. Ne povas alie aliri la lokan dosiersistemo.

Forigitaj elstatoj kaj pakoj

La sekvantaj pakoj estas plejparte forigita. Nur tiuj funkcias enlistigita estas haveblaj:

package.*
Dosiersistemaj kaj C-elordontekaj aliroj estis forigita. Haveblaj elstatoj kaj ujoj estas:
package.loaded
package.preload
package.loaders
Ŝargiloj kiuj aliras la lokan dosiersistemon aŭ ŝaras C-elordontekoj ne estas haveblaj. Ŝargilo por Modulo-nomujaj paĝoj estas aldonita.
package.seeall()
os.*
Estas kelkaj nesekuraj elstatoj tie, kiel os.execute(), kiuj ne povas esti permesita. Haveblaj elstatoj estas:
os.clock()
os.date()
os.difftime()
os.time()
debug.*
Plejparto de la elstatoj estas nesekuraj. Haveblaj elstatoj estas:
debug.traceback()

La sekvantaj elstatoj kaj pakoj ne estas haveblaj:

collectgarbage()
module()
coroutine.*
Neniu apliko estas konata de ni, do ĝi ne estis reviziita por sekureco.
dofile()
loadfile()
io.*, file.*
Permesas lokan dosiersisteman aliron, kiu estas nesekura.
load()
loadstring()
Tiuj estis formetitaj por ebli statikan analizon de la Lua fonta kodo. Ankaŭ, permesanta ĉi tiujn permesus Lua kodo esti aldonita rekte al artikolo kaj ŝablonaj paĝoj, kio ne estas dezirata por afabligaj kialoj.
print()
Tio ĉi estis diskutita en wikitech-l kaj ĝi estis decidita ke ĝi devus esti formeti favore al liverataj kiomoj, por plibonigi kvaliton de kodo. Se necesa, mw.log() povas esti uzita por eligi informojn al la spura konsolo.
string.dump()
Povus elmeti privatan datenon de gepatraj medioj.

Suplementaj avertoj

Referancaj datenaj strukturoj
ciklaj datenaj strukturoj kaj datenaj strukturoj kie la sama nodo povas esti atingita per pli ol unu vojo ne povas esti korekte sendita al PHP. Provi tiel fari kaŭzos nedifina konduto. Tio inkludas (sed ne estas limigita al) liveri tiajn datenajn strukturojn el la modulo vokita per {{#invoke:}} kaj pasi tiajn datenajn strukturojn kiel transvokatoj al eldontekaj elstatoj de Scribunto kiu estas efektivigitaj kiel retrovoko en PHP.
Tiaj datenaj struktutoj estas libere uzebla ene de Lua, inklude kiel la liverato kiomo de moduloj ŝagitaj per mw.loadData().

Skribi elordontekojn por Scribunto

Tiu informo estas utila al disvolvistoj kiuj skribas suplementan elordontekoj por Scribunto, ĉu por inkludo en Scribunto mem aŭ por provizi fasadon por iliaj propraj etendaĵoj.

Scribunto elordontekoj ĝenerale konsistas de kvin partoj:

  • La PHPa parto de la elordonteko.
  • La Lua parto de la elordonteko.
  • La PHPa parto de la testaj kazoj.
  • La Lua parto de la testaj kazoj.
  • La dokumentaro.

Ekzistantaj elordontekojn servas kiel bona ekzemplo.

Elordonteko

La PHPa parto de la elordonteko estas klaso kiu devas etendi Scribunto_LuaLibraryBase. Vidu la dokumentaron de tiu klaso por efektivigaj detaloj. En la Scribunto etendaĵo, tiu dosiero devus esti lokita en engines/LuaCommon/NomoLibrary.php, kaj mapado devus esti aldonita al Scribunto_LuaEngine::$libraryClasses. Aliaj etendaĵoj devus uzi la ScribuntoExternalLibraries hoko. En ajna kazo, la kiuo devus egali la Lua modulonomo ("mw.nomo" por elordontekoj en Scribunto aŭ "mw.ext.nomo" por etendaĵaj elordontekoj).

La Lua parto de la elordonteko instalas la ujon enhavantan la elstatoj kiuj povas esti vokita de Lua moduloj. En la Scribunto etendaĵo, la dosiero devus esti lokita en engines/LuaCommon/lualib/mw.name.lua. Tiu dosiero ĝenerale devus inkludi reuzeblaĵo, kiel:

local object = {}
local php

function object.setupInterface( options )
    -- Forigas agorda elstato
    object.setupInterface = nil

    -- Kopias la PHPaj retrovokoj al loka statingo kaj forigas la ĉiea-ujo
    php = mw_interface
    mw_interface = nil

    -- Faras ajna alia agordo ĉi tie

    -- Instalas en la <code>mw</code> ĉiea-ujo.
    mw = mw or {}
    mw.ext = mw.ext or {}
    mw.ext.NAME = object

    -- Indikas ke ni estas ŝargita
    package.loaded['mw.ext.NAME'] = object
end

return object

La modulo en engines/LuaCommon/lualib/libraryUtil.lua (load this with local util = require 'libraryUtil') contains some functions that may be helpful (ŝargas tion kun local util = require 'libraryUtil') enhavas kelkajn elstatojn kiuj povas esti helpema.

Certiĝe ruli la Scribunto testaj kazoj kun via elordonteko ŝargita, eĉ se via elordonteko mem ne provizas ajnajn testajn kazojn. La normaj testaj kazoj inkludas testojn por aferoj kiel elordontekoj aldonantaj neatenditaj mallokaj statingoj. Ankaŭ, se la elordonteko estas ŝargita kun PHP, ajna transkiomo kies ĝia Lua elstatoj havas ne estos rekomencigitaj inter sekvantaj #invoke. Prizorgo devas esti prenita certigi ke moduloj ne povas fitrakti tion por translokigi informon inter sekvantaj #invoke.

Testaj kazoj

La Scribunto etendaĵo inkludas bazan klason por testaj kazoj, Scribunto_LuaEngineTestBase, kiu rulos la testojn kompare kun kaj la Lua-mediuja kaj Lua-memstara motoroj. La testa kazo de la elordonteka devus etendi tiun klason kaj ne devus superregi static function suite(). En la Scribunto etendaĵo, la testa kazo devus esti en tests/engines/LuaCommon/NameLibraryTest.php kaj esti aldonita en la ujo ScribuntoHooks::unitTestsList() (en common/Hooks.php); etendaĵoj devus aldoni iliajn testajn kazojn en ilia propra UnitTestsList hoka elstato, verŝajne kondiĉe de ĉu $wgAutoloadClasses['Scribunto_LuaEngineTestBase'] estas fiksita aŭ ne.

Plejofte, por fari la testan kazon nur endas jena:

class ClassNameTest extends Scribunto_LuaEngineTestBase {
    protected static $moduleName = 'ClassNameTest';

    function getTestModules() {
         return parent::getTestModules() + array(
             'ClassNameTest' => __DIR__ . '/ClassNameTests.lua';
         );
    }
}

Tio ŝargos la dosieron KlasNomoTests.lua kiel se ĝi estis la paĝa "Modulo:KlasNomoTests", atendanta ke ĝi liveras objekton kun la sekvantaj ecoj:

  • count: induktiva, nombro da testoj
  • provide( n ): elstato kiu liveras tri kiomoj: n, la nomo de testo n, kaj ĉeno kiu estas la atentata eligo por testo n.
  • run( n ): Elstato kiu rulas teston n kaj liveras unu ĉeno.

Se getTestModules() estas deklarita kiel montrita, "Modulo:TestFramework" estas havebla, kaj provizas multajn utilajn helpilaj metodoj. Se tio estas uzita, KlasNomoTestoj.Lua ŝajnus kiel:

local testframework = require 'Module:TestFramework'

return testframework.getTestProvider( {
    -- Testoj iras ĉi tie
} )

Ĉiu testo mem estas ujo, kun la sekvantaj ecoj:

  • name: Nomo de la teksto.
  • func: Elstato rulenda.
  • args: Opcia ujo de kunvokatoj, pasendaj al elstato.
  • expect: Rezultoj atentendaj.
  • type: Opcia tipo de testo, defaŭlte kiel "Normal" (normala).

La tipo kontrolas la aranĝo de expect kaj kiel func estas vokita. Inkluditaj tipoj estas:

  • Normal: expect estas ujo de liverataj kiomoj, aŭ ĉeno se la testo devus peli eraron.
  • Iterator: expect estas ujo de liverataj kiomoj. func estas vokita kiel iteracia for ciklilo, kaj ĉiu liverata kiomo de iteracio estas akumilitaj.
  • ToString: Kiel "Normal", escepte ke ĉiu liverata kiomo estas pasita tra tostring().

Testaj kazoj en alia etendaĵo

Estas (almenaŭ) du vojoj ruli PHPUnit-ajn testojn:

  1. Ruli phpunitaj per kerno, permesanta al la dosiero tests/phpunit/suites/ExtensionsTestSuite.php trovi la testojn de la etendaĵo per la UnitTestsList hoko. Se la nomoj de klasaj testoj de via etendaĵo ĉiujn enhavas unuopan komponaĵo (ekz. la nomo de la etendaĵo), la opcio --filter povas esti uzita por ruli nur la testojn de via etendaĵo.
  2. Ruli phpunit per la etendaĵa dosio, kie ĝi kaptos ajnan dosieron kiu finas kun "Test.php".

Ajn iel efikos bone se Scribunto estas ŝargita en LocalSettings.php. Kaj ĝi estas facile por metodo #1 de labori se Scribunto ne estas ŝargita, kiel la UnitTestsList hoko facile povas esti skribita por eviti liveradon de la Scribunta testo kiam $wgAutoloadClasses[ 'Scribunto_LuaEngineTestBase' ] ne estas fiksita.

Sed Jenkins uzas la duan metodon. Por ke Jenkins konvene rulas la testojn, vi devos aldoni Scribunto kiel dependeco al via etendaĵo. Vidu Gerrit change 56570 por ekzemplo de kiel tio estas farita.

Se por iu kialo vi bezonas ke la testoj estas ruleblaj laŭ la dua metodo sen Scribunto ŝargita, iu eskapsolvo estas aldoni tiun kontrolon al la supro de via unua testa dosiero:

 if ( !isset( $GLOBALS['wgAutoloadClasses']['Scribunto_LuaEngineTestBase'] ) ) {
     return;
 }

Dokumentaro

Moduloj inkluditaj en Scribunto devus inkludi dokumentaron en la Scribunto elordonteka sekcio supre. Etendaĵaj elordontekoj devus inkluzivi dokumentaron en subpaĝo de ilia propra etendaĵa paĝo, kaj ligi al tiu dokumentaro el #Extension libraries (mw.ext).

Vidu ankaŭ

Permesilo

Tiu manlibro estas derivita el la referenca manlibro pri Lua 5.1, kiu estas havebla laŭ la MITa licenco.

Ĉi tiu derivaĵa manlibro ankaŭ povas esti kopiita sub la kondiĉooj de la sama licenco.