Modul:param
Dokumentation för denna modul finns på /dok (redigera), /test
Syfte
redigeraDetekterar icke-uppskattade parametrar skickade till mallar, både anonyma/numrerade och namngivna. Kan anropas enbart från moduler, inte direkt från mallar.
Parametrar
redigeraTvå table
tabeller:
- innehållande parametrar inkommande till mallen, till exempel rakt kopierad från
frame:getParent().args
- lista över parametrar tillåtna för mallen, till exempel
{[0]=2,"temperatur","tryck","nocat"}
, heltal i elementet 0 definierar maximalt antal anonyma parametrar
Resultat
redigeraAlltid string
sträng:
- tom betyder OK
- icke-tom betyder fel, listar upptäckta oönskade parametrar, till exempel
parametrar "hastighet=" och 3 (anonym)
, begränsat till maximalt 3 stycken, kan och ska användas för att generera ett produktivt felmeddelande
-- check for unallowed parameters, returns string, empty if OK
-- NOT usable directly from templates
local exporttbl = {}
local function contains (tbl, val)
for l,w in ipairs(tbl) do
if w == val then
return true
end
end--for
return false
end--function
function exporttbl.go (tbl_incoming, tbl_permitted)
local complaint = ""
local numbered_parameters = 0
local unallowed_parameters = 0
local function problem (guilty_value) -- uses upvalues
if (unallowed_parameters<3) then
if type(guilty_value)=="number" then
guilty_value = tostring(guilty_value) .. ' (anonym)'
else
guilty_value = '"' .. guilty_value .. '="'
end--if
if (unallowed_parameters~=0) then
complaint = complaint .. ' och '
end--if
complaint = complaint .. guilty_value
unallowed_parameters = unallowed_parameters + 1
end--if
end--function
numbered_parameters = tbl_permitted[0] -- ZERO value permitted
tbl_permitted[0] = nil
for k,v in pairs(tbl_incoming) do
if type(k)=="number" then
if k > numbered_parameters then
problem (k)
end
else
if not contains(tbl_permitted, k) then
problem (k)
end
end--if
end--for
if (unallowed_parameters==1) then
complaint = "parameter " .. complaint
end--if
if (unallowed_parameters>=2) then
complaint = "parametrar " .. complaint
end--if
return complaint
end--function
return exporttbl