Kromaĵo:Scribunto/Referenca manlibro pri Lua
Ĉ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.
Ĉi tiu paĝo dokumentas la plej lastan version de la Scribunto kromaĵo. Kelkaj ivoj eble ankoraŭ ne estas disponigitaj. |
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, etc.) jam okazis. Sekve la modulo ne povas uzi tiujn ivojn en ĝia produktada teksto. Ekzemple, se modulo liveras "Hello, [[world]]! {{welcome}}"
la paĝo legos "Hello, world! {{welcome}}".
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-show
— Message 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-header
— Header 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).
Note: Lua does make a distinction between nil
and nothing at all in some limited situations.
For example, tostring(nil)
returns "nil"
, but tostring()
throws an error, as the first parameter is required.
This distinction is particularly relevant to the select() function.
Duopcia
Duopciaj kiomoj (ankaŭ nomitaj buleaj valoroj) estas true
(vera) kaj false
(falsa).
Kiam signvicigita, la rezulto estas "true"
aŭ "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 ('
aŭ "
); 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.45e20
aŭ 1.23E5.
. Induktoj ankaŭ specifivas laŭ deksesuma notacio per 0x
prefikso, ekze 0x3A
.
Numbers may also be represented using E notation without spaces, e.g. 1.23e-10
, 123.45e20
, or 1.23E+5
.
Integers may also be specified in hexadecimal notation using a 0x
prefix, e.g. 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"
aŭ "-nan"
; kaj nefinioj estas "inf"
aŭ "-inf"
.
Known bug: the Lua interpreter will treat all instances of 0
and -0
as whichever of the two is encountered first when the script is compiled, which means that the return values of tostring(0)
, 1/-0
(and so on) are affected by where they occur in the code.
This can cause unexpected results, particularly if all instances of 0
are converted to "-0"
on return.
If necessary, this can be circumvented by generating zero values using tonumber("0")
and tonumber("-0")
, which doesn't seem to cause or be affected by the issue. See [1].
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.name = expression
is equivalent to["name"] = expression
expression
is roughly equivalent to[i] = expression
, where i is an integer starting at 1 and incrementing with each field specification of this form. If this is the last field specifier and the expression has multiple values, all values are used; otherwise only the first is kept.
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, ... )
aŭ 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.
return p
There is a strict limit of max 60 unique upvalues acessed inside a function. An upvalue is a value declared outside of a function and used inside it. As upvalues do count:
- variables (a table with many elements counts as one upvalue)
- functions (only those directly called from function in question, not their dependencies)
A violation of the limit can be triggered by a use of such a variable or function, not by its mere presence or availability. Repeated access to same upvalue does not exhaust the limit further.
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:
__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 alnot ( b < a )
a > b
estas konsiderat ekvivalenta alb < a
a >= b
estas konsiderat ekvivalenta alb <= 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 aŭ
, 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:
^
not
#
-
(negacio)*
/
%
+
-
(subtraho)..
<
>
<=
>=
~=
==
and
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:
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 return
aŭ break
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 kodingo aŭ kodono. 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
, repeat
aŭ for
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()
aŭ 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 nil
aŭ false
, 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, assert
liveras ĉ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 nil
aŭ false
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 vokantagetfenv
. 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 for
aŭ ipairs.
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 ...
.
If index
is the string "#"
, returns the number of arguments in ...
.
Note: unlike tables, lists of arguments (including the vararg expression ...
) treat nil
as a distinct value (see documentation for # and unpack for the problem with nil
in tables). For example:
select(2, "foo", "bar")
returns"bar"
.select(2, "foo", nil, "bar", nil)
returnsnil, "bar", nil
.select("#", "foo", "bar")
returns2
.select("#", "foo", "bar", nil)
returns3
.
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 = { ... }
local maxindex = table.maxn( t )
if index == "#" then
return maxindex
else
return unpack( t, index, maxindex )
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
.
If the table does not have a value for a particular key, unpack will return nil for that value. For example, unpack({"foo", [3] = "bar"}, 1, 4)
returns "foo", nil, "bar", nil
.
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 deununormafrakcio
estas en la intervalo , - Se
iom
estas nulo:ununormafrakcio
kajpezo
estas0
- Se
iom
estas neniom (NaN
) aŭ nefinio:ununormafrakcio
estasiom
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.randomseed( tonumber( mw.getContentLanguage():formatDate( "U" ) ) * 10000 + os.clock() * 10000 )
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 jaromonth
(1–12), monatoday
(1–31), tagohour
(0–23), horomin
(0–59), minutosec
(0–59), (escepto: la dua salto = 60)wday
, labortago, dimanĉo estas 1yday
, tago de la jaroisdst
(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 [$url 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:
- konsidere
package.preload[modulename]
por la serĉila elstato - 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. Note it doesn't include the underscore character (_ ), contrarily to the usual class \w in regular expressions.
|
%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 .
|
%y
|
(where y is any non-alphanumeric character) represents the character y . 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 ' The interaction between ranges and classes is not defined. Therefore, patterns like |
[^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.
A $
at the end of a pattern anchors the match at the end of the subject string. At other positions, ^
and $
have no special meaning and represent themselves.
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()
kajipairs()
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 )
aŭ 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-fermokunvokatoj.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.
Basic wikitext will get parsed, like HTML, links, bold, lists or tables. However, templates and parser functions won't be evaluated if they are passed directly to this function, unless they came from template parameters. Those will be rendered in plain text instead. To evaluate them, they'll have to be passed through frame:preprocess.
mw.html:newline
html:newline()
Almetas linifino al la mw.html
objekto.
Useful when used before and after mw.html:wikitext(), when the wikitext contains lists or tables, whose syntax only has a special meaning when present at the start of a line.
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
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' )
aŭ 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, dumgrammar
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"
aŭ "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 "‎" aŭ "‏", 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() aŭ 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: *
'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: Number of pages in the wiki.
- articles: Number of articles in the wiki.
- files: Number of files in the wiki.
- edits: Number of edits in the wiki.
- users: Number of users in the wiki.
- activeUsers: Number of active users in the wiki.
- admins: Number of users in group 'sysop' in the wiki.
mw.site.stats.pagesInCategory
mw.site.stats.pagesInCategory( category, which )
- Tiu elstato estas altekosta
Akiras statistikojn pri la kategorio. Se kiuo
estas nespecifita, nil
aŭ "*"
, liveras ujon kun la sekvantaj ecoj:
- all: Total pages, files, and subcategories.
- subcats: Number of subcategories.
- files: Number of files.
- pages: Number of pages.
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( namespace )
Liveras la nombron de paĝoj en la donita nomujo (specifita per nombro).
mw.site.stats.usersInGroup
mw.site.stats.usersInGroup( group )
Liveras la nombron da uzantoj en la donita grupo.
mw.site.interwikiMap
mw.site.interwikiMap( filter )
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 - the interwiki prefix.
- url - the URL that the interwiki points to. The page name is represented by the parameter $1.
- isProtocolRelative - a boolean showing whether the URL is protocol-relative.
- isLocal - whether the URL is for a site in the current project.
- isCurrentWiki - whether the URL is for the current wiki.
- isTranscludable - whether pages using this interwiki prefix are transcludable. This requires scary transclusion, which is disabled on Wikimedia wikis.
- isExtraLanguageLink - whether the interwiki is listed in
$wgExtraInterlanguageLinkPrefixes
. - 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( string )
mw.text.decode( string, decodeNamedEntities )
Anstataŭigas HTMLaj entoj en la ĉeno kun la respondaj signoj.
Se nomitaentomalkode
estas nespecifita aŭ falsa, la nuraj rekonitaj nomitaj entoj estas '<', '>', '&', '"', kaj ' '. 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
is not decoded since PHP returns only →
as the mapping for →
.
→
mw.text.encode
mw.text.encode( string )
mw.text.encode( string, charset )
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( string )
mw.text.jsonDecode( string, flags )
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( value )
mw.text.jsonEncode( value, flags )
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( string )
Forigas ĉiuj Mediavikia senigaj signoj el ĉeno.
mw.text.listToText
mw.text.listToText( list )
mw.text.listToText( list, separator, conjunction )
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( string )
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
- The following characters at the start of the string or immediately after a newline:
#
,*
,:
,;
, space, tab (\t
)
- Blank lines will have one of the associated newline or carriage return characters escaped
----
at the start of the string or immediately after a newline will have the first-
escaped
__
will have one underscore escaped
://
will have the colon escaped
- A whitespace character following
ISBN
,RFC
, orPMID
will be escaped
mw.text.split
mw.text.split( string, pattern, plain )
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.
Note that this function can be over 60 times slower than a reimplementation that is not Unicode-aware, such as the following:
function split(text, pattern, plain)
local ret = {}
local s, l = 1, string.len( text )
while s do
local e, n = string.find( text, pattern, s, plain )
if not e then
ret[#ret+1] = string.sub ( text, s )
s = nil
elseif n < e then
-- Empty separator!
ret[#ret+1] = string.sub ( text, s, e )
if e < l then
s = e + 1
else
s = nil
end
else
ret[#ret+1] = e > s and string.sub( text, s, e - 1 ) or ''
s = n + 1
end
end
return ret
end
mw.text.gsplit
mw.text.gsplit( string, pattern, plain )
Liveras laŭciklila elstato kiu traciklos laŭ la subĉenoj kiu estus liverita per la ekvivalenta voko al mw.text.split()
.
Note that this function can be over 60 times slower than a reimplementation that is not Unicode-aware, such as the following:
function gsplit( text, pattern, plain )
local s, l = 1, string.len( text )
return function ()
if s then
local e, n = string.find( text, pattern, s, plain )
local ret
if not e then
ret = string.sub( text, s )
s = nil
elseif n < e then
-- Empty separator!
ret = string.sub( text, s, e )
if e < l then
s = e + 1
else
s = nil
end
else
ret = e > s and string.sub( text, s, e - 1 ) or ''
s = n + 1
end
return ret
end
end, nil, nil
end
mw.text.tag
mw.text.tag( name, attrs, content )
mw.text.tag{ name = string, attrs = table, content = string|false }
- 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( string )
mw.text.trim( string, charset )
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( text, length )
mw.text.truncate( text, length, ellipsis )
mw.text.truncate( text, length, ellipsis, adjustLength )
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( string )
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( string )
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( a, b )
Testas ĉu du titoloj estas egalaj. Notu ke fragmentoj estas ignoritaj en la komparo.
mw.title.compare
mw.title.compare( a, b )
Liveras -1
, 0
aŭ 1
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( text, namespace )
mw.title.new( ID )
- 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( namespace, title, fragment, interwiki )
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.
- file, fileExists: See #File metadata below.
- 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 )
, ornil
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 benil
. This is expensive.
- cascadingProtection: The cascading protections applicable to the page. This is a table with keys
"restrictions"
(itself a table with keys likeprotectionLevels
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.
- categories: (since v1.43.0-wmf.18) The list of categories used on the page. 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.
- content or getContent(): Returns the (unparsed) content of the page, or
nil
if there is no page. The page will be recorded as a transclusion.
- pageLang: A language object for the title's page content language, which defaults to the wiki's content language. This is expensive.
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 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. LafileExists
eco sur titola objekto ekzistas por retrokongruecaj kialoj kaj estas alinomo por ĉi tiu eco. Se tio ĉi estas falsa, ĉiuj aliaj dosieraj ecoj estosnil
.
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.
- mimeType: The MIME type of the file.
- 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( string, enctype )
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( string, enctype )
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( string )
Kodas ĉeno por uzo en Mediavikia URIa fragmento.
mw.uri.buildQueryString
mw.uri.buildQueryString( table )
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( s, i, j )
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( page, query )
Liveras URIan objekton por la ĉefforma URLo de paĝo, kun opcia peta ĉeno/ujo.
mw.uri.fullUrl
mw.uri.fullUrl( page, query )
Liveras URIan objekton por la plena URLo de paĝo, kun opcia peta ĉeno/ujo.
mw.uri.localUrl
mw.uri.localUrl( page, query )
Liveras URIan objekton por la loka URLo de paĝo, kun opcia peta ĉeno/ujo.
mw.uri.new
mw.uri.new( string )
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( table )
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( string )
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( parameters )
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 bug - When used with a pattern which can match the empty string, the function will get stuck in an infinite loop. For example, the following loop never terminates:
for capture in mw.ustring.gmatch( "foo bar", ".*" ) 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
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.
["5"]
This is not an issue for string.gsub(), which ignores any numbers as keys.
mw.ustring.isutf8
mw.ustring.isutf8( string )
Liveras veran se la ĉeno estas valida UTF-8a ĉeno, falsan alie.
mw.ustring.len
mw.ustring.len( string )
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( string )
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( string, 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( string )
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
, %W
kaj %X
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
, which was replaced via phab:T209310. 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. See md_docs_2topics_2lua.html and Extension:WikibaseLexeme/Lua .
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:
- debug.*
- Plejparto de la elstatoj estas nesekuraj. Haveblaj elstatoj estas:
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 permw.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 teston
, kaj ĉeno kiu estas la atentata eligo por teston
. - 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 iteraciafor
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:
- 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. - 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.
Kopirajto © 1994–2012 Lua.Org, PUC-Rio.
Permeso estas donita, senpage, al ajna persono akiranta kopion de ĉi tiu elordono kaj rilataj dokumentaraj dosieroj (la "Elordono"), trakti la Elordonon sen restrikto, inklude senlimaj rajtoj de uzi, kopii, modifi, kunfandi, eldoni, distribui, sublicenci, kaj/aŭ vendi kopiojn de la Elordono kaj permesi personojn al kiu la Elordono estas provizota tiel fari, laŭ la sekvantaj kondiĉoj: la supra kopirajta avizo kaj ĉi tiu permesa avizo estos inkludita en ĉiuj kopioj aŭ konsiderindaj porcioj de la Elordono. LA ELORDONO ESTAS PROVIZITA "KIELA", SEN GARANTIO DE AJNA SPECO, EKSPLICITA AŬ IMPLICITA, INKLUZIVANTA SED NE LIMIGITA AL GARANTIOJ DE KOMERCISTEBLECO, TAŬGECO POO SPECIFA CELO AND NEMALRESPEKTO. LAŬ NENIU EVENTO POVUS VERKISTOJN AŬ KOPIRAJTAJ POSEDANTOJ ESTI RESPONDA PRO AJNA ASERTO, DIFEKTOJ AŬ ALIA RESPONDECO, ĈU LAŬ AGO DE KONTRAKTO, DELIKTO AŬ ALIO, EKESTIĜANTA DE, EL AŬ EN KONEKTO DE LA ELORDONO AŬ UZO AŬ ALIA TEMOJ EN LA ELORDONO. |
Ĉi tiu derivaĵa manlibro ankaŭ povas esti kopiita sub la kondiĉooj de la sama licenco.