Moduł:Szablonowe

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
 Dokumentacja modułu [stwórz] [odśwież]
local p={};
--zamykanie
p.znak_127=mw.ustring.char(127);
function p.NormaWzoruKodowaniaTekstu(co,numer_szablonu)
	local wzor=p.znak_127.."'\"`UNIQ%-%-"..(co or "(%a+)").."%-"..(numer_szablonu or "(%d+)").."%-QINU`\"'"..p.znak_127;
    return wzor;
end;
function p.NormaKoduKodowaniaTekstu(kod,numer)
	local wikikodnumer=p.znak_127.."'\"`UNIQ--"..kod.."-"..numer.."-QINU`\"'"..p.znak_127;
	return wikikodnumer;
end;
function p.NormaKoduZakodowanegoWikiTekstu(kod,numer)
	local wikikodnumer=p.znak_127.."'"`UNIQ--"..kod.."-"..numer.."-QINU`"'"..p.znak_127;
	return wikikodnumer;
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_obiektow_strony_dany_modul,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA_poczatek,__FUNKCJA_koniec)
	local numer_szablonu;
	local html_modul=require("Module:Html");
	local function InicjujNumeryPoczatkoweObiektowSzablonow()
		if(not __FUNKCJA3)then
			numer_szablonu={};
			numer_szablonu["ŹRÓDŁO"]=1;
			numer_szablonu["GALERIA"]=1;
			numer_szablonu["MAPAOBRAZU"]=1;
			numer_szablonu["SZABLON"]=1;
			numer_szablonu["LINKW"]=1;
			numer_szablonu["LINKZ"]=1;
			numer_szablonu["ZMIENNA"]=1;
			numer_szablonu["NOWIKI"]=1;
			numer_szablonu["MATH"]=1;
			numer_szablonu["PRE"]=1;
			numer_szablonu["INNEPRE"]=1;
			numer_szablonu["ZNACZNIK"]=1;
			numer_szablonu["WIKITABELA"]=1;
		else
			numer_szablonu=__FUNKCJA3(tekst_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul);
		end;
	end;
	local PREWSTAWIAJACA=nil;local czy_wynik=true;
	local function ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,co)
		if(__FUNKCJA2)then 
			local wynik=__FUNKCJA2(szablon,co,numer_szablonu[co or  "SZABLON"],tekst_artykulu,tablica_obiektow_strony_dany_modul,numer_szablonu);
			if(wynik)then
				numer_szablonu[co or  "SZABLON"]=numer_szablonu[co or  "SZABLON"]+1;
				wynik=(czy_wynik and PREWSTAWIAJACA) and PREWSTAWIAJACA(wynik) or wynik;
				return wynik,false;
			end;
		end;
		if(__FUNKCJA)then szablon=__FUNKCJA(szablon,co,numer_szablonu[co or  "SZABLON"]) or szablon; end;
		local kod=p.NormaKoduKodowaniaTekstu(co,numer_szablonu[co or  "SZABLON"]);

    	tablica_obiektow_strony_dany_modul[co or  "SZABLON"][numer_szablonu[co or  "SZABLON"]]=szablon;
    	numer_szablonu[co or  "SZABLON"]=numer_szablonu[co or  "SZABLON"]+1;
    	return kod,true;
	end;
	local function AnalizaObiektowSzablonowegoTekstu(tekst_artykulu)
    	
    	local ile_znacznik_niedomykajacy_1;local ile_znacznik_niedomykajacy_2;
    	
    	local czy_pierwszy_raz=nil;
    	local html_modul=require("Module:Html");
    	local techniczne_modul=require("Module:Techniczne");
    	local tab_licznik_poczatek={};
    	local tab_licznik_koniec={};
    	local tab_element={};
    	local ObiektFun=function(nazwa)
        	if(nazwa=="nowiki")then return "NOWIKI";end;
        	if(nazwa=="pre")then return "PRE";end;
        	if((nazwa=="source")or(nazwa=="syntaxhighlight"))then return "ŹRÓDŁO";end;
        	if(nazwa=="math")then return "MATH";end;
        	if(nazwa=="gallery")then return "GALERIA";end;
        	if(nazwa=="imagemap")then return "MAPAOBRAZU";end;
        	return "ZNACZNIK";
    	end;
    	local INNEPRE=function(tekst_artykulu,czy_poczt)
    		if(not czy_poczt)then
        		tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"^([^%S\n][^\n]*)",function(szablon)
        			return ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,"INNEPRE");
        		end);
        	end;
        	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"\n([^%S\n][^\n]*)",function(szablon)
        		return "\n"..ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,"INNEPRE");
        	end);
        	return tekst_artykulu;
        end;
        local tab_znaczniki={};
    	local tab_numerki={};
    	local function PreprocesorSzablonow(tekst_artykulu)
    		tekst_artykulu,ile_naprawy_znacznikow=mw.ustring.gsub(tekst_artykulu,"(</?%a+%s+)([^<>\"]-\".-\"[^<>\"]-)(/?>)",function(szablon1,szablon2,szablon3)
    			if(not tab_element["ATRYBUTY"])then tab_element["ATRYBUTY"]={};end;
    			tab_element["ATRYBUTY"][#tab_element["ATRYBUTY"]+1]=szablon2;
    			local ile=#tab_element["ATRYBUTY"];
    			szablon2=p.NormaKoduKodowaniaTekstu("ATRYBUTY",ile);
    			return szablon1..szablon2..szablon3;
    		end);
    		--tekst_artykulu,ile_naprawy_znacznikow_4=mw.ustring.gsub(tekst_artykulu,"(</?)(%a+)(%s*[^<>]-%s*/?%s*>)",function(szablon1,szablon2,szablon3)
    		--	szablon2=mw.ustring.lower(szablon2);
    		--	return szablon1..szablon2..szablon3;
    		--end);
    		tekst_artykulu,ile_naprawy_znacznikow_1=mw.ustring.gsub(tekst_artykulu,"(<(/?)([^<>]*)>)",function(szablon,koniec,tekst)
    			if((not mw.ustring.match(tekst,"^%a+$"))and(not mw.ustring.match(tekst,"^%a+%s+.*$")))then
    				if(not tab_element)then tab_element={};end;
    				if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    				table.insert(tab_element["INNE"],"<"..koniec);
    				local ile1=#tab_element["INNE"];
    				table.insert(tab_element["INNE"],">");
    				local ile2=#tab_element["INNE"];
    				return p.NormaKoduKodowaniaTekstu("INNE",ile1)..tekst..p.NormaKoduKodowaniaTekstu("INNE",ile2);
    			end;
    		end);
    		tekst_artykulu,ile_naprawy_znacznikow_2=mw.ustring.gsub(tekst_artykulu,"<(/?)(%a+)([^<>]-%s*)>",function(koniec,nazwa,tekst)
    				-----
    			if(koniec=="")then
    				local nazwa=mw.ustring.lower(nazwa);
    				table.insert(tab_znaczniki,nazwa);
    				local koniec_samozamykajacy=mw.ustring.match(tekst,"^(.-)%s*(/?)%s*$");
    				if(koniec_samozamykajacy=="/")then
    					tab_licznik_koniec[nazwa]=(tab_licznik_koniec[nazwa] or 0)+1;
    				end;
	    			tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1;
    				if(not tab_numerki[nazwa])then tab_numerki[nazwa]={};end;
    				table.insert(tab_numerki[nazwa],tab_licznik_poczatek[nazwa]);
    				local licznik=tab_licznik_poczatek[nazwa];
    				local szablon=nazwa..tekst;
    				if(not tab_element)then tab_element={};end;
    				local typ=ObiektFun(nazwa);
    				local jak=(typ~="ZNACZNIK")and "innebegin" or "begin";
    				if(not tab_element[nazwa..jak])then tab_element[nazwa..jak]={};end;
    				tab_element[nazwa..jak][licznik]=szablon;
    				return "<"..p.NormaKoduKodowaniaTekstu(nazwa..jak,licznik)..">";
    				--return "<"..nazwa..tekst.."#LICZNIK:"..tab_licznik[nazwa]..">";
    			else
    				local nazwa=mw.ustring.lower(nazwa);
    				tab_licznik_koniec[nazwa]=(tab_licznik_koniec[nazwa] or 0)+1;
    				local licznik;
    				if(#tab_znaczniki>0)then
    					if(tab_znaczniki[#tab_znaczniki]~=nazwa)then
    						local koniec=0;
    						for i=#tab_znaczniki-1,1,-1 do
    							if(tab_znaczniki[i]==nazwa)then
    								koniec=i;
    								break;
    							end;
    						end;
							if(koniec>0)then
    							licznik=tab_numerki[nazwa][#tab_numerki[nazwa]];
    							for i=koniec+1,#tab_znaczniki,1 do
    								tab_licznik_koniec[tab_znaczniki[i]]=(tab_licznik_koniec[tab_znaczniki[i]] or 0)+1;
    							end;
    							for i=koniec,#tab_znaczniki,1 do
    								table.remove(tab_numerki[tab_znaczniki[i]]);
    							end;
    							for i=#tab_znaczniki,koniec,-1 do
    								table.remove(tab_znaczniki);
    							end;
    						else
    							tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1;
    							licznik=tab_licznik_poczatek[nazwa];
    						end;
    					else
    						licznik=tab_numerki[nazwa][#tab_numerki[nazwa]];
    						table.remove(tab_numerki[nazwa]);
    						table.remove(tab_znaczniki);
    					end;
    				else
    					tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1;
    					licznik=tab_licznik_koniec[nazwa];
    				end;
    				local szablon=nazwa..tekst;
    				if(not tab_element)then tab_element={};end;
    				local typ=ObiektFun(nazwa);
    				local jak=(typ~="ZNACZNIK")and "inneend" or "end";
    				if(not tab_element[nazwa..jak])then tab_element[nazwa..jak]={};end;
    				tab_element[nazwa..jak][licznik]=szablon;
    				return "</"..p.NormaKoduKodowaniaTekstu(nazwa..jak,licznik)..">";
    				--return "</"..nazwa..tekst.."#LICZNIK:"..licznik..">";
    			end;
    		end);
    		function AnalizujDomykajace(tekst_artykulu,jak)
    			local tekst_artykulu,ile_znacznik_domykajacy=mw.ustring.gsub(tekst_artykulu,"<("..p.NormaWzoruKodowaniaTekstu("(%a+)"..jak.."begin","(%d+)")..")>",function(nazwa_przed_nieodkodowane,obiekt,kod) 
        			local nazwa_przed=p.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element);
        			local nazwa,odstepy,atrybuty,koniec=mw.ustring.match(nazwa_przed,"^(%a+)(%s*)(.-)%s*(/?)%s*$");
        			nazwa=mw.ustring.lower(nazwa);
    				if((koniec=="/")or(nazwa=="br")or(nazwa=="hr")or(nazwa=="templatestyles"))then
    					local szablon="<"..nazwa_przed..">";
    					return ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,ObiektFun(nazwa));
    				end;
    				return nil;
    			end);
    			return tekst_artykulu;
    		end;
    		tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"inne");
    		tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"");
			----    			
    		return tekst_artykulu;
    	end;
    	tekst_artykulu=PreprocesorSzablonow(tekst_artykulu);
    	
    	local NiedokonczoneElementyWikikodu;
        local function Kompilacja(tekst_artykulu)
    		----
    		local ZamianaLINKWNaLINKZ=function(zawartosc)
    			 local czy_url=html_modul["SprawdźURL"](zawartosc);
    			 if(czy_url)then
    			    	local szablon="["..zawartosc.."]";
    			    	return "["..ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,"LINKZ").."]"
    			 else
    			 		local szablon="[["..zawartosc.."]]";
    			    	return ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,"LINKW")
    			 end;
    		end;
    		local function InneElementyWikikodu(tekst_artykulu)
    			local ile_linkw;local ile_linkz;local ile_var;local ile_template;local ile_wikitabela;
    			local function Szablon(szablon,obiekt,czy_linkw)
    			    szablon=p.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element);
    			    if(czy_linkw)then
    			    	local zawartosc=mw.ustring.match(szablon,"^%[%[(.+)%]%]$");
    			    	return ZamianaLINKWNaLINKZ(zawartosc);
    			    else
    					return ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,obiekt)
    				end;
    			end;
    			repeat
    				tekst_artykulu,ile_linkw=mw.ustring.gsub(tekst_artykulu,"(%[%[[^%[%]{}<>]+%]%])",function(szablon) return Szablon(szablon,"LINKW",true);end);
    				tekst_artykulu,ile_linkz=mw.ustring.gsub(tekst_artykulu,"(%[[^%[%]{}<>]+%])",function(szablon) return Szablon(szablon,"LINKZ");end);
    				repeat
        				tekst_artykulu,ile_var=mw.ustring.gsub(tekst_artykulu,"({{{[^%[%]{}<>]-}}})",function(szablon) return Szablon(szablon,"ZMIENNA");end);
        			until (ile_var==0);
        			tekst_artykulu,ile_template=mw.ustring.gsub(tekst_artykulu,"({{[^%[%]{}<>]-}})",function(szablon) return Szablon(szablon,"SZABLON");end);
        			tekst_artykulu,ile_wikitabela=mw.ustring.gsub(tekst_artykulu,"({|[^%[%]{}<>]-|})",function(szablon) return Szablon(szablon,"WIKITABELA");end);
        		until ((ile_linkw==0)and(ile_linkz==0)and(ile_template==0)and(ile_wikitabela==0));
        		return tekst_artykulu;
    		end;
    		NiedokonczoneElementyWikikodu=function(tekst_artykulu)
    			local ile_znacznik_niedomykajacy_1;local ile_znacznik_nieotwierajacy_1;local ile_znacznik_niedomykajacy_2;local ile_znacznik_nieotwierajacy_2;local ile_wikitabela;
    			repeat
    				local function DomykajaceIOdtwierajace(tekst_artykulu,jak)
    					local ile_znacznik_niedomykajacy;local ile_znacznik_nieotwierajacy;
    					tekst_artykulu,ile_znacznik_niedomykajacy=mw.ustring.gsub(tekst_artykulu,"<("..p.NormaWzoruKodowaniaTekstu("(%a+)"..jak.."begin","(%d+)")..")>([^<>{}]-)$",function(nazwa_przed_nieodkodowane,obiekt,kod,zawartosc) 
        					local nazwa_przed=p.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element);
        					zawartosc=INNEPRE(zawartosc,true);
        					zawartosc=p.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element);
        					local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_przed,"^(%a+)(%s*)(.-)%s*$");
        					local szablon="<"..nazwa_przed..">"..zawartosc.."</"..nazwa..">";
        					return ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,"ZNACZNIK");
    					end);
    					tekst_artykulu,ile_znacznik_nieotwierajacy=mw.ustring.gsub(tekst_artykulu,"^([^<>{}]-)</("..p.NormaWzoruKodowaniaTekstu("(%a+)"..jak.."end","(%d+)")..")>",function(zawartosc,nazwa_po_nieodkodowane,obiekt,kod) 
	        				local nazwa_po=p.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_po_nieodkodowane,nil,tab_element);
	        				zawartosc=INNEPRE(zawartosc);
    	    				zawartosc=p.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element);
        					local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_po,"^(%a+)(%s*)(.-)%s*$");
        					local szablon="<"..nazwa..">"..zawartosc.."</"..nazwa_po..">";
        					return ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,"ZNACZNIK");
    					end);
    					return tekst_artykulu,ile_znacznik_niedomykajacy,ile_znacznik_nieotwierajacy;
    				end;
    				tekst_artykulu,ile_znacznik_niedomykajacy_1,ile_znacznik_nieotwierajacy_1=DomykajaceIOdtwierajace(tekst_artykulu,"inne");
    				tekst_artykulu,ile_znacznik_niedomykajacy_2,ile_znacznik_nieotwierajacy_2=DomykajaceIOdtwierajace(tekst_artykulu,"");
        			tekst_artykulu,ile_wikitabela_1=mw.ustring.gsub(tekst_artykulu,"({|[^{}<>]-)$",function(szablon) 
        				szablon=INNEPRE(szablon,true);
        				return ZamienObiektSzablonuKodem(self,szablon.."|}",tablica_obiektow_strony_dany_modul,"WIKITABELA");
        			end);
        			tekst_artykulu,ile_wikitabela_2=mw.ustring.gsub(tekst_artykulu,"^([^{}<>]-|})",function(szablon) 
        				szablon=INNEPRE(szablon);
        				return ZamienObiektSzablonuKodem(self,"{|"..szablon,tablica_obiektow_strony_dany_modul,"WIKITABELA");
        			end);
        		until ((ile_znacznik_niedomykajacy_1==0)and(ile_znacznik_nieotwierajacy_1==0)and(ile_znacznik_niedomykajacy_2==0)and(ile_znacznik_nieotwierajacy_2==0)and(ile_wikitabela_1==0)and(ile_wikitabela_2==0));
        		return tekst_artykulu;
    		end;
    		local function ZnieklasyfikowaneZnaki(tekst_artykulu)
    		   local ile_naprawy_znacznikow_1;local ile_naprawy_znacznikow_2;local ile_naprawy_znacznikow_3;local ile_naprawy_znacznikow_4;local ile_naprawy_znacznikow_5;local ile_naprawy_znacznikow_6;local ile_naprawy_znacznikow_7;local ile_naprawy_znacznikow_8;local ile_naprawy_znacznikow_9;local ile_naprawy_znacznikow_10;local ile_naprawy_znacznikow_11;
    		   repeat
    		   	    tekst_artykulu,ile_naprawy_znacznikow_1=mw.ustring.gsub(tekst_artykulu,"^(%[+%]+)",function(tekst)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst);
    					local ile=#tab_element["INNE"];
    					return p.NormaKoduKodowaniaTekstu("INNE",ile);
    				end);
    		       	tekst_artykulu,ile_naprawy_znacznikow_2=mw.ustring.gsub(tekst_artykulu,"(<)([^>]*<)",function(tekst1,tekst2) 
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
	    				table.insert(tab_element["INNE"],tekst1);
    					local ile=#tab_element["INNE"];
    					return p.NormaKoduKodowaniaTekstu("INNE",ile)..tekst2;
    				end);
					tekst_artykulu,ile_naprawy_znacznikow_3=mw.ustring.gsub(tekst_artykulu,"(>[^<]*)(>)",function(tekst1,tekst2) 
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
	    				table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..p.NormaKoduKodowaniaTekstu("INNE",ile);
					end);
		    		tekst_artykulu,ile_naprawy_znacznikow_4=mw.ustring.gsub(tekst_artykulu,"(<)([^>]*)$",function(tekst1,tekst2) 
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
	    				table.insert(tab_element["INNE"],tekst1);
    					local ile=#tab_element["INNE"];
    					return p.NormaKoduKodowaniaTekstu("INNE",ile)..tekst2;
    				end);
					tekst_artykulu,ile_naprawy_znacznikow_5=mw.ustring.gsub(tekst_artykulu,"^([^<]*)(>)",function(tekst1,tekst2) 
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
	    				table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..p.NormaKoduKodowaniaTekstu("INNE",ile);
					end);
    				tekst_artykulu,ile_naprawy_znacznikow_6=mw.ustring.gsub(tekst_artykulu,"([^{])({)([^|{])",function(tekst1,tekst2,tekst3)
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..p.NormaKoduKodowaniaTekstu("INNE",ile)..tekst3;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_7=mw.ustring.gsub(tekst_artykulu,"([^|}])(})([^}])",function(tekst1,tekst2,tekst3)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..p.NormaKoduKodowaniaTekstu("INNE",ile)..tekst3;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_8=mw.ustring.gsub(tekst_artykulu,"^({)([^|{])",function(tekst1,tekst2)
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst1);
    					local ile=#tab_element["INNE"];
    					return p.NormaKoduKodowaniaTekstu("INNE",ile)..tekst2;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_9=mw.ustring.gsub(tekst_artykulu,"([^|}])(})$",function(tekst1,tekst2)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..p.NormaKoduKodowaniaTekstu("INNE",ile);
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_10=mw.ustring.gsub(tekst_artykulu,"(%[)([^%]]*)$",function(tekst1,tekst2)
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst1);
    					local ile=#tab_element["INNE"];
    					return p.NormaKoduKodowaniaTekstu("INNE",ile)..tekst2;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_11=mw.ustring.gsub(tekst_artykulu,"^([^%[]*)(%])",function(tekst1,tekst2)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..p.NormaKoduKodowaniaTekstu("INNE",ile);
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_12=mw.ustring.gsub(tekst_artykulu,"^([^%[%]]*)(%[+)([^%[%]]*%[)",function(tekst1,tekst2,tekst3)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..p.NormaKoduKodowaniaTekstu("INNE",ile)..tekst3;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_13=mw.ustring.gsub(tekst_artykulu,"(%][^%[%]]*)(%]+)([^%[%]]*)$",function(tekst1,tekst2,tekst3)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..p.NormaKoduKodowaniaTekstu("INNE",ile)..tekst3;
    				end);
    			until ((ile_naprawy_znacznikow_1==0)and(ile_naprawy_znacznikow_2==0)and(ile_naprawy_znacznikow_3==0)and(ile_naprawy_znacznikow_4==0)and(ile_naprawy_znacznikow_5==0)and(ile_naprawy_znacznikow_6==0)and(ile_naprawy_znacznikow_7==0)and(ile_naprawy_znacznikow_8==0)and(ile_naprawy_znacznikow_9==0)and(ile_naprawy_znacznikow_10==0)and(ile_naprawy_znacznikow_11==0)and(ile_naprawy_znacznikow_12==0)and(ile_naprawy_znacznikow_13==0));
    			return tekst_artykulu;
    		end;
    		local function ZNACZNIKI(tekst_artykulu,jak)
    			local ile_odjac_znacznik_niedomykajacy=0;
        		local tekst_artykulu,ile_znacznik_niedomykajacy=mw.ustring.gsub(tekst_artykulu,"<("..p.NormaWzoruKodowaniaTekstu("(%a+)"..jak.."begin","(%d+)")..")>(.-)</("..p.NormaWzoruKodowaniaTekstu("(%2)"..jak.."end","(%3)")..")>",function(nazwa_przed_nieodkodowane,obiekt,kod,zawartosc,nazwa_po_nieodkodowane,obiekt2,kod2)
        			local nazwa_przed=p.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element);
        			local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_przed,"^(%a+)(%s*)(.-)%s*$");
        			nazwa=mw.ustring.lower(nazwa);
        			local function TenZnacznik()
        				  local nazwa_po=p.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_po_nieodkodowane,nil,tab_element);
        				  zawartosc=p.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element);
        				  if(jak=="")then
        				  		zawartosc=INNEPRE(zawartosc,true);
        				  end;
        				  local szablon="<"..nazwa_przed..">"..zawartosc.."</"..nazwa_po..">";
        				  return ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,ObiektFun(nazwa));
        			end;
        			if(not mw.ustring.match(atrybuty,"^%s*$"))then
        				if(odstepy~="")then
        					if((jak~="")or(not mw.ustring.match(zawartosc,"[<>{}]")))then
        						return TenZnacznik();
        					end;
        				end;
        			else
        				if((jak~="")or(not mw.ustring.match(zawartosc,"[<>{}]")))then
        					return TenZnacznik();
        				end;
        			end;
        			----
        			local ile_zastapione;local ile_pominiete;
        			zawartosc,ile_zastapione,ile_pominiete=ZNACZNIKI(zawartosc,jak);
        			zawartosc=ZnieklasyfikowaneZnaki(zawartosc);
        			zawartosc=NiedokonczoneElementyWikikodu(zawartosc);
        			zawartosc=InneElementyWikikodu(zawartosc);
        			
        			if(not mw.ustring.match(zawartosc,"[<>{}]"))then
        				return TenZnacznik();
        			else
        				ile_odjac_znacznik_niedomykajacy=ile_odjac_znacznik_niedomykajacy+1;
        				local szablon="<"..nazwa_przed_nieodkodowane..">"..zawartosc.."</"..nazwa_po_nieodkodowane..">";
        				return szablon;
        			end;
        		end);
        		return tekst_artykulu,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy;
    		end;
    		----
    		local function PracePrzygotowywujace(tekst_artykulu)
    			local ile_linkw;local ile_linkz;local ile_var;local ile_template;local ile_wikitabela;
    			local function Szablon(zawartosc,przed,po,obiekt,czy_linkw)
    				  zawartosc=ZnieklasyfikowaneZnaki(zawartosc);
        			  zawartosc=NiedokonczoneElementyWikikodu(zawartosc);
        			  local ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy;
        			  zawartosc,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy=ZNACZNIKI(zawartosc,"");
        			  zawartosc=InneElementyWikikodu(zawartosc);
        			  zawartosc=p.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element);
        			  if(czy_linkw)then
        			  		return ZamianaLINKWNaLINKZ(zawartosc);
        			  else
        					local szablon=przed..zawartosc..po;
    						return ZamienObiektSzablonuKodem(self,szablon,tablica_obiektow_strony_dany_modul,obiekt);
    				  end;
    			end;
    			repeat
    				tekst_artykulu,ile_linkw=mw.ustring.gsub(tekst_artykulu,"%[%[([^%[%]]+)%]%]",function(szablon) 
    					return Szablon(szablon,"[[","]]","LINKW",true);
    				end);
    				tekst_artykulu,ile_linkz=mw.ustring.gsub(tekst_artykulu,"%[([^%[%]]+)%]",function(szablon) 
    					return Szablon(szablon,"[","]","LINKZ");
    				end);
    				repeat
        				tekst_artykulu,ile_var=mw.ustring.gsub(tekst_artykulu,"{{{([^{}]-)}}}",function(szablon) 
        					return Szablon(szablon,"{{{","}}}","ZMIENNA");
        				end);
        			until (ile_var==0);
        			tekst_artykulu,ile_template=mw.ustring.gsub(tekst_artykulu,"{{([^{}]-)}}",function(szablon) 
        				return Szablon(szablon,"{{","}}","SZABLON");
        			end);
        			tekst_artykulu,ile_wikitabela=mw.ustring.gsub(tekst_artykulu,"{|([^{}]-)|}",function(szablon) 
        				return Szablon(szablon,"{|","|}","WIKITABELA");
        			end);
    			until ((ile_linkw==0)and(ile_linkz==0)and(ile_var==0)and(ile_template==0)and(ile_wikitabela==0));
    			return tekst_artykulu;
    		end;
    		----
    		local ile_odjac_znacznik_niedomykajacy_1;
    		tekst_artykulu,ile_znacznik_niedomykajacy_1,ile_odjac_znacznik_niedomykajacy_1=ZNACZNIKI(tekst_artykulu,"inne");
    		ile_znacznik_niedomykajacy_1=ile_znacznik_niedomykajacy_1-ile_odjac_znacznik_niedomykajacy_1;
    		tekst_artykulu=PracePrzygotowywujace(tekst_artykulu);
        	----
        	local ile_odjac_znacznik_niedomykajacy_2;
        	tekst_artykulu,ile_znacznik_niedomykajacy_2,ile_odjac_znacznik_niedomykajacy_2=ZNACZNIKI(tekst_artykulu,"");
        	return tekst_artykulu;
        end;
        PREWSTAWIAJACA=function(tekst_artykulu)
        	czy_wynik=nil;
        	tekst_artykulu=PreprocesorSzablonow(tekst_artykulu);
        	tekst_artykulu=Kompilacja(tekst_artykulu);
        	czy_wynik=true;
        	return tekst_artykulu;
        end;
        tekst_artykulu=Kompilacja(tekst_artykulu)
        local function PoczatekKoniecTekst(tekst_artykulu)
        	local tekst_poczatek=(__FUNKCJA_poczatek and __FUNKCJA_poczatek(tekst_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul) or nil);
        	local tekst_koniec=(__FUNKCJA_koniec and __FUNKCJA_koniec(tekst_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul) or nil);
        	if(((tekst_poczatek)and(not mw.ustring.match(tekst_poczatek,"^%s*$")))or((tekst_koniec)and(not mw.ustring.match(tekst_koniec,"^%s*$"))))then
        		tekst_poczatek=tekst_poczatek and PREWSTAWIAJACA(tekst_poczatek) or tekst_poczatek;
        		tekst_koniec=tekst_koniec and PREWSTAWIAJACA(tekst_koniec) or tekst_koniec;
        		tekst_artykulu=(tekst_poczatek or "")..tekst_artykulu..(tekst_koniec or "");
        	end;
        	return tekst_artykulu;
        end;
        tekst_artykulu=PoczatekKoniecTekst(tekst_artykulu);
        local function PraceKoncowe(tekst_artykulu)
    		tekst_artykulu=NiedokonczoneElementyWikikodu(tekst_artykulu);
    		return tekst_artykulu;
        end;
	    tekst_artykulu=PraceKoncowe(tekst_artykulu);
	    tekst_artykulu=p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_artykulu,nil,tab_element);
	    tekst_artykulu=INNEPRE(tekst_artykulu);
	    tekst_artykulu=p.OdkodowanieZakodowanychNormKodowychNieschematycznychRzeczy(self,tekst_artykulu,nil,tablica_obiektow_strony_dany_modul);
    	return tekst_artykulu;
    end;
	function UstawieniaPoczatkoweObiektowSzablonow()
		if(not tablica_obiektow_strony_dany_modul)then
    		if(not self.tablica_obiektow_strony_dany_modul)then self.tablica_obiektow_strony_dany_modul={};end;
    		if(not self.tablica_obiektow_strony_dany_modul[nazwa_modulu])then self.tablica_obiektow_strony_dany_modul[nazwa_modulu]={};end;
    		---
    		tablica_obiektow_strony_dany_modul=self.tablica_obiektow_strony_dany_modul[nazwa_modulu];
		end;
    	InicjujNumeryPoczatkoweObiektowSzablonow();
    	if(not __FUNKCJA3)then
    		tablica_obiektow_strony_dany_modul["ŹRÓDŁO"]={};
    		tablica_obiektow_strony_dany_modul["GALERIA"]={};
    		tablica_obiektow_strony_dany_modul["MAPAOBRAZU"]={};
    		tablica_obiektow_strony_dany_modul["SZABLON"]={};
    		tablica_obiektow_strony_dany_modul["LINKW"]={};
    		tablica_obiektow_strony_dany_modul["LINKZ"]={};
    		tablica_obiektow_strony_dany_modul["ZMIENNA"]={};
    		tablica_obiektow_strony_dany_modul["WIKITABELA"]={};
    		tablica_obiektow_strony_dany_modul["NOWIKI"]={};
    		tablica_obiektow_strony_dany_modul["MATH"]={};
    		tablica_obiektow_strony_dany_modul["PRE"]={};
    		tablica_obiektow_strony_dany_modul["INNEPRE"]={};
    		tablica_obiektow_strony_dany_modul["ZNACZNIK"]={};
    	end;
	end;
	----
	UstawieniaPoczatkoweObiektowSzablonow();
    ---
    tekst_artykulu=AnalizaObiektowSzablonowegoTekstu(tekst_artykulu);
    return tekst_artykulu;
end;
function p.KodujWzoryMatematyczneTekstu(self,tekst_artykulu)
	local licznik=0;
	local tablica_obiektow_strony_dany_modul_uzyskany=nil;
	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(<[Mm][Aa][Tt][Hh]>(.-)</[Mm][Aa][Tt][Hh]>)",function(szablon)
		licznik=licznik+1;
		if(not tablica_obiektow_strony_dany_modul_uzyskany)then tablica_obiektow_strony_dany_modul_uzyskany={};end;
		if(not tablica_obiektow_strony_dany_modul_uzyskany["MATH"])then tablica_obiektow_strony_dany_modul_uzyskany["MATH"]={};end;
		tablica_obiektow_strony_dany_modul_uzyskany["MATH"][licznik]=szablon;
		return p.NormaKoduKodowaniaTekstu("MATH",licznik);
	end)
	return tekst_artykulu,tablica_obiektow_strony_dany_modul_uzyskany;
end;
function p.NumerSzablonuKodowaniaTekstu(self,nazwa_modulu,tablica_obiektow_strony_dany_modul)
	if(not tablica_obiektow_strony_dany_modul)then tablica_obiektow_strony_dany_modul=self.tablica_obiektow_strony_dany_modul[nazwa_modulu];end;
	local parametry_modul=require("Module:Parametry");
	function NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,obiekt)
		local __max=0;
		for numer,_ in pairs(tablica_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_obiektow_strony_dany_modul,"ŹRÓDŁO");
	numer_szablonu["GALERIA"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"GALERIA");
	numer_szablonu["MAPAOBRAZU"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"MAPAOBRAZU");
	numer_szablonu["SZABLON"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"SZABLON");
	numer_szablonu["LINKW"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"LINKW");
	numer_szablonu["LINKZ"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"LINKZ");
	numer_szablonu["ZMIENNA"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"ZMIENNA");
	numer_szablonu["WIKITABELA"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"WIKITABELA");
	numer_szablonu["NOWIKI"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"NOWIKI");
	numer_szablonu["MATH"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"MATH");
	numer_szablonu["PRE"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"PRE");
	numer_szablonu["INNEPRE"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"INNEPRE");
	numer_szablonu["ZNACZNIK"]=NumerSzablonuObiektu(tablica_obiektow_strony_dany_modul,"ZNACZNIK");
	return numer_szablonu;
end;
function p.KodSzablonuKodowaniaTekstu(szablon)
	if(mw.ustring.match(szablon,"^<[Pp][Rr][Ee]%s*[^<>]*>.-</[Pp][Rr][Ee]%s*>$"))then
		return "PRE";
	elseif(mw.ustring.match(szablon,"^<[Nn][Oo][Ww][Ii][Kk][Ii]%s*[^<>]*>.-</[Nn][Oo][Ww][Ii][Kk][Ii]%s*>$"))then
		return "NOWIKI";
	elseif(mw.ustring.match(szablon,"^<[Mm][Aa][Tt][Hh]%s*[^<>]*>.-</[Mm][Aa][Tt][Hh]%s*>$"))then
		return "MATH";
	elseif((mw.ustring.match(szablon,"^<[Ss][Yy][Nn][Tt][Aa][Xx][Hh][Ii][Gg][Hh][Ll][Ii][Gg][Hh][Tt]%s*[^<>]*>.-</[Ss][Yy][Nn][Tt][Aa][Xx][Hh][Ii][Gg][Hh][Ll][Ii][Gg][Hh][Tt]>$"))
		or(mw.ustring.match(szablon,"^<[Ss][Oo][Uu][Rr][Cc][Ee]%s*[^<>]*>.-</[Ss][Oo][Uu][Rr][Cc][Ee]>$"))
	)then
		return "ŹRÓDŁO";
	elseif(mw.ustring.match(szablon,"^<[Gg][Aa][Ll][Ll][Ee][Rr][Yy]%s*[^<>]*>.-</[Gg][Aa][Ll][Ll][Ee][Rr][Yy]>$"))then
		return "GALERIA";	
	elseif(mw.ustring.match(szablon,"^<[Ii][Mm][Aa][Gg][Ee][Mm][Aa][Pp]%s*[^<>]*>.-</[Ii][Mm][Aa][Gg][Ee][Mm][Aa][Pp]>$"))then
		return "MAPAOBRAZU";		
	elseif(mw.ustring.match(szablon,"^<[^<>]+>.-</[^<>]>"))then
		return "ZNACZNIK";
	elseif(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";
	end;
	return;
end;
function p.IteratorSzablonowyZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul,__FUNKCJA,__FUNKCJA2,__FUNKCJA3)
	if(not tablica_obiektow_strony_dany_modul)then tablica_obiektow_strony_dany_modul=self.tablica_obiektow_strony_dany_modul[nazwa_modulu];end;
	local czy_jedno=false;
	local function IteratorMain(tekst_rozwiniety_calego_artykulu,poziom_iteracji)
		local iter;
		if(tekst_rozwiniety_calego_artykulu=="")then 
			iter=function()
				return function()
					return nil;
				end;
			end;
		else
			iter=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,p.NormaWzoruKodowaniaTekstu());
		end;
		local tak=nil;
		local iter2=nil;
		poziom_iteracji=poziom_iteracji or 0;
		local function Iterator()
			local function IterMain()
				local obiekt,kod;
				----
				repeat
					obiekt,kod=iter();
	    			if((not obiekt)or(not kod))then return nil;end;
	    			kod=tonumber(kod);
	    			local tak_repeat=false;
	    			if((not tablica_obiektow_strony_dany_modul[obiekt])or(not tablica_obiektow_strony_dany_modul[obiekt][kod]))then
	    				tak_repeat=true;
	    			end;
				until (not tak_repeat);
    			----
	    		local szablon=tablica_obiektow_strony_dany_modul[obiekt][kod];
	    		szablon=(not __FUNKCJA3) and szablon or (__FUNKCJA3(szablon,obiekt,kod,poziom_numeracji,nazwa_modulu,tablica_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_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_obiektow_strony_dany_modul[obiekt])or(not tablica_obiektow_strony_dany_modul[obiekt][kod]))then
	    								tak_repeat=true;
	    							end;
								until (not tak_repeat);
    							----
	    						szablon=tablica_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);
	    		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),tablica_obiektow_strony_dany_modul;
end;
function p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul,__funkcja1,__funkcja2,__funkcja3,__funkcja4,__funkcja5)
	local techniczne_modul=require("Module:Techniczne");
	local iterator,tablica_obiektow_strony_dany_modul=p.IteratorSzablonowyZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul,__funkcja3,__funkcja4,__funkcja5);
	local poziom_iteracji_poprz=0;
	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;
		local szablon2;local wynik;
		if(__funkcja1)then
			szablon2,wynik=__funkcja1(szablon,obiekt,kod,poziom_iteracji,tekst_rozwiniety_calego_artykulu);
		end;
		if(not wynik)then
			szablon=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](szablon2 or szablon);
			if(not tab_dane)then
				tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,p.NormaWzoruKodowaniaTekstu(obiekt,kod),szablon);
			else
				local tab_pos=tab_dane[#tab_dane];
				local obiekt=tab_pos[1];local kod=tab_pos[2];
				local tekst=tablica_obiektow_strony_dany_modul[obiekt][kod];
				tekst=mw.ustring.gsub(tekst,p.NormaWzoruKodowaniaTekstu(obiekt,kod),szablon);
				tablica_obiektow_strony_dany_modul[obiekt][kod]=tekst;
			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;
		else
			if(poziom_iteracji==0)then
				if(not tab_dane)then tab_dane={};end;
				tab_dane[1]={obiekt,kod};
			elseif(poziom_iteracji_poprz<poziom_iteracji)then
				if(not tab_dane)then tab_dane={};end;
				table.insert(tab_dane,{obiekt,kod});
			else
				if(tab_dane)then
					for i=poziom_iteracji_poprz,poziom_iteracji,-1 do
						table.remove(tab_dane);
					end;
				else
					tab_dane={};
				end;
				table.insert(tab_dane,{obiekt,kod});
			end;
			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;
	end;
	return tekst_rozwiniety_calego_artykulu;
end;
function p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony,__funkcja,__funkcja1,__funkcja2,__funkcja3)
	local tablica_szablonow_z_naglowkami=nil;
	local tab_sam;
    tekst_rozwiniety_calego_artykulu=p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul,__funkcja1,__funkcja2,__funkcja3,function(szablon,obiekt,kod,poziom_iteracji,nazwa_modulu,tablica_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_obiektow_strony_dany_modul,tablica_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_obiektow_strony_dany_modul,nil,nil,function(szablon,obiekt,kod)
    		if(czy_nie_wyzej)then
    			return "";
    		end;
    	end);
    	local poziom_iteracji_poprz=-1;
    	local tab_poziom_obiekt={}
    	for szablon2,obiekt2,kod2,poziom_iteracji2 in iterator do
    		local wynik,sam_obiekt,sam_kod=__funkcja(szablon2,obiekt2,kod2,poziom_iteracji2+1,false,tablica_obiektow_strony_dany_modul,tablica_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;
    			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;
        	end;
			poziom_iteracji_poprz=poziom_iteracji;
    	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);
    return tekst_rozwiniety_calego_artykulu;
end;
function p.KompletowanieSzablonoweZakodowanegoTekstuBezPewnychSzablonowychNormZgodnieZJegoSzablonowymiElementami(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul,tablica_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_obiektow_strony_dany_modul,__funkcja1,__funkcja2,__funkcja3,function(szablon,obiekt,kod,poziom_iteracji,nazwa_modulu,tablica_obiektow_strony_dany_modul)
    	local wynik=__funkcja(szablon,obiekt,kod,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony);
    	if(not wynik)then return nil;end;
    	return true;
    end);
    return tekst_rozwiniety_calego_artykulu;
end;
function p.PrzeksztalacanieBazyDanychKodowaniaTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul,wynik,obiekt,kod,poziom_iteracji)
	if(not tablica_obiektow_strony_dany_modul)then tablica_obiektow_strony_dany_modul=self.tablica_obiektow_strony_dany_modul[nazwa_modulu];end;
	----
	--[[local obiekt_wyniku=p.KodSzablonuKodowaniaTekstu(wynik);
	if(obiekt_wyniku)then
		if(obiekt_wyniku==obiekt)then
			return tekst_rozwiniety_calego_artykulu;
		end;
		tablica_obiektow_strony_dany_modul[obiekt][kod]=nil;
		tablica_obiektow_strony_dany_modul[obiekt_wyniku][#tablica_obiektow_strony_dany_modul[obiekt_wyniku]+1]=wynik;
		return tekst_rozwiniety_calego_artykulu;
	end;]]
	if(poziom_iteracji==0)then
		tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,p.NormaWzoruKodowaniaTekstu(obiekt,kod),wynik);
		return tekst_rozwiniety_calego_artykulu;
	end;
	local iterator=p.IteratorSzablonowyZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul)
	for szablon,obiekt_szablonu,kod_szablonu,poziom_iteracji_szablonu in iterator do
		if(poziom_iteracji_szablonu+1==poziom_iteracji)then
			if(mw.ustring.match(szablon,p.NormaWzoruKodowaniaTekstu(obiekt,kod)))then
				local text,_=mw.ustring.gsub(szablon,p.NormaWzoruKodowaniaTekstu(obiekt,kod),wynik);
				tablica_obiektow_strony_dany_modul[obiekt_szablonu][kod_szablonu]=text;
				tablica_obiektow_strony_dany_modul[obiekt][kod]=nil;
				break;
			end;
		end;
	end;
	return tekst_rozwiniety_calego_artykulu;
end;
local function FunkcjaIterajacaRozwijanegoSzablonu(szablon,obiekt,kod,tekst,tablica_obiektow_strony_dany_modul,numer_szablonu,tablica_parametrow_szablonu_strony,nazwa_modulu_aktualna_czy_biezaca,dwukropek,czy_niekodowane,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3)
	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_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony)
    		end,
    		function(nazwa_szablonu,tabela_modyfikatorow,rezultat)
   	  			return __FUNKCJA0 and __FUNKCJA0(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony) or nazwa_szablonu;
   		end,tablica_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))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,};
    		local pelna_nazwa_szablonu=p["PełnaNazwaStronyNazwySzablonu"](nazwa_szablonu);
    		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);
    			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);
    		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_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_parametrow_szablonu_strony=tablica_szablonow[nazwa_modulu];
    return tablica_parametrow_szablonu_strony;
end;
function p.UzyskiwanieTablicyKodowaniaIOpcjiParametrowychSzablonowychDlaStrony(self,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony)
	if(not tablica_obiektow_strony_dany_modul)then
    	if(not self.tablica_obiektow_strony_dany_modul)then self.tablica_obiektow_strony_dany_modul={};end;
    	if(not self.tablica_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca])then self.tablica_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca]={};end;
    	---
    	tablica_obiektow_strony_dany_modul=self.tablica_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca];
	end;
	---
    local tablica_parametrow_szablonu_strony=tablica_parametrow_szablonu_strony or p.TablicaZanalizowanychInformacjiSzablonowychParsowania(self,nazwa_modulu_aktualna_czy_biezaca);
    return tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony;
end;
function p.RozwijanieNiezakodowanegoSzablonu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3)
	
    local tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony=p.UzyskiwanieTablicyKodowaniaIOpcjiParametrowychSzablonowychDlaStrony(self,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul,tablica_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_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
    	return;
    end,
    function(szablon,obiekt,kod,tekst,tablica_obiektow_strony_dany_modul,numer_szablonu)
		return FunkcjaIterajacaRozwijanegoSzablonu(szablon,obiekt,kod,tekst,tablica_obiektow_strony_dany_modul,numer_szablonu,tablica_parametrow_szablonu_strony,nazwa_modulu_aktualna_czy_biezaca,dwukropek,true,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3);
    end);
    return tekst_rozwiniety_calego_artykulu;
end;
function p.RozwijanieZakodowanegoSzablonu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3)
		
    local tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony=p.UzyskiwanieTablicyKodowaniaIOpcjiParametrowychSzablonowychDlaStrony(self,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony);
    ----
    local nazwy_modul=require("Module:Nazwy");
    local dwukropek=(nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu_aktualna_czy_biezaca)=="");
    repeat
    	local iter=p.IteratorSzablonowyZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul);
    	local czy_wynik=false;
    	for szablon,obiekt,kod,poziom_iteracji in iter do
    		if(obiekt=="SZABLON")then
    			local numer_szablonu=p.NumerSzablonuKodowaniaTekstu(self,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul);
    			local wynik=FunkcjaIterajacaRozwijanegoSzablonu(szablon,obiekt,kod,tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_dany_modul,numer_szablonu,tablica_parametrow_szablonu_strony,nazwa_modulu_aktualna_czy_biezaca,dwukropek,false,__PRZEDFUNKCJA,__FUNKCJA0,__FUNKCJA,__FUNKCJA2,__FUNKCJA3);
    			if(wynik)then 
    				tekst_rozwiniety_calego_artykulu=p.PrzeksztalacanieBazyDanychKodowaniaTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul,wynik,obiekt,kod,poziom_iteracji);
    				czy_wynik=czy_wynik or wynik;
    			end;
			end;
    	end;
    until(not czy_wynik);
    ----
    return tekst_rozwiniety_calego_artykulu;
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)
	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)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;
	return nazwa_szablonu;
end;
p["PełnaNazwaStronyNazwySzablonu"]=function(nazwa_szablonu)
	if(not nazwa_szablonu)then return;end;
	local nazwy_modul=require("Module:Nazwy");
    local parametry_modul=require("Module:Parametry");
    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;
	return pelna_nazwa_szablonu;
end;
p["PełnaNazwaStronyNazwySzablonuModułuKomunikatu"]=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)
	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);
	return p["SzablonowaNazwaStrony"](czy_szablon),tabela_modyfikatorow,czy_z_parametrami;
end;
function p.TablicaTransportuSzablonowe(self)
	return self;
end;
p["ParsowanieWywołaniaSzablonu"] = function(wywolanie_szablonu,nie_trimuj_numerowane,__FUNKCJA,__FUNKCJA2,tablica_parametrow_szablonu_strony,kod)
   if((tablica_parametrow_szablonu_strony)and(kod))then
		local tabela_parametrow_szablonu=tablica_parametrow_szablonu_strony[1] and tablica_parametrow_szablonu_strony[1][kod] or nil;
		if(tabela_parametrow_szablonu)then return tabela_parametrow_szablonu.parametry,tabela_parametrow_szablonu.nazwa_szablonu,tabela_parametrow_szablonu.tabela_modyfikatorow;end;
	end;
   ----
   local function NazwaSzablonu(nazwa_szablonu)
   	  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;
   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,nie_trimuj_numerowane);
   	    	  ----
   	    	  if((tablica_parametrow_szablonu_strony)and(kod))then
   	    	  		if(not tablica_parametrow_szablonu_strony[1])then tablica_parametrow_szablonu_strony[1]={};end;
   	    			tablica_parametrow_szablonu_strony[1][kod]={};
   	    			local tab_szablonu=tablica_parametrow_szablonu_strony[1][kod];
   	    			tab_szablonu.parametry=tabela_parametrow_szablonu;
   	    			tab_szablonu.nazwa_szablonu=nazwa_szablonu;
   	    			tab_szablonu.tabela_modyfikatorow=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_parametrow_szablonu_strony)and(kod))then
   	    	  		if(not tablica_parametrow_szablonu_strony[1])then tablica_parametrow_szablonu_strony[1]={};end;
   	    			tablica_parametrow_szablonu_strony[1][kod]={};
   	    			local tab_szablonu=tablica_parametrow_szablonu_strony[1][kod];
   	    			tab_szablonu.parametry=tabela_parametrow_szablonu;
   	    			tab_szablonu.nazwa_szablonu=nazwa_szablonu;
   	    			tab_szablonu.tabela_modyfikatorow=tabela_modyfikatorow;
   	    	  end;
   	  		 ----
   	  	     return tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow;
   	  	else return nil;end;
   end;
end;
function ParametrySzablonu(parametry_wywolania_szablonu,parametry_szablonu,nie_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,nie_trimuj_numerowane);
  	  return parametry_szablonu;
  end;
  if(kawalek_wywolania)then
  	 ZbierzParametrSzablonu(parametry_szablonu,kawalek_wywolania,nie_trimuj_numerowane);
  	 return ParametrySzablonu(dalszy_kawalek_wywolania,parametry_szablonu,nie_trimuj_numerowane);
  end;
  return nil;
end;
function ZbierzParametrSzablonu(tworzona_tabela, kawalek_wywolania,nie_trimuj_numerowane)
   local kawalek_wywolania_element_nienazwany=mw.ustring.match(kawalek_wywolania.."\n","^([^|=]-)$");
   if(kawalek_wywolania_element_nienazwany)then
	  tworzona_tabela[#tworzona_tabela+1]=((not nie_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 tab_modyfikatory={
		["#invoke:"]={"[%s_]*#[%s_]*invoke[%s_]*:[%s_]*","Module",},
		["#if:"]={"[%s_]*#[%s_]*if[%s_]*:[%s_]*",nil,},
		["#ifeq:"]={"[%s_]*#[%s_]*ifeq[%s_]*:[%s_]*",nil,},
		["#tag:"]={"[%s_]*#[%s_]*tag[%s_]*:[%s_]*",nil,},
		["#switch:"]={"[%s_]*#[%s_]*switch[%s_]*:[%s_]*",nil,},
		["#property:"]={"[%s_]*#[%s_]*property[%s_]*:[%s_]*",nil,},
		["int:"]={"[%s_]*int[%s_]*:[%s_]*","MediaWiki",},
		["msg:"]={"[%s_]*msg[%s_]*:[%s_]*","Template",},
		["msgnw:"]={"[%s_]*msgnw[%s_]*:[%s_]*","Template"},
		["raw:"]={"[%s_]*raw[%s_]*:[%s_]*","Template",},
		["subst:"]={"[%s_]*subst[%s_]*:[%s_]*",nil,},
		["safesubst:"]={"[%s_]*safesubst[%s_]*:[%s_]*",nil,}
	}
	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)
	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:"])
    	)then
    		return false;
    	end;
	end;
	if(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;
function p.KodowanieInaczejZakodowanychNormKodowychTekstuWedleJegoTablicyKodowania(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul_uzyskany,tablica_parametrow_szablonu_strony)
	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_obiektow_strony_dany_modul_uzyskany,function(szablon,obiekt,kod)
	 	if(obiekt=="SZABLON")then
 			local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=p["ParsowanieWywołaniaSzablonu"](szablon,nil,nil,nil,tablica_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.WydzielanieNazwyIOpcjiAtrybutowychZeZnacznika(szablon,tablica_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_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_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_obiektow_strony_dany_modul_uzyskany,tablica_parametrow_szablonu_strony)
	local parametry_modul=require("Module:parametry");
	local tab_grupa={};local licznik_linkz=1;
	tekst_rozwiniety_calego_artykulu=p.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul_uzyskany,function(szablon,obiekt,kod)
		if(obiekt=="SZABLON")then
 			local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=p["ParsowanieWywołaniaSzablonu"](szablon,nil,nil,nil,tablica_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;
 					-----
 					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;";
 				end;
 			end;
 		elseif(obiekt=="ZNACZNIK")then
 			local nazwa,zawartosc,tab_atrybuty=p.WydzielanieNazwyIOpcjiAtrybutowychZeZnacznika(szablon,tablica_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;";
 			end;
 		end;
 		return nil,true;--szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod);
	end,nil,nil,nil,function(szablon,obiekt,kod,poziom_numeracji,nazwa_modulu,tablica_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_obiektow_strony_dany_modul[obiekt][kod]=szablon;
				licznik_linkz=licznik_linkz+1;
				return szablon;
			end;
		end;
		return szablon;
	end);
	return tekst_rozwiniety_calego_artykulu;
end;
function p.OdkodowanieZakodowanychNormKodowychNieschematycznychRzeczy(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul_uzyskany)
	local tablica_kodow={};local tak=false;
	local iterator=p.IteratorSzablonowyZakodowanegoTekstu(self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul_uzyskany);
	for szablon,obiekt,kod in iterator do
		if((obiekt=="MATH")or(obiekt=="NOWIKI")or(obiekt=="PRE")or(obiekt=="ŹRÓDŁO")or(obiekt=="GALERIA")or(obiekt=="MAPAOBRAZU"))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_obiektow_strony_dany_modul_uzyskany,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_obiektow_strony_dany_modul_uzyskany);
				return szablon2;
			end;
		elseif(obiekt2=="LINKW")then
			local szablon_rozwiniete=p.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon2,nazwa_modulu_aktualna_czy_biezaca,tablica_obiektow_strony_dany_modul_uzyskany);
			--szablon_rozwiniete=frame:preprocess(szablon_rozwiniete);
			local czy_nie_linkw=mw.ustring.match(szablon_rozwiniete,"^%[%[.-[%[%]].-%]%]$");
			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_obiektow_strony_dany_modul_uzyskany);
			--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;
function p.WydzielanieNazwyIOpcjiAtrybutowychZeZnacznika(znacznik,tablica_parametrow_szablonu_strony,kod)
	if((tablica_parametrow_szablonu_strony)and(kod))then
		local tabela_parametrow_znacznika=tablica_parametrow_szablonu_strony[2] and tablica_parametrow_szablonu_strony[2][kod] or nil;
		if(tabela_parametrow_znacznika)then
			return tabela_parametrow_znacznika.nazwa_znacznika,tabela_parametrow_znacznika.istota_znacznika,tabela_parametrow_znacznika.atrybuty_znacznika;
		end;
	end;
	local nazwa,zawartosc=mw.ustring.match(znacznik,"^%s*<(%a+)%s*>(.-)</(%1)%s*>%s*$");
	if((nazwa)and(zawartosc))then 
		if((tablica_parametrow_szablonu_strony)and(kod))then
			if(not tablica_parametrow_szablonu_strony[2])then tablica_parametrow_szablonu_strony[2]={};end;
			tablica_parametrow_szablonu_strony[2][kod]={};
			local tab_znacznika=tablica_parametrow_szablonu_strony[2][kod];
			tab_znacznika.nazwa_znacznika=nazwa;
			tab_znacznika.istota_znacznika=zawartosc;
			tab_znacznika.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_parametrow_szablonu_strony)and(kod))then
			if(not tablica_parametrow_szablonu_strony[2])then tablica_parametrow_szablonu_strony[2]={};end;
			tablica_parametrow_szablonu_strony[2][kod]={};
			local tab_znacznika=tablica_parametrow_szablonu_strony[2][kod];
			tab_znacznika.nazwa_znacznika=nazwa;
			tab_znacznika.istota_znacznika=nil;
			tab_znacznika.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_parametrow_szablonu_strony)and(kod))then
					if(not tablica_parametrow_szablonu_strony[2])then tablica_parametrow_szablonu_strony[2]={};end;
					tablica_parametrow_szablonu_strony[2][kod]={};
					local tab_znacznika=tablica_parametrow_szablonu_strony[2][kod];
					tab_znacznika.nazwa_znacznika=nil;
					tab_znacznika.istota_znacznika=nil;
					tab_znacznika.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_parametrow_szablonu_strony)and(kod))then
		if(not tablica_parametrow_szablonu_strony[2])then tablica_parametrow_szablonu_strony[2]={};end;
		tablica_parametrow_szablonu_strony[2][kod]={};
		local tab_znacznika=tablica_parametrow_szablonu_strony[2][kod];
		tab_znacznika.nazwa_znacznika=nazwa;
		tab_znacznika.istota_znacznika=zawartosc;
		tab_znacznika.atrybuty_znacznika=tab;
	end;
	return mw.ustring.lower(nazwa),zawartosc,tab;
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");
	----
	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;