Modulo:Dagiti argumento
Daytoy a modulo ket mangited ti nalaka a panagproseso kadagiti argumento a maipasa manipud ti #invoke. Daytoy ket meta-modulo, a panggep nga us-usaren kadagiti sabali a modulo, ken nasken a saan a dagus a matawagan manipud ti #invoke. Dagiti langana ket mairaman ti:
- Nalaka a panagkissay kadagiti argumento ken panagikkat kadagiti blanko nga argumento.
- Dagiti argumento ket mabalin nga aggiddan a maipasa babaen ti agdama a kuadro ken babaen ti nagannak a kuadro. (Kitaen pay dagiti adu a salaysay dita baba.)
- Dagiti argumento ket mabalin a dagus a maipasa manipud ti sabali a modulo ti Lua wenno manipud ti konsola ti panagbiruk kadagiti parikut.
- Dagiti argumento ket maalada no masapul, a makatulong daytoy a mangliklik kadagiti parikut ti etiketa ti
... .
- Kaaduan kadagiti langa ket mabaliwan.
Dagiti linaon
Batayan nga usar
Ti umuna, nasken nga ikarga ti modulo. Daytoy ket aglaon ti maysa nga annong, a nanaganan ti
getArgs.
local getArgs = require('Modulo:Dagiti argumento').getArgs
Iti kalakaan a senario, mabalin nga usaren ti getArgs iti uneg ti annong. Ti karuay nga
args ket ti tabla nga aglaon kadagiti argumento manipud ti #invoke. (Kitaen pay dagiti adu a salaysay dita baba.)
local getArgs = require('Modulo:Dagiti argumento').getArgs local p = {} function p.main(frame) local args = getArgs(frame) -- Mapan ditoy ti nangruna a kodigo ti modulo. end return p
Nupay kasta, ti maisingasing a panagsanay ket ti panag-usar ti annong para laeng ti panagproseso kadagiti argumento manipud ti #invoke. Ti kayatna a saoen daytoy ket no adda mangtawag manipud ti sanali a modulo ti Lua saanen a nasken ti adda iti magun-od a banag ti kuadro, a mangpasayaat daytoy ti panagpaandar.
local getArgs = require('Modulo:Dagiti argumento').getArgs local p = {} function p.main(frame) local args = getArgs(frame) return p._main(args) end function p._main(args) -- Mapan ditoy ti nangruna a kodigo ti modulo. end return p
No kayat nga agusar kadagiti adu nga annong ti panag-usar kadagiti argumento, ken no kayat pay a maala manipud ti #invoke, mabalin ti agusar ti pangbalkot nga annnong.
local getArgs = require('Modulo:Dagiti argumento').getArgs local function makeInvokeFunc(funcName) return function (frame) local args = getArgs(frame) return p[funcName](args) end end local p = {} p.func1 = makeInvokeFunc('_func1') function p._func1(args) -- Ti kodigo ti umuna nga annong ket mapan ditoy. end p.func2 = makeInvokeFunc('_func2') function p._func2(args) -- Ti kodigo ti maikadua nga annong ket mapan ditoy. end return p
Dagiti pagpilian
Dagiti sumaganad a pagpilian ket mabalin a magun-od. Naipalawagda kadagiti paset dita baba.
local args = getArgs(frame, { trim = false, removeBlanks = false, valueFunc = function (key, value) -- Kodigo para iti panagproseso ti maysa nga argumento end, frameOnly = true, parentOnly = true, parentFirst = true, readOnly = true, noOverwrite = true })
Panagkissay ken panagikkat kadagiti blanko
Dagiti blanko nga argumento ket allilawenda dagiti agdadamo nga agkodkodigo iti panagbaliw kadagiti plantilia ti MediaWiki iti Lua. Iti eskritu ti plantilia, dagiti blanko a kuerdas ken dagiti kuerdas nga aglaon ti whitespace ket naikeddeng dagitoy a saan nga husto (false). Nupay kasta, iti Lua, dagiti blanko a kuerdas ken dagiti kuerdas nga aglaon ti whitespace ket naikeddengda nga agpaysao (true). Ti kayatna a saoen daytoy ket no dika mangikaskaso kadagiti kasta nga argumento no agsurat kadagiti modulo ti Lua, mabalin a matrato ti maysa a banag a kas agpayso dagiti nasken koma a matrato a kas saan a husto. Ti mangliklik daytoy, babaen ti kasisigud daytoy a modulo ket ikkatenna amin dagiti blanko nga argumento.
Iti maipada, ti whitespace ketmabalin a gapuanan kadagiti parikut no mangipanggep kadagiti pangipuesto nga argumento. Urayno ti whitespace ket makissayan para kadagiti nanaganan nga argumento nga agtaud manipud ti #invoke, daytoy ket mapreserba para kadagiti panangipuesto nga argumento. Kaaduan a saan a kinaynayat dagiti maipatinayon a whitespace, isunga a daytoy a modulo ket kasisigud a kissayanna daytoy.
Nupay kasta, sagpaminsan met a kayat nga usaren dagiti blanko nga argumento a kas maikabilt, ken sagpaminsan met a kayat ti maipatinayon a whitespace. Daytoy ket nasken no pagbaliwen dagiti dadduma a plantilia iti kasisigud met laeng a pannakaisuratda. No kayat nga aramiden daytoy, iyasentar dagiti argumento ti
trim ken
removeBlanks iti
false.
local args = getArgs(frame, { trim = false, removeBlanks = false })
Naisangayan a panagporma dagiti argumento
Sagpaminsan met a kayat nga ikkaten dagitiblanko nga argumento ngem ibati dagiti sabali, wenno kayat nga ikabil amin a panangipuesto nga argumento iti ababa a letra. Ti panagaramid kadagiti kastoy mabalin nga usaren ti pagpilian ti
valueFunc . Ti maikabil ti daytoy a pagpilian ket nasken nga annong a mangala kadagiti dua a parametro,
key ken
value, ken mangisubli ti agmaymaysa a pateg. Daytoy a pateg ti maalam no serrekan ti pagikabilan ti
key iti tabla ti
args.
Kas pagarigan 1: daytoy nga annong ket ipreserbana ti whitespace para iti umuna a pangipuesto nga argumento, ngem kissayanna amin dagiti sabali nga argumento ken ikkatenna amin dagiti sabali a blanko nga argumento.
local args = getArgs(frame, { valueFunc = function (key, value) if key == 1 then return value elseif value then value = mw.text.trim(value) if value ~= '' then return value end end return nil end })
Kas pagarigan 2: daytoy nga annong ket ikkatenna dagiti blanko nga argumento ken pagbaliwenna amin dagiti argumento iti ababa a letra, ngem sanna a kissayan ti whitespace manipud kadagiti pangipuesto a parametro.
local args = getArgs(frame, { valueFunc = function (key, value) if not value then return nil end value = mw.ustring.lower(value) if mw.ustring.find(value, '%S') then return value end return nil end })
Nota: dagiti annong dita ngato ket mapaay no maipasa ti maikabil a saana kita ti
string wenno
nil. Mabalin daytoy a kaso no usaren ti annong ti
getArgs iti nangruna nga annong ti modulo, ken dayta nga annong ket tawagan babaen ti sabali a modulo ti Lua. Iti daytoy a kaso, nasken a kitaen ti kita ti ikabil. Daytoy ket saan a parikut no agipasa ti annong a naipangruna para kadagiti argumento manipud ti #invoke (kasla no adda dagiti annong ti
p.main ken
p._main , wenno kapadana).
Pangngaasi pay a laglagipen a ti annong ti
valueFunc ket kankanayon a matawtawagan no ti maysa nga argumento ket kiniddaw manipud ti tabla ti
args, isunga no kaykayat ti nasayaat a panagpaandar siguraduen a saan nga agramid ti aniaman a saan a nasayaat iti kodigo.
Dagiti kuadro ken dagiti nagannak a kuadro
Dagiti argumento iti tabla ti
args ket mabalin nga agiddan a maipasa manipud ti agdama a kuadro wenno manipud ti nagannak a kuadro. Tapno maawatan ti kayatna a saoen daytoy, nasaysayaat ti mangited ti maysa a kas pagarigan. Kunaen tayo laengen nga adda ti maysa a modulo a tinawtawagan ti
Modulo:KaspagariganArgs. Daytoy a modulo ket imalditna dagiti dua nga umuna a pangipuesto nga argumento a maipasa.
Ti
Modulo:KaspagariganArgs ket matawaganton babaen ti
Plantilia:KaspagariganArgs, nga aglaon ti kodigo ti
{{#invoke:KaspagariganArgs|main|firstInvokeArg}}. Daytoy ket pataudenna ti resulta ti "firstInvokeArg".
No tawagentayo met ti
Plantilia:KaspagariganArgs, ti sumaganad ket isu ti mapasamak:
Adda met dagiti tallo a pagpilian a maiyasentar tapno mabaliwan daytoy a panagkukua
frameOnly, ti
parentOnly ken
parentFirst. No iyasentar ti
frameOnly dagiti laeng argumento a maipasa manipud ti agdama a kuadro ti maawat; no iyasentar ti
parentOnly dagiti laeng argumento a maipasa manipud ti nagannak a kuadro ti maawat; ken no iyasentar ti
parentFirst maipasanto dagiti argumento manipud kadagiti agdama ken nagannak a kuadro, ngem ti nagannak a kuadro ket maiyunayunayto iti agdama a kuadro. Adda ditoy dagiti resulta kadagiti termino ti
Plantilia:KaspagariganArgs:
- frameOnly
- parentOnly
- parentFirst
Nota: no iyasentar dagiti pagpilian ti
frameOnly ken ti
parentOnly , ti modulo ket sanna nga laen dagitianiaman nga argumento manipud ti #invoke. Daytoy ti kayat a maaramid.
Panagsurat iti tabla ti args
Sagpaminsan a naserbi ti agsurat kadagitibaro a pateg iti tabla ti args. Daytoy ket posible iti kasisigud a pannakaiyasentar ti modulo. (Nupay kasta, laglagipen a nasaysayaat nga estilo ti panagkodigo ti agpartuat ti baro a tabla kadagiti baro a pateg ken kopiaen dagiti argumento manipud ti taba ti args no masapul.)
args.foo = 'dagiti pateg'
Mabalin a baliwan daytoy a panagkukua babaen ti pagpilian ti
readOnly and
noOverwrite . No maiyasentar ti
readOnly sannton a mabalin ti agsurat kadagiti aniaman a pateg iti tabla ti args. No maiyasentar ti
noOverwrite , mabalinton ti agnayon kadagiti baro a pateg iti tabla, ngem saanen a mabalin ti agnayon ti pateg no suratanna manenn dagiti aniaman nga argumento a maipasa manipud ti #invoke.
Dagiti etiketa ti ref
Daytoy a modulo ket agus-usar kadagiti metatabla tapno agala kadagiti argumento manipud ti #invoke. Daytoy ket mangpalubos ti mangserrek kadagiti kuadro ti argumento ken dagiti argumento ti nagannak a kuadro a saan nga agusar ti annong ti
pairs() . Daytoy ket mabalin a makatulong no ti modulo ket maipasa a kas dagiti maikabil nga etiketa ti
...  .
Intono maserrekanen dagiti etiketa iti
...  manipud ti Lua, maproseso dagitoy babaen ti sopwer ti MediaWiki ken ti reperensia ket agparangto iti listaan ti reperensia. No mapan a mangikkat ti modulo kadagiti etiketa ti reperensia manipud ti maiparuar, ti addanto ket ti phantom a reperensia - ti reperensia nga agparang iti listaan ti reperensia, ngem awan ti biang a maisilpo ti daytoy. Daytoy ket parikut idin dagiti modulo nga agus-usar ti
pairs() tapno mangduktal no agusar kadagiti argumento manipud ti kudro wenno nagannak a kuadro, gaputa dagita a modulo ket automatikoda a mangproseso ti amin a magun-od nga argumentoa.
Daytoy a modulo ket solbarenna daytoy a parikut babaen ti panagpalubos ti panagserrek kadagiti argumento ti kuadro ken nagannak a kuadro, bayat nga agal-ala pay laeng kadagitoy nga argumento no nasken. Nupay kasta, ti parikut ket rumsua pay laeng no usaren ti
pairs(args) kadagiti modulo,
Dagiti ammo a limitasion
Ti panag-usar kadagiti metatabla ket adda met dagiti saan a nasayaat a pagbanaganna. Kaaduan kadagiti normal a ramramit ti tabla ti Lua ket saan a nasayaat nga agobra iti tabla ti args, a mairaman ti operator ti
# , ti anong ti
next() , ken dagiti annong ti biblioteka ti tabla. No ti panag-usar kadagitoy ket nasken para iti modulo, nasken nga agusar ti bukod nga annong ti panagproseso ti argumento imbes nga usaren daytoy a modulo.
-- Daytoy a modulo ket mangited ti nalaka a panagproseso kadagiti argumento -- a maipasa iti Scribunto manipud ti #invoke. Daytoy ket saan a naikeddeng -- a mausar dagiti sabali a modulo ti Lua, ken nasken a saan a dagus a matawagan -- manipud ti #invoke. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Get the arguments from the frame object if available. If the frame object -- is not available, we are being called from another Lua module or from the -- debug console, so assign the args to a new variable so we can -- differentiate them. --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if not options.parentOnly then fargs = frame.args end if not options.frameOnly then pargs = frame:getParent().args end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "madi a pateg ti nainagan iti pagpilian ti 'valueFunc'" .. '(nakanamnama ti annong, ti naala ket ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(iterator, tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table using the specified iterator. If a value is already -- present it is not overwritten; tables listed earlier have precedence. -- We are also memoizing nil values, but those values can be -- overwritten. --]] for _, t in ipairs(tables) do for key, val in iterator(t) do if metaArgs[key] == nil then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = true else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal == nil then nilArgs[key] = true else metaArgs[key] = argTableVal return argTableVal end end return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if options.readOnly then error( 'saan a makaisurat iti tekla ti tabla ti argumento "' .. tostring(key) .. '"; ti tabla ket mabasa laeng', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'saan a makaisurat iti tekla ti tabla ti argumento "' .. tostring(key) .. '"; madi ti mangsurat manen kadagiti adda nga argumento', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = true -- Memoize nils. else metaArgs[key] = val end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(pairs, argTables) metatable.donePairs = true metatable.doneIpairs = true end return pairs(metaArgs) end metatable.__ipairs = function () -- Called when ipairs is run on the args table. if not metatable.doneIpairs then mergeArgs(ipairs, argTables) metatable.doneIpairs = true end return ipairs(metaArgs) end return args end return arguments
ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn snd_Arab ilo_Latn ilo_Latn ilo_Latn ilo_Latn isl_Latn glg_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn eng_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn eng_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn hne_Deva eng_Latn ilo_Latn ilo_Latn ilo_Latn eng_Latn ilo_Latn ilo_Latn lim_Latn ilo_Latn eng_Latn ilo_Latn eng_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn sag_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn sag_Latn tpi_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn nob_Latn eng_Latn eng_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn eng_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn snd_Arab ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn ilo_Latn sag_Latn ilo_Latn eng_Latn