Modul:Homokozó/Pepo41/UnpackVálasztottArgumentumokat

Homokozó/Pepo41/UnpackVálasztottArgumentumokat[mi ez?] • [dokumentáció: mutat, szerkeszt] • [tesztek: létrehozás]

local p= {}

    function p.tablepack(...)
	return { n = select("#", ...), ... } -- létrehoz egy új táblát a varargs elemeivel 
				     -- és előtte egy n mezővel , a tábla hossza így n+1
	end

-- turns a frame object into a table
    local segedtabl =  {} -- ezek lesznek a frame.args elemei egész indexekkel
 	local indextabl =  {} -- ezek lesznek az indexei
    local selectedargs = {} -- ide gyűjtjük a frameargsból kiválasztandó argumentumokat: 
    --|Mondottam ember küzdj|és bízva bízzál|Az Úr hangja|eltolás = balra|szín=kék|125px}}
         --1="Mondottam ember küzdj",2="és bízva bízzál",3="Az Úr hangja"
    	-- ,"kék","balra""szin","eltolás",4=125px 
    local n= 0
    
       	
    function Args(frame) 
                  -- pl. frame.args:"Mondottam ember küzdj",2="és bízva bízzál"
    													--3="Oszt jónapot!",4="kék",5="balra" "szin","eltolás",3
        local i=0
        for k, v in pairs(frame.args) do   
   			i=i+1
       		segedtabl[i] = v -- itt gyűlnek a frame.args elemei egész indexekkel
       		indextabl[i] = k -- itt gyűlnek a frame.args indexei 
       	end	--k, v in pairs(frame.args) do 
        n=i   
        return 
    end  --Args(frame) vége  
   		
   		

 
     function unpackSelectedArgs (frame, ...)
        local valasztottak =  {} 
        valasztottak =  p.tablepack(...)
        local outtabl = {}  -- ezt a táblát fogjuk unpackkal kiadni a végén
           for i=1, valasztottak.n do -- ezek a kiválasztottak :"szín","eltolás",3
    							-- melyik i felel meg ezeknek az indextáblában? (4,5,3)
    	    			for j=1, n do 
    		    		   if valasztottak[i] == indextabl[j] then outtabl[i]=segedtabl[j] end
    				       --1,2,3,"szin","eltolás"=="szín","eltolás",3
    				   --print(i,j,selectedargs[i],indextabl[j])
    			    	end --j ciklus
    				--print(outtabl[i])
    	    end	-- i ciklus		       
		--print (unpack(outtabl))
		return unpack(outtabl)
    end --unpackSelectedArgs vége
 
      
function p.foo (frame)
    local out = unpackSelectedArgs (frame, 1,2,"szín", 3, "eltolás") 
    return out
end -- foo

return p