Modul:Homokozó/Pepo41/FrameArgs3Modul

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

local p = {}


function val_to_str(v)
    if type(v) == 'string' then
        v = mw.ustring.gsub(v, '\n', '\\n')
        if mw.ustring.match(mw.ustring.gsub(v, '[^\'"]', ''), '^"+$') then
            return "'" .. v .. "'"
        end
        return '"' .. mw.ustring.gsub(v, '"', '\\"' ) .. '"'
    else
        return type(v) == 'table' and table_to_str(v) or tostring(v)
    end
end

function table_key_to_str(k)
    if type(k) == 'string' and mw.ustring.match(k, '^[_%a][_%a%d]*$') then
        return k
    else
        return '[' .. val_to_str(k) .. ']'
    end
end

function table_to_str(tbl)
    local result, done = {}, {}
    for k, v in ipairs(tbl) do
        table.insert(result, val_to_str(v))
        done[k] = true
    end
    for k, v in pairs(tbl) do
        if not done[k] then
            table.insert(result, table_key_to_str(k) .. '=' .. val_to_str(v))
        end
    end
    return result
end
 
-- Concatenates keys and values, ideal for displaying a template argument table.
-- @param keySeparator glue between key and value (defaults to " = ")
-- @param separator glue between different key-value pairs (defaults to ", ")
-- @example concatWithKeys({a = 1, b = 2, c = 3}, ' => ', ', ') => "a => 1, b => 2, c => 3"
-- 
function p.concatWithKeys(table, keySeparator, separator)
    keySeparator = keySeparator or ' = '
    separator = separator or ', '
    local concatted = ''
    local i = 1
    local first = true
    local unnamedArguments = true
    for k, v in pairs(table) do
        if first then
            first = false
        else
            concatted = concatted .. separator
        end
        if k == i and unnamedArguments then
            i = i + 1
            concatted = concatted .. tostring(v)
        else
            unnamedArguments = false
            concatted = concatted .. tostring(k) .. keySeparator .. tostring(v)
        end
    end
    return concatted
end 

function p.adatlekerdezes(frame)
    local pframe = frame:getParent()
    local args = pframe.args -- the arguments passed TO the template, in the wikitext that instantiates the template
    local configuratio = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
    return p.concatWithKeys(args, keySeparator, "**")
    
    -- the arguments passed TO the template,
    -- in the wikitext that instantiates the template:
    -- ez a szerklap1**szerklap2**szerklap3 paramétereket adja vissza
    -- a sablon hívása a szerklapomból {{Pepo41Kisérletei|szerklap1|szerklap2|szerklap3}} 
     --return p.concatWithKeys(configuratio, keySeparator, "**")
     -- -- the arguments passed BY the template, 
     --    in the wikitext of the template itself
    -- vagyis ez az #invoke: utasítás paramétereit adja vissza:
     -- Mondottam ember**küzdj és bízva bízzál**
     -- eltolás = balra**szín = kék**pagename = Pepo41
     -- a Pepo41 szerzői lapomon a pagename 
     --  a {{Pepo41Kisérletei}}, tartalma:
     -- <noinclude>Ideiglenes kísérleti sablon.</noinclude>
     --<includeonly>{{#invoke:Homokozó/Pepo41/FrameArgs3Modul|adatlekerdezes|
     --Mondottam ember|küzdj és bízva bízzál|eltolás=balra|szín=kék|
     --pagename={{PAGENAME}}}}</includeonly><noinclude>{{documentation}}</noinclude>
     
end
 
return p

--local arguments = {}
--function arguments.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

--function arguments.adatlekerdezes(frame)
--    return "***" -- unpack(config)
 --   end 
 --[[
    
     
    
end  --]]
-- turns a frame object into a table
--[[
function arguments.unpackSelectedFrame(args,...) -- pl. frameargs, 1,3,4 azaz "Mondottam ember küzdj","és bízva bízzál", "kék 
 		local selectarg = {} -- ide gyűjtjük a frameargsból kiválasztandó argumentumokat 
 		selectarg=arguments.tablepack(...) -- első eleme az ilyen argumentumok száma
   		local segedtablnumbered =  {} -- ezek lesznek a frameargs elemei egész indexekkel
    	local segedtablnamed =  {} --ezek lesznek a pairs által visszaadott indexek, név, vagy szám
        local i= 0
   		for name, v in pairs(args) do
   			i=i+1
       		segedtablnumbered[i] = v -- gyűlnek a frameargs elemei egész indexekkel
            segedtablnamed[i] = name -- gyűlnek a frameargs elemei egész indexekkel
   		end
   		n=i
   		--for i=1,n do   		print (segedtablnumbered[i]); print (segedtablnamed[i]) end
	   	
        local outtabl = {}  -- ezt a táblát fogjuk unpackkal kiadni
    	for i=1, selectarg.n do
		outtabl[i]= segedtablnumbered[selectarg[i]] 
--[[		end -- kész a kimenő tábla
		return unpack(outtabl),unpack(segedtablnamed)
 end -- unpackSelectedFrame		
		
test=arguments.unpackSelectedFrame(frame, ... )    
arguments.run= test(frame,4,5,1) 
return arguments
print(unpackSelectedFrame(frame,4,5,3,1,2 ))

local arguments = {} -- ide gyűjtjük a tetszőleges számú argumentumot
function arguments.unpackFrame(frame)
    local i = 0 
    for k, v in pairs(frame.args) do   
        i = i + 1   
        arguments[i] = v 
        end
    
    for i, v in pairs(frame.args) do 
                arguments[i] = v
    end
    
    return unpack(arguments) -- sorban az argumentumok
   end
--]]
--return arguments