Moduł:Ramka

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
 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,
			                  ["nie potomek"]=true,
			                  ["parametry rodzica"]=true,
			                  ["zmienna z parametrami rodzica"]=true,
			                  ["zmienna z argumentami ramki"]=true,
			                  ["zmienna z nazwą szablonu rodzica"]=true,
			                  ["parametry funkcji modułu pudełek"]=true,
			                  ["parametry podstawowe funkcji modułu pudełek"]=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 szablonowe_modul=require("Module:Szablonowe");
		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 z_dodatkowymi_sprawdzeniami=not(parametry_modul.CzyTak(frame.args["bez dodatkowych sprawdzeń"]) or parametry_modul.CzyTak(pf.args["bez dodatkowych sprawdzeń"]));
		
		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,tabelka2;
		end;
		local bez_argumentow_szablonu=nil;
		if(czy_przekazac_parametry_rodzica)then
			if(z_dodatkowymi_sprawdzeniami)then
				local str=ramka_modul.PakujParametry(pf.args);
		    	argumenty_szablonu_modulu_lub_parsera["parametry rodzica"]=str;
		    end;
		    argumenty_szablonu_modulu_lub_parsera["potomek"]="tak";
		    argumenty_szablonu_modulu_lub_parsera["bez argumentów szablonu"],bez_argumentow_szablonu=PakujArgumentyRamki(frame.args);
		    argumenty_szablonu_modulu_lub_parsera["nazwa szablonu rodzica"]=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle());
		else
			local function ZmiennaZNazwaSzablonuRodzica()
				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 szablonowe_modul.NazwaSzablonu(pf:getTitle());
				end;
			end;
			local z_argumentami_najwyzszego_rodzica=not parametry_modul.CzyTak(tabela_bez_argumentow["nie 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
			    		if(z_dodatkowymi_sprawdzeniami)then
			    			argumenty_szablonu_modulu_lub_parsera["parametry rodzica"]=parametry_rodzic;
			    		end;
		    			argumenty_szablonu_modulu_lub_parsera["potomek"]="tak";
		    			argumenty_szablonu_modulu_lub_parsera["bez argumentów szablonu"],bez_argumentow_szablonu=PakujArgumentyRamki(frame.args);
		    			argumenty_szablonu_modulu_lub_parsera["nazwa szablonu rodzica"]=pf.args["nazwa szablonu rodzica"] or szablonowe_modul.NazwaSzablonu(pf:getTitle());
		    		else
		    			ZmiennaZNazwaSzablonuRodzica();
			    	end;
			    else
			    	ZmiennaZNazwaSzablonuRodzica();
				end;
			else
				ZmiennaZNazwaSzablonuRodzica()
			end;
		end;
		
		local czy_bez_argumentow_nienazwanych_rodzica=parametry_modul.CzyTak(frame.args["bez argumentów nienazwanych rodzica"]);
		local czy_parametry_pudelka=parametry_modul.CzyTak(frame.args["parametry funkcji modułu pudełek"]);
		local czy_parametry_pudelka_podstawowe=parametry_modul.CzyTak(frame.args["parametry podstawowe funkcji modułu pudełek"])
		local pudelko_modul=require("Module:Pudełko");
		
		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])))and((not bez_argumentow_szablonu)or(not bez_argumentow_szablonu[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 czy_bez_argumentow_nienazwanych_rodzica)or((czy_bez_argumentow_nienazwanych_rodzica)and(not tonumber(nazwa_parametru)))
			     ))then
			        local czy_dodac_do_parametrow;
			    	if czy_parametry_pudelka or czy_parametry_pudelka_podstawowe then
			        	local czy_dodac_do_parametrow=((not czy_parametry_pudelka_podstawowe)
			        											 and mw.ustring.match(nazwa_parametru,"^nazwa przestrzeni nazw %d+$")
			        		                                     and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru))
			        	                           or (mw.ustring.match(nazwa_parametru,"^nazwa przestrzeni nazw$")
			        	                           	             and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru))
			        	                           or ((not czy_parametry_pudelka_podstawowe)			
			        	                           				 and mw.ustring.match(nazwa_parametru,"^nazwa jednostki %d+$")
			        	                           	             and wartosc_parametru~="" 
			        	                           	             and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru)) 
			        	                           or (mw.ustring.match(nazwa_parametru,"^nazwa jednostki$")
			        	                           	             and wartosc_parametru~="" 
			        	                           	             and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru))
			        	                           or ((not czy_parametry_pudelka_podstawowe)
			        	                           				 and mw.ustring.match(nazwa_parametru,"^typ jednostki %d+$")
			        	                           	             and wartosc_parametru~="" 
			        	                           	             and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru))
			        	                           or (mw.ustring.match(nazwa_parametru,"^typ jednostki$")
			        	                           	             and wartosc_parametru~="" 
			        	                           	             and not pudelko_modul.CzyNiepoprawnaNazwa(wartosc_parametru));
			        	if(czy_dodac_do_parametrow)then
			        		argumenty_szablonu_modulu_lub_parsera[nazwa_parametru]=wartosc_parametru;
			        	end;
			        else
						argumenty_szablonu_modulu_lub_parsera[nazwa_parametru]=wartosc_parametru;
					end;
				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 czy_akapit=parametry_modul.CzyTak(frame.args["akapit"]);
    local akapit=czy_akapit and "\n\n" or "";
	local przecinek=parametry_modul.CzyTak(frame.args["przecinek"]) and ", " or "";
	local czy_nowa_linia=parametry_modul.CzyTak(frame.args["nowa linia"]);
	local nowa_linia=czy_nowa_linia and "\n" 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 warunkowe=parametry_modul.CzyTak(frame.args["warunkowe"]);
	    	
	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 "")));
	    else
	         lancuch_znakow=lancuch_znakow..((i==1)and ((przecinek_na_poczatku)and ", " or "") or ((i<koniec)and ", " or " i "));
	    end;
	    lancuch_znakow=lancuch_znakow..((i~=1)and (czy_akapit and akapit or nowa_linia) or "")..lancuch;
	end;
    if(warunkowe)then
    	local ramka_modul=require("Module:Ramka")
    	return ramka_modul.InstrukcjeWarunkowe(lancuch_znakow,true);
    else
		return lancuch_znakow;
	end;
end;
return {
	InstrukcjeWarunkowe = function(ciag,derektywy_specjalne)
		local ciag_warunkowe_fun=function(s)
			local function ParserWiki(s,wywolanie)
			    local czy_parser=mw.ustring.match(s,wywolanie);
    			if(czy_parser)then
    				 return mw.getCurrentFrame():preprocess(s);
    			end;
			end
			return ParserWiki(s,"^({{%s*#if:[^|]+|[^{}]*}})$")
			                or ParserWiki(s,"^({{%s*#ifeq:[^|]+|[^{}]*}})$")
			                   or ParserWiki(s,"^({{%s*#switch:[^|]+|[^{}]*}})$")
			                     or ParserWiki(s,"^({{%s*#ifexpr:[^|]+|[^{}]*}})$")
			                       or ParserWiki(s,"^({{%s*#expr:[^{}]*}})$")
			                        or ParserWiki(s,"^({{%s*#iferror:[^|]+|[^{}]*}})$")
			                          or ParserWiki(s,"^({{%s*#ifexist:[^|]+|[^{}]*}})$")
			                            or s;
		end;
    	local ciag,_=mw.ustring.gsub(ciag,"{{[^{}]+}}",ciag_warunkowe_fun);
    	if(derektywy_specjalne)then
    		local tab_zamieniane={
    			["__!__"]="|",
    			["__!!__"]="||",
    			["__(__"]="{",
    			["__((__"]="{{",
    			["__(((__"]="{{{",
    			["__)__"]="}",
    			["__))__"]="}}",
    			["__)))__"]="}}}",
    			["__!(__"]="[",
    			["__!((__"]="[[",
    			["__)!__"]="]",
    			["__))!__"]="]]",
    		};
    		ciag=mw.ustring.gsub(ciag,"__[^_]+__",tab_zamieniane);
    		return ciag;
    	end;
    	return ciag;
	end;
	 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)
    	return mw.text.jsonEncode(args,mw.text.JSON_PRESERVE_KEYS);
    end;
    RozpakujParametry = function (zmienna_z_parametrami)
		return  mw.text.jsonDecode(zmienna_z_parametrami,mw.text.JSON_PRESERVE_KEYS);
    end;
	["Rozwiń"] = function(frame)
		return frame:getParent():preprocess(frame.args[1]);
	end,
	["Log"] = function(frame)
	    local wikitekst=frame.args[1];
	    mw.log(wikitekst);
	    return wikitekst;
	end;
    ["Szablon"] = function(frame)
		return SzablonModulParserWywolanie(frame,0);
	end,
	["Moduł"] = function(frame)
		return SzablonModulParserWywolanie(frame, 1);
	end,
    ["Parser"] = function(frame)
		return SzablonModulParserWywolanie(frame, 2);
	end,
	["Powtarzaj"] =  function(frame)
		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ępy"]{[1]=tab1,[2]="tak",}]=parametr_tab;
							else
								tabela[parametry_modul["Odstępy"]{[1]=znaczenia,[2]="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ępy"]{[1]=tab1,[2]="tak",}]=parametr_tab;
						else
							tabela[parametry_modul["Odstępy"]{[1]=znaczenia,[2]="tak",}]={};
						end;
					end;
				end;
			end;
		end;
		if(not zacznij_nazwane)then zacznij_nazwane=0;end;
		function LiczbaZmiennychOOgolniePodstawieParametru(podstawa_parametru_wyszukiwana)
			local args=pf.args;
			local maksymalna_liczba_nazwy_danego_parametru=0;
			for nazwa_parametru, wartosc_parametru in pairs(args)do
				local czy_jedynka=false;
				if(type(nazwa_parametru)=="string")then
					local nazwa_podstawy_parametru,spacja,liczba=mw.ustring.match(nazwa_parametru,"^([%a%s]*%a)(%s?)(%d+)$");
					if(not nazwa_podstawy_parametru and not spacja and not liczba)then
						nazwa_podstawy_parametru=nazwa_parametru;
						spacja="";
						liczba=1;
						czy_jedynka=true;
					end;
					local subtab=tabela[nazwa_podstawy_parametru];
					if(subtab)then
						local nie_spacja_parametru=parametry_modul.CzyTak(subtab[1]);
						local czy_z_jedynka=parametry_modul.CzyTak(subtab[2]);
						liczba=tonumber(liczba) or 0;
						if((not nie_spacja_parametru and (((spacja==" ")and ((liczba>1)or((not czy_jedynka)and(czy_z_jedynka))or((not czy_z_jedynka)and(not czy_jedynka)))) or(((not czy_z_jedynka)and(czy_jedynka))and(spacja=="" and liczba==1))))
							or (nie_spacja_parametru and (((spacja=="")and ((liczba>1)or((not czy_jedynka)and(czy_z_jedynka))or((not czy_z_jedynka)and(not czy_jedynka)))) or(((not czy_z_jedynka)and(czy_jedynka))and(spacja=="" and liczba==1))))
							)then
								if(((podstawa_parametru_wyszukiwana) and (nazwa_podstawy_parametru==podstawa_parametru_wyszukiwana))or(not podstawa_parametru_wyszukiwana))then
									maksymalna_liczba_nazwy_danego_parametru=math.max(maksymalna_liczba_nazwy_danego_parametru,liczba);
								end;
						end;
					end;
				end;
			end;
			return maksymalna_liczba_nazwy_danego_parametru;
		end;
		local MaksymalnyLiczonyNumerElementowPodanychPodstawNazwyParametrow=function()
			local maksimum=0;
			for wartosc_parametru,_ in pairs(tabela)do
				if(type(wartosc_parametru)=="string")then
					local maksymalna_liczba_nazwy_danego_parametru=LiczbaZmiennychOOgolniePodstawieParametru(wartosc_parametru);
					maksimum=tabela[wartosc_parametru]
							              and math.max(maksimum,maksymalna_liczba_nazwy_danego_parametru-(tonumber(tabela[wartosc_parametru][3]) or 0)) 
							                     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
        			local maks_numer=parametry_modul.CzyTak(frame.args["maksimum numeracyjne"]);
        			if(not maks_numer)then
        				return math.max(MaksymalnyLiczonyNumerElementowPodanychPodstawNazwyParametrow(),parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(pf.args));
        			else
        				return parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(pf.args);
        			end;
        		else
        			return MaksymalnyLiczonyNumerElementowPodanychPodstawNazwyParametrow();
        		end;
        	else
        		return parametry_modul.MaksymalnaLiczbaParametruNienazwanegoTablicy(pf.args);
        	end;
        end;
        local skoncz_na_koncu_wyliczona=Wylicz_skoncz_na_koncu();
        if(not czy_koniec)then 
        	skoncz_na_koncu=skoncz_na_koncu_wyliczona;
        else 
        	skoncz_na_koncu=math.min(skoncz_na_koncu_wyliczona, 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
			local _4=tonumber(tab_par[4]);local _5=tonumber(tab_par[5]);
			if(_4)then zacznij_na_poczatku=math.min(zacznij_na_poczatku,_4 or 0);end;
			if(_5)then skoncz_na_koncu=math.max(skoncz_na_koncu,_5 or 0);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["po kolei"]);
		local wytnij=parametry_modul.CzyTak(frame.args["wytnij"]);
		local wytnij_puste=parametry_modul.CzyTak(frame.args["wytnij puste"]);
		local nie_wytnij_nazwane=parametry_modul.CzyTak(frame.args["nie wytnij nazwane"]);
		local _i=parametry_modul.CzyTak(frame.args["znacznik"])and frame.args["znacznik"] or "_";
        local czy_parametry_ze_spacja_i_jedynka=function(nazwa_parametru)
        	local value=tabela[nazwa_parametru];
        	if(value)then
        		return not parametry_modul.CzyTak(value[1]),parametry_modul.CzyTak(value[2]);
        	end;
        	return true,false;
        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 ze_spacja,czy_z_jedynka=czy_parametry_ze_spacja_i_jedynka(zmienne_parametrowe);
								local element=pf.args[zmienne_parametrowe..((ze_spacja)and " " or "")..licznik];
								local czy_jedynka=(licznik==1)and ((element and(not wytnij)) or((wytnij)and (parametry_modul.CzyTak(element))));
								
								local wartosc_elementu=((czy_z_jedynka) and element or ((not czy_z_jedynka)and((licznik>1)and element or ((licznik==1)and(czy_jedynka and element or pf.args[zmienne_parametrowe])))));
								
								czy=czy or (((wartosc_elementu) and ((not wytnij)and(not wytnij_puste))) 
									        or ((wytnij)and (parametry_modul["CzyTakCiąg"](wartosc_elementu)))
									            or ((wytnij_puste and not wytnij)and (parametry_modul.CzyTak(wartosc_elementu))));
								local tabelka_szablonow={
									["{{".._i.."}}"]=licznik,
									["{{".._i.._i.."}}"]=(czy_z_jedynka and licznik or ((licznik>1) and licznik or (czy_jedynka and 1 or ""))),
								};
							    local function fun_tabelka_szablonow(ciag)
							    	local ciag_strip=mw.ustring.gsub(ciag,"{{%s*(%S+)%s*}}","{{%1}}");
							    	return tabelka_szablonow[ciag_strip] or ciag;
							    end;
								lancuch=mw.ustring.gsub(lancuch,"{{%s*".._i.."+%s*}}",fun_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)and(not wytnij_puste)))
						         or((wytnij)and(parametry_modul["CzyTakCiąg"](element)))
						            or((wytnij_puste and not 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,"{{%s*".._i.."+%s*}}",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,czy_ze_spacja,czy_z_jedynka)
						local wartosc,klucz;
						if(zmienne_parametrowe)then
							local function Niewspomniane_w_rozne(zmienne_parametrowe,liczba_przesuniecia)
								local liczba=licznik+liczba_przesuniecia+zacznij_nazwane;
								if(liczba<1)then wytnij_ujemne=true;end;
								if(liczba>0)then
									local element=pf.args[zmienne_parametrowe..((czy_ze_spacja)and " " or "")..liczba];
									local czy_jedynka=(liczba==1)and element;
									local wartosc_elementu=((czy_z_jedynka) and element or ((not czy_z_jedynka)and((liczba>1)and element or ((liczba==1)and(czy_jedynka and element or pf.args[zmienne_parametrowe])))));
									czy_niepuste=czy_niepuste 
									                     or ((not nie_wytnij_nazwane)and((wytnij and parametry_modul["CzyTakCiąg"](wartosc_elementu)) 
									                            or (wytnij_puste and not wytnij and parametry_modul.CzyTak(wartosc_elementu))) or (nie_wytnij_nazwane and wartosc_elementu));
									czy=czy or wartosc_elementu;
									wartosc="{{{"..zmienne_parametrowe..(czy_z_jedynka and (((czy_ze_spacja)and " " or "")..liczba) or ((liczba>1) and (((czy_ze_spacja)and " " or "")..liczba) or (czy_jedynka and (((czy_ze_spacja)and " " or "")..1) or "")));
									klucz="{{{%s*"..zmienne_parametrowe..((czy_ze_spacja)and "%s+" or "").."{{%s*".._i.._i.."+%s*}}"; 
								end;
							end;
							local subtab=tabela[zmienne_parametrowe];
							local czy_w_tabeli=subtab and tonumber(subtab[3]);
							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*".._i.._i.."+%s*}}");
						if(lokalizacja)then
		    	    		zmienne_parametrowe=mw.text.trim(zmienne_parametrowe);
		    	    		local czy_ze_spacja,czy_z_jedynka=czy_parametry_ze_spacja_i_jedynka(zmienne_parametrowe);
                			local klucz,wartosc=Analiza_zmiennej_parametrowej(zmienne_parametrowe,licznik,czy_ze_spacja,czy_z_jedynka);
                			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*".._i.."+%s*}}");
                    	czy=czy or (mw.ustring.match(tekst_do_analizy,"{{%s*".._i.."%s*}}")and(not zmienna_numerowana_wikikodu))or((zmienna_numerowana_wikikodu)and(pf.args[licznik]));
        	        	local klucz="{{%s*".._i.."%s*}}";
        	        	local wartosc=licznik;
        	        	lancuch_zaanalizowany=Tekst_do_analizy(lancuch_zaanalizowany,klucz,wartosc);
        	        	czy_niepuste=czy_niepuste 
        	        	                   or (wytnij and parametry_modul["CzyTakCiąg"](pf.args[licznik])) 
        	        	                       or (wytnij_puste and not wytnij and 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)and(not wytnij_puste)) or (((wytnij)or(wytnij_puste))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=not parametry_modul.CzyTak(frame.args["nie rozwiń"]) and pf:preprocess(lancuch_znakow) or 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;
	local parametry_modul=require("Module:Parametry")
	local lacznik=frame.args["łącznik"] or (parametry_modul.CzyTak(frame.args["nowa linia"]) and "\n" or "");
	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="";
	local licznik=start;
	local kodprzeskok=frame.args["przeskok"];
	local pf=frame:getParent();
	while licznik<=koniec do
		local przeskok;
		if(kodprzeskok)then 
			local _;
			przeskok,_=mw.ustring.gsub(kodprzeskok,"{{_}}",licznik);
			przeskok=pf:preprocess(przeskok);
		end;
		local kod2,_=mw.ustring.gsub(kod,"{{_}}",licznik);
		lancuch=lancuch..((lancuch~="")and lacznik or "")..kod2;
		licznik=licznik+krok+(tonumber(przeskok) or 0);
	end;
	local przetworzony_wikikod=not parametry_modul.CzyTak(frame.args["nie rozwiń"]) and pf:preprocess(lancuch) or lancuch;
	return przetworzony_wikikod;
end,
["PrzetwarzajIterującCiąg"]=function(frame)
	local poziom=frame.args["ciąg"];
	poziom=mw.text.trim(poziom);
	local tab_poziom=mw.text.split(poziom,"%s*;%s*",false);
	local len_tab_poziom=#tab_poziom;
	local start=1;local koniec=len_tab_poziom;local krok=1;
	tabela_mikroszablonow={
		["{{start}}"]=start,
		["{{koniec}}"]=koniec,
		["{{krok}}"]=krok,
	}
	local parametry_modul=require("Module:Parametry");
	local lacznik=frame.args["łącznik"] or (parametry_modul.CzyTak(frame.args["nowa linia"]) and "\n" or "");
	local kod=frame.args[1];
	kod=mw.ustring.gsub(kod,"{{[^{}]+}}",tabela_mikroszablonow);
	local lancuch="";
	local licznik=start;
	local kodprzeskok=frame.args["przeskok"];
	local pf=frame:getParent();
	while licznik<=koniec do
		local przeskok;
		if(kodprzeskok)then 
			local _;
			przeskok,_=mw.ustring.gsub(kodprzeskok,"{{_}}",licznik);
			przeskok=pf:preprocess(przeskok);
		end;
		local tabela_microszablonow2={
			["{{_}}"]=licznik,
			["{{ciąg}}"]=tab_poziom[licznik];
		};
		local kod2,_=mw.ustring.gsub(kod,"{{[^{}]+}}",tabela_microszablonow2);
		lancuch=lancuch..((lancuch~="")and lacznik or "")..kod2;
		licznik=licznik+krok+(tonumber(przeskok) or 0);
	end;
	local przetworzony_wikikod=not parametry_modul.CzyTak(frame.args["nie rozwiń"]) and pf:preprocess(lancuch) or lancuch;
	return przetworzony_wikikod;
end,
["PowtarzajWedług"] = function(frame)
	local wybrany_wzor=frame.args["wzór"];
	local parametry_modul=require("Module:Parametry")
	local czy_link=parametry_modul.CzyTak(frame.args["link"]);
	local ramka_modul=require("Module:Ramka");
	local liczba_list=ramka_modul["MaksymalnaLiczbaNumerowanychIstniejącychStronWedługWzoru"]{args={["wzór"]=wybrany_wzor,}};
	local lancuch="";
	local linki_modul=require("Module:S");
	for i=1,liczba_list,1 do
	    local wybrany_link_lub_bez;
		local wybrany_link_lub_bez=mw.ustring.gsub(wybrany_wzor,"{{_}}",tostring(i));
		if czy_link then
			wybrany_link_lub_bez=linki_modul["S"]{[1]=wybrany_link_lub_bez};
		end;
		lancuch=(lancuch~="")and (lancuch..((i<liczba_list) and ", " or " i ")..wybrany_link_lub_bez) or wybrany_link_lub_bez;
	end;
	return lancuch;
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,
}