Module:Transclude

๐†๐‚๐Œฐ๐Œผ Wikipedia
Jump to navigation Jump to search

Documentation for this module may be created at Module:Transclude/doc

local M={}
---------------------------------------------------------
-- ะคัƒะฝะบั†ะธะธ ะดะปั ั€ะฐะฑะพั‚ั‹ ั ะฟะฐั€ะฐะผะตั‚ั€ะฐะผะธ ะฒั‹ะทะฒะฐะฒัˆะตะณะพ ัˆะฐะฑะปะพะฝะฐ --
---------------------------------------------------------
function M.uni(f)-- ะฃะฝะธั„ะธะบะฐั†ะธั ะธะผั‘ะฝ ะฟะฐั€ะฐะผะตั‚ั€ะพะฒ; ะฟัะตะฒะดะพะฝะธะผั‹.
    local tf, cs=f:getParent(), {};
    local findcs=function(a) cs[a]=f.args[a] end;
    (f.args['|ั„ะธะบัั€ะตะณ'] or f.args['|fixreg'] or ''):gmatch(' *([^%n]+) *', findcs);
    -- {{!}}ั„ะธะบัั€ะตะณ = ัะฟะธัะพะบ ั€ะฐะทะดะตะปั‘ะฝะฝั‹ั… ะฝะพะฒั‹ะผะธ ัั‚ั€ะพะบะฐะผะธ ะฐั€ะณัƒะผะตะฝั‚ะพะฒ, ั€ะตะณะธัั‚ั€ ะบะพั‚ะพั€ั‹ั… ะฝะต ะผะตะฝัั‚ัŒ
    local args,am={};
    for a,v in pairs(tf.args) do
        am = a:lower():gsub('[_ ]+',' ');
        args[ cs[a] and a  or  ( f.args[am] or am ) ] = v
    end
    return tf:expandTemplate{title=f.args[1]; args=args}
end

M['forall'] = function(f)-- ะ˜ั‚ะตั€ะฐั‚ะพั€ ะฟะพ ะฐั€ะณัƒะผะตะฝั‚ะฐะผ ะฒั‹ะทั‹ะฒะฐัŽั‰ะตะณะพ ัˆะฐะฑะปะพะฝะฐ.
    -- f.args[1] โ€” ะธะผั ะฒั‹ะทั‹ะฒะฐะตะผะพะณะพ ัˆะฐะฑะปะพะฝะฐ.
     local tf,ac,res,tln,sep,gl=f:getParent(),{},{},f.args[1]:match('^%s*([^#]-)%s*#(.*)$'),tonumber(f.args[2]) or 1;
     if not tln then tln,sep=f.args[1]:match('^%s*(.-)%s*$'),'' end
     for p,k in pairs(f.args) do if type(p)=='string' then ac[p]=k end end
     local ans,i,ablk={},1;
     while tf.args[i] do
         if gl==1 then
             ans[i] = tf:expandTemplate{ title=tln; args={tf.args[i], unpack(ac)} }
         else
             ablk={}; for j = 0, gl-1 do ablk[j] = tf.args[i*gl+j] end;
             for k,v in pairs(ac) do ablk[k]=v end;
             ans[i] = tf:expandTemplate{ title=tln; args=ablk }
         end
         i = i+1
     end
     return table.concat(ans,sep)
end

function M.escapeparams(f)-- ะะพั€ะผะฐะปะธะทะฐั†ะธั
	-- (ะพะฑะตะทะพะฟะฐัะธะฒะฐะฝะธะต) ะทะฝะฐั‡ะตะฝะธะน ะฟะฐั€ะฐะผะตั‚ั€ะพะฒ.
    local i,ac,acn=0,{},{};
    local function repl(s)
        return s:gsub('{{','{{ะฅ'):gsub('}}',"{{ะชะช}}"):gsub('{{ะฅ','{{ะฅะฅ}}')--: --ะทะฐะผะตะฝะฐ ั„ะธะณัƒั€ะฝั‹ั… ัะบะพะฑะพะบ
           :gsub('=','{{=}}'):gsub('|','{{!}}') 
    end
    for k,v in pairs(f:getParent().args) do
        if type(k)=='number' then ac[k]=repl(v); i=i+1
        else acn[repl(k)]=repl(v)end
    end
    if i ~= #ac-1 then --ะฝัƒะผะตั€ะพะฒะฐะฝะฝั‹ะต ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะฝะต ัะฟะปะพัˆะฝั‹ะต
        for k,v in pairs(ac) do
            if k>i then acn[tostring(k)] = v; ac[k]=nil end-- ัƒะดะฐะปัั‚ัŒ ะฒ pairs ะผะพะถะฝะพ
        end
    end
    for k,v in pairs(acn) do
        table.insert(ac, table.concat(f.args[2] or "\n ", k, f.args[3] or ' = ', v, f.args[4] or '') )
    end
    return table.concat(ac,'|')
end

function M.npc(f)-- ะ˜ั‚ะตั€ะฐั‚ะพั€ ะฟะพ ะธะผะตะฝะพะฒะฐะฝะฝะพ-ะฝัƒะผะตั€ะพะฒะฐะฝะฝั‹ะผ ะฟะฐั€ะฐะผะตั‚ั€ะฐะผ.
    local tf, ac, ns = f:getParent(), {}, {};
    for k,v in pairs(tf.args) do
        local b,n = string.match(k,"^(.-)%s*(%d*)$");
        n = tonumber(n);
        if n then
            if f.args[b] then
                if not ac[n] then
                    ac[n] = mw.clone(f.args)
                    setmetatable( ac[n], nil ) -- metatable ะปะพะผะฐะตั‚ expandTemplate
                    table.insert(ns,n)
                end
                ac[n][b] = v
            end--if f.args[b]
        end--if n
    end--for
    table.sort(ns);
    local tmod = #f.args-1
    for n,i in ipairs(ns) do
        ns[n]=tf:expandTemplate{ title=f.args[n % tmod+1]; args=ac[i] }
    end
    return table.concat(ns)
end

function M.call(f)-- ะŸั€ะพัั‚ะพ ะฒั‹ะทั‹ะฒะฐะตั‚ ัˆะฐะฑะปะพะฝ ั ะฐั€ะณัƒะผะตะฝั‚ะฐะผะธ ะฒั‹ะทั‹ะฒะฐัŽั‰ะตะณะพ.
    return f:getParent():expandTemplate{ title=f.args[1]; args=f:getParent().args }
end

function M.join(f)-- ะ’ะตั€ัะธั forall ั ั€ะฐะทะดะตะปะธั‚ะตะปะตะผ ะฒะผะตัั‚ะพ ัˆะฐะฑะปะพะฝะฐ.
    -- f.args[1] โ€” ั€ะฐะทะดะตะปะธั‚ะตะปัŒ.
    local t, tf, i = {}, f:getParent(), tonumber(f.args.from) or 1
    local k,j,m = tonumber(f.args.to),i,f.args[3]
    while k and i<=k or tf.args[i] do
    	if (
    		({
    			['_']=function(s)return s~=''end;
    			['s']=function(s)return not tostring(s):match("^%s*$")end
    		})[m] or function() return true end
    	)(tf.args[i]) then
    		t[j]=tf.args[i];
    		j=j+1
    	end;
    	i=i+1
    end
    return mw.text.listToText(t,f.args[1],f.args[2] or f.args[1])
end
-------------------------------------------------------
-- ะคัƒะฝะบั†ะธะธ ะดะปั ั€ะฐะฑะพั‚ั‹ ั ะฟะฐั€ะฐะผะตั‚ั€ะฐะผะธ ัˆะฐะฑะปะพะฝะฐ ะฒ invoke --
-------------------------------------------------------
--[[
function M.split(f)-- ะ ะฐะทั€ะตะทะฐะตั‚ ัั‚ั€ะพะบัƒ f.args[3]
	-- ัƒะบะฐะทะฐะฝะฝั‹ะผ ะฒ f.args[2](?) ั€ะฐะทะดะตะปะธั‚ะตะปะตะผ
    -- ะธ ะฟะตั€ะตะดะฐั‘ั‚ ะบัƒัะบะธ ัˆะฐะฑะปะพะฝัƒ f.args[1].
    local tf, ac, oldi, i, e =f:getParent(), {}, 1, f.args[3]:find(f.args[1],1,true)
    -- ยซf.args[1]ยป ะฒ ัั‚ั€ะพะบะต ะฒั‹ัˆะต โ€” ั‚ะพั‡ะฝะพ ะฝะต ะพัˆะธะฑะบะฐ? --Incnis Mrsi
    while i do
        table.insert( ac,  f.args[3]:sub(oldi, i-1) ); oldi=e+1
    end
    table.insert( ac, f.args[3]:sub(oldi, #f.args[3]-1) )
    return f:getParent():expandTemplate{ title=f.args[1]; args=ac }
end
]]

function M.cycle(f)-- ะ”ะตะนัั‚ะฒัƒะตั‚ ะฐะฝะฐะปะพะณะธั‡ะฝะพ forall ะฟะพ ั‡ะธัะปะพะฒะพะน ะฟะตั€ะตะผะตะฝะฝะพะน,
    -- ะธะทะผะตะฝััŽั‰ะตะนัั (ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ, ะพั‚ 1) ะดะพ f.args[2].
    local tf,ac=f:getParent(),{};
    for p,k in pairs(f.args) do
        if type(p)=='number' then
            if p>2 then ac[p-1]=k end
        else ac[p]=k
        end
    end
    local s,fh = f.args[2]:match('^%s*(%-?%d+)%s*%.%.') or 1,
        f.args[2]:match('%.%.%s*(%S.*)%s*$') or f.args[2] or '';
    fh=tonumber(fh) or fh:match('^%s*(.-)%s*$');
    local acr={};
    if not tonumber(s) then error('ะะฐั‡ะฐะปะพ ั†ะธะบะปะฐ ยซ'..s..'ยป โ€” ะฝะต ั‡ะธัะปะพ') end
    local function dc()
            local r=tf:expandTemplate{ title=f.args[1]; args={s,unpack(ac)} }
            s=s+1;
            if r~='' then table.insert(acr,r); return r end
    end
    if type(fh)=='number' then 
        while s<fh do dc() end
    elseif fh~='' then
        while tf:expandTemplate{ title=fh; args={s,unpack(ac)} } do dc() end
    else
        while dc() do end
    end
    return table.concat(acr)
end
--[[ะคัƒะฝะบั†ะธั ะฝะต ะฟะฐัˆะตั‚ ะบะฐะบ ะผะพะถะฝะพ ะถะดะฐั‚ัŒ โ€” ะฟั€ะพะฑะตะปั‹ ะพั‚ัะตะบะฐัŽั‚ัั ะฟะพัะปะต ะฟะตั€ะตะดะฐั‡ะธ ะฟะฐั€ะฐะผะตั‚ั€ะพะฒ ะฒ expandTemplate
function M.pass(f)-- ะŸะตั€ะตะดะฐั‘ั‚ ัˆะฐะฑะปะพะฝัƒ ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะฑะตะท ะฟะพะดั€ะตะทะบะธ.
    local ac,i={},1;
    while f.args[2*i] do ac[ tonumber(f.args[2*i]) or f.args[2*i] ] = f.args[2*i+1]; i=i+1 end;
    return  f:getParent():expandTemplate{ title=f.args[1]; args=ac }
end
]]
return M
๐Œฒ๐Œฐ๐Œฝ๐Œฟ๐Œผ๐Œฐ๐Œฝ ๐†๐‚๐Œฐ๐Œผ "https://got.wikipedia.org/w/index.php?title=Module:Transclude&oldid=39790"