Modul:Homokozó/Pepo41/Arguments

A Wikipédiából, a szabad enciklopédiából
Ugrás a navigációhoz Ugrás a kereséshez

Source code project 1171.svg Homokozó/Pepo41/Arguments[mi ez?] • [dokumentáció: mutat, szerkeszt] • [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