Hierdie artikel of onderafdeling van die artikel is onder ontwikkeling. As u wil bydra tot die ontwikkeling daarvan, spring gerus in, maar moet dit asseblief nie uitvee nie.
Hierdie is 'n inligtingsbladsy wat die bydraergemeenskap se konsensus oor 'n aspek of aspekte van Wikipedia se norme en standaarde beskryf.
Lua is 'n programmeertaal wat nou beskikbaar is vir die Afrikaanse Wikipedia via die MediaWiki-uitbreiding Scribunto. Lua-kode kan binne wiki-sjablone verskans word deur die "{{#invoke:}}"-funksionaliteit van Scribunto in te span. Die uitbreiding steun Lua 5.1 sedert Julie 2015.
Die Lua-bronkode word in bladsye genaamd modules gestoor (bv. Module:Piesangs). Die onderskeie modules word dan op sjabloonblaaie ingeroep (deur kode {{#invoke:}}), byvoorbeeld, Module:Piesangs/doc gebruik die kode {{#invoke:Piesangs|hallo}} om die teks "Hallo, wêreld!" te vertoon.
Om 'n module te loop
Modules word op normale wiki-blaaie geloop deur die #invoke-ontlederfunksie te gebruik. Die sintaksis van #invoke is vergelykbaar met sjabloonsintaksis, maar met 'n paar verskille. Die belangrikste verskil is dat 'n funksienaam verskaf moet word. 'n Funksie is 'n groep instruksies wat insetwaardes aanneem, dit verwerk, en 'n uitsetwaarde terugstuur.[1] Dit stem tot 'n groot mate ooreen met wat 'n sjabloon doen – parameters word verskaf, dit word verwerk, en 'n resultaat word verkry. Baie funksies kan egter vir 'n Lua-module gedefinieer word, terwyl daar slegs een sjabloon op 'n bladsy gedefinieer kan word.
Verder kan 'n Lua-module ook nie direk geloop word nie – slegs een van die module se funksies kan geloop word. Die module is net 'n houer vir die funksies en doen nie self enige verwerking nie. Daar is dus twee redes waarom 'n funksienaam verskaf moet word:
'n Module kan nie op sy eie geloop word nie.
Deur nie 'n funksienaam te verskaf nie, sal Lua nie weet watter funksie geloop moet word nie.
Die eenvoudigste moontlike skrip, verskaf 'n enkele funksie met geen argumente nie.
Die eenvoudigste manier om 'n module vanaf 'n wiki-blad te loop is as volg:
{{#invoke:ModuleNaam|funksieNaam}}
Byvoorbeeld, Module:Piesangs, wat een funksie genaamd "hallo" het, kan as volg geloop word:
Jy hoef niks te installeer of te stoor nie.
Wysig jou gebruikersblad.
Plak die volgende oproep aan die begin van 'n nuwe reël op jou Gebruikersblad:
{{#invoke:Piesangs|hallo}}
Klik "Wys voorskou". Die oproep van die funksie hallo in Module:Piesangs word vervang met die volgende:
Hallo,wêreld!
Klik "Kanselleer". Wanneer gevra word, klik Leave.
localyesno=require('Module:Yesno')-- #if yesno dan gee dit sy insetparameter terugprint(mw.getCurrentFrame():callParserFunction("#if",yesno("Yes"),"Yes",'no'))print(mw.getCurrentFrame():callParserFunction("#if",yesno("nee"),"Ja",'nee'))
Yes
nee
Maak die beskermde Module:Yesno toe wat ongewysig bly.
Argumente word aan modules gegee op dieselfde metode as wat dit aan sjablone gegee word. Neem kennis dat die teks na die eerste pypkarakter altyd die funksienaam is; die eerste posisionele argument is die teks na die tweede pypkarakter.
Byvoorbeeld, in Module:PiesangsArgumente groet die hallo-funksie verskillende mense afhangende van die eerste posisionele argument.
PiesangsArgumente verskaf ook 'n funksie genaamd tel_vrugte, wat die benoemde argumente piesangs en appels gebruik om die aantal piesangs en appels wat gegee word te tel. Dit kan as volg geloop word:
localmodArg=require('Module:PiesangsArgumente')-- laai die modulelocalframe=mw.getCurrentFrame();frame.args[1]="Karen";print("1. "..modArg.hallo(frame))-- "Hallo, Karen!"frame.args[1]="Ferdie";print("2. "..modArg.hallo(frame))-- "Hallo, Ferdie!"frame.args["appels"]="3";frame.args["piesangs"]="4"-- getal as 'n stringprint("3. "..modArg.tel_vrugte(frame))-- wys "Ek het 4 piesangs en 3 appels"frame.args["piesangs"]="5";frame.args["appels"]="2"print("4. "..modArg.tel_vrugte(frame))-- wys "Ek het 5 piesangs en 2 appels"
1. Hallo, Karen!
2. Hallo, Ferdie!
3. Ek het 4 piesangs en 3 appels
4. Ek het 5 piesangs en 2 appels
Meeste modules behoort 'n dokumentasieblad te hê wat verduidelik watter argumente gebruik kan word, en die uitwerking wat hulle sal hê.
Besoek Wikipedia:Lua-versoeke om hulp aan te vra met die skryf van 'n Lua-skrip om 'n spesifieke taak op Wikipedia of 'n ander projek van die Wikimedia-stigting te verrig.
Na jare se bespreking is Lua in 2012 vir toetsdoeleindes geïnstalleer op test2.wikipedia.org, met 'n ope uitnodiging aan alle bydraers om te eksperimenteer met die ontwikkeling van Lua-modules. Lua word in Februarie 2013 op die Engelse Wikipedia geïnstalleer na toetslopies op mediawiki.org en Wikimedia se toets-wikis.
Lua is 'n skriptaal wat gebruik kan word om data te analiseer, uitdrukkings uit te werk en resultate te formateer met behulp van funksies en objekgeoriënteerde programmering. Hoewel sekere Lua-skripte eenvoudig gehou kan word om maklik te begryp, laat Lua komplekse strukture toe soos tabelle, dinamiese funksies, en assosiatiewe skikkings waar indekssubskripte woorde sowel as indeksnommers kan wees. Lua ondersteun ook rekursie van hergeneste funksies, neem dus sorg om oordrewe kompleksiteit te vermy, veral waar ander bydraers sal sukkel om die Lua-modules te onderhou. Die volgende voorbeeld toon Lua-bronkode vir 'n "Hallo, wêreld!"-funksie binne Module:HalloWereld.
Alle Lua-modules op Wikipedia moet afskop deur die definiëring van 'n veranderlike wat hul eksterne toeganklike funksies sal bevat. Hulle kan enige naam kry en ook data bevat.
--[[Module:HalloWereld]]--localp={}-- Inisialiseer die (p)akket-tabel-- Voeg 'n funksie tot die veranderlike. Dit is oproepbaar binne Wikipedia via die #invoke-bevel.-- "raam" sal die data bevat wat Wikipedia aan hierdie funksie stuur wanneer dit geroep word.functionp.hallo(frame)-- Met betrekking tot [[Module:Piesangs]] word frame bygevoeg, maar nie gebruik nie.localstr="Hallo, wêreld!"-- Verklaar 'n plaaslike veranderlike en ken data aan dit toe.returnstr-- Verlaat hierdie funksie en stuur die inligting binne "str" terug na Wikipedia.end-- Beëindig die funksie.returnp-- Gee die (p)akket-tabel terug
Alle modules word beëindig deur die veranderlike wat hul funksies bevat, terug te stuur na Wikipedia.
Die print-funksie word nie toegelaat nie, so alle uitsette word bewerkstellig via terugkerende stringe.
Die module kan nou gebruik word deur {{#invoke:HalloWereld|hallo}} te roep.
Die #invoke-bevel skop af met die module se naam, in die geval HalloWereld, en neem daarna die naam van een van sy funksies as argument aan, in die geval hallo.
'n Voorbeeld van Lua word uitgelig deur die merker <syntaxhighlight lang="lua" line highlight=1 copy> ... </syntaxhighlight> weerskante van die Lua-bronkode te plaas. Om meer komplekse voorbeelde te sien, gaan na die artikel: "Lua (programmeertaal)".
'n Moduletoetsraamwerk vir Lua-skripte op Wikipedia is beskikbaar by Module:UnitTests. Dit laat die uitvoer van 'n skrip toe op 'n gegewe stel insette, en bevestig dat die verwagte uitsette gelewer word. Moduletoetsing is veral handig by die vinnige bespeuring van regressie, waar bywerkings op 'n skrip nuwe (of ou) probleme na vore kan bring.
--[[Module:Piesangs/toetsgevalle]]--localp=require('Module:UnitTests')-- Klik op besprekingsblad om toetse te loop.functionp:test_hallo()-- Moduletoetse vir [[Module:Piesangs]].self:preprocess_equals('{{#invoke:Piesangs|hallo}}','Hallo, wêreld!')endreturnp
Daar bestaan ook 'n alternatiewe moduletoetsraam genaamd Module:ScribuntoUnit, oorspronklik uit die Hongaarse Wikipedia. Kenmerkgewys is dit baie dieselfde as Module:UnitTests, maar dit besit 'n ander kodestyl, en werp regte foute wat dan gevang word met behulp van beskermde oproepe. Dit besit ook 'n metode om wisselveranderlikes binne 'n sekere akkuraatheid te vergelyk.
Algeheel: Lua kan slegs insette as teks aanstuur na {{#invoke:}} en wat ook al gekry word via mw.title.new(...):getContent() en frame:expandTemplate(). Lua-uitsette sal nie vooraf verwerk word nie tensy frame:preprocess() eksplisiet geroep word, menende dat sjabloonoproepe, ontledingsfunksies ens. in die uitsette nie na behore sal werk nie.
Verder is alle Lua in die bladsy beperk tot 10 sekondes SVE-tyd (daar kan in die bronkode van 'n verbeelde bladsy gekyk word om te sien hoe lank 'n module of sjabloon sal neem om te ontleed). Relatief tot standaard Lua kort Scribunto se Lua 'n verskeidenheid funksies (sien Verskille van standaard Lua).
Lua-kode in 'n Scribunto-lus word slegs uitgevoer terwyl die bladsy ontleed word. Daarom is die enigste insette wat 'n gebruiker aan Lua kan gee deur middel van bladredigering – dit kan nie 'n blokkie skep wat 'n Fahrenheit-temperatuur in 'n invoerkassie bereken en dan, wanneer jy op 'n knoppie druk, die ooreenstemmende Celsius-temperatuur terugkry nie; ook kan dit nie 'n gedeelte van die Mandelbrot-stel herbereken op grond van die gedeelte van die voorafberekende stel waarop jy klik nie.
--[[ASCII]]--localcontent_lang=mw.getContentLanguage().code-- aflocallang=mw.getCurrentFrame():callParserFunction("#language",content_lang)locallenUnicode,lenByte,lenSharp=mw.ustring.len(lang),string.len(lang),#langprint(("lang: \"%s\". Mw.ustring.len = %d String.len = %d Sharp = %d"):format(lang,lenUnicode,lenByte,lenSharp))--[[Unicode]]---- 'n String van 2 karakters (ASCII). 2 * ê = +2 Unicode.lang="Daar is 'n wêreld se verskil tussen 'n rêrigte plan en 'n blote idee."lenUnicode,lenByte,lenSharp=mw.ustring.len(lang),string.len(lang),#langprint(("lang: \"%s\"\nMw.ustring.len = %d String.len = %d Sharp = %d"):format(lang,lenUnicode,lenByte,lenSharp))
lang: "Afrikaans". Mw.ustring.len = 9 String.len = 9 Sharp = 9
lang: "Daar is 'n wêreld se verskil tussen 'n rêrigte plan en 'n blote idee."
Mw.ustring.len = 69 String.len = 71 Sharp = 71
Die insette wat Lua kan ontvang sluit enige traskluseerbare teksblaaie op Wikipedia in. Dit sluit nie grafiese lêers in nie (nie eers SVG-lêers nie, hoewel hulle teks is. Behalwe as jy dit sny en op 'n Wiki-teksblad plak), ook nie die lys bladsye gelys in 'n kategorie nie, verder ook nie die inhoud van nie-transkluseerbarespesiale bladsye nie.
Getranskluseerde Wikipedia-opskrifte bevat baiemaal verborge kode soos "UNIQ5ae8f2aa414ff233-h-3--QINU" wat verwyder moet word sodat hulle effektief ontleed kan word.
print(string.reverse("UNIQ"))
QINU
Wikilinks van die soort[[WP:Hulp|]] sal nie werk indien dit as uitset teruggegee word nie – hulle moet eksplisiet geskryf word as [[WP:Hulp|Hulp]].
Ander voorafstoor-transformasies, soos die vervanging van ~~~~ met handtekeninge, sal ook nie verwerk word nie. Sjabloontransklusies, ontlederfunksieoproepe en vervanging van veranderlikes (bv. enige iets met 'n {{...}}) sal nie verwerk word nie, ook nie merkers soos <ref> of <nowiki> nie.
Plaas asseblief die {{lua}}-sjabloon op die dokumentasiesubblad van alle sjablone wat van Lua gebruik maak. Dit sal help om Lua-gebruik en sjabloonverwerkings beter deur te gee.