Przejdź do zawartości

Moduł:Szablonowe

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [stwórz] [odśwież]
local p={};
--zamykanie
local znak_127=mw.loadData("Module:Html/dane").znak_127;
function p.NormaWzoruKodowaniaTekstu(co,numer_szablonu)
	local wzor=znak_127.."'\"`UNIQ%-%-"..(co or "(%a+)").."%-"..(numer_szablonu or "(%d+)").."%-QINU`\"'"..znak_127;
    return wzor;
end;
function p.NormaKoduKodowaniaTekstu(kod,numer)
	local wikikodnumer=znak_127.."'\"`UNIQ--"..kod.."-"..numer.."-QINU`\"'"..znak_127;
	return wikikodnumer;
end;
function p.NormaWzoruZakodowanegoWikiTekstu(co,numer_szablonu)
	local wzor=znak_127.."'"`UNIQ%-%-"..(co or "(%a+)").."%-"..(numer_szablonu or "(%d+)").."%-QINU`"'"..znak_127;
	return wzor;
end;
function p.NormaKoduZakodowanegoWikiTekstu(kod,numer)
	local wikikodnumer=znak_127.."'"`UNIQ--"..kod.."-"..numer.."-QINU`"'"..znak_127;
	return wikikodnumer;
end;
function p.NormaWzoruZakodowanegoHtmlTekstu(co,numer_szablonu)
	local wzor="%%7F'"`UNIQ%-%-"..(co or "(%a+)").."%-"..(numer_szablonu or "(%d+)").."%-QINU`"'%%7F";
	return wzor;
end;
function p.NormaKoduZakodowanegoHtmlTekstu(kod,numer)
	local wikikodnumer="%7F'"`UNIQ--"..kod.."-"..numer.."-QINU`"'%7F";
	return wikikodnumer;
end;
function p.KodowanieSzablonowegoTekstuZObiektamiWikikodu(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA_poczatek,__FUNKCJA_koniec)
	local szablonowe_potrzebne_modul=require("Module:Szablonowe/Potrzebne");
	return szablonowe_potrzebne_modul.KodowanieSzablonowegoTekstuZObiektamiWikikodu(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA_poczatek,__FUNKCJA_koniec);
end;
function p.KodujWzoryMatematyczneTekstu(self,tekst_artykulu)
	local licznik=0;
	local tablica_analizy_obiektow_strony_dany_modul={};
	tablica_analizy_obiektow_strony_dany_modul["MATH"]={};
	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(<[Mm][Aa][Tt][Hh]>(.-)</[Mm][Aa][Tt][Hh]>)",function(szablon)
		licznik=licznik+1;
		tablica_analizy_obiektow_strony_dany_modul["MATH"][licznik]=szablon;
		return p.NormaKoduKodowaniaTekstu("MATH",licznik);
	end)
	return tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul;
end;
function p.NumerSzablonuKodowaniaTekstu(self,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)
	if(not tablica_analizy_obiektow_strony_dany_modul)then tablica_analizy_obiektow_strony_dany_modul=self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu];end;
	local parametry_modul=require("Module:Parametry");
	local function NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,obiekt)
		local __max=0;
		for numer,_ in pairs(tablica_analizy_obiektow_strony_dany_modul[obiekt])do
			if(parametry_modul.TypeNumber(numer))then
				__max=math.max(__max,numer);
			end;
		end;
		return __max+1;
	end;
	numer_szablonu={};
	--numer_szablonu["ŹRÓDŁO"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"ŹRÓDŁO");
	--numer_szablonu["GALERIA"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"GALERIA");
	--numer_szablonu["MAPAOBRAZU"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"MAPAOBRAZU");
	numer_szablonu["SZABLON"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"SZABLON");
	numer_szablonu["LINKW"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"LINKW");
	numer_szablonu["LINKZ"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"LINKZ");
	numer_szablonu["ZMIENNA"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"ZMIENNA");
	numer_szablonu["WIKITABELA"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"WIKITABELA");
	--numer_szablonu["NOWIKI"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"NOWIKI");
	--numer_szablonu["MATH"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"MATH");
	--numer_szablonu["PRE"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"PRE");
	numer_szablonu["INNEPRE"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"INNEPRE");
	numer_szablonu["ZNACZNIK"]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,"ZNACZNIK");
	local szablonowe_dane_modul=mw.loadData("Module:Szablonowe/dane");
	for obiekt,_ in pairs(szablonowe_dane_modul.tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki)do
		numer_szablonu[obiekt]=NumerSzablonuObiektu(tablica_analizy_obiektow_strony_dany_modul,obiekt);
	end;
	return numer_szablonu;
end;
function p.KodSzablonuKodowaniaTekstu(szablon)
	if(mw.ustring.match(szablon,"^%[%[[^%[%]]+%]%]$"))then
		return "LINKW";
	elseif(mw.ustring.match(szablon,"^%[[^%[%]]+%]$"))then
		return "LINKZ";
	elseif(mw.ustring.match(szablon,"^{{{[^{}]-}}}$"))then
		return "ZMIENNA";
	elseif(mw.ustring.match(szablon,"^{{[^{}]-}}$"))then
		return "SZABLON";
	elseif(mw.ustring.match(szablon,"^{|.-|}$"))then
		return "WIKITABELA";
	elseif(mw.ustring.match(szablon,"^[^%S\n]+[^\n]*"))then
		return "INNEPRE";
	elseif((mw.ustring.match(szablon,"^<[^<>]+>.-</[^<>]+>$"))or(mw.ustring.match(szablon,"^<[^<>]+/>$")))then
		local nazwa,zawartosc,tab_atrybuty=p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,nil,nil);
		local szablonowe_dane_modul=mw.loadData("Module:Szablonowe/dane");
		return szablonowe_dane_modul.tablica_znaczniki_typowo_mechanizmu_mediawiki[nazwa] or "ZNACZNIK";
	end;
	return;
end;
function p.LiczbyParametroweInformacjiBazyKodowaniaWikikodu()
	return {["SZABLON"]={1,2,3,4,5,0,-1,-2,},["LINKW"]={-3,},["ZNACZNIK"]={100,},["MATH"]={101,},["PRE"]={102,},["ŹRÓDŁO"]={103,},["NOWIKI"]={104,},};
end;
function p.UsuwanieStarychZebranychInformacjiBazyTablicyKodowaniaWikikodu(tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_usun)
	local tab_analiza=p.LiczbyParametroweInformacjiBazyKodowaniaWikikodu();
	for obiekt,tab_obiekt in pairs(tablica_analizy_obiektow_strony_dany_modul)do
		for kod,wartosc in pairs(tab_obiekt)do
			local tablica=getmetatable(tablica_analizy_obiektow_strony_dany_modul[obiekt]).tablica();
			local tab_wartosc=tablica[kod];
			if(tab_wartosc)then
				if((not tab_usun[obiekt])or(not tab_usun[obiekt][kod]))then
					if(tab_wartosc[2])then
						for obiekt_tab,tab_kod in pairs(tab_analiza)do
							if(obiekt_tab==obiekt)then
								for _,liczba in ipairs(tab_kod)do
									local tab_liczba=tablica_danych_parametrow_szablonu_strony[liczba];
									if(tab_liczba)then
										tab_liczba[kod]=nil;
										tab_wartosc[2]=false;
									end;
								end;
							end;
						end;
					end;
				else
					tablica[kod]=nil;
				end;
			end;
		end;
	end;
end;
function p.IteratorSzablonowyZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4)
	if(not tablica_analizy_obiektow_strony_dany_modul)then tablica_analizy_obiektow_strony_dany_modul=self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu];end;
	local czy_jedno=false;
	----
	local parametry_modul=require("Module:Parametry");
	----
	local function IteratorMain(tekst_rozwiniety_calego_artykulu,poziom_iteracji,obiekt,kod,czy_stare)
		local iter=true;local iter_fun;
		if((tekst_rozwiniety_calego_artykulu=="")or(czy_stare))then 
			iter_fun=function()
				local iter=function()
					return nil;
				end;
				return iter;
			end;
		else
			iter_fun=function()
				if((not obiekt)and(not kod))then
					local iter=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,p.NormaWzoruKodowaniaTekstu());
					return iter;
				else
					local wynik=__FUNKCJA4 and __FUNKCJA4(tekst_rozwiniety_calego_artykulu,obiekt,kod,poziom_iteracji) or nil;
					local szablon=wynik or (((obiekt)and(kod)) and (tablica_analizy_obiektow_strony_dany_modul[obiekt]))and tablica_analizy_obiektow_strony_dany_modul[obiekt][kod] or tekst_rozwiniety_calego_artykulu;
					if(not szablon)then
						local iter=function()
							return nil;
						end;
						return iter;
					else
						local iter=mw.ustring.gmatch(szablon,p.NormaWzoruKodowaniaTekstu());
						return iter;
					end;
				end;
			end;
		end;
		local tak=nil;
		local iter2=nil;
		poziom_iteracji=poziom_iteracji or 0;
		local function Iterator()
			local function IterMain()
				local obiekt,kod;
				----
				repeat
					if((parametry_modul.TypeBoolean(iter))and(iter==true))then iter=iter_fun();end;
					obiekt,kod=iter();
	    			if((not obiekt)or(not kod))then return nil;end;
	    			kod=tonumber(kod);
	    			local tak_repeat=false;
	    			if((not tablica_analizy_obiektow_strony_dany_modul[obiekt])or(not tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]))then
	    				tak_repeat=true;
	    			end;
				until (not tak_repeat);
    			----
	    		local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod];
	    		szablon=(not __FUNKCJA3) and szablon or (__FUNKCJA3(szablon,obiekt,kod,poziom_numeracji,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul) or szablon);
	    		if(__FUNKCJA2)then
	    			repeat
	    				local czy_dalej=nil;
	    				local jest_naglowek=__FUNKCJA2(szablon,obiekt,kod,poziom_iteracji,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul);
	    				if(not jest_naglowek)then
	    					--if(poziom_iteracji>0)then 
	    					--	return nil;
		    				--else 
		    					repeat
									obiekt,kod=iter();
	    							if((not obiekt)or(not kod))then return nil;end;
	    							kod=tonumber(kod);
	    							local tak_repeat=false;
	    							if((not tablica_analizy_obiektow_strony_dany_modul[obiekt])or(not tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]))then
	    								tak_repeat=true;
	    							end;
								until (not tak_repeat);
    							----
	    						szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod];
	    						czy_dalej=true;
	    					--end;
	    				end;
	    			until (not czy_dalej);
	    		end;
	    		----
	    		tak=true;
	    		if(__FUNKCJA)then
	    				local wynik,tekst=__FUNKCJA(szablon,obiekt,kod,poziom_iteracji,tekst_rozwiniety_calego_artykulu);
	    				if(not wynik)then 
	    					czy_jedno=true;
	    					return nil;
	    				else 
	    					szablon=wynik;
	    					if(tekst)then
	    						tekst_rozwiniety_calego_artykulu=tekst;
	    					end;
	    				end;
	    		end;
	    		iter2=IteratorMain(szablon,poziom_iteracji+1,obiekt,kod,(obiekt=="STARE"));
	    		return szablon,obiekt,kod,poziom_iteracji;  
			end;
			if(not tak)then
	    		local szablon,obiekt,kod,poziom_iteracji=IterMain();
	    		if(czy_jedno)then return nil;end;
	    		return szablon,obiekt,kod,poziom_iteracji;
	    	else
		    	local szablon,obiekt,kod,poziom_iteracji=iter2();
		    	if(czy_jedno)then return nil;end;
	    		if((not szablon)or(not kod)or(not obiekt))then 
	    			tak=nil;
	    			local szablon,obiekt,kod,poziom_iteracji=IterMain();
	    			if(czy_jedno)then return nil;end;
	    			return szablon,obiekt,kod,poziom_iteracji;
	    		else 
	    			return szablon,obiekt,kod,poziom_iteracji;
	    		end;
	    	end;
		end;
		return Iterator;
	end;
	return IteratorMain(tekst_rozwiniety_calego_artykulu,0,nil,nil,false),tablica_analizy_obiektow_strony_dany_modul;
end;
function p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__funkcja1,__funkcja2,__funkcja3,__funkcja4,__funkcja5,__funkcja6,__funkcja7,__funkcja8)
	local techniczne_modul=require("Module:Techniczne");
	local parametry_modul=require("Module:Parametry");
	local tab_usun={};
	local szablon2=nil;
	local iterator,tablica_analizy_obiektow_strony_dany_modul=p.IteratorSzablonowyZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__funkcja3,__funkcja4,__funkcja5,function(tekst_rozwiniety_calego_artykulu,obiekt,kod,poziom_iteracji)
		if((szablon2)and(tab_usun)and(tab_usun[obiekt])and(tab_usun[obiekt][kod]))then
			return szablon2;
		else
			local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod];
			szablon=funkcja6 and funkcja6(tekst_rozwiniety_calego_artykulu,obiekt,kod,poziom_iteracji) or szablon;
			return szablon;
		end;
	end);
	local poziom_iteracji_poprz=-1;
	local tab_dane=nil;
	for szablon,obiekt,kod,poziom_iteracji in iterator do
		if((tab_dane)and(poziom_iteracji==0))then tab_dane=nil;end;
		szablon2=nil;local wynik;local analiza;
		if(__funkcja1)then
			szablon2,wynik,analiza=__funkcja1(szablon,obiekt,kod,poziom_iteracji,tekst_rozwiniety_calego_artykulu);
			if((analiza)and(__funkcja7))then
				local funkcja_temp;local tak_specjalne=false;
				if(tab_dane)then
					local tak=true;
					for i=#tab_dane,1,-1 do
						local tab_pos=tab_dane[i];
						local poziom_iteracji_temp=tab_pos[4];
						if(poziom_iteracji_temp<poziom_iteracji)then
							local szablon_temp=tab_pos[1];local obiekt_temp=tab_pos[2];local kod_temp=tab_pos[3];
							tak=tak and ((obiekt_temp and kod_temp)and(tab_usun[obiekt_temp]) and (tab_usun[obiekt_temp][kod_temp]));
							if(not tak)then
								local Typ=function()
									__funkcja7(szablon_temp,obiekt_temp,kod_temp,poziom_iteracji_temp);
								end;
								if(not funkcja_temp)then funkcja_temp=Typ;end;
								if(__funkcja8 and __funkcja8(szablon_temp,obiekt_temp,kod_temp,poziom_iteracji_temp) or((not __funkcja8)and((obiekt_temp=="SZABLON")or(obiekt_temp=="LINKW"))))then
									tak_specjalne=true;
								end;
								break;
							end;
						end;
					end;
				end;
				if(tak_specjalne)then 
					wynik=true;
				elseif(parametry_modul.TypeFunction(szablon2))then
					szablon2=szablon2();
					if(funkcja_temp)then funkcja_temp();end;
				else
					if(funkcja_temp)then funkcja_temp();end;
				end;
			end;
		end;
		if(not wynik)then
			szablon=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](szablon2 or szablon);
			if((not tab_dane)or(#tab_dane==0))then
				tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,p.NormaWzoruKodowaniaTekstu(obiekt,kod),szablon);
				if(not tab_usun[obiekt])then tab_usun[obiekt]={};end;tab_usun[obiekt][kod]=true;
			else
				local tak=true;local tab_wolne;
				for i=#tab_dane,1,-1 do
					local tab_pos=tab_dane[i];
					local poziom_iteracji_temp=tab_pos[4];
					if(poziom_iteracji_temp<poziom_iteracji)then
						local obiekt_temp=tab_pos[2];local kod_temp=tab_pos[3];
						tak=tak and ((obiekt_temp and kod_temp)and((tab_usun[obiekt_temp]) and (tab_usun[obiekt_temp][kod_temp])));
						if(not tak)then
							tab_wolne=tab_pos;
							break;
						end;
					end;
				end;
				if(tak)then
					tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,p.NormaWzoruKodowaniaTekstu(obiekt,kod),szablon);
					if(not tab_usun[obiekt])then tab_usun[obiekt]={};end;tab_usun[obiekt][kod]=true;
				else
					local obiekt_temp=tab_wolne[2];local kod_temp=tab_wolne[3];
					local tekst=tablica_analizy_obiektow_strony_dany_modul[obiekt_temp][kod_temp];
					tekst=mw.ustring.gsub(tekst,p.NormaWzoruKodowaniaTekstu(obiekt,kod),szablon);
					tablica_analizy_obiektow_strony_dany_modul[obiekt_temp][kod_temp]=tekst;
					if(not tab_usun[obiekt])then tab_usun[obiekt]={};end;tab_usun[obiekt][kod]=true;
				end;
			end;
			if(__funkcja2)then 
				local tak=__funkcja2(szablon,obiekt,kod,poziom_iteracji,tekst_rozwiniety_calego_artykulu);
				if(tak)then return tekst_rozwiniety_calego_artykulu;end;
			end;
		end;
		if(not tab_dane)then tab_dane={};end;
    	if(poziom_iteracji_poprz>poziom_iteracji)then 
    		for i=poziom_iteracji_poprz,poziom_iteracji,-1 do
    			table.remove(tab_dane);
    		end;
    	--elseif(poziom_iteracji_poprz<poziom_iteracji)then
    	elseif(poziom_iteracji_poprz==poziom_iteracji)then
    		table.remove(tab_dane);
    	end;
    	table.insert(tab_dane,{szablon,obiekt,kod,poziom_iteracji});
    		
		if(__funkcja2)then 
			local tak=__funkcja2(szablon2 or szablon,obiekt,kod,poziom_iteracji,tekst_rozwiniety_calego_artykulu);
			if(tak)then return tekst_rozwiniety_calego_artykulu;end;
		end;
		poziom_iteracji_poprz=poziom_iteracji;
	end;
	return tekst_rozwiniety_calego_artykulu,tab_usun;
end;
function p.ModyfikowanieKodowoSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__funkcja,__funkcja2,__funkcja3,__funkcja4,__funkcja5)
	local techniczne_modul=require("Module:Techniczne");
	local iterator,tablica_analizy_obiektow_strony_dany_modul=p.IteratorSzablonowyZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__funkcja2,__funkcja3,__funkcja4,__funkcja5);
	local techniczne_modul=require("Module:techniczne");
	local poziom_iteracji_poprz=-1;
	local tab_poziom_obiekt={};
	for szablon,obiekt,kod,poziom_iteracji in iterator do
		local function ZamienianieKodowe(szablon_rodzica,obiekt_rodzica,kod_rodzica,poziom_iteracji_rodzic)
			local kod_kodowy_wynik,dziecko_zmodyfikowane,obiekt_zmodyfikowany,kod_zmodyfikowany,szablon_rodzica_zmodyfikowany=__funkcja(szablon,obiekt,kod,poziom_iteracji,szablon_rodzica,obiekt_rodzica,kod_rodzica,poziom_iteracji_rodzica,tablica_analizy_obiektow_strony_dany_modul);
			if(kod_kodowy_wynik)then
				local function ModyfikacjaBazyKodowoSzablonowa()
					if(dziecko_zmodyfikowane)then
						if((obiekt_zmodyfikowany)and(kod_zmodyfikowany))then
							if((obiekt_zmodyfikowany~=obiekt)or(kod_zmodyfikowany~=kod))then
								if(not tablica_analizy_obiektow_strony_dany_modul[obiekt_zmodyfikowany])then
									tablica_analizy_obiektow_strony_dany_modul[obiekt_zmodyfikowany]={};
								end;
								tablica_analizy_obiektow_strony_dany_modul[obiekt_zmodyfikowany][kod_zmodyfikowany]=dziecko_zmodyfikowane;
								tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=nil;
							else
								tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=dziecko_zmodyfikowane;
							end;
						else
							tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=dziecko_zmodyfikowane;
						end;
					end;
				end;
				if(poziom_iteracji>0)then
					if(not szablon_rodzica_zmodyfikowany)then
						local ile;
						local szablon_rodzica=tablica_analizy_obiektow_strony_dany_modul[obiekt_rodzica][kod_rodzica];
						szablon_rodzica,ile=mw.ustring.gsub(szablon_rodzica,p.NormaWzoruKodowaniaTekstu(obiekt,kod),techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](kod_kodowy_wynik));
						if(ile>0)then
							tablica_analizy_obiektow_strony_dany_modul[obiekt_rodzica][kod_rodzica]=szablon_rodzica;
							ModyfikacjaBazyKodowoSzablonowa();
						end;
					else
						tablica_analizy_obiektow_strony_dany_modul[obiekt_rodzica][kod_rodzica]=szablon_rodzica_zmodyfikowany;
						ModyfikacjaBazyKodowoSzablonowa();
					end;
				else
					local ile;
					tekst_rozwiniety_calego_artykulu,ile=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,p.NormaWzoruKodowaniaTekstu(obiekt,kod),techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](kod_kodowy_wynik));
					if(ile>0)then
						ModyfikacjaBazyKodowoSzablonowa();
					end;
				end;
			elseif(szablon_rodzica_zmodyfikowany)then
				tablica_analizy_obiektow_strony_dany_modul[obiekt_rodzica][kod_rodzica]=szablon_rodzica_zmodyfikowany;
			end;
		end;
		if(poziom_iteracji==0)then
			ZamienianieKodowe(nil,nil,nil,nil);
		else
			for i=#tab_poziom_obiekt,1,-1 do
				local tab=tab_poziom_obiekt[i];
				local poziom_iteracji_rodzica=tab[4];
				if(poziom_iteracji_rodzica<poziom_iteracji)then
					local szablon_rodzica=tab[1];
					local obiekt_rodzica=tab[2];
					local kod_rodzica=tab[3];
					ZamienianieKodowe(szablon_rodzica,obiekt_rodzica,kod_rodzica,poziom_iteracji_rodzica);
					break;
				end;
			end;
		end;
		if(poziom_iteracji_poprz>poziom_iteracji)then 
    		for i=poziom_iteracji_poprz,poziom_iteracji,-1 do
    			table.remove(tab_poziom_obiekt);
    		end;
    	--elseif(poziom_iteracji_poprz<poziom_iteracji)then
    	elseif(poziom_iteracji_poprz==poziom_iteracji)then
    		table.remove(tab_poziom_obiekt);
    	end;
    	table.insert(tab_poziom_obiekt,{szablon,obiekt,kod,poziom_iteracji,});
    	poziom_iteracji_poprz=poziom_iteracji;
	end;
	return tekst_rozwiniety_calego_artykulu;
end;
function p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__funkcja,__funkcja1,__funkcja2,__funkcja3,__funkcja4,__funkcja5)
	local tablica_szablonow_z_naglowkami=nil;
	local tab_sam;
    tekst_rozwiniety_calego_artykulu=p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__funkcja1,__funkcja2,__funkcja3,function(szablon,obiekt,kod,poziom_iteracji,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)
    	if(poziom_iteracji==0)then 
    		tablica_szablonow_z_naglowkami=nil;
    		tab_sam=nil;
    	else
    		if((tab_sam)and(tab_sam[obiekt])and(tab_sam[obiekt][kod]))then return false;end;
    		if((tablica_szablonow_z_naglowkami)and(tablica_szablonow_z_naglowkami[obiekt])and(tablica_szablonow_z_naglowkami[obiekt][kod]))then return true;end;
    	end;
    	----
    	local wynik,sam_obiekt,sam_kod=__funkcja(szablon,obiekt,kod,0,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
    	if(wynik)then 
    		if(sam_obiekt and sam_kod)then
    			return false;
        	end;
    	end
    	local czy_nie_wyzej=false;
    	local iterator=p.IteratorSzablonowyZakodowanegoTekstu(self,szablon,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,nil,nil,nil,function(szablon,obiekt,kod)
    		if(czy_nie_wyzej)then
    			return "";
    		end;
    	end);
    	local poziom_iteracji_poprz=-1;
    	local tab_poziom_obiekt={}
    	if(poziom_iteracji==0)then table.insert(tab_poziom_obiekt,{obiekt,kod});end;
    	for szablon2,obiekt2,kod2,poziom_iteracji2 in iterator do
    		local wynik,sam_obiekt,sam_kod=__funkcja(szablon2,obiekt2,kod2,poziom_iteracji2+1,false,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
    		if(not wynik)then
    			if(poziom_iteracji_poprz>poziom_iteracji2)then 
    				for i=poziom_iteracji_poprz,poziom_iteracji2,-1 do
    					table.remove(tab_poziom_obiekt);
    				end;
    			--elseif(poziom_iteracji_poprz<poziom_iteracji2)then
    			elseif(poziom_iteracji_poprz==poziom_iteracji2)then
    				table.remove(tab_poziom_obiekt);
    			end;
    			table.insert(tab_poziom_obiekt,{obiekt2,kod2});
    			poziom_iteracji_poprz=poziom_iteracji2;
    			czy_nie_wyzej=false;
        	else
        		for _,tab in ipairs(tab_poziom_obiekt)do
        			if(not tablica_szablonow_z_naglowkami)then tablica_szablonow_z_naglowkami={};end;
        			if(not tablica_szablonow_z_naglowkami[tab[1]])then tablica_szablonow_z_naglowkami[tab[1]]={};end;
        			tablica_szablonow_z_naglowkami[tab[1]][tab[2]]=true;
        		end;
        		if(sam_obiekt and sam_kod)then
    				if(not tab_sam)then tab_sam={};end;
    				if(not tab_sam[sam_obiekt])then tab_sam[sam_obiekt]={};end;
    				tab_sam[sam_obiekt][sam_kod]=true;
    				czy_nie_wyzej=true;
    			else
    				if(not tablica_szablonow_z_naglowkami)then tablica_szablonow_z_naglowkami={};end;
        			if(not tablica_szablonow_z_naglowkami[obiekt2])then tablica_szablonow_z_naglowkami[obiekt2]={};end;
        			tablica_szablonow_z_naglowkami[obiekt2][kod2]=true;
        			czy_nie_wyzej=false;
        		end;
				---poziom_iteracji_poprz=poziom_iteracji2;
			end;
    	end;
    	if(wynik)then return true;end;
    	if((tab_sam)and(tab_sam[obiekt])and(tab_sam[obiekt][kod]))then return false;end;
    	if((tablica_szablonow_z_naglowkami)and(tablica_szablonow_z_naglowkami[obiekt])and(tablica_szablonow_z_naglowkami[obiekt][kod]))then return true;end;
    	return nil;
    end,__funkcja4,__funkcja5);
    return tekst_rozwiniety_calego_artykulu;
end;
function p.KompletowanieSzablonoweZakodowanegoTekstuBezPewnychSzablonowychNormZgodnieZJegoSzablonowymiElementami(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__funkcja,__funkcja1,__funkcja2,__funkcja3)
	local tablica_szablonow_z_naglowkami=nil;
    tekst_rozwiniety_calego_artykulu=p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__funkcja1,__funkcja2,__funkcja3,function(szablon,obiekt,kod,poziom_iteracji,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)
    	local wynik=__funkcja(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
    	if(not wynik)then return nil;end;
    	return true;
    end);
    return tekst_rozwiniety_calego_artykulu;
end;
local function FunkcjaIterajacaRozwijanegoSzablonu(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nazwa_modulu_aktualna_czy_biezaca,dwukropek,czy_niekodowane,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA_ANALIZA_SPISOWA)
	if(obiekt=="SZABLON")then
    	local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=p["ParsowanieWywołaniaSzablonu"](szablon,nil,function(nazwa_szablonu,tabela_modyfikatorow)
    		return __PRZEDFUNKCJA(nazwa_szablonu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
    		end,
    		function(nazwa_szablonu,tabela_modyfikatorow,rezultat)
   	  			return __FUNKCJA0 and __FUNKCJA0(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu;
   		end,tablica_danych_parametrow_szablonu_strony,kod);
    	if((not tabela_parametrow_szablonu)or(not nazwa_szablonu))then return;end;
    		
    	if(__FUNKCJA)then
    		local wynik=__FUNKCJA(nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow);
    		if(wynik)then return;end;
    	end;
		local techniczne_modul=require("Module:Techniczne");
    	if(p.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow,nazwa_szablonu,tabela_parametrow_szablonu,tablica_danych_parametrow_szablonu_strony,kod))then
    		local html_modul=require("Module:Html");
    		nazwa_szablonu=html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](nazwa_szablonu);
    		local parametry_modul=require("Module:Parametry");
    		nazwa_szablonu=parametry_modul["Odstępy"]{[1]=nazwa_szablonu,[2]="tak",};
    		nazwa_szablonu=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]({[1]=nazwa_szablonu,[2]=(dwukropek and ":" or "")..nazwa_modulu_aktualna_czy_biezaca,},tablica_danych_parametrow_szablonu_strony,kod);
    		local pelna_nazwa_szablonu=p["PełnaNazwaStronyNazwySzablonu"](nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod);
    		if(__FUNKCJA2)then
    			local wynik=__FUNKCJA2(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow);
    			if(wynik)then
    				return;	
    			end;
    		end;
    		if((czy_niekodowane)and(__FUNKCJA3))then
    			local wynik=__FUNKCJA3(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow);
    			if(wynik)then
    				return wynik;
    			end;
    		end;
    		local parametry_modul=require("Module:Parametry");
    		local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tabela_parametrow_szablonu);

			local tekst;
			if((not czy_niekodowane)and(__FUNKCJA3))then
    			tekst=__FUNKCJA3(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow);
    			if(not tekst)then
    				local pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
    				local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
    				tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true,true,nil,nil,nil,nil,nil,__FUNKCJA_ANALIZA_SPISOWA);
    			end;
    		else
    			local pelna_nazwa_szablonu=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu) or pelna_nazwa_szablonu;
				local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
    			tekst=stronicowyparser_tekst_modul.SpreparowanyWikikodStrony(nil,pelna_nazwa_szablonu,true,true,nil,nil,nil,nil,nil,__FUNKCJA_ANALIZA_SPISOWA);
    		end;
    		if(not tekst)then return;end;
    		if((czy_niekodowane)and(not czy_nie_brak_parametrow))then return tekst;end;
    			
    		tekst=p:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,pelna_nazwa_szablonu,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
    			return;
    		end,		
    		function(szablon,obiekt,kod,tekst)
    			if(czy_nie_brak_parametrow)then
    				if(obiekt=="ZMIENNA")then
    					local zmienna;local wartosc_domyslna;
    					zmienna=mw.ustring.match(szablon,"^{{{([^{}|]*)}}}$");
    					if(not zmienna)then
    						zmienna,wartosc_domyslna=mw.ustring.match(szablon,"^{{{([^{}|]*)|([^{}]*)}}}$");
    					end;
    					zmienna=mw.text.trim(zmienna);
    					local wartosc_zmiennej=tabela_parametrow_szablonu[tonumber(zmienna) or zmienna];
    					if(not wartosc_zmiennej)then 
    						if(wartosc_domyslna)then return wartosc_domyslna;end;
    						local html_modul=require("Module:Html");
    						local szablon=html_modul["KodyHTMLZnakówWikiCiągu"](szablon);
    						return szablon;
    					end;
    					return wartosc_zmiennej;
    				end;
    			end;
    		end,
    		function()
    			return numer_szablonu;
    		end);
    		return tekst;
    	end;
    end;
end;
function p.TablicaZanalizowanychInformacjiSzablonowychParsowania(self,nazwa_modulu)
	local tablica_modulu_szablonowe=p.TablicaTransportuSzablonowe(self);
    tablica_modulu_szablonowe.tablica_szablonow=tablica_modulu_szablonowe.tablica_szablonow or {};
    local tablica_szablonow=tablica_modulu_szablonowe.tablica_szablonow;
    ----
    tablica_szablonow[nazwa_modulu]=tablica_szablonow[nazwa_modulu] or {};
    local tablica_danych_parametrow_szablonu_strony=tablica_szablonow[nazwa_modulu];
    return tablica_danych_parametrow_szablonu_strony;
end;
function p.UzyskiwanieTablicyKodowaniaIOpcjiParametrowychSzablonowychDlaStrony(self,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
	if(not tablica_analizy_obiektow_strony_dany_modul)then
    	if(not self.tablica_analizy_obiektow_strony_dany_modul)then self.tablica_analizy_obiektow_strony_dany_modul={};end;
    	if(not self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca])then self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca]={};end;
    	---
    	tablica_analizy_obiektow_strony_dany_modul=self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca];
	end;
	---
    local tablica_danych_parametrow_szablonu_strony=tablica_danych_parametrow_szablonu_strony or p.TablicaZanalizowanychInformacjiSzablonowychParsowania(self,nazwa_modulu_aktualna_czy_biezaca);
    return tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony;
end;
function p.RozwijanieNiezakodowanegoSzablonu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA_ANALIZA_SPISOWA)
	
    local tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=p.UzyskiwanieTablicyKodowaniaIOpcjiParametrowychSzablonowychDlaStrony(self,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
    ----
    local nazwy_modul=require("Module:Nazwy");
    local dwukropek=(nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu_aktualna_czy_biezaca)=="");
    local tekst_rozwiniety_calego_artykulu=p.KodowanieSzablonowegoTekstuZObiektamiWikikodu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
    	return;
    end,
    function(szablon,obiekt,kod,tekst,tablica_analizy_obiektow_strony_dany_modul,numer_szablonu)
    	----
    	szablon=__FUNKCJA4 and __FUNKCJA4(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or szablon;
    	---
		return FunkcjaIterajacaRozwijanegoSzablonu(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nazwa_modulu_aktualna_czy_biezaca,dwukropek,true,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA_ANALIZA_SPISOWA);
    end);
    return tekst_rozwiniety_calego_artykulu;
end;
function p.RozwijanieZakodowanegoSzablonu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA_ANALIZA_SPISOWA)
		
    local tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=p.UzyskiwanieTablicyKodowaniaIOpcjiParametrowychSzablonowychDlaStrony(self,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
    ----
    local nazwy_modul=require("Module:Nazwy");
    local dwukropek=(nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu_aktualna_czy_biezaca)=="");
    local tab_usun;
    tekst_rozwiniety_calego_artykulu,tab_usun=p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst)
    		if(obiekt=="SZABLON")then
    			local numer_szablonu=p.NumerSzablonuKodowaniaTekstu(self,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
    			----
    			szablon=__FUNKCJA4 and __FUNKCJA4(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or szablon;
    			----
    			local wynik=FunkcjaIterajacaRozwijanegoSzablonu(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,nazwa_modulu_aktualna_czy_biezaca,dwukropek,false,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA_ANALIZA_SPISOWA);
    			if(wynik)then return wynik;end;
    		end;
			return nil,true;
    end);
    return tekst_rozwiniety_calego_artykulu,tab_usun;
end;
p["UstalanieNazwyWywołania"]=function(nazwa,__FUNKCJA,__FUNKCJA2)
	local html_modul=require("Module:Html");
	nazwa=html_modul.DecodeHtml(nazwa,true);
	local rezultat=nil;
	if(__FUNKCJA)then
		local nazwa_rozwinieta;
		nazwa_rozwinieta,rezultat=__FUNKCJA(nazwa);
		nazwa=nazwa_rozwinieta or nazwa;
	end;
   	local nazwa,modyfikatory,tabela_modyfikatorow=p.WydzielanieOpcjiModyfikatorowych(nazwa);
   	nazwa=((__FUNKCJA2) and (not rezultat)) and (__FUNKCJA2(nazwa,tabela_modyfikatorow) or nazwa) or nazwa;
   	if(not tabela_modyfikatorow)then return nazwa;end;
   	local nazwy_modul=require("Module:Nazwy");
   	local nazwa_przestrzeni=mw.ustring.match(nazwa,"^[%s_]*[^:]") and nazwy_modul["NAZWAPRZESTRZENI"](nazwa);
   	if(nazwa_przestrzeni)then
   		if(nazwa_przestrzeni=="")then
   	  		if(tabela_modyfikatorow["#invoke:"])then
   	  			nazwa="Module:"..nazwa;
   	  		elseif(tabela_modyfikatorow["int:"])then
   	  		  	nazwa="MediaWiki:"..nazwa;
   	  		end;
   	  	 else
   	  		local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
   	  		if((nazwy_np_modul.Module~=nazwa_przestrzeni)and(tabela_modyfikatorow["#invoke:"]))then
   	  		  		nazwa="Module:"..nazwa;
   	  		 elseif((nazwy_np_modul.MediaWiki~=nazwa_przestrzeni)and(tabela_modyfikatorow["int:"]))then
   	  		  		nazwa="MediaWiki:"..nazwa;
   	  		end;
   	  	end;
   	end;
	nazwa=html_modul.EncodeId(nazwa);
    return nazwa,tabela_modyfikatorow;
end;
p["SzablonowaNazwaStrony"]=function(czy_szablon,tablica_danych_parametrow_szablonu_strony,kod)
	if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[3];
		if(tablica_danych_parametrow_szablonu_strony_numer)then
			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
			if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
				return tablica_danych_parametrow_szablonu_strony_numer_kod.szablonowa_nazwa_strony;
			end;
		end;
	end;
	if(not czy_szablon)then return;end;
	local nazwy_modul=require("Module:Nazwy");
    local parametry_modul=require("Module:Parametry");
    local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
    local nazwa_przestrzeni_szablonu=nazwy_modul["NAZWAPRZESTRZENI"]{nazwa=czy_szablon,};
    local nazwa_szablonu;
    if(nazwa_przestrzeni_szablonu==nazwy_np_modul.Main)then
    	local czy_nie_dwukropek=mw.ustring.match(czy_szablon,"^%s*[^:]");
    	if((czy_nie_dwukropek)or(czy_szablon==""))then
    		local czy_szablon=parametry_modul["Odstępy"]{nazwa=czy_szablon,["wewnątrz"]="tak",};
    		nazwa_szablonu=mw.getContentLanguage():ucfirst(czy_szablon);
    	else
    		nazwa_szablonu=":"..nazwy_modul["PEŁNANAZWASTRONY"](czy_szablon);
    	end;
    elseif(nazwa_przestrzeni_szablonu==nazwy_np_modul.Template)then
    	nazwa_szablonu=nazwy_modul["NAZWASTRONY"]{nazwa=czy_szablon,};
    else
    	nazwa_szablonu=nazwy_modul["PEŁNANAZWASTRONY"](czy_szablon);
    end;
    if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		if(not tablica_danych_parametrow_szablonu_strony[3])then tablica_danych_parametrow_szablonu_strony[3]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[3];
		if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
		tablica_danych_parametrow_szablonu_strony_numer_kod.szablonowa_nazwa_strony=nazwa_szablonu;
	end;
	return nazwa_szablonu;
end;
p["PełnaNazwaStronyNazwySzablonu"]=function(frame,tablica_danych_parametrow_szablonu_strony,kod)
	if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[5];
		if(tablica_danych_parametrow_szablonu_strony_numer)then
			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
			if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
				return tablica_danych_parametrow_szablonu_strony_numer_kod.generalna_nazwa_strony;
			end;
		end;
	end;
    local parametry_modul=require("Module:Parametry");
    ----
    local PobierzParametr=parametry_modul.PobierzParametr(frame);
    local nazwa_szablonu=PobierzParametr(1) or PobierzParametr("nazwa");
    ----
    if(not nazwa_szablonu)then return;end;
	local nazwy_modul=require("Module:Nazwy");
	----
    local nazwa_przestrzeni_szablonu=nazwy_modul["NAZWAPRZESTRZENI"]{nazwa=nazwa_szablonu,};
    local pelna_nazwa_szablonu;
    local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
    if(nazwa_przestrzeni_szablonu==nazwy_np_modul.Main)then
    	local czy_nie_dwukropek=mw.ustring.match(nazwa_szablonu,"^%s*[^:]");
    	if(czy_nie_dwukropek)then
    		local nazwa_szablonu=parametry_modul["Odstępy"]{nazwa=nazwa_szablonu,["wewnątrz"]="tak",};
    		pelna_nazwa_szablonu=((nazwy_np_modul.Template~="")and (nazwy_np_modul.Template..":") or "")..mw.getContentLanguage():ucfirst(nazwa_szablonu);
    	else
    		pelna_nazwa_szablonu=nazwy_modul["PEŁNANAZWASTRONY"](nazwa_szablonu);
    	end;
    else
    	pelna_nazwa_szablonu=nazwy_modul["PEŁNANAZWASTRONY"](nazwa_szablonu);
    end;
    if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		if(not tablica_danych_parametrow_szablonu_strony[5])then tablica_danych_parametrow_szablonu_strony[5]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[5];
		if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
		tablica_danych_parametrow_szablonu_strony_numer_kod.generalna_nazwa_strony=pelna_nazwa_szablonu;
	end;
	return pelna_nazwa_szablonu;
end;
p["PełnaNazwaStronyWywołańSzablonowych"]=function(nazwa_szablonu,klucz_przestrzeni,klucz_projektu,kod_jezyka,kod_projektu)
	if(not nazwa_szablonu)then return;end;
	local nazwy_modul=require("Module:Nazwy");
    local nazwa_przestrzeni_szablonu=nazwy_modul["NAZWAPRZESTRZENI"]{nazwa=nazwa_szablonu,["klucz projektu"]=klucz_projektu,["kod języka"]=kod_jezyka,["kod_projektu"]=kod_projektu,};
    local klucz_przestrzeni_niekanoniczna;
    local wiki_modul=require("Module:Wiki");
    local czy_biezaca=wiki_modul["CzyBieżącaWiki"]{["klucz projektu"]=klucz_projektu,["kod języka"]=kod_jezyka,["kod projektu"]=kod_projektu,};
    if(czy_biezaca)then
    	klucz_przestrzeni_niekanoniczna=nazwy_modul.Np{nazwa=klucz_przestrzeni,};
    else
    	klucz_przestrzeni_niekanoniczna=nazwy_modul.NpDane{nazwa=klucz_przestrzeni,["klucz projektu"]=klucz_projektu,["kod języka"]=kod_jezyka,["kod_projektu"]=kod_projektu,};
    end;
    local pelna_nazwa_szablonu;
    local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
    if(nazwa_przestrzeni_szablonu==nazwy_np_modul.Main)then
    	pelna_nazwa_szablonu=((klucz_przestrzeni~="")and (klucz_przestrzeni..":") or "")..nazwa_szablonu;
    elseif(((klucz_przestrzeni=="MediaWiki")or(klucz_przestrzeni=="Module"))and(nazwa_przestrzeni_szablonu~=klucz_przestrzeni_niekanoniczna))then
    	pelna_nazwa_szablonu=((klucz_przestrzeni~="")and (klucz_przestrzeni..":") or "")..nazwa_szablonu;
    else
    	pelna_nazwa_szablonu=nazwa_szablonu;
    end;
    pelna_nazwa_szablonu=nazwy_modul["PEŁNANAZWASTRONY"]{nazwa=pelna_nazwa_szablonu,["klucz projektu"]=klucz_projektu,["kod języka"]=kod_jezyka,["kod_projektu"]=kod_projektu,};
	return pelna_nazwa_szablonu;
end;
p["NazwaSzablonuWywołania"]=function(szablon,__FUNKCJA,__FUNKCJA2,tablica_danych_parametrow_szablonu_strony,kod)
	if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[4];
		if(tablica_danych_parametrow_szablonu_strony_numer)then
			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
			if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
				return tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_strony,tablica_danych_parametrow_szablonu_strony_numer_kod.tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony_numer_kod.czy_z_parametrami;
			end;
		end;
	end;
	local czy_z_parametrami;
	local czy_szablon,zawartosc=mw.ustring.match(szablon,"^{{%s*([^{}|]-)%s*|([^{}]*)}}$");
    if(not czy_szablon or not zawartosc)then 
    	czy_szablon=mw.ustring.match(szablon,"^{{%s*([^{}|]-)%s*}}$");
    	if(not czy_szablon)then return;end;
    	czy_z_parametrami=false;
    else
    	czy_z_parametrami=true;
    end;
    --czy_szablon=__FUNKCJA and (__FUNKCJA(czy_szablon) or czy_szablon) or czy_szablon;
    local czy_szablon,tabela_modyfikatorow=p["UstalanieNazwyWywołania"](czy_szablon,__FUNKCJA,__FUNKCJA2);
    local nazwa_strony=p["SzablonowaNazwaStrony"](czy_szablon);
    ----
    if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		if(not tablica_danych_parametrow_szablonu_strony[4])then tablica_danych_parametrow_szablonu_strony[4]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[4];
		if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
		tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_strony=nazwa_strony;
		tablica_danych_parametrow_szablonu_strony_numer_kod.tabela_modyfikatorow=tabela_modyfikatorow;
		tablica_danych_parametrow_szablonu_strony_numer_kod.czy_z_parametrami=czy_z_parametrami;
	end;
	return nazwa_strony,tabela_modyfikatorow,czy_z_parametrami;
end;
function p.TablicaTransportuSzablonowe(self)
	return self;
end;
p["ParsowanieWywołaniaSzablonu"] = function(wywolanie_szablonu,trimuj_numerowane,__FUNKCJA,__FUNKCJA2,tablica_danych_parametrow_szablonu_strony,kod)
   local nazwa_parsowania=nil;local modyfikatory_parsowania=nil; 
   if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[1];
		if(tablica_danych_parametrow_szablonu_strony_numer)then
			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
			if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
				if((tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_szablonu)and(tablica_danych_parametrow_szablonu_strony_numer_kod.tabela_modyfikatorow))then
					if(tablica_danych_parametrow_szablonu_strony_numer_kod.parametry)then
						return tablica_danych_parametrow_szablonu_strony_numer_kod.parametry,tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_szablonu,tablica_danych_parametrow_szablonu_strony_numer_kod.tabela_modyfikatorow;
					end;
					nazwa_parsowania=tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_szablonu;
					modyfikatory_parsowania=tablica_danych_parametrow_szablonu_strony_numer_kod.tabela_modyfikatorow;
				end;
			end;
		end;
	end;
   ----
   local function NazwaSzablonu(nazwa_szablonu)
   	  if((not nazwa_parsowania)or(not modyfikatory_parsowania))then
   			local nazwa_szablonu_ostateczna,tabela_modyfikatorow_ostateczna=p["UstalanieNazwyWywołania"](nazwa_szablonu,__FUNKCJA,__FUNKCJA2);
   			nazwa_szablonu_ostateczna=p["SzablonowaNazwaStrony"](nazwa_szablonu_ostateczna);
   			return nazwa_szablonu_ostateczna,tabela_modyfikatorow_ostateczna;
   	  else
   	  		return nazwa_parsowania,modyfikatory_parsowania;
   	  end;
   end;
   local wywolanie_bez_parametrow=mw.ustring.match(wywolanie_szablonu,"^{{[^|]-}}$");
   if(not wywolanie_bez_parametrow)then 
   		local nazwa_szablonu=mw.ustring.match(wywolanie_szablonu,"^{{%s*([^|]-)%s*|.-}}$");
   		if(nazwa_szablonu)then
		      local nazwa_szablonu,tabela_modyfikatorow=NazwaSzablonu(nazwa_szablonu);
   	  		  local parametry_wywolania_szablonu=mw.ustring.match(wywolanie_szablonu,"^{{[^|]*|(.*)}}$");
   	  		  local tabela_parametrow_szablonu={};
   	    	  tabela_parametrow_szablonu=ParametrySzablonu(parametry_wywolania_szablonu,tabela_parametrow_szablonu,trimuj_numerowane);
   	    	  ----
   	    	  if((tablica_danych_parametrow_szablonu_strony)and(kod))then
   	    	  		if(not tablica_danych_parametrow_szablonu_strony[1])then tablica_danych_parametrow_szablonu_strony[1]={};end;
   	    	  		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[1];
   	    			tablica_danych_parametrow_szablonu_strony_numer[kod]={};
   	    			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
   	    			tablica_danych_parametrow_szablonu_strony_numer_kod.parametry=tabela_parametrow_szablonu;
   	    			tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_szablonu=nazwa_parsowania or nazwa_szablonu;
   	    			tablica_danych_parametrow_szablonu_strony_numer_kod.tabela_modyfikatorow=modyfikatory_parsowania or tabela_modyfikatorow;
   	    	  end;
   	    	  ----
   	    	  return tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow;
   		else return nil;end;
   	else
   	  	local nazwa_szablonu=mw.text.trim(mw.ustring.match(wywolanie_szablonu,"^{{%s*([^{}|]-)%s*}}$"));
   	  	if(nazwa_szablonu)then
   	  		 local nazwa_szablonu,tabela_modyfikatorow=NazwaSzablonu(nazwa_szablonu);
   	  		 local tabela_parametrow_szablonu={};
   	  		 ----
   	    	  if((tablica_danych_parametrow_szablonu_strony)and(kod))then
   	    	  		if(not tablica_danych_parametrow_szablonu_strony[1])then tablica_danych_parametrow_szablonu_strony[1]={};end;
   	    	  		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[1];
   	    			tablica_danych_parametrow_szablonu_strony_numer[kod]={};
   	    			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
   	    			tablica_danych_parametrow_szablonu_strony_numer_kod.parametry=tabela_parametrow_szablonu;
   	    			tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_szablonu=nazwa_parsowania or nazwa_szablonu;
   	    			tablica_danych_parametrow_szablonu_strony_numer_kod.tabela_modyfikatorow=modyfikatory_parsowania or tabela_modyfikatorow;
   	    	  end;
   	  		 ----
   	  	     return tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow;
   	  	else return nil;end;
   end;
end;
function ParametrySzablonu(parametry_wywolania_szablonu,parametry_szablonu,trimuj_numerowane)
  local kawalek_wywolania,dalszy_kawalek_wywolania=mw.ustring.match(parametry_wywolania_szablonu,"^([^|]*)|(.*)$");
  if(not kawalek_wywolania)then
  	  kawalek_wywolania=parametry_wywolania_szablonu;
  end;
  if(not dalszy_kawalek_wywolania)then
  	  ZbierzParametrSzablonu(parametry_szablonu,kawalek_wywolania,trimuj_numerowane);
  	  return parametry_szablonu;
  end;
  if(kawalek_wywolania)then
  	 ZbierzParametrSzablonu(parametry_szablonu,kawalek_wywolania,trimuj_numerowane);
  	 return ParametrySzablonu(dalszy_kawalek_wywolania,parametry_szablonu,trimuj_numerowane);
  end;
  return nil;
end;
function ZbierzParametrSzablonu(tworzona_tabela, kawalek_wywolania,trimuj_numerowane)
   local kawalek_wywolania_element_nienazwany=mw.ustring.match(kawalek_wywolania.."\n","^([^|=]-)$");
   if(kawalek_wywolania_element_nienazwany)then
	  tworzona_tabela[#tworzona_tabela+1]=((trimuj_numerowane) and (mw.text.trim(kawalek_wywolania_element_nienazwany)) or kawalek_wywolania_element_nienazwany);
	  return tworzona_tabela;
   else
	 local kawalek_wywolania_klucz,kawalek_wywolania_wartosc=mw.ustring.match(kawalek_wywolania,"^%s*([^|=]-)%s*=%s*([^|]-)%s*$");
	 if((kawalek_wywolania_klucz)and(kawalek_wywolania_wartosc))then
		if(not mw.ustring.match(kawalek_wywolania_klucz,"^%s*%d+%s*$"))then
		   tworzona_tabela[mw.text.trim(kawalek_wywolania_klucz)]=mw.text.trim(kawalek_wywolania_wartosc);
		   return tworzona_tabela;
		else
		   tworzona_tabela[tonumber(mw.text.trim(kawalek_wywolania_klucz))]=mw.text.trim(kawalek_wywolania_wartosc);
		   return tworzona_tabela;
		end;
	 else
	 	return nil;
     end;
   end;
 return nil;
end;
function p.WydzielanieOpcjiModyfikatorowych(pole_nazwy)
	local szablonowe_dane_modul=mw.loadData("Module:Szablonowe/dane");
	local tab_modyfikatory=szablonowe_dane_modul.tablica_elementowe_modyfikatory_szablonowe;
	local modyfikatory="";
	local tab_mod=nil;
	local function PojedynczeModyfikatory(pole,modyfikatory)
		for modyfikator,tab in pairs(tab_modyfikatory) do
			local modyfikator_uzyty,pole_dalej=mw.ustring.match(pole,"^("..tab[1]..")(.*)$");
			if(modyfikator_uzyty)then
				if(not tab_mod)then tab_mod={};end;
				if(tab_mod[modyfikator])then
					return pole,modyfikatory;
				end;
				tab_mod[modyfikator]=true;
				modyfikatory=modyfikatory..modyfikator_uzyty;
				return PojedynczeModyfikatory(pole_dalej,modyfikatory)
			end;
		end;
		return pole,modyfikatory;
	end;
	local pole_ostateczne,modyfikatory_ostateczne=PojedynczeModyfikatory(pole_nazwy,modyfikatory);
	return pole_ostateczne,modyfikatory_ostateczne,tab_mod;
end;
function p.CzyModyfikatoryInstrukcjiWarunkowychSzablonowych(tabela_modyfikatorow,nazwa_szablonu,tabela_parametrow_szablonu)
	if(tabela_modyfikatorow)then
    	if((tabela_modyfikatorow["#if:"])
    		or(tabela_modyfikatorow["#ifeq:"])
    			or(tabela_modyfikatorow["#ifexpr:"])
    				or(tabela_modyfikatorow["#expr:"])
    			    	or(tabela_modyfikatorow["#iferror:"])
    			    		or(tabela_modyfikatorow["#ifexist:"])
    			    				or(tabela_modyfikatorow["#switch:"])
    	)then
    		return true;
    	end;
	end;
end;
function p.CzyModyfikatoryCharakterystyczneSzablonowe(tabela_modyfikatorow,nazwa_szablonu,tabela_parametrow_szablonu)
	if(tabela_modyfikatorow)then
		if((tabela_modyfikatorow["#property:"])
			or(tabela_modyfikatorow["#tag:"])
		)then
			return true;
		end;
	end;
end;
function p.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow,nazwa_szablonu,tabela_parametrow_szablonu,tablica_danych_parametrow_szablonu_strony,kod)
	if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[2];
		if(tablica_danych_parametrow_szablonu_strony_numer)then
			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
			if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
				return tablica_danych_parametrow_szablonu_strony_numer_kod.czy_normalny_szablon;
			end;
		end;
	end;
	local function RozpatrywanieSzablonowe()
		if(tabela_modyfikatorow)then
    		if((tabela_modyfikatorow["int:"])
    			or(tabela_modyfikatorow["#if:"])
    				or(tabela_modyfikatorow["#ifeq:"])
    				or(tabela_modyfikatorow["#ifexpr:"])
	    				or(tabela_modyfikatorow["#expr:"])
    				    	or(tabela_modyfikatorow["#iferror:"])
    				    		or(tabela_modyfikatorow["#ifexist:"])
    				    			or(tabela_modyfikatorow["#tag:"])
    				    				or(tabela_modyfikatorow["#switch:"])
    			    	    				or(tabela_modyfikatorow["#property:"])
    			        						or(tabela_modyfikatorow["#invoke:"])
    			        						 or(tabela_modyfikatorow["gender:"])
    		)then
    			return false;
    		end;
		end;
		if((nazwa_szablonu)and(nazwa_szablonu~=""))then
			local parametry_modul=require("Module:Parametry");
			if((parametry_modul.TypeBoolean(tabela_parametrow_szablonu))and(tabela_parametrow_szablonu))then return true;end;
			if(tabela_parametrow_szablonu)then
					local parametry_modul=require("Module:Parametry");
		    		local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tabela_parametrow_szablonu);
    				if(czy_nie_brak_parametrow)then return true;end;
    		end;
			return ((not mw.ustring.match(nazwa_szablonu,"^[%s_]*#[%s_]*%a+[%s_]*:")) and true or false);
		end;
		return true;
	end;
	local wynik=RozpatrywanieSzablonowe();
	if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		if(not tablica_danych_parametrow_szablonu_strony[2])then tablica_danych_parametrow_szablonu_strony[2]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[2];
		if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
		tablica_danych_parametrow_szablonu_strony_numer_kod.czy_normalny_szablon=wynik;
	end;
	return wynik;
end;
function p.KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,trimuj_numerowane)
	local parametry_modul=require("Module:Parametry");
	local tablica_obiektow_strony_danych_kodow_specjalnych_modul={};
	local tab_grupa={};
 	local math_numer=0;local licznik_linkz=1;
 	tekst_rozwiniety_calego_artykulu=p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
	 	if(obiekt=="SZABLON")then
 			local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=p["ParsowanieWywołaniaSzablonu"](szablon,trimuj_numerowane,nil,nil,tablica_danych_parametrow_szablonu_strony,kod);
 			if(p.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow,nazwa_szablonu,tabela_parametrow_szablonu))then
 				if(nazwa_szablonu=="R")then
 					local grupa="";
 					tab_grupa[grupa]=(tab_grupa[grupa] or 0)+1;
 					-----
 					if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa]={};end;
 					if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa][tab_grupa[grupa]])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa][tab_grupa[grupa]]=szablon;end;
 					-----
 					return p.NormaKoduKodowaniaTekstu("REF"..grupa,tab_grupa[grupa]);
 				elseif(nazwa_szablonu=="U")then
 					local grupa="uwaga";
 					tab_grupa[grupa]=(tab_grupa[grupa] or 0)+1;
 					----
 					if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa]={};end;
 					if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa][tab_grupa[grupa]])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa][tab_grupa[grupa]]=szablon;end;
 					-----
 					return p.NormaKoduKodowaniaTekstu("REF"..grupa,tab_grupa[grupa]);
 				elseif(nazwa_szablonu=="Ref")then
 					local grupa=tabela_parametrow_szablonu["grupa"] or "";
 					tab_grupa[grupa]=(tab_grupa[grupa] or 0)+1;
 					----
 					if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa]={};end;
 					if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa][tab_grupa[grupa]])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa][tab_grupa[grupa]]=szablon;end;
 					----
 					return p.NormaKoduKodowaniaTekstu("REF"..grupa,tab_grupa[grupa]);
 				end;
 			end;
 		elseif(obiekt=="ZNACZNIK")then
 			local nazwa,zawartosc,tab_atrybuty=p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_danych_parametrow_szablonu_strony,kod);
 			if(nazwa=="ref")then
 				tab_atrybuty=tab_atrybuty or {};
 				local grupa=tab_atrybuty["group"];
 				grupa=parametry_modul.TypeString(grupa) and grupa or "";
 				tab_grupa[grupa]=(tab_grupa[grupa] or 0)+1;
 				----
 				if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa]={};end;
 				if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa][tab_grupa[grupa]])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["REF"..grupa][tab_grupa[grupa]]=szablon;end;
 				----
 				return p.NormaKoduKodowaniaTekstu("REF"..grupa,tab_grupa[grupa]);
 			end;
 		elseif(obiekt=="MATH")then
 			math_numer=math_numer+1;
 			 ----
 			if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["POSTMATH"])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["POSTMATH"]={};end;
 			if(not tablica_obiektow_strony_danych_kodow_specjalnych_modul["POSTMATH"][math_numer])then tablica_obiektow_strony_danych_kodow_specjalnych_modul["POSTMATH"][math_numer]=szablon;end;
 			----
 			return p.NormaKoduKodowaniaTekstu("POSTMATH",math_numer);
 		end;
 		return nil,true;--szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod);
 	end,nil,nil,nil,function(szablon,obiekt,kod,poziom_numeracji,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)
		if(obiekt=="LINKZ")then
			local url=mw.ustring.match(szablon,"^%[(%S+)%s*%]$")
			if(url)then
				local szablon="["..url.." &#91;"..licznik_linkz.."&#93;]";
				tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
				licznik_linkz=licznik_linkz+1;
				return szablon;
			end;
		end;
		return szablon;
	end);
 	return tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_danych_kodow_specjalnych_modul;
end;
function p.KodowanieNiezakodowanychNormKodowychReferencjiTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,trimuj_numerowane,__FUNKCJA_INNE_OPERACJE,__FUNKCJA_INNE_OPERACJE2,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_CZY_W_LINKU)
	local parametry_modul=require("Module:parametry");
	local tab_grupa={};local licznik_linkz=1;
	local tab_usun;
	tekst_rozwiniety_calego_artykulu,tab_usun=p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
		if(obiekt=="SZABLON")then
 			local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=p["ParsowanieWywołaniaSzablonu"](szablon,trimuj_numerowane,nil,nil,tablica_danych_parametrow_szablonu_strony,kod);
 			if(p.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow,nazwa_szablonu,tabela_parametrow_szablonu,tablica_danych_parametrow_szablonu_strony,kod))then
 				if(nazwa_szablonu=="R")then
 					local grupa="";
 					tab_grupa[grupa]=(tab_grupa[grupa] or 0)+1;
 					-----
 					return "&#91;"..tab_grupa[grupa].."&#93;"
 				elseif(nazwa_szablonu=="U")then
 					local grupa="uwaga";
 					tab_grupa[grupa]=(tab_grupa[grupa] or 0)+1;
 					-----
 					return "&#91;"..grupa.." "..tab_grupa[grupa].."&#93;";
 				elseif(nazwa_szablonu=="Ref")then
 					local grupa=tabela_parametrow_szablonu["grupa"] or "";
 					tab_grupa[grupa]=(tab_grupa[grupa] or 0)+1;
 					----
 					return "&#91;"..((grupa~="")and(grupa.." ") or "")..tab_grupa[grupa].."&#93;";
 				else
 					if(__FUNKCJA_INNE_OPERACJE)then
 						return __FUNKCJA_INNE_OPERACJE(szablon,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow);
 					end;
 				end;
 			end;
 		elseif(obiekt=="ZNACZNIK")then
 			local nazwa,zawartosc,tab_atrybuty=p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_danych_parametrow_szablonu_strony,kod);
 			if(nazwa=="ref")then
 				tab_atrybuty=tab_atrybuty or {};
 				local grupa=tab_atrybuty["group"];
 				grupa=parametry_modul.TypeString(grupa) and grupa or "";
 				tab_grupa[grupa]=(tab_grupa[grupa] or 0)+1;
 				----
 				return "&#91;"..((grupa~="")and(grupa.." ") or "")..tab_grupa[grupa].."&#93;";
 			else
 				 if(__FUNKCJA_INNE_OPERACJE)then
 					return __FUNKCJA_INNE_OPERACJE(szablon,obiekt,kod,nazwa,zawartosc,tab_atrybuty);
 				end;
 			end;
 		else
 			 if(__FUNKCJA_INNE_OPERACJE)then
 				return __FUNKCJA_INNE_OPERACJE(szablon,obiekt,kod,nazwa,zawartosc,tab_atrybuty);
 			end;
 		end;
 		return nil,true;--szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod);
	end,nil,nil,nil,function(szablon,obiekt,kod,poziom_numeracji,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)
		if(obiekt=="LINKZ")then
			local url=mw.ustring.match(szablon,"^%[(%S+)%s*%]$")
			if(url)then
				local szablon="["..url.." &#91;"..licznik_linkz.."&#93;]";
				tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
				licznik_linkz=licznik_linkz+1;
				return szablon;
			end;
		end;
		if(__FUNKCJA_INNE_OPERACJE2)then
			return __FUNKCJA_INNE_OPERACJE2(szablon,obiekt,kod,poziom_numeracji,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul);
		end;
		return szablon;
	end,nil,__FUNKCJA_OPERACJE_USUWANIE_PARAMETROWE,__FUNKCJA_OPERACJE_CZY_W_LINKU);
	return tekst_rozwiniety_calego_artykulu,tab_usun;
end;
function p.OdkodowanieZakodowanychNormKodowychNieschematycznychRzeczy(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul)
	local tablica_kodow={};local tak=false;
	local iterator=p.IteratorSzablonowyZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
	local szablonowe_dane_modul=mw.loadData("Module:Szablonowe/dane");
	local tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki=szablonowe_dane_modul.tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki;
	for szablon,obiekt,kod in iterator do
		if(tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki[obiekt])then
			local iter=mw.ustring.gmatch(szablon,p.NormaWzoruKodowaniaTekstu());
			for obiekt,kod in iter do
				if(not tablica_kodow[obiekt])then tablica_kodow[obiekt]={};end;
				tablica_kodow[obiekt][kod]=true;
				tak=true;
			end;
		end;
	end;
	--if(not tak)then return tekst_rozwiniety_calego_artykulu;end;
	local html_modul=require("Module:Html");
	--local frame=mw.getCurrentFrame();
	tekst_rozwiniety_calego_artykulu=p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,function(szablon2,obiekt2,kod2)
		if((tablica_kodow)and(tablica_kodow[obiekt2])and(tablica_kodow[obiekt2][kod2]))then
			if(mw.ustring.gmatch(szablon2,p.NormaWzoruKodowaniaTekstu()))then
				szablon2=p.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon2,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
				return szablon2;
			end;
		elseif(obiekt2=="LINKW")then
			local szablon_rozwiniete=p.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon2,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
			--szablon_rozwiniete=frame:preprocess(szablon_rozwiniete);
			local czy_nie_linkw=mw.ustring.match(szablon_rozwiniete,"^%[%[.-[%[%]].-%]%]$")
			                         or mw.ustring.match(szablon_rozwiniete,"^%[%[%s*%]%]$");
			if(czy_nie_linkw)then return szablon2;end;
		elseif(obiekt2=="LINKZ")then
			local szablon_rozwiniete=p.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon2,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
			--szablon_rozwiniete=frame:preprocess(szablon_rozwiniete);
			local czy_nie_linkz=mw.ustring.match(szablon_rozwiniete,"^%[(.-[%[%]].-)%]$");
			if(czy_nie_linkz)then return szablon2;end;
			local szablon_linkz=mw.ustring.match(szablon_rozwiniete,"^%[(%S+).-%]$");
			if(szablon_linkz)then
				local czy_linkz=html_modul["SprawdźURL"](szablon_linkz);
				if(not czy_linkz)then return szablon2;end;
			else
				return szablon2;
			end;
		end;
		return nil,true;
	end);
	return tekst_rozwiniety_calego_artykulu;
end;
p["PokazanieWywołaniaSzablonu"]=function(szablon, args)
	local result = {};
	table.insert(result, mw.text.nowiki("{{"));
	if mw.isSubsting() then
		table.insert(result, "subst:");
	end;
	
	table.insert(result, szablon);

	if args then
		for k, v in pairs(args) do
			if (type(k)~="number")then
				table.insert(result, "|");
				table.insert(result, tostring(k));
				table.insert(result, "=");
				table.insert(result, mw.text.nowiki(v));
			else
				table.insert(result, "|");
				table.insert(result, mw.text.nowiki(v));
			end;
		end;
	end;

	table.insert(result, mw.text.nowiki("}}"));
	return table.concat(result);
end;
function p.KodSymbolicznySzablonu(nazwa,args,modyfikatory,jako_szablony)
	local result={};
    table.insert(result,((jako_szablony) and "{{((}}" or "{{"));
    for name,_ in pairs(modyfikatory or {})do
    	table.insert(result,name);
    end;
    table.insert(result,nazwa);
    for name,value in pairs(args or {})do
       table.insert(result,((jako_szablony) and "{{!}}" or "|"));
       table.insert(result,name..((jako_szablony) and "{{=}}" or "=")..value);
    end;
	table.insert(result,((jako_szablony) and "{{))}}" or "}}"));
	return table.concat(result,"");
end;
function p.NazwaSzablonu(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa=PobierzParametr(1) or PobierzParametr("nazwa");
    local nazwy_modul=require("Module:Nazwy");
	local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa);
	local nazwy_np_modul=mw.loadData("Module:Nazwy/Np")
	if(nazwa_przestrzeni==nazwy_np_modul.Template)then
	   return nazwy_modul["NAZWASTRONY"](nazwa);
	elseif(nazwa_przestrzeni==nazwy_np_modul.Main)then
		return ":"..nazwy_modul["PEŁNANAZWASTRONY"](nazwa);
	else
		return nazwy_modul["PEŁNANAZWASTRONY"](nazwa);
	end;
end;
local function WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeFormZnacznikowych(znacznik,tablica_danych_parametrow_szablonu_strony,kod,liczba_obiektu)
	local liczba_obiektu=liczba_obiektu or 100;
	if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[liczba_obiektu];
		if(tablica_danych_parametrow_szablonu_strony_numer)then
			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
			if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
				return tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_znacznika,tablica_danych_parametrow_szablonu_strony_numer_kod.istota_znacznika,tablica_danych_parametrow_szablonu_strony_numer_kod.atrybuty_znacznika;
			end;
		end;
	end;
	local nazwa,zawartosc=mw.ustring.match(znacznik,"^%s*<(%a+)%s*>(.-)</(%1)%s*>%s*$");
	if((nazwa)and(zawartosc))then 
		if((tablica_danych_parametrow_szablonu_strony)and(kod))then
			if(not tablica_danych_parametrow_szablonu_strony[liczba_obiektu])then tablica_danych_parametrow_szablonu_strony[liczba_obiektu]={};end;
			local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[liczba_obiektu];
			if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
			tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_znacznika=nazwa;
			tablica_danych_parametrow_szablonu_strony_numer_kod.istota_znacznika=zawartosc;
			tablica_danych_parametrow_szablonu_strony_numer_kod.atrybuty_znacznika=nil;
		end;
		return mw.ustring.lower(nazwa),zawartosc,nil;
	end;
	----
	local nazwa=mw.ustring.match(znacznik,"^%s*<(%a+)%s*/?%s*>%s*$");
	if(nazwa)then 
		if((tablica_danych_parametrow_szablonu_strony)and(kod))then
			if(not tablica_danych_parametrow_szablonu_strony[liczba_obiektu])then tablica_danych_parametrow_szablonu_strony[liczba_obiektu]={};end;
			local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[liczba_obiektu];
			if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
			tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_znacznika=nazwa;
			tablica_danych_parametrow_szablonu_strony_numer_kod.istota_znacznika=nil;
			tablica_danych_parametrow_szablonu_strony_numer_kod.atrybuty_znacznika=nil;
		end;
		return mw.ustring.lower(nazwa),nil,nil;
	end;
	----
	local nazwa,atrybuty,zawartosc=mw.ustring.match(znacznik,"^%s*<(%a+)%s+([^<>\"]-\".-\"[^<>\"]-)%s*>(.-)</(%1)%s*>%s*$");
	----
	if((not nazwa)or(not atrybuty)or(not zawartosc))then
		nazwa,atrybuty,zawartosc=mw.ustring.match(znacznik,"^%s*<(%a+)%s+([^<>]-)%s*>(.-)</(%a+)%s*>%s*$");
		if((not nazwa)or(not atrybuty) or (not zawartosc))then 
			nazwa,atrybuty=mw.ustring.match(znacznik,"^%s*<(%a+)%s+([^<>]-)%s*/?%s*>%s*$");
			if((not nazwa)or(not atrybuty))then 
				if((tablica_danych_parametrow_szablonu_strony)and(kod))then
					if(not tablica_danych_parametrow_szablonu_strony[liczba_obiektu])then tablica_danych_parametrow_szablonu_strony[liczba_obiektu]={};end;
					local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[liczba_obiektu];
					if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
					local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
					tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_znacznika=nil;
					tablica_danych_parametrow_szablonu_strony_numer_kod.istota_znacznika=nil;
					tablica_danych_parametrow_szablonu_strony_numer_kod.atrybuty_znacznika=nil;
				end;
				return nil,nil,nil;
			end;
		end;
	end;
	-----
	local techniczne_modul=require("Module:Techniczne");
	local tab={};
	atrybuty=" "..atrybuty.." ";
	while(true)do
		local szablon,name,value=mw.ustring.match(atrybuty,"%s+((%a+)%s*=%s*[^\\]?\"(.-[^\\]?)\")%s+");
		if((not szablon)or(not name)or(not value))then break;end;
		tab[name]=value;
		szablon="%s+"..techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](szablon).."%s+";
		atrybuty=mw.ustring.gsub(atrybuty,szablon," ");
	end;
	while(true)do
		local szablon,name,value=mw.ustring.match(atrybuty,"%s+((%a+)%s*=%s*(%a+))%s+");
		if((not szablon)or(not name)or(not value))then break;end;
		tab[name]=value;
		szablon="%s+"..techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](szablon).."%s+";
		atrybuty=mw.ustring.gsub(atrybuty,szablon," ");
	end;
	while(true)do
		local name=mw.ustring.match(atrybuty,"%s+(%a+)%s+");
		if(not name)then break;end;
		tab[name]="true";
		name="%s+"..techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](name).."%s+";
		atrybuty=mw.ustring.gsub(atrybuty,name," ");
	end;
	if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		if(not tablica_danych_parametrow_szablonu_strony[liczba_obiektu])then tablica_danych_parametrow_szablonu_strony[liczba_obiektu]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[liczba_obiektu];
		if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
		tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_znacznika=nazwa;
		tablica_danych_parametrow_szablonu_strony_numer_kod.istota_znacznika=zawartosc;
		tablica_danych_parametrow_szablonu_strony_numer_kod.atrybuty_znacznika=tab;
	end;
	return mw.ustring.lower(nazwa),zawartosc,tab;
end;
function p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(znacznik,tablica_danych_parametrow_szablonu_strony,kod)
	return WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeFormZnacznikowych(znacznik,tablica_danych_parametrow_szablonu_strony,kod,100);
end;
function p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguMath(znacznik,tablica_danych_parametrow_szablonu_strony,kod)
	return WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeFormZnacznikowych(znacznik,tablica_danych_parametrow_szablonu_strony,kod,101);
end;
function p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguPre(znacznik,tablica_danych_parametrow_szablonu_strony,kod)
	return WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeFormZnacznikowych(znacznik,tablica_danych_parametrow_szablonu_strony,kod,102);
end;
function p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguSyntaxHighLight(znacznik,tablica_danych_parametrow_szablonu_strony,kod)
	return WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeFormZnacznikowych(znacznik,tablica_danych_parametrow_szablonu_strony,kod,103);
end;
function p.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguNowiki(znacznik,tablica_danych_parametrow_szablonu_strony,kod)
	return WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeFormZnacznikowych(znacznik,tablica_danych_parametrow_szablonu_strony,kod,104);
end;
function p.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,__FUNKCJA1,__FUNKCJA2)
	----
	local tablica_danych_parametrow_szablonu_strony_numer=kod and tablica_danych_parametrow_szablonu_strony and tablica_danych_parametrow_szablonu_strony[1];
	local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer 
		                                                          and tablica_danych_parametrow_szablonu_strony_numer[kod];
	local tab_pop=tablica_danych_parametrow_szablonu_strony_numer_kod
	                     and tablica_danych_parametrow_szablonu_strony_numer_kod.nazwa_szablonu;
	                       --and tablica_danych_parametrow_szablonu_strony_numer_kod.parametry;
	----                   
	local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=p["ParsowanieWywołaniaSzablonu"](szablon,nil,nil,nil,tablica_danych_parametrow_szablonu_strony,kod);
	if((__FUNKCJA1)and(p.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow,nazwa_szablonu,tabela_parametrow_szablonu,tablica_danych_parametrow_szablonu_strony,kod)))then
	    ----
		local techniczne_modul=require("Module:Techniczne");
		if(not tab_pop)then
			if((kod)and(tablica_danych_parametrow_szablonu_strony))then
				local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[-1];
				local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer 
				                                                           and tablica_danych_parametrow_szablonu_strony_numer[kod];
				if(tablica_danych_parametrow_szablonu_strony_numer_kod
				     and tablica_danych_parametrow_szablonu_strony_numer_kod.adres_strony
				)then
					tablica_danych_parametrow_szablonu_strony_numer[kod]=nil;
				end;
				local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[3];
				local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer
				                                                            and tablica_danych_parametrow_szablonu_strony_numer[kod];
				if(tablica_danych_parametrow_szablonu_strony_numer_kod
					  and tablica_danych_parametrow_szablonu_strony_numer_kod.szablonowa_nazwa_strony
				)then
					tablica_danych_parametrow_szablonu_strony_numer[kod]=nil;
				end;
			end;
		end;
		nazwa_szablonu=pelna_nazwa_spisu_tresci_szablonowa and techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]({[1]=nazwa_szablonu,[2]=pelna_nazwa_spisu_tresci_szablonowa,},tablica_danych_parametrow_szablonu_strony,kod) or nazwa_szablonu;
   		nazwa_szablonu=p["SzablonowaNazwaStrony"](nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod);
   		return __FUNKCJA1(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow);
	elseif((__FUNKCJA2)and(tabela_modyfikatorow["#tag:"]))then
		nazwa_szablonu=mw.getContentLanguage():lc(nazwa_szablonu);
   		return __FUNKCJA2(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow);
	end;
end;
p["SprawdzanieCzyWystępujeDanySzablonWTekście"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local tekst=PobierzParametr(1) or PobierzParametr("tekst");
	local pattern=PobierzParametr(2) or PobierzParametr("wzór");
	local szablon=PobierzParametr(3) or PobierzParametr("szablon");
	local czy_z_parametrami=PobierzParametr(4) or PobierzParametr("z parametrami");
	----
	local parametry_modul=require("Module:Parametry");
	czy_z_parametrami=((parametry_modul.TypeTable(czy_z_parametrami))
		                  and czy_z_parametrami 
		                      or (((not parametry_modul.TypeString(czy_z_parametrami))
		                             and(not parametry_modul.TypeNil(czy_z_parametrami))
		                             	 and(not parametry_modul.TypeBoolean(czy_z_parametrami))) 
		                             	    and czy_z_parametrami
		                             	      or (parametry_modul.CzyTak(czy_z_parametrami) and true or false) 
		                         )
		              );
	----
	szablon=parametry_modul["Odstępy"]{[1]=szablon,[2]="tak",};
	szablon=mw.getContentLanguage():ucfirst(szablon);
	----
	local iter=mw.ustring.gmatch(tekst,pattern);
	for nazwa_szablonowa in iter do
		 local czy_szablon,tabela_modyfikatorow=p["UstalanieNazwyWywołania"](nazwa_szablonowa);
		 local nazwa_szablonu=p["SzablonowaNazwaStrony"](czy_szablon);
		 if(p.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow,nazwa_szablonu,czy_z_parametrami))then
		 	if(nazwa_szablonu==szablon)then
		 		return "tak";
		 	end;
		 end;
	end;
	return nil;
end;
return p;