Modul:Homokozó/Pepo41/Arguments
Megjelenés
Homokozó/Pepo41/Arguments[mi ez?] • [dokumentáció: mutat, ] • [tesztek: létrehozás]
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
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 ou = ''
local oumax = 2000 -- a tesztüzenetek számának maximuma
local oumarad = oumax
local function pop(...) -- idézőjeles rész és bővítmények az ou számára
-- memóriatúllépést okozhat, csak teszteléshez
--[[ local list = {...}
oumarad = oumarad - 1 -- előre csökkentjük, így mindig a maradék lehetséges --pop hívások számát mutatja
if oumarad == 0 then return end -- hogy ne legyen memóriatúllépés
for _, var in pairs(list) do
ou = ou .. tostring(var) .. '\n '
end ]]
end
local function Trim_and_nil_for_empty (val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
pop("function Trim_and_nil_for_empty: trimelt string argumentum= "..' '..val)
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function TrimOnly( val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
pop("function TrimOnly: trimelt string argumentum= "..' '..val)
return val
else
return val
end
end
local function Return_not_space_or_nil( val) -- ha talál szóköztől eltérőt
if type(val) == 'string' then -- azt úgy ahogy van visszaadja
if val:find('%S') then
pop("function Return_not_space_or_nil: string argumentum= "..' '..val)
return val
else
return nil -- ha viszont csupa szóköz van benne, akkor nilt ad vissza
end
else
return val -- minden mást változatlanul visszaad
end
end
local function NoChange(val)
pop("function NoChange: string argumentum= "..' '..tostring(val))
return val
end
function arguments.getArgs(frame, options)
local metafargs, nilfargs, metapargs, nilpargs = {}, {}, {}, {}
local fargs_to_metafargs_run = false
local pargs_to_mefapargs_run = false -- mert még nem futottak
local function fargs_to_metafargs (fargs)
if fargs then
for key, val in pairs(fargs) do
local tidiedVal = tidyVal(val)
if tidiedVal == nil then
nilfargs[key] = true
metafargs[key] = tidiedVal
pop("function fargs_to_metafargs: nilfargs= " .." " .. tostring(key) .." " .. tostring(nilfargs[key]))
pop("function fargs_to_metafargs: metafargs=" .." " .. tostring(key) .." " .. tostring(metafargs[key]))
else
metafargs[key] = tidiedVal
pop("function fargs_to_metafargs:metafargs=" .." " .. tostring(key) .." " .. tostring(metafargs[key]))
end
end
fargs_to_metafargs_run = true
else pop("function fargs_to_metafargs: nincs fargs")
end
end
local function pargs_to_metapargs (pargs)
if pargs then
for key, val in pairs(pargs) do
local tidiedVal = tidyVal(val)
if tidiedVal == nil then
nilpargs[key] = true
metapargs[key] = tidiedVal
pop("function pargs_to_metapargs:nilpargs= " .." " .. tostring(key) .." " .. tostring(nilpargs[key]))
pop("function pargs_to_metapargs: metapargs=" .." " .. tostring(key) .." " .. tostring(metapargs[key]))
else
metapargs[key] = tidiedVal
pop("function pargs_to_metapargs:metapargs=".." " .. tostring(key).." " .. tostring(metapargs[key]))
end
end
pargs_to_metapargs_run = true -- hogy csak egyszer fussék
else pop("function pargs_to_metapargs: nincs pargs")
end
end
metafargs.__index = function (key)
if not fargs_to_matapargs_run then fargs_to_metafargs(fargs) end
local val = metafargs[key]
if val ~= nil then
return val
elseif nilfargs[key] then
return nil
end
end
metapargs.__index = function (key)
if not pargs_to_matapargs_run then pargs_to_metapargs(pargs) end
local val = metapargs[key]
if val ~= nil then
return val
elseif nilpargs[key] then
return nil
end
end
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
pop("function arguments.getArgs: Tipe of frame= ".. ' '..type(frame))
local hiba = false
if not (options.Trim_and_nil_for_empty or options.TrimOnly or options.Return_not_space_or_nil or options.NoChange) then hiba = true end
if options.Trim_and_nil_for_empty and (options.TrimOnly or options.Return_not_space_or_nil or options.NoChange) then hiba = true end
if options.TrimOnly and (options.Trim_and_nil_for_empty or options.Return_not_space_or_nil or options.NoChange) then hiba = true end
if options.Return_not_space_or_nil and (options.Trim_and_nil_for_empty or options.TrimOnly or options.NoChange) then hiba = true end
if options.NoChange and (options.Trim_and_nil_for_empty or options.TrimOnly or options.Return_not_space_or_nil) then hiba = true end
if hiba == true then
error('helytelen a paraméterezése a szóközök kezelésének"', 2)
end
if options.Trim_and_nil_for_empty then
tidyVal = Trim_and_nil_for_empty
end
if options.TrimOnly then
tidyVal = TrimOnly
end
if options.Return_not_space_or_nil then
tidyVal = Return_not_space_or_nil
end
if options.NoChange then
tidyVal = NoChange
end
if options.frameOnly then
fargs = frame.args
fargs_to_metafargs(fargs)
setmetatable(fargs, metafargs)
return ou, metafargs
elseif options.parentOnly then
parent = frame:getParent()
pargs = parent and parent.args or nil -- ha van parent és van parent.args is
pop("pargs tipusa ha ő létezik = " ..type(pargs))
pargs_to_metapargs(pargs)
setmetatable(pargs, metapargs)
return ou, metapargs
elseif options.both then
fargs = frame.args
fargs_to_metafargs(fargs)
setmetatable(fargs, metafargs)
parent = frame:getParent()
pargs = parent and parent.args or nil -- ha van parent és van parent.args is
pargs_to_metapargs(pargs)
setmetatable(pargs, metapargs)
return ou, metafargs, metapargs
end
end -- arguments.getArgs()
return arguments