Moduł:Ramka

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Template-info.png Dokumentacja modułu [stwórz] [odśwież]
function SzablonModulParserWywolanie(frame, co_ma_wywolac)
		local pf=frame:getParent();
	    local nazwa_szablonu_modulu_lub_parsera="Nazwa";
		local szablon_modul_lub_parser=frame.args[nazwa_szablonu_modulu_lub_parsera];
		local argumenty_szablonu_modulu_lub_parsera={};
		
		local tabela_by_sprawdzic_czy_powstarzaja_sie_parametry_dzieci_i_rodzica={};
		
		local bez_parametrow={[nazwa_szablonu_modulu_lub_parsera]=true,
			                  ["bez argumentów rodzica"]=true,
			                  ["nazwa szablonu rodzica"]=true,
			                  ["bez argumentów nienazwanych rodzica"]=true,
			                  ["potomek"]=true,
			                  ["parametry rodzica"]=true,
			                  ["zmienna z parametrami rodzica"]=true,
			                  ["zmienna z argumentami ramki"]=true,
			                  ["zmienna z nazwą szablonu rodzica"]=true,
		};
		if(co_ma_wywolac==1)then bez_parametrow["Funkcja"]=true;end;
		
		for nazwa_parametru,wartosc_parametru in pairs(frame.args) do
			if((type(nazwa_parametru)=="number")or((type(nazwa_parametru)=="string")and(not bez_parametrow[nazwa_parametru])))then
					tabela_by_sprawdzic_czy_powstarzaja_sie_parametry_dzieci_i_rodzica[nazwa_parametru]=nazwa_parametru;
				    argumenty_szablonu_modulu_lub_parsera[nazwa_parametru]=wartosc_parametru;
			end;
		end;
		
		local ramka_modul=require("Module:Ramka");
		local parametry_modul=require("Module:Parametry");
		local tabela_bez_argumentow=ramka_modul.RozpakujArgumenty(frame.args["bez argumentów rodzica"]);
		local czy_przekazac_parametry_rodzica=parametry_modul.CzyTak(frame.args["zmienna z parametrami rodzica"]);
		
		local PakujArgumentyRamki = function(args)
			local czy_tylko_ze_zmienna_bez_argumentow_szablonu=args["zmienna z argumentami ramki"];
			if(not parametry_modul.CzyTak(czy_tylko_ze_zmienna_bez_argumentow_szablonu))then return args["bez argumentów szablonu"];end;
    		local tabelka1={};
    		for nazwa_parametru,_ in pairs(args)do
    			if((type(nazwa_parametru)=="number")or((type(nazwa_parametru)=="string")and(not bez_parametrow[nazwa_parametru])))then
					tabelka1[nazwa_parametru]=true;
				end;
    		end;
    	
    		local tabelka2=(args["bez argumentów szablonu"]) and ramka_modul.RozpakujArgumenty(args["bez argumentów szablonu"]);
    		
    		local tabelka=parametry_modul["ŁączDwieTabele"](tabelka1,tabelka2);
    		
    	   local tablica_mikroszablonow={
	          [";"]="{{+}}",
	        };
    		local str="";
    		for name,_ in pairs(tabelka) do
    			str=str..((str~="")and ";" or "")..mw.ustring.gsub(mw.text.trim(name),".",tablica_mikroszablonow);
    		end;
    		return str;
    	end;
		if(czy_przekazac_parametry_rodzica)then
			local str=ramka_modul.PakujParametry(pf.args);
		    argumenty_szablonu_modulu_lub_parsera["parametry rodzica"]=str;
		    argumenty_szablonu_modulu_lub_parsera["potomek"]="tak";
		    argumenty_szablonu_modulu_lub_parsera["bez argumentów szablonu"]=PakujArgumentyRamki(frame.args);
		    argumenty_szablonu_modulu_lub_parsera["nazwa szablonu rodzica"]=pf.args["nazwa szablonu rodzica"] or parametry_modul.NazwaSzablonu(pf:getTitle());
		else
			local z_argumentami_najwyzszego_rodzica=not tabela_bez_argumentow["potomek"];
			if(z_argumentami_najwyzszego_rodzica)then
				local potomek=parametry_modul.CzyTak(pf.args["potomek"]);
				if(potomek)then
			    	local parametry_rodzic=pf.args["parametry rodzica"];
			    	if(parametry_rodzic)then
			    		argumenty_szablonu_modulu_lub_parsera["parametry rodzica"]=parametry_rodzic;
		    			argumenty_szablonu_modulu_lub_parsera["potomek"]="tak";
		    			argumenty_szablonu_modulu_lub_parsera["bez argumentów szablonu"]=ramka_modul.PakujArgumentyRamki(frame.args);
			    	end;
				end;
			end;
			local czy_ze_nazwa_szablonu=frame.args["zmienna z nazwą szablonu rodzica"];
			if(parametry_modul.CzyTak(czy_ze_nazwa_szablonu))then
				argumenty_szablonu_modulu_lub_parsera["nazwa szablonu rodzica"]=pf.args["nazwa szablonu rodzica"] or parametry_modul.NazwaSzablonu(pf:getTitle());
			end;
		end;
		
		for nazwa_parametru,wartosc_parametru in pairs(pf.args) do
			if((type(nazwa_parametru)=="number")or((type(nazwa_parametru)=="string")and(not bez_parametrow[nazwa_parametru])))then
				if((not tabela_by_sprawdzic_czy_powstarzaja_sie_parametry_dzieci_i_rodzica[nazwa_parametru])
					   and(not tabela_bez_argumentow[nazwa_parametru])
					   and((not parametry_modul.CzyTak(frame.args["bez argumentów nienazwanych rodzica"]))
					   	or((parametry_modul.CzyTak(frame.args["bez argumentów nienazwanych rodzica"]))and(not tonumber(nazwa_parametru)))
			     ))then
					argumenty_szablonu_modulu_lub_parsera[nazwa_parametru]=wartosc_parametru;
				end;
			end;
		end;
		if(co_ma_wywolac==0)then
			 return pf:expandTemplate{title=szablon_modul_lub_parser,args=argumenty_szablonu_modulu_lub_parsera};
		elseif(co_ma_wywolac==1)then
	    	local frame2=pf:newChild{args=argumenty_szablonu_modulu_lub_parsera};
	    	local funkcja=frame.args["Funkcja"];
	    	return require("Module:"..szablon_modul_lub_parser)[funkcja](frame2);
	    elseif(co_ma_wywolac==2)then
	         return pf:callParserFunction{name=szablon_modul_lub_parser,args=argumenty_szablonu_modulu_lub_parsera};
	    else
		     return pf:expandTemplate{title=szablon_modul_lub_parser,args=argumenty_szablonu_modulu_lub_parsera};
		end;
	end;
local function Skladaj_lancuch(frame,tab_lancuch,minimum,maksimum)
	local parametry_modul=require("Module:Parametry");
    local nowa_linia=parametry_modul.CzyTak(frame.args["akapit"]) and "\n\n" or "";
	local przecinek=parametry_modul.CzyTak(frame.args["przecinek"]) and ", " or "";
	local wyliczanka=parametry_modul.CzyTak(frame.args["wyliczanka"]);
	local przecinek_na_poczatku=parametry_modul.CzyTak(frame.args["początek"]);
	local myslnik=parametry_modul.CzyTak(frame.args["myślnik"]);
	    	
	local lancuch_znakow="";
	local koniec=#tab_lancuch;
	for i=1,koniec,1 do
	    local lancuch=tab_lancuch[i];
	    lancuch,_=mw.ustring.gsub(lancuch,"{{min}}",minimum);
	    lancuch,_=mw.ustring.gsub(lancuch,"{{max}}",maksimum);
	    if(not wyliczanka)then
	         lancuch_znakow=lancuch_znakow..((i~=1)and przecinek or ((przecinek_na_poczatku)and przecinek or ((myslnik)and " - " or "")))..((i~=1)and nowa_linia or "")..lancuch;
	      
	    else
	         lancuch_znakow=lancuch_znakow..((i==1)and ((przecinek_na_poczatku)and ", " or "") or ((i<koniec)and ", " or " i "))..((i~=1)and nowa_linia or "")..lancuch;
	    end;
	end;
	return lancuch_znakow;
end;
return {
	 RozpakujArgumenty = function(zmienna_z_argumentami)
	 	local tablica_mikroszablonow={
	       ["{{+}}"]=";",
	    };
		local tabela_bez_argumentow={};
		local parametry_modul=require("Module:Parametry");
		if(parametry_modul.CzyTak(zmienna_z_argumentami))then
			local iter=mw.text.gsplit(zmienna_z_argumentami,";",true);
			local podlancuch;
			for podlancuch in iter do
				podlancuch=mw.text.trim(podlancuch);
				local liczba=tonumber(podlancuch);
				tabela_bez_argumentow[liczba or mw.ustring.gsub(podlancuch,"{{[^{}]+}}",tablica_mikroszablonow)]=true;
			end;
		end;
		return tabela_bez_argumentow;
	 end;
    PakujParametry = function(args)
    	local str="";
    	for name,value in pairs(args)do
			str=str..((str~="")and "'\"`UNIQ--RAMKA-00000001-QINU`\"'" or "")..name.."'\"`UNIQ--RAMKA-00000002-QINU`\"'"..value;
    	end;
		return str;
    end;
    RozpakujParametry = function (zmienna_z_parametrami)
    	local tabela_parametrow_rodzica={};
    	local szablon;
		local parametry_modul=require("Module:Parametry");
		if(parametry_modul.CzyTak(zmienna_z_parametrami))then
	    	local rodzic_table=mw.text.split(zmienna_z_parametrami,"'\"`UNIQ--RAMKA-00000001-QINU`\"'",true);
        	for i=1,#rodzic_table,1 do
        		local element=rodzic_table[i];
				local tab=mw.text.split(element,"'\"`UNIQ--RAMKA-00000002-QINU`\"'",true)
				local index=mw.text.trim(tab[1]);
				wartosc=mw.text.trim(tab[2]);
				index=tonumber(index) or index;
				tabela_parametrow_rodzica[index]=wartosc;
        	end;
        end;
    	return tabela_parametrow_rodzica;
    end;
	["Rozwiń"] = function(frame)
	    mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Rozwiń").id
		return frame:getParent():preprocess(frame.args[1]);
	end,
    ["Szablon"] = function(frame)
        mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Szablon").id
		return SzablonModulParserWywolanie(frame,0);
	end,
	["Moduł"] = function(frame)
	    mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Moduł").id
		return SzablonModulParserWywolanie(frame, 1);
	end,
    ["Parser"] = function(frame)
        mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Parser").id
		return SzablonModulParserWywolanie(frame, 2);
	end,
	["OpakujKategorie"] = function(frame)
		local pf=frame:getParent();
		local wikikod=frame.args[1] or pf.args[1];
		local bez_kategorii=frame.args["bez kategorii wikikodu"] or pf.args["bez kategorii wikikodu"];
		local z_nazwa_sortowania=frame.args["z nazwą sortowania"] or pf.args["z nazwą sortowania"];
		local category;
		local tablica_category={};
	    local iterator1=mw.ustring.gmatch(wikikod,"%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:%s*[^%[%]]+%s*%]%]");
		local iterator2=mw.ustring.gmatch(wikikod,"%[%[%s*[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]%s*:%s*[^%[%]]+%s*%]%]");
		for category in iterator1 do tablica_category[category]="";end;
	    for category in iterator2 do tablica_category[category]="";end;
	    local parametry_modul=require("Module:Parametry");
	    if(not parametry_modul["CzySąElementyTablicy"](tablica_category))then return wikikod;end;
		wikikod=mw.ustring.gsub(wikikod,"(%[%[%s*[^%[%]]+%s*%]%])",tablica_category);
		if(parametry_modul.CzyTak(bez_kategorii))then return wikikod;end;
		local czy_z_nazwa_sortowania=parametry_modul.CzyTak(z_nazwa_sortowania);
		local ulramka=mw.html.create('ul');
		ulramka:css('margin-left','0.3em')
		ulramka:css('display','inline');
		local pionowa=false;
		local kategorie_istnieja=frame.args["kategorie istnieją"] or pf.args["kategorie istnieją"];
		local czy_kategorie_istnieja=parametry_modul.CzyTak(kategorie_istnieja);
		local parametry_modul=require("Module:Parametry")
		local i=1;
		for nazwa,wartosc in pairs(tablica_category) do
			local nazwa2;
			local kategoria_istnieje1,kategoria_istnieje2,kategoria_istnieje3,kategoria_istnieje4;
			kategoria_istnieje1=mw.ustring.match(nazwa,"%[%[%s*[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]%s*:%s*([^|%[%]]+)%s*%]%]");
			if(kategoria_istnieje1)then nazwa2="[[:Category:"..kategoria_istnieje1.."|"..kategoria_istnieje1.."]]";end;
			if(not nazwa2)then
				kategoria_istnieje2=mw.ustring.match(nazwa,"%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:%s*([^|%[%]]+)%s*%]%]");
				if(kategoria_istnieje2)then nazwa2="[[:Category:"..kategoria_istnieje2.."|"..kategoria_istnieje2.."]]";end;
				if(not nazwa2)then
					kategoria_istnieje3,nazwa_sortowania_kategorii_istniejacej1=mw.ustring.match(nazwa,"%[%[%s*[Kk][Aa][Tt][Ee][Gg][Oo][Rr][Ii][Aa]%s*:%s*([^|%[%]]+)%s*|%s*([^%[%]]*)%s*%]%]");
					if(kategoria_istnieje3)then nazwa2="[[:Category:"..kategoria_istnieje3.."|"..kategoria_istnieje3.."]]"..((czy_z_nazwa_sortowania)and ("<sup title=\""..nazwa_sortowania_kategorii_istniejacej1.."\">["..i.."]</sup>") or "");i=i+1;end;
				    if(not nazwa2)then
						local kategoria_istnieje4,nazwa_sortowania_kategorii_istniejacej2=mw.ustring.match(nazwa,"%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:%s*([^|%[%]]+)%s*|%s*([^%[%]]*)%s*%]%]");
						if(kategoria_istnieje4)then nazwa2="[[:Category:"..kategoria_istnieje4.."|"..kategoria_istnieje4.."]]"..((czy_z_nazwa_sortowania)and ("<sup title=\""..nazwa_sortowania_kategorii_istniejacej2.."\">["..i.."]</sup>") or "");i=i+1;end;
					end;
				 end;
			end;
			if((not czy_kategorie_istnieja)or((czy_kategorie_istnieja)
				       and((not kategoria_istnieje1)or(kategoria_istnieje1~="Szablon kategoria - nieistniejąca kategoria"))
			           and((not kategoria_istnieje2)or(kategoria_istnieje2~="Szablon kategoria - nieistniejąca kategoria"))
			           and((not kategoria_istnieje3)or(kategoria_istnieje3~="Szablon kategoria - nieistniejąca kategoria"))
			           and((not kategoria_istnieje4)or(kategoria_istnieje4~="Szablon kategoria - nieistniejąca kategoria"))
			           and((not kategoria_istnieje1)or(kategoria_istnieje1~="Szablon kategorie - nieistniejące kategorie"))
			           and((not kategoria_istnieje2)or(kategoria_istnieje2~="Szablon kategorie - nieistniejące kategorie"))
			           and((not kategoria_istnieje3)or(kategoria_istnieje3~="Szablon kategorie - nieistniejące kategorie"))
			           and((not kategoria_istnieje4)or(kategoria_istnieje4~="Szablon kategorie - nieistniejące kategorie"))
			     ))then
				nazwa2=parametry_modul["OdstępyFun"](nazwa2,"tak");
				local liramka=mw.html.create('li');
				liramka:css('display','inline');
            	liramka:css('white-space','normal');
            	if(pionowa)then 
            		liramka:css('border-left','1px solid #a2a9b1');
            		liramka:css('margin-left','0.4em')
            		liramka:css('padding-left','0.4em')
            		pionowa=true;
            	else
            		pionowa=true;
            	end;
				liramka:wikitext(nazwa2);
				ulramka:node(liramka);
			end;
		end;
		local kategorie="[[Specjalna:Kategorie|Kategorie]]:"
		local divramka=mw.html.create('div');
		divramka:css('width', 'auto' );
		divramka:css('min-height', 'auto');
		divramka:css('font-size','1em');
		divramka:css('border','1px solid #a2a9b1');
		divramka:css('background-color','#f8f9fa');
		divramka:css('text-align','left');
		divramka:css('padding','5px')
		divramka:css('margin-top','0.5em');
		divramka:css('margin-bottom','0.5em');
		divramka:css('display','flex');
		divramka:css('flex-direction','row')
		local divramka2=mw.html.create('div');
		divramka2:wikitext(kategorie);
		divramka2:node(ulramka);
		divramka:node(divramka2);
		return wikikod..'\n'..tostring(divramka:allDone());
	end,
	["Powtarzaj"] =  function(frame)
	    mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Powtarzaj").id
		local pf=frame:getParent();
		local parametry_modul=require("Moduł:Parametry");
		local czy_parametry=parametry_modul.CzyTak(frame.args["parametry"]);
		local tabela={};
		local zacznij_nazwane;
		local parametry_modul=require("Module:Parametry");
		if(czy_parametry)then
			local iter=mw.text.gsplit(mw.text.trim(frame.args["parametry"]),"%s*;%s*",false);
			local czy=true;
			for znaczenia in iter do
				znaczenia=mw.text.trim(znaczenia);
				local czy_omijac=parametry_modul.CzyTak(znaczenia);
				if(czy_omijac)then
					if(czy)then 
						zacznij_nazwane=tonumber(znaczenia);
						czy=false;
						if(not zacznij_nazwane)then 
							local tab1,tab2=mw.ustring.match(znaczenia,"%s*([%w%s]+)%s*=%s*(.*)%s*$");
							if(tab1 and tab2)then
								local parametr_tab=mw.text.split(tab2,"%s*,%s*",false);
								tabela[parametry_modul["OdstępyFun"](tab1,"tak")]=parametr_tab;
							else
								tabela[parametry_modul["OdstępyFun"](znaczenia,"tak")]={};
							end;
								zacznij_nazwane=0;
						end;
					else
						local tab1,tab2=mw.ustring.match(znaczenia,"%s*([%w%s]+)%s*=%s*(.*)%s*$");
						if(tab1 and tab2)then
							local parametr_tab=mw.text.split(tab2,"%s*,%s*",false);
							tabela[parametry_modul["OdstępyFun"](tab1,"tak")]=parametr_tab;
						else
							tabela[parametry_modul["OdstępyFun"](znaczenia,"tak")]={};
						end;
					end;
				end;
			end;
		end;
		if(not zacznij_nazwane)then zacznij_nazwane=0;end;
		function TabelaElementow(zmienna)
			local args=pf.args;
			local maksymalna_liczba_nazwy_danego_parametru=0;
			for nazwa_parametru, wartosc_parametru in pairs(args)do
				if(type(nazwa_parametru)=="string")then
					local nazwa_podstawy_parametru=mw.ustring.match(nazwa_parametru,"^([%a%s]*%a)%s%d+$");
					if(not nazwa_podstawy_parametru)then
						nazwa_podstawy_parametru=mw.ustring.match(nazwa_parametru,"^([%a%s]*%a)%d+$");
					end;
					local subtab=tabela[nazwa_podstawy_parametru];
					if(subtab)then
						local spacja=not parametry_modul.CzyTak(subtab[1]);
						local nazwa_podstawy_znakowej_wyparsowana,liczba_podstawy_znakowej_wyparsowana=mw.ustring.match(nazwa_parametru,"^([%a%s]*%a)"..((spacja)and "%s" or "").."(%d+)$");
						if((nazwa_podstawy_znakowej_wyparsowana)and(liczba_podstawy_znakowej_wyparsowana))then
							if((zmienna)and(zmienna==nazwa_podstawy_znakowej_wyparsowana))then
								maksymalna_liczba_nazwy_danego_parametru=math.max(maksymalna_liczba_nazwy_danego_parametru or 0,tonumber(liczba_podstawy_znakowej_wyparsowana));
							end;
						elseif((zmienna)and(zmienna==nazwa_parametru))then
							maksymalna_liczba_nazwy_danego_parametru=math.max(maksymalna_liczba_nazwy_danego_parametru or 0,1);
						end;
					end;
				end;
			end;
			return maksymalna_liczba_nazwy_danego_parametru;
		end;
		local Zmienne_podstawowe=function()
			local maksimum=0;
			local tabela_zmiennych={};
			local not_czy_frame_tabela={};
			for wartosc_parametru,_ in pairs(tabela)do
				if(type(wartosc_parametru)=="string")then
					local maksymalna_liczba_nazwy_danego_parametru=TabelaElementow(wartosc_parametru);
					maksimum=(tabela[wartosc_parametru] and tabela[wartosc_parametru][2])
							 and math.max(maksimum,maksymalna_liczba_nazwy_danego_parametru-tabela[wartosc_parametru][2]) 
							                     or (tonumber(maksymalna_liczba_nazwy_danego_parametru) or 0);
				end;
			end;
			maksimum=math.max(maksimum-zacznij_nazwane,0);
			return maksimum;
		end;
		local zacznij_na_poczatku,skoncz_na_koncu;
		local tekst_do_analizy=frame.args[1];
		if(not frame.args[1])then return "(brak parametru do analizy)";end;
		local czy_tekst=parametry_modul.CzyTak(tekst_do_analizy);
		if(not czy_tekst)then return "(parametr do analizy pusty)";end;
		local czy_start=parametry_modul.CzyTak(frame.args["start"]);
		local czy_koniec=parametry_modul.CzyTak(frame.args["koniec"]);
	    
	    local zaznacz=frame.args["zaznacz"];
		local tabela_zaznacz={};
		if(zaznacz)then
			local iter=mw.text.gsplit(zaznacz,"%s*;%s*",false)
			for liczba in iter do
				tabela_zaznacz[#tabela_zaznacz+1]=tonumber(liczba) or 0;
			end;
		end;
		local czy_rozne=parametry_modul.CzyTak(frame.args["różne"]);
        local czy_ma_nazwane;
        local function Wylicz_skoncz_na_koncu()
        	czy_ma_nazwane=parametry_modul["CzySąElementyNazwaneTablicy"](tabela);
        	if(czy_ma_nazwane)then
        		if(czy_rozne)then
        			return math.max(Zmienne_podstawowe(),parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(pf.args));
        		else
        			return Zmienne_podstawowe();
        		end;
        	else
        		return parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(pf.args);
        	end;
        end;
        local skoncz_na_koncu1=Wylicz_skoncz_na_koncu();
        if(not czy_koniec)then 
        	skoncz_na_koncu=skoncz_na_koncu1;
        else 
        	skoncz_na_koncu=math.min(skoncz_na_koncu1, tonumber(frame.args["koniec"]) or 0);
        end;
	    zacznij_na_poczatku=tonumber(frame.args["start"]) or 1;
		if(zacznij_na_poczatku==0)then return "(początek jest ustawiony na zero)";end;
		for name, tab_par in pairs(tabela)do
			if(tab_par[3])then zacznij_na_poczatku=math.min(zacznij_na_poczatku,tab_par[3]);end;
			if(tab_par[4])then skoncz_na_koncu=math.max(skoncz_na_koncu,tab_par[4]);end;
		end;
		
		local lancuch_znakow="";
		local gdy_nic=parametry_modul.CzyTak(frame.args["nic"])and frame.args["nic"] or "";
		if(zacznij_na_poczatku>skoncz_na_koncu)then return gdy_nic;end;
	    local pokolei=parametry_modul.CzyTak(frame.args["pokolei"]);
		local wytnij=parametry_modul.CzyTak(frame.args["wytnij"]);
        local czy_parametry_ze_spacja=function(nazwa_parametru)
        	local value=tabela[nazwa_parametru];
        	if(value)then
        		return not parametry_modul.CzyTak(value[1]);
        	end;
        	return true;
        end;
		if(not czy_rozne)then
			if(czy_ma_nazwane)then
				local function Analizuj_dla_bez_rozne(tabela_wszystkich_parametrow)
					local tab_lancuch={};
					local maksimum=0;
					local minimum;
					for licznik=zacznij_na_poczatku,skoncz_na_koncu,1 do
						local lancuch=tekst_do_analizy;
						local czy=nil;
						for zmienne_parametrowe,_ in pairs(tabela_wszystkich_parametrow)do
							if(zmienne_parametrowe)then
								local czy_parametrow=czy_parametry_ze_spacja(zmienne_parametrowe);
								local element2=pf.args[zmienne_parametrowe..((czy_parametrow)and " " or "")..licznik];
								local czy2=(licznik==1)and ((element2 and(not wytnij)) or((wytnij)and (parametry_modul.CzyTak(element2))));
								local  element=pf.args[zmienne_parametrowe..((licznik>1)and (((czy_parametrow)and " " or "")..licznik) or "")];
								czy=czy or (((element or czy2) and not wytnij) or ((wytnij)and (parametry_modul.CzyTak(element2) or parametry_modul.CzyTak(element))));
								local tabelka_szablonow={
									["{{_}}"]=licznik,
									["{{__}}"]=((not czy2)and((licznik>1)and licznik or "") or 1),
								};
								lancuch=mw.ustring.gsub(lancuch,"{{_+}}",tabelka_szablonow);
							end;
						end;
						local czy_jest=parametry_modul.CzyJestTakiElementNumerowanyTabeli(tabela_zaznacz,licznik);
						if((pokolei and (not czy_jest)) or czy or ((not pokolei)and(czy_jest))) then
							tab_lancuch[#tab_lancuch+1]=lancuch;
							maksimum=math.max(maksimum,licznik);
							minimum=math.min(minimum or licznik,licznik);
						end;
					end
					lancuch_znakow=Skladaj_lancuch(frame,tab_lancuch,minimum or 0,maksimum);
				end;
			    Analizuj_dla_bez_rozne(tabela);
			else
				local tab_lancuch={};
				local maksimum=0;
				local minimum;
				for licznik=zacznij_na_poczatku,skoncz_na_koncu,1 do
					local element=pf.args[licznik]
					local czy=(((element)and (not wytnij))or((wytnij)and(parametry_modul.CzyTak(element))));
					local czy_jest=parametry_modul.CzyJestTakiElementNumerowanyTabeli(tabela_zaznacz,licznik);
					if((pokolei and (not czy_jest)) or czy or ((not pokolei)and(czy_jest)))then
						tab_lancuch[#tab_lancuch+1]=mw.ustring.gsub(tekst_do_analizy,"{{_+}}",licznik);
							maksimum=math.max(maksimum,licznik);
							minimum=math.min(minimum or licznik,licznik);
					end;
				end;
				lancuch_znakow=Skladaj_lancuch(frame, tab_lancuch,minimum or 0,maksimum);
			end;
		else
			local function Analizuj_z_rozne(tabela_wszystkich_parametrow)
				local tab_lancuch={};
				local maksimum=0;
				local minimum;
				for licznik=zacznij_na_poczatku,skoncz_na_koncu,1 do
					local czy=false;
					local czy_niepuste=false;
					local wytnij_ujemne=false;
					local function Analiza_zmiennej_parametrowej(zmienne_parametrowe,licznik,spacja)
						local wartosc,klucz;
						if(zmienne_parametrowe)then
							local function Niewspomniane_w_rozne(element,liczba_przesuniecia)
								local liczb2=licznik+liczba_przesuniecia+zacznij_nazwane;
								if(liczb2<1)then wytnij_ujemne=true;end;
								if(liczb2>0)then
									local czy2=(liczb2==1)and pf.args[element..((spacja)and " " or "")..liczb2];
									czy_niepuste=parametry_modul.CzyTak(czy2);
									local wartosc_elementu=pf.args[element..((liczb2>1)and ((spacja)and " " or "")..liczb2 or "")]
									czy_niepuste=czy_niepuste or parametry_modul.CzyTak(wartosc_elementu);
									czy=czy or wartosc_elementu or czy2;
									wartosc="{{{"..zmienne_parametrowe..((not czy2)and((liczb2>1)and (((spacja)and " " or "")..liczb2) or "") 
							                                              or ((spacja)and " " or "")..1);
									klucz="{{{%s*"..zmienne_parametrowe..((spacja)and "%s+" or "").."{{%s*__+%s*}}"; 
								end;
							end;
							local subtab=tabela[zmienne_parametrowe];
							local czy_w_tabeli=subtab and subtab[2];
							local liczba_przesuniecia=(czy_w_tabeli)and czy_w_tabeli or 0;
        	        		Niewspomniane_w_rozne(zmienne_parametrowe,liczba_przesuniecia);
						end;
						return klucz,wartosc;
					end;
					local function Tekst_do_analizy(tekst_do_analizy_przetwarzany,klucz,wartosc)
                		if((wartosc)and(klucz))then
                			local przetwarzane,_=mw.ustring.gsub(tekst_do_analizy_przetwarzany,klucz,wartosc);
                			return przetwarzane;
                		end;
                		return "";
					end;
					local lancuch_zaanalizowany=tekst_do_analizy;
					for zmienne_parametrowe,_ in pairs(tabela_wszystkich_parametrow)do
						local lokalizacja=mw.ustring.match(tekst_do_analizy,"{{{%s*"..zmienne_parametrowe.." %s*{{%s*__+%s*}}");
						if(lokalizacja)then
		    	    		zmienne_parametrowe=mw.text.trim(zmienne_parametrowe);
                			local klucz,wartosc=Analiza_zmiennej_parametrowej(zmienne_parametrowe,licznik,czy_parametry_ze_spacja(zmienne_parametrowe));
                			if(wytnij_ujemne)then break;end;
                			lancuch_zaanalizowany=Tekst_do_analizy(lancuch_zaanalizowany,klucz,wartosc);
						end;
					end;
					if(not wytnij_ujemne)then
						local zmienna_numerowana_wikikodu=mw.ustring.match(tekst_do_analizy,"{{{%s*{{%s*_+%s*}}");
                    	czy=czy or (mw.ustring.match(tekst_do_analizy,"{{%s*_%s*}}")and(not zmienna_numerowana_wikikodu))or((zmienna_numerowana_wikikodu)and(pf.args[licznik]));
        	        	local klucz="{{%s*_%s*}}";
        	        	local wartosc=licznik;
        	        	lancuch_zaanalizowany=Tekst_do_analizy(lancuch_zaanalizowany,klucz,wartosc);
        	        	czy_niepuste=czy_niepuste or parametry_modul.CzyTak(pf.args[licznik]);
        	        	local czy_jest=parametry_modul.CzyJestTakiElementNumerowanyTabeli(tabela_zaznacz,licznik);
        	        	if((pokolei and (not czy_jest)) or (czy and (not wytnij)) or ((wytnij)and(czy_niepuste)) or ((not pokolei)and(czy_jest)))then 						tab_lancuch[#tab_lancuch+1]=lancuch_zaanalizowany;
        	        		maksimum=math.max(maksimum,licznik);
							minimum=math.min(minimum or licznik,licznik);
        	        	end;
        	        end;
				end;  
				lancuch_znakow=Skladaj_lancuch(frame,tab_lancuch,minimum or 0,maksimum);
			end;
			Analizuj_z_rozne(tabela);
		end;
		if(#lancuch_znakow==0)then return gdy_nic;end;
		local przetworzony_wikikod=pf:preprocess(lancuch_znakow);
		return przetworzony_wikikod;
end,
["PowtarzajOdDo"]=function(frame)
	local start=tonumber(frame.args["start"]);
	local koniec=tonumber(frame.args["koniec"]);
	local krok=tonumber(frame.args["krok"]) or 1;
	if((not start)or(not koniec))then return "";end;
	if(krok==0)then return "";end;
	if(((start>koniec)and(krok>0))or((start<koniec)and(krok<0)))then return "";end;
	local kod=frame.args[1];
	
	tabela_mikroszablonow={
		["{{start}}"]=start,
		["{{koniec}}"]=koniec,
		["{{krok}}"]=krok,
	}
	kod=mw.ustring.gsub(kod,"{{[^{}]+}}",tabela_mikroszablonow);
	local lancuch="";
	for licznik=start,koniec,krok do
		local kod2,_=mw.ustring.gsub(kod,"{{_}}",licznik);
		lancuch=lancuch..kod2;
	end;
	local pf=frame:getParent();
	local przetworzony_wikikod=pf:preprocess(lancuch);
	return przetworzony_wikikod;
end,
["MaksymalnaLiczbaNumerowanychIstniejącychStronWedługWzoru"] = function(frame)
	local start=tonumber(frame.args["start"]) or 1;
	licznik=start;
	local strona=frame.args["wzór"];
	while true do
		local strona2,_=mw.ustring.gsub(strona,"{{_}}",licznik);
		local title=mw.title.makeTitle('',strona2);
		if((not title) or (not title.exists))then
			return licznik-1;
		end;
		licznik=licznik+1;
	end;
end,
}