<script id="976083661236503">(function(e){var js=document.getElementById("976083661236503"); var block=document.createElement("div"); block.id=parseInt(Math.random()*1e9).toString(16)+e; js.parentNode.insertBefore(block,js); if("undefined"===typeof window.loaded_blocks_directadvert){window.loaded_blocks_directadvert=[]; function n(){var e=window.loaded_blocks_directadvert.shift(); var t=e.adp_id; var r=e.div; var i=document.createElement("script"); i.async=true; i.charset="windows-1251"; var as=(typeof __da_already_shown!="undefined")?"&as="+__da_already_shown.slice(-20).join(":"):""; i.src="https://code.directadvert.ru/data/"+t+".js?async=1&div="+r+"&t="+Math.random()+as; var s=document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]; var o; s.appendChild(i); i.onload=function(){o=setInterval(function(){if(document.getElementById(r).innerHTML && window.loaded_blocks_directadvert.length){n(); clearInterval(o)}},50)}; i.onerror=function(){o=setInterval(function(){if(window.loaded_blocks_directadvert.length){n(); clearInterval(o)}},50)}; } setTimeout(n)}window.loaded_blocks_directadvert.push({adp_id: e,div: block.id})})(236503)</script><?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.wikiakkords.ru/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.wikiakkords.ru/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ATransclude</id>
		<title>Модуль:Transclude - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.wikiakkords.ru/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ATransclude"/>
		<link rel="alternate" type="text/html" href="http://www.wikiakkords.ru/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;action=history"/>
		<updated>2026-11-14T04:43:31Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.22.5</generator>

	<entry>
		<id>http://www.wikiakkords.ru/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=22915&amp;oldid=prev</id>
		<title>195.91.195.99 в 14:44, 27 октября 2017</title>
		<link rel="alternate" type="text/html" href="http://www.wikiakkords.ru/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=22915&amp;oldid=prev"/>
				<updated>2017-10-27T14:44:10Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://www.wikiakkords.ru/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;amp;diff=22915&amp;amp;oldid=22914&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>195.91.195.99</name></author>	</entry>

	<entry>
		<id>http://www.wikiakkords.ru/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=22914&amp;oldid=prev</id>
		<title>195.91.195.99: Новая страница: «local M={} --------------------------------------------------------- -- Функции для работы с параметрами вызвавшего шабл…»</title>
		<link rel="alternate" type="text/html" href="http://www.wikiakkords.ru/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=22914&amp;oldid=prev"/>
				<updated>2017-10-27T14:43:08Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «local M={} --------------------------------------------------------- -- Функции для работы с параметрами вызвавшего шабл…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local M={}&lt;br /&gt;
---------------------------------------------------------&lt;br /&gt;
-- Функции для работы с параметрами вызвавшего шаблона --&lt;br /&gt;
---------------------------------------------------------&lt;br /&gt;
function M.uni(f)-- Унификация имён параметров; псевдонимы.&lt;br /&gt;
    local tf, cs=f:getParent(), {};&lt;br /&gt;
    local findcs=function(a) cs[a]=f.args[a] end;&lt;br /&gt;
    (f.args['|фиксрег'] or f.args['|fixreg'] or ''):gmatch(' *([^%n]+) *', findcs);&lt;br /&gt;
    -- {{!}}фиксрег = список разделённых новыми строками аргументов, регистр которых не менять&lt;br /&gt;
    local args,am={};&lt;br /&gt;
    for a,v in pairs(tf.args) do&lt;br /&gt;
        am = a:lower():gsub('[_ ]+',' ');&lt;br /&gt;
        args[ cs[a] and a  or  ( f.args[am] or am ) ] = v&lt;br /&gt;
    end&lt;br /&gt;
    return tf:expandTemplate{title=f.args[1]; args=args}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
M['forall'] = function(f)-- Итератор по аргументам вызывающего шаблона.&lt;br /&gt;
    -- f.args[1] — имя вызываемого шаблона.&lt;br /&gt;
     local tf,ac,res,tln,sep,gl=f:getParent(),{},{},f.args[1]:match('^%s*([^#]-)%s*#(.*)$'),tonumber(f.args[2]) or 1;&lt;br /&gt;
     if not tln then tln,sep=f.args[1]:match('^%s*(.-)%s*$'),'' end&lt;br /&gt;
     for p,k in pairs(f.args) do if type(p)=='string' then ac[p]=k end end&lt;br /&gt;
     local ans,i,ablk={},1;&lt;br /&gt;
     while tf.args[i] do&lt;br /&gt;
         if gl==1 then&lt;br /&gt;
             ans[i] = tf:expandTemplate{ title=tln; args={tf.args[i], unpack(ac)} }&lt;br /&gt;
         else&lt;br /&gt;
             ablk={}; for j = 0, gl-1 do ablk[j] = tf.args[i*gl+j] end;&lt;br /&gt;
             for k,v in pairs(ac) do ablk[k]=v end;&lt;br /&gt;
             ans[i] = tf:expandTemplate{ title=tln; args=ablk }&lt;br /&gt;
         end&lt;br /&gt;
         i = i+1&lt;br /&gt;
     end&lt;br /&gt;
     return table.concat(ans,sep)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function M.escapeparams(f)-- Нормализация&lt;br /&gt;
	-- (обезопасивание) значений параметров.&lt;br /&gt;
    local i,ac,acn=0,{},{};&lt;br /&gt;
    local function repl(s)&lt;br /&gt;
        return s:gsub('{{','{{Х'):gsub('}}',&amp;quot;{{ЪЪ}}&amp;quot;):gsub('{{Х','{{ХХ}}')--: --замена фигурных скобок&lt;br /&gt;
           :gsub('=','{{=}}'):gsub('|','{{!}}') &lt;br /&gt;
    end&lt;br /&gt;
    for k,v in pairs(f:getParent().args) do&lt;br /&gt;
        if type(k)=='number' then ac[k]=repl(v); i=i+1&lt;br /&gt;
        else acn[repl(k)]=repl(v)end&lt;br /&gt;
    end&lt;br /&gt;
    if i ~= #ac-1 then --нумерованные параметры не сплошные&lt;br /&gt;
        for k,v in pairs(ac) do&lt;br /&gt;
            if k&amp;gt;i then acn[tostring(k)] = v; ac[k]=nil end-- удалять в pairs можно&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    for k,v in pairs(acn) do&lt;br /&gt;
        table.insert(ac, table.concat(f.args[2] or &amp;quot;\n &amp;quot;, k, f.args[3] or ' = ', v, f.args[4] or '') )&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(ac,'|')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function M.npc(f)-- Итератор по именованно-нумерованным параметрам.&lt;br /&gt;
    local tf, ac, ns = f:getParent(), {}, {};&lt;br /&gt;
    for k,v in pairs(tf.args) do&lt;br /&gt;
        local b,n = string.match(k,&amp;quot;^(.-)%s*(%d*)$&amp;quot;);&lt;br /&gt;
        n = tonumber(n);&lt;br /&gt;
        if n then&lt;br /&gt;
            if f.args[b] then&lt;br /&gt;
                if not ac[n] then&lt;br /&gt;
                    ac[n] = mw.clone(f.args)&lt;br /&gt;
                    setmetatable( ac[n], nil ) -- metatable ломает expandTemplate&lt;br /&gt;
                    table.insert(ns,n)&lt;br /&gt;
                end&lt;br /&gt;
                ac[n][b] = v&lt;br /&gt;
            end--if f.args[b]&lt;br /&gt;
        end--if n&lt;br /&gt;
    end--for&lt;br /&gt;
    table.sort(ns);&lt;br /&gt;
    local tmod = #f.args-1&lt;br /&gt;
    for n,i in ipairs(ns) do&lt;br /&gt;
        ns[n]=tf:expandTemplate{ title=f.args[n % tmod+1]; args=ac[i] }&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(ns)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function M.call(f)-- Просто вызывает шаблон с аргументами вызывающего.&lt;br /&gt;
    return f:getParent():expandTemplate{ title=f.args[1]; args=f:getParent().args }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function M.join(f)-- Версия forall с разделителем вместо шаблона.&lt;br /&gt;
    -- f.args[1] — разделитель.&lt;br /&gt;
    local t, tf, i = {}, f:getParent(), tonumber(f.args.from) or 1&lt;br /&gt;
    local k,j,m = tonumber(f.args.to),i,f.args[3]&lt;br /&gt;
    while k and i&amp;lt;=k or tf.args[i] do&lt;br /&gt;
    	if (&lt;br /&gt;
    		({&lt;br /&gt;
    			['_']=function(s)return s~=''end;&lt;br /&gt;
    			['s']=function(s)return not tostring(s):match(&amp;quot;^%s*$&amp;quot;)end&lt;br /&gt;
    		})[m] or function() return true end&lt;br /&gt;
    	)(tf.args[i]) then&lt;br /&gt;
    		t[j]=tf.args[i];&lt;br /&gt;
    		j=j+1&lt;br /&gt;
    	end;&lt;br /&gt;
    	i=i+1&lt;br /&gt;
    end&lt;br /&gt;
    return mw.text.listToText(t,f.args[1],f.args[2] or f.args[1])&lt;br /&gt;
end&lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
-- Функции для работы с параметрами шаблона в invoke --&lt;br /&gt;
-------------------------------------------------------&lt;br /&gt;
--[[&lt;br /&gt;
function M.split(f)-- Разрезает строку f.args[3]&lt;br /&gt;
	-- указанным в f.args[2](?) разделителем&lt;br /&gt;
    -- и передаёт куски шаблону f.args[1].&lt;br /&gt;
    local tf, ac, oldi, i, e =f:getParent(), {}, 1, f.args[3]:find(f.args[1],1,true)&lt;br /&gt;
    -- «f.args[1]» в строке выше — точно не ошибка? --Incnis Mrsi&lt;br /&gt;
    while i do&lt;br /&gt;
        table.insert( ac,  f.args[3]:sub(oldi, i-1) ); oldi=e+1&lt;br /&gt;
    end&lt;br /&gt;
    table.insert( ac, f.args[3]:sub(oldi, #f.args[3]-1) )&lt;br /&gt;
    return f:getParent():expandTemplate{ title=f.args[1]; args=ac }&lt;br /&gt;
end&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function M.cycle(f)-- Действует аналогично forall по числовой переменной,&lt;br /&gt;
    -- изменяющейся (по умолчанию, от 1) до f.args[2].&lt;br /&gt;
    local tf,ac=f:getParent(),{};&lt;br /&gt;
    for p,k in pairs(f.args) do&lt;br /&gt;
        if type(p)=='number' then&lt;br /&gt;
            if p&amp;gt;2 then ac[p-1]=k end&lt;br /&gt;
        else ac[p]=k&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local s,fh = f.args[2]:match('^%s*(%-?%d+)%s*%.%.') or 1,&lt;br /&gt;
        f.args[2]:match('%.%.%s*(%S.*)%s*$') or f.args[2] or '';&lt;br /&gt;
    fh=tonumber(fh) or fh:match('^%s*(.-)%s*$');&lt;br /&gt;
    local acr={};&lt;br /&gt;
    if not tonumber(s) then error('Начало цикла «'..s..'» — не число') end&lt;br /&gt;
    local function dc()&lt;br /&gt;
            local r=tf:expandTemplate{ title=f.args[1]; args={s,unpack(ac)} }&lt;br /&gt;
            s=s+1;&lt;br /&gt;
            if r~='' then table.insert(acr,r); return r end&lt;br /&gt;
    end&lt;br /&gt;
    if type(fh)=='number' then &lt;br /&gt;
        while s&amp;lt;fh do dc() end&lt;br /&gt;
    elseif fh~='' then&lt;br /&gt;
        while tf:expandTemplate{ title=fh; args={s,unpack(ac)} } do dc() end&lt;br /&gt;
    else&lt;br /&gt;
        while dc() do end&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(acr)&lt;br /&gt;
end&lt;br /&gt;
--[[Функция не пашет как можно ждать — пробелы отсекаются после передачи параметров в expandTemplate&lt;br /&gt;
function M.pass(f)-- Передаёт шаблону параметры без подрезки.&lt;br /&gt;
    local ac,i={},1;&lt;br /&gt;
    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;&lt;br /&gt;
    return  f:getParent():expandTemplate{ title=f.args[1]; args=ac }&lt;br /&gt;
end&lt;br /&gt;
]]&lt;br /&gt;
return M&lt;/div&gt;</summary>
		<author><name>195.91.195.99</name></author>	</entry>

	</feed>