<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://bukvica.org/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="https://bukvica.org/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="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;action=history"/>
	<updated>2026-04-05T14:12:32Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=123336&amp;oldid=prev</id>
		<title>Karaby: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=123336&amp;oldid=prev"/>
		<updated>2021-12-24T09:31:42Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 09:31, 24 декабря 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki:diff:1.41:old-123335:rev-123336 --&gt;
&lt;/table&gt;</summary>
		<author><name>Karaby</name></author>
	</entry>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=123335&amp;oldid=prev</id>
		<title>bukvica&gt;Wikisaurus: пропускать пустые параметры в forall и join</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=123335&amp;oldid=prev"/>
		<updated>2020-11-17T12:38:34Z</updated>

		<summary type="html">&lt;p&gt;пропускать пустые параметры в forall и join&lt;/p&gt;
&lt;a href=&quot;https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;amp;diff=123335&amp;amp;oldid=30318&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>bukvica&gt;Wikisaurus</name></author>
	</entry>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=30318&amp;oldid=prev</id>
		<title>Karaby: Новая страница: «local M={} --------------------------------------------------------- -- Функции для работы с параметрами вызвавшего шабл…»</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Transclude&amp;diff=30318&amp;oldid=prev"/>
		<updated>2015-03-06T08:49:40Z</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[&amp;#039;|фиксрег&amp;#039;] or f.args[&amp;#039;|fixreg&amp;#039;] or &amp;#039;&amp;#039;):gmatch(&amp;#039; *([^%n]+) *&amp;#039;, 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(&amp;#039;[_ ]+&amp;#039;,&amp;#039; &amp;#039;);&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[&amp;#039;forall&amp;#039;] = function(f)-- Итератор по аргументам вызывающего шаблона.&lt;br /&gt;
    -- f.args[1] — имя вызываемого шаблона.&lt;br /&gt;
     local tf,ac,res,tln,sep,gl=f:getParent(),{},{},f.args[1]:match(&amp;#039;^%s*([^#]-)%s*#(.*)$&amp;#039;),tonumber(f.args[2]) or 1;&lt;br /&gt;
     if not tln then tln,sep=f.args[1]:match(&amp;#039;^%s*(.-)%s*$&amp;#039;),&amp;#039;&amp;#039; end&lt;br /&gt;
     for p,k in pairs(f.args) do if type(p)==&amp;#039;string&amp;#039; 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(&amp;#039;{{&amp;#039;,&amp;#039;{{Х&amp;#039;):gsub(&amp;#039;}}&amp;#039;,&amp;quot;{{ЪЪ}}&amp;quot;):gsub(&amp;#039;{{Х&amp;#039;,&amp;#039;{{ХХ}}&amp;#039;)--: --замена фигурных скобок&lt;br /&gt;
           :gsub(&amp;#039;=&amp;#039;,&amp;#039;{{=}}&amp;#039;):gsub(&amp;#039;|&amp;#039;,&amp;#039;{{!}}&amp;#039;) &lt;br /&gt;
    end&lt;br /&gt;
    for k,v in pairs(f:getParent().args) do&lt;br /&gt;
        if type(k)==&amp;#039;number&amp;#039; 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 &amp;#039; = &amp;#039;, v, f.args[4] or &amp;#039;&amp;#039;) )&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(ac,&amp;#039;|&amp;#039;)&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;
    			[&amp;#039;_&amp;#039;]=function(s)return s~=&amp;#039;&amp;#039;end;&lt;br /&gt;
    			[&amp;#039;s&amp;#039;]=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)==&amp;#039;number&amp;#039; 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(&amp;#039;^%s*(%-?%d+)%s*%.%.&amp;#039;) or 1,&lt;br /&gt;
        f.args[2]:match(&amp;#039;%.%.%s*(%S.*)%s*$&amp;#039;) or f.args[2] or &amp;#039;&amp;#039;;&lt;br /&gt;
    fh=tonumber(fh) or fh:match(&amp;#039;^%s*(.-)%s*$&amp;#039;);&lt;br /&gt;
    local acr={};&lt;br /&gt;
    if not tonumber(s) then error(&amp;#039;Начало цикла «&amp;#039;..s..&amp;#039;» — не число&amp;#039;) 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~=&amp;#039;&amp;#039; then table.insert(acr,r); return r end&lt;br /&gt;
    end&lt;br /&gt;
    if type(fh)==&amp;#039;number&amp;#039; then &lt;br /&gt;
        while s&amp;lt;fh do dc() end&lt;br /&gt;
    elseif fh~=&amp;#039;&amp;#039; 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>Karaby</name></author>
	</entry>
</feed>