Moduł:StronicowyParser

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Template-info.png Dokumentacja modułu [stwórz] [odśwież]
local p = {}
function p.SpreparowanyWikikodStrony(nazwa_modolu,bez_analizy_szablonowej)
   local stronicowyparser_dalszefunkcje=require("Module:StronicowyParser/DalszeFunkcje")
   return stronicowyparser_dalszefunkcje.SpreparowanyWikikodStrony(nil,nazwa_modolu,bez_analizy_szablonowej);
end;
p["TekstRozdziałuStrony"]=function(frame)
	local stronicowyparser_rozdzialy=require("Module:StronicowyParser/Rozdziały");
	return stronicowyparser_rozdzialy.TekstRozdzialuStrony(frame);
end;
p["KtóraSekcjaStrony"]=function(frame)
	local stronicowyparser_rozdzialy=require("Module:StronicowyParser/Rozdziały");
	return stronicowyparser_rozdzialy.KtoraSekcjaStrony(frame);
end;
p["ZwróćSekcjęNagłówkaStrony"]=function(frame)
	local stronicowyparser_rozdzialy=require("Module:StronicowyParser/Rozdziały");
	return stronicowyparser_rozdzialy.ZwrocSekcjeNaglowkaStrony(frame);
end;
p["NastępnyArtykuł"]=function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;

  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local parametry_modul=require("Module:Parametry");
  local nazwa=parametry_modul.CzyTak(args["nazwa"]);
  
  local nazwa_artykulu=stronicowyparser_potrzebne_modul:NazwaArtykuluKsiazki(frame);
  
  local numer=tonumber(args[1]) or 0;
  local naglowek=parametry_modul.CzyTak(args["nagłówek"]);
  
  local nazwa_artykulu_z_naglowkiem_match=mw.ustring.match(nazwa_artykulu,"^([^#]*)#.*$");
  local nazwa_artykulu_z_opcja_naglowek=(not naglowek) and nazwa_artykulu_z_naglowkiem_match or nazwa_artykulu;
  
  local nadstrona_artykulu=(numer>0) and stronicowyparser_potrzebne_modul.NazwaNadStrony(nazwa_artykulu,numer) or nil;
  
  local i=0;
  local tab_artykul={};
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
	if(tab_lista[2])then
  		for _,artykul_w_bazie_element in ipairs(tab_lista[2])do
  			local artykul_w_bazie;local artykul_bez_naglowka_w_bazie;local artykul_z_naglowkiem_w_bazie;
  			local czy_table=parametry_modul.TypeTable(artykul_w_bazie_element[1]);
  			if(czy_table)then
  				artykul_w_bazie=artykul_w_bazie_element[1][1];
  			else
  				artykul_w_bazie=artykul_w_bazie_element[1];
  			end;
  			local artykul_z_naglowkiem_w_bazie_match=mw.ustring.match(artykul_w_bazie,"^([^#]*)#.*$");
  			artykul_bez_naglowka_w_bazie=artykul_z_naglowkiem_w_bazie_match or artykul_w_bazie;
  			if(naglowek or not tab_artykul[artykul_bez_naglowka_w_bazie])then
  				if(not naglowek)then
  					tab_artykul[artykul_bez_naglowka_w_bazie]=true;
  				 end
  				if(not naglowek)then
  						artykul_z_naglowkiem_w_bazie=artykul_bez_naglowka_w_bazie;
  				else
  					artykul_z_naglowkiem_w_bazie=artykul_w_bazie;
  				end;
  				local numer_artykulu_w_bazie;
  				if(numer>0)then
					numer_artykulu_w_bazie=stronicowyparser_potrzebne_modul.PoziomAdresu(artykul_bez_naglowka_w_bazie);
				end;
		    	local function Nastepny()
		    		 if(not nazwa)then
                		return 	artykul_z_naglowkiem_w_bazie;
  	   				end;
  	   				if(czy_table)then
  	   					return artykul_w_bazie[1][2];
  	   				else
  	   					return 	artykul_z_naglowkiem_w_bazie;
  	   				end;
		    	end;
  	   			if(i==1)then 
  	   				if(numer>0)then
  	   					local nadstrona_artykulu_w_bazie=stronicowyparser_potrzebne_modul.NazwaNadStrony(artykul_bez_naglowka,numer);
  	   					if((numer==numer_artykulu_w_bazie)and(nadstrona_artykulu==nadstrona_artykulu_w_bazie))then
  	                    	 return Nastepny();
  	   					end;
  	   				else
  	   					return Nastepny();
  	   				end;
  	   			else
  				    if((not naglowek)and(artykul_bez_naglowka_w_bazie==nazwa_artykulu_z_opcja_naglowek)
  				    	            or(((naglowek) and ((nazwa_artykulu_z_naglowkiem_match and artykul_z_naglowkiem_w_bazie_match)or(not nazwa_artykulu_z_naglowkiem_match and not artykul_z_naglowkiem_w_bazie_match)))
  				    	                                            and (artykul_z_naglowkiem_w_bazie==nazwa_artykulu)
  				    	                                            ))then
          	    		i=1;
          	    	end;
  				end;
  			end;
  		end;
  	end;
  end;
  if(i==1)then
  	   return "";
  end;
  return "(błąd)";
end;
p["PoprzedniArtykuł"]=function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  
  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local parametry_modul=require("Module:Parametry");
  local nazwa=parametry_modul.CzyTak(args["nazwa"]);
  
  local nazwa_artykulu=stronicowyparser_potrzebne_modul:NazwaArtykuluKsiazki(frame);
  
  local numer=tonumber(args[1]) or 0;
  local naglowek=parametry_modul.CzyTak(args["nagłówek"]);
  
  local nazwa_artykulu_z_naglowkiem_match=mw.ustring.match(nazwa_artykulu,"^([^#]*)#.*$")
  local nazwa_artykulu_z_opcja_naglowek=(not naglowek) and nazwa_artykulu_z_naglowkiem_match or nazwa_artykulu;
  
  local nadstrona_artykulu=(numer>0) and stronicowyparser_potrzebne_modul.NazwaNadStrony(nazwa_artykulu,numer) or nil;
  
  local artykul;
  local tab_artykul={};
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
	if(tab_lista[2])then
  		for _,artykul_w_bazie in ipairs(tab_lista[2])do
  			local artykul_z_naglowkiem_w_bazie;local artykul_bez_naglowka_w_bazie;
  			local czy_table=parametry_modul.TypeTable(artykul_w_bazie[1]);
  			if(czy_table)then
  				artykul_z_naglowkiem_w_bazie=artykul_w_bazie[1][1];
  			else
  				artykul_z_naglowkiem_w_bazie=artykul_w_bazie[1];
  			end;
  			local artykul_z_naglowkiem_w_bazie_match=mw.ustring.match(artykul_z_naglowkiem_w_bazie,"^([^#]*)#.*$")
  			artykul_bez_naglowka_w_bazie=artykul_z_naglowkiem_w_bazie_match or artykul_z_naglowkiem_w_bazie;
  			if(naglowek or not tab_artykul[artykul_bez_naglowka_w_bazie])then
  				if(not naglowek)then
  					tab_artykul[artykul_bez_naglowka_w_bazie]=true;
  				end;
  				if((not naglowek)and(artykul_bez_naglowka_w_bazie==nazwa_artykulu_z_opcja_naglowek)
  						             or(((naglowek) and ((nazwa_artykulu_z_naglowkiem_match and artykul_z_naglowkiem_w_bazie_match)or(not nazwa_artykulu_z_naglowkiem_match and not artykul_z_naglowkiem_w_bazie_match)))and(artykul_z_naglowkiem_w_bazie==nazwa_artykulu)))then
  					if(not artykul)then return "";end;
  					local czy_table_artykul=parametry_modul.TypeTable(artykul);
  					if(czy_table_artykul)then
  						if(not nazwa)then 
  							if(naglowek)then
	  							return artykul[1];
  							end;
  							artykul,_=mw.ustring.gsub(artykul[1],"^([^#]+)#(.*)$","%1");
  							return artykul;
  						else
  							return artykul[2];
  						end;
  					else
  					   if(naglowek)then
	  						return artykul;
  						end;
  						artykul,_=mw.ustring.gsub(artykul,"^([^#]+)#(.*)$","%1");
  						return artykul;
  					end;
  				end
  				if(numer>0)then
					local numer_artykulu_poprzedni=stronicowyparser_potrzebne_modul.PoziomAdresu(artykul_bez_naglowka_w_bazie);
					local nadstrona_artykulu_w_bazie=stronicowyparser_potrzebne_modul.NazwaNadStrony(artykul_bez_naglowka_w_bazie,numer);
  					if((numer==numer_artykulu_poprzedni)and(nadstrona_artykulu==nadstrona_artykulu_w_bazie))then
  						artykul=artykul_w_bazie[1];
  					end;
		    	else
		    		artykul=artykul_w_bazie[1];
  				end;
  			end;
  		end;
  	end;
  end;
  return "(błąd)";
end; 
p["PoziomNazwyArtykułu"]=function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  
  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local parametry_modul=require("Module:Parametry");
  local nazwa=parametry_modul.CzyTak(args["nazwa"]);
  
  local nazwa_artykulu=stronicowyparser_potrzebne_modul:NazwaArtykuluKsiazki(frame);
  return stronicowyparser_potrzebne_modul.PoziomAdresu(nazwa_artykulu);
end;
p["PierwszyArtykuł"]=function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  
  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local parametry_modul=require("Module:Parametry");
  local nazwa=parametry_modul.CzyTak(args["nazwa"]);
  local naglowek=parametry_modul.CzyTak(args["nagłówek"]);
  
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
	if(tab_lista[2])then
  		for _,artykul_w_bazie in ipairs(tab_lista[2])do
  			if(not nazwa)then
  	   			local artykul=parametry_modul.TypeTable(artykul_w_bazie[1]) and artykul_w_bazie[1][1] or artykul_w_bazie[1];
  	   		    return (not naglowek) and mw.ustring.gsub(artykul,"^([^#]*)#(.*)$","%1") or artykul;
  	   		else
  	   			return parametry_modul.TypeTable(artykul_w_bazie[1]) 
  	   			           and artykul_w_bazie[1][2] 
  	   			              or ((not naglowek) and mw.ustring.gsub(artykul_w_bazie[1],"^([^#]*)#(.*)$","%1") or artykul_w_bazie[1]);
  	   		end;
  		end;
  	end;
  end;
end;
p["OstatniArtykuł"]=function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  
  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local parametry_modul=require("Module:Parametry");
  local nazwa=parametry_modul.CzyTak(args["nazwa"]);
  local naglowek=parametry_modul.CzyTak(args["nagłówek"]);
  
  local ostatni_artykul;
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
	if(tab_lista[2])then
  		for _,artykul_w_bazie in ipairs(tab_lista[2])do
  			if(not nazwa)then
  	   			ostatni_artykul=parametry_modul.TypeTable(artykul_w_bazie[1]) and artykul_w_bazie[1][1] or artykul_w_bazie[1];
  	   		else
  	   			ostatni_artykul=parametry_modul.TypeTable(artykul_w_bazie[1]) and artykul_w_bazie[1][2] or artykul_w_bazie[1];
  	   		end;
  		end;
  	end;
  end;
  if(ostatni_artykul)then 
  	  return (not naglowek) and mw.ustring.gsub(ostatni_artykul,"^([^#]*)#(.*)$","%1") or ostatni_artykul;
  end;
  return "(błąd)";
end;
p["PomiędzyArtykuł"]=function(frame)
   local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
   local val=stronicowyparser_potrzebne_modul:ObliczeniaInformacje(frame);
   if(not val)then return "(błąd)";end;
   local element=stronicowyparser_potrzebne_modul:PomiedzyArtykul(frame) or nil;
   if(not element)then return "(błąd)";end;
     
   local args=stronicowyparser_potrzebne_modul:Args(frame);
   local parametry_modul=require("Module:Parametry");
   local nazwa=parametry_modul.CzyTak(args["nazwa"]);
  
   local czy_table=parametry_modul.TypeTable(element);
   local element=czy_table and element[1] or element;
  
   if(not nazwa)then return (not naglowek) and mw.ustring.gsub(element,"^([^#]*)#(.*)$","%1") or element;end;
   return czy_table and element[2] or ((not naglowek) and mw.ustring.gsub(element,"^([^#]*)#(.*)$","%1") or element);
end;
p["LosowyArtykuł"]=function(frame)
    local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
    local val=stronicowyparser_potrzebne_modul:ObliczeniaInformacje(frame);
    if(not val)then return "(błąd)";end;
    local element=stronicowyparser_potrzebne_modul:LosowyArtykul(frame);
    if(not element)then return "(błąd)";end;
       
    local args=stronicowyparser_potrzebne_modul:Args(frame);
    local parametry_modul=require("Module:Parametry");
    local nazwa=parametry_modul.CzyTak(args["nazwa"]);

    local czy_table=parametry_modul.TypeTable(element);
    local element=czy_table and element[1] or element;
   
    if(not nazwa)then return mw.ustring.gsub(element,"^([^#]*)#(.*)$","%1") or element;end;
    return czy_table and element[2] or mw.ustring.gsub(element,"^([^#]*)#(.*)$","%1") or element;
end;
local function PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,typ)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  
  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local parametry_modul=require("Module:Parametry");
  local poziomowo=parametry_modul.CzyTak(args["poziomowo"]);
  
  local ktory=(tonumber(args["który"]) or 1);
  
  local parametr_pierwszy_szablonu=typ and ((not poziomowo) and (tonumber(args[1]) or 1) or args[1]) or args[1];
  
  if(not typ)then
		parametr_pierwszy_szablonu,_=mw.ustring.gsub(parametr_pierwszy_szablonu,"^[%s_]+","");
		parametr_pierwszy_szablonu,_=mw.ustring.gsub(parametr_pierwszy_szablonu,"[%s_]+$","");
		parametr_pierwszy_szablonu,_=mw.ustring.gsub(parametr_pierwszy_szablonu,"[%s_]+"," ");
  end;
  
  local HNumer=stronicowyparser_potrzebne_modul.LiczonyHNumer();
  local HNumer_2=nil;
  local tab_numer_2=nil;
  local tab_numer={};
  local i=(not poziomowo) and 0 or nil;
  
  local i_2=nil;
  
  local juz_nie_rozwazaj_spisu_tresci=nil;
  local juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
  
  local stronicowyparser_obiekty=mw.loadData("Module:StronicowyParser/obiekty");
  local tab_rozdzialow_glownych_spisow_tresci_ksiazek=stronicowyparser_obiekty.tab_rozdzialow_glownych_spisow_tresci_ksiazek;
  local tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek=stronicowyparser_obiekty.tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek;
  
  local poziom_spisu_tresci=nil;
  
  local pierwszy_dodatni_spis_tresci=nil;
  
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
        local rozdzial=tab_lista[1][1];
        local poziom_rozdzialu=tab_lista[1][2];
        if(poziom_rozdzialu>0)then
        	   
        	   local czy_nie_ten_rozdzial=nil;
        	   
        	   local czy_jest_teraz_spis_tresci=tab_rozdzialow_glownych_spisow_tresci_ksiazek[rozdzial];local czy_nie_ten_rozdzial;
        	   if((not juz_nie_rozwazaj_spisu_tresci)and(not juz_nie_rozwazaj_rozdzialu_spisu_tresci)and(czy_jest_teraz_spis_tresci))then
        			poziom_spisu_tresci=poziom_rozdzialu;
        			juz_nie_rozwazaj_rozdzialu_spisu_tresci=true;
        			czy_nie_ten_rozdzial=tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek[rozdzial];
        		elseif((not juz_nie_rozwazaj_spisu_tresci)and(juz_nie_rozwazaj_rozdzialu_spisu_tresci))then
        			if((poziom_spisu_tresci<poziom_rozdzialu))then
        				czy_nie_ten_rozdzial=false;
        			else
        				juz_nie_rozwazaj_spisu_tresci=true;
        				czy_nie_ten_rozdzial=tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek[rozdzial];
        			end;
        		else
        			local juz_nie_rozwazaj_spisu_tresci=nil;
					local juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
        			czy_nie_ten_rozdzial=tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek[rozdzial];
        		end;
        		
        		if(not czy_nie_ten_rozdzial)then
        			if(poziomowo)then
        				local hnumer=HNumer(poziom_rozdzialu);
        				if(#tab_numer<hnumer)then
        					for i=#tab_numer+1,hnumer,1 do
        						table.insert(tab_numer,1);
        					end;
        				elseif(#tab_numer>hnumer)then
        					for i=#tab_numer, hnumer+1,-1 do
        						table.remove(tab_numer,i);
        					end;
        					tab_numer[#tab_numer]=tab_numer[#tab_numer]+1;
        				else
        					tab_numer[#tab_numer]=tab_numer[#tab_numer]+1;
        				end;
        				----
        				local wartosc=__FUNKCJA(poziomowo,i,tab_numer,ktory,parametr_pierwszy_szablonu,rozdzial);
       					----
        				if(wartosc)then return wartosc;end;
        				----
        				if((czy_jest_teraz_spis_tresci)and(not pierwszy_dodatni_spis_tresci))then
        					HNumer_2=HNumer;
        					HNumer=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        					tab_numer_2=tab_numer;
        					tab_numer={};
        					pierwszy_dodatni_spis_tresci=true;
        				elseif((pierwszy_dodatni_spis_tresci)and(poziom_spisu_tresci>=poziom_rozdzialu))then
        					HNumer=HNumer_2;
        					HNumer_2=nil;
    	    				tab_numer=tab_numer_2;
	        				tab_numer_2=nil;
	        				pierwszy_dodatni_spis_tresci=false;
        				end;
        			else
        				i=i+1;
        				----
        				local wartosc=__FUNKCJA(poziomowo,i,tab_numer,ktory,parametr_pierwszy_szablonu,rozdzial);
        				---
        				if(wartosc)then return wartosc;end;
        				---
        				if((czy_jest_teraz_spis_tresci)and(not pierwszy_dodatni_spis_tresci))then
							i_2=i;
							i=0;
							pierwszy_dodatni_spis_tresci=true;
        				elseif((pierwszy_dodatni_spis_tresci)and(poziom_spisu_tresci>=poziom_rozdzialu))then
							i=i_2;
							i_2=nil;
							pierwszy_dodatni_spis_tresci=false;
        				end;
        			end;
        		end;
        	end;
	  end;
end;
p["PobierzNumerNagłówka"]=function(frame)
	local s=1;
	local function __FUNKCJA(poziomowo,i,tab_numer,ktory,naglowek,rozdzial)
		if(naglowek==rozdzial)then
			if(s==ktory)then
				if(poziomowo)then
					if(#tab_numer==0)then return;end;
					return table.concat(tab_numer,".");
				else
  					return i;
				end;
			end;
			s=s+1;
		end;
	end;
	return PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,false);
end;
p["PobierzNazwęNagłówka"]=function(frame)
	local s=1;
	local function __FUNKCJA(poziomowo,i,tab_numer,ktory,numer,rozdzial)
		if(poziomowo)then
			if(#tab_numer==0)then return;end;
			if(numer==table.concat(tab_numer,"."))then
				if(s==ktory)then
					return rozdzial;
				else
					s=s+1;
				end;
			end;
		elseif(numer==i)then
			if(s==ktory)then
  				return rozdzial;
  			else
  				s=s+1;
  			end;
		end
	end;
	return PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,true);
end;
local function PobierzNumerLubNazweArtykulu(frame,__FUNKCJA,typ)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  
  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local parametry_modul=require("Module:Parametry");
  local naglowek=parametry_modul.CzyTak(args["nagłówek"]);
  
  local tab_artykul=(not naglowek)and {} or nil;
   
  local poziomowo=parametry_modul.CzyTak(args["poziomowo"]);
  local tab_poziomowo={};
  local tab_poziomowo_1={};
  local tab_poziomowo_2={};
  
  local html_modul=require("Module:Html");
  
  local pierwszy_parametr_szablonu=args[1] and (typ and ((not poziomowo) and (tonumber(args[1]) or 1) or args[1]) 
                                                       or ((not naglowek) and mw.ustring.gsub(html_modul["PoprawAdresNagłówkaStronyAdresu"](html_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](args[1])),"^([^#]*)#(.*)$","%1") or html_modul["PoprawAdresNagłówkaStronyAdresu"](html_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](args[1])))
                                                )
                                              or (typ and 1 or "Przykładowy artykuł");
  
  local ktory=(tonumber(args["ktory"]) or 1);
  
  local i=(not poziomowo) and 1 or nil;
  
  local stronicowyparser_obiekty=mw.loadData("Module:StronicowyParser/obiekty");
  local tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek=stronicowyparser_obiekty.tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek;
  
  local tab_rozdzialow_glownych_spisow_tresci_ksiazek=stronicowyparser_obiekty.tab_rozdzialow_glownych_spisow_tresci_ksiazek;
  
  --local HNumer=poziomowo and stronicowyparser_potrzebne_modul.LiczonyHNumer() or nil;
  local HNumerPoziomow_4=nil--poziomowo and stronicowyparser_potrzebne_modul.LiczonyHNumer() or nil;
  local HNumerPoziomow_3=nil
  local HNumerPoziomow_2=nil;
  local HNumerPoziomow_1=nil;
  
  local HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
  local HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
  
  local HNumerPoziomowNaglowkow_1=nil;
  local HNumerPoziomowNaglowkow_2=nil;
  --local HNumerPoziomowInnychNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
  
  local tab_numer=poziomowo and {} or nil;
  tab_numer_1=nil;
  tab_numer_3=nil
  tab_numer_4=nil;--poziomowo and {} or nil;
  
  local spis=false;
  local czy_poziom_spisu_tresci=nil;
  
  local pierwszy_dodatni_naglowek=nil;
  local pierwszy_ujemny_naglowek=nil;
  
  
  local pierwszy_poziom=nil;
  
  local juz_nie_rozwazaj_spisu_tresci=nil;
  local juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
  local poprzedni_poziom_znakowy_rozdzialu=nil;
  local poprzedni_tab_poziomowo=nil;
  
  local poziom_pierwszego_dodatniego_naglowka=0;
  local poziom_pierwszego_ujemnego_naglowka=0;
  
  local poziom_zerowego_naglowka=0;
  
  local poziom_spisu_tresci_naglowka=0;
  
  local numer_poziomu=nil;
  
  local ostatni_rozdzial_dodatni=nil;
  local pierwszy_rozdzial_dodatni=nil;
  
  local glowny_dodatni_rozdzial=nil;
  local glowny_ujemny_rozdzial=nil;
  
  local spis_tresci=nil;
  
  local poziom_pierwszego_ujemnego_spisu_tresci=nil;
  
  local ostatnie_m_rozdzialu_dodatniego=nil;
  
  for m,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
  	local tab_poprzedni_artykul_w_bazie=nil;
  	local rozdzial;
  	local poziom_rozdzialu;
  	local poziom_znakowy_rozdzialu=nil;
  	
	if(poziomowo)then
        poziom_rozdzialu=tab_lista[1][2];
        rozdzial=tab_lista[1][1];
        tab_poziomowo={};
        
        local czy_jest_teraz_spis_tresci=tab_rozdzialow_glownych_spisow_tresci_ksiazek[rozdzial];local czy_nie_ten_rozdzial;
        if((not juz_nie_rozwazaj_spisu_tresci)and(not juz_nie_rozwazaj_rozdzialu_spisu_tresci)and(czy_jest_teraz_spis_tresci))then
        	poziom_spisu_tresci=poziom_rozdzialu;
        	juz_nie_rozwazaj_rozdzialu_spisu_tresci=true;
        	czy_nie_ten_rozdzial=tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek[rozdzial];
        elseif((not juz_nie_rozwazaj_spisu_tresci)and(juz_nie_rozwazaj_rozdzialu_spisu_tresci))then
        	if((poziom_spisu_tresci<poziom_rozdzialu))then
        		czy_nie_ten_rozdzial=false;
        	else
        		juz_nie_rozwazaj_spisu_tresci=true;
        		czy_nie_ten_rozdzial=tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek[rozdzial];
        	end;
        else
        	 czy_nie_ten_rozdzial=tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek[rozdzial];
        end;
        
        --if(not czy_nie_ten_rozdzial)then
        	poprzedni_poziom_znakowy_rozdzialu=poziom_znakowy_rozdzialu;
        	poziom_znakowy_rozdzialu=poziom_rozdzialu;
            poziom_rozdzialu=math.abs(poziom_rozdzialu);
            if(poziom_znakowy_rozdzialu>0)then
            	
            	poziom_pierwszego_ujemnego_spisu_tresci=nil;
            	poprzedni_tab_poziomowo=nil;
            	
            	poziom_zerowego_naglowka=0;
            	
            	if(glowny_ujemny_rozdzial)then
            		HNumerPoziomow=HNumerPoziomow_4;
            		HNumerPoziomow_4=nil;
            		tab_numer=tab_numer_4;
            		poziom_pierwszego_ujemnego_naglowka=nil;
            		glowny_ujemny_rozdzial=nil;
            	end;
            	if(pierwszy_ujemny_spis_tresci)then
            		HNumerPoziomow=HNumerPoziomow_2;
            		HNumerPoziomow_2=nil;
            		tab_numer=tab_numer_2;
            		tab_numer_2=nil;
            		pierwszy_ujemny_spis_tresci=nil;
            		czy_poziom_ujemny_spisu_tresci=nil;
            	end;
            	
            	if(not glowny_dodatni_rozdzial)then
            		if((juz_nie_rozwazaj_rozdzialu_spisu_tresci)and(not juz_nie_rozwazaj_spisu_tresci)and(not czy_jest_teraz_spis_tresci)and(not spis_tresci))then
            			  numer_rozdzialu=HNumerPoziomow(poziom_rozdzialu,1);
            			  spis_tresci=true;
            		else
            			if(not pierwszy_rozdzial_dodatni)then
            				pierwszy_rozdzial_dodatni=1;
            				numer_rozdzialu=HNumerPoziomow(poziom_rozdzialu,1);
            			else
            				numer_rozdzialu=HNumerPoziomow(poziom_rozdzialu);
            			end;
            		end;
            	else
            		numer_rozdzialu=HNumerPoziomow(poziom_rozdzialu,1);
            		glowny_dodatni_rozdzial=false;
            	end;
            	ostatni_rozdzial_dodatni=poziom_rozdzialu;
            elseif(poziom_znakowy_rozdzialu<0)then
            	if(not glowny_ujemny_rozdzial)then
            		 --if((juz_nie_rozwazaj_rozdzialu_spisu_tresci)and(not juz_nie_rozwazaj_spisu_tresci)and(not spis_tresci))then
            		--	  numer_rozdzialu=HNumerPoziomow(poziom_rozdzialu,1);
            		--	  spis_tresci=true;
            		--else
            			numer_rozdzialu=HNumerPoziomow(poziom_rozdzialu+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka);
            		--end;
            	else
            		numer_rozdzialu=HNumerPoziomow(poziom_rozdzialu+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka,1);
            		glowny_ujemny_rozdzial=false;
            	end;
            else
            	if((m>1)or((m==1)and(not czy_jest_teraz_spis_tresci)))then
            		poziom_zerowego_naglowka=1;
            		numer_rozdzialu=HNumerPoziomow( 1 + (ostatni_rozdzial_dodatni or 0) + 0);
            		
            		poziom_znakowy_rozdzialu=-1;
            		poziom_rozdzialu=1;
            	else
            		poziom_zerowego_naglowka=0;
            		numer_rozdzialu=0;
            	end;
            end;
            
            local numer;
            if(poziom_znakowy_rozdzialu>0)then 
            	local numer=HNumerPoziomowNaglowkow(poziom_znakowy_rozdzialu);
            	--HNumerPoziomowInnychNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
            elseif(poziom_znakowy_rozdzialu<0)then
            	--local numer=HNumerPoziomowInnychNaglowkow(-poziom_znakowy_rozdzialu);
            end;
             
            if((m>1)
       	    	 and(tab_lista_artykulow_w_ksiazce[m-1])
       	    		and(tab_lista_artykulow_w_ksiazce[m-1][2])
       	    		   and(#tab_lista_artykulow_w_ksiazce[m-1][2]>0)
       	        			and(tab_lista_artykulow_w_ksiazce[m-1][2][#tab_lista_artykulow_w_ksiazce[m-1][2]][2]==0)
    		)then
    		    local lens_tab_numer=#tab_numer;
    		    local roznica=math.min(#poprzedni_tab_poziomowo+#tab_numer,numer_rozdzialu)-#tab_numer;
    		    roznica=((roznica>0) and roznica or 0);
        		for i=1,roznica,1 do
           			tab_numer[i+lens_tab_numer]=poprzedni_tab_poziomowo[i];
        		end;     
        	end;
            
            if((czy_jest_teraz_spis_tresci)and(juz_nie_rozwazaj_rozdzialu_spisu_tresci))then 
            	if(poziom_znakowy_rozdzialu>0)then
            		poziom_spisu_tresci_naglowka=poziom_rozdzialu;
            	else
            		poziom_pierwszego_ujemnego_spisu_tresci=poziom_rozdzialu;
            	end;
            end;
        	
        	if(poziom_rozdzialu>0)then
        		if((((czy_poziom_dodatni_spisu_tresci)and(poziom_znakowy_rozdzialu>0))or((czy_poziom_ujemny_spisu_tresci)and(poziom_znakowy_rozdzialu<0)))
        				and(poziom_spisu_tresci)and(poziom_spisu_tresci>=poziom_rozdzialu)
        		)then
        			if(poziom_znakowy_rozdzialu>0)then
        				tab_numer=tab_numer_1;
        				tab_poziomowo={};
        				poziom_spisu_tresci=nil;
        				HNumerPoziomow=HNumerPoziomow_1;
        				HNumerPoziomowNaglowkow=HNumerPoziomowNaglowkow_1;
        				czy_poziom_dodatni_spisu_tresci=false;
        			elseif(poziom_znakowy_rozdzialu<0)then
        				tab_numer=tab_numer_2;
        				tab_poziomowo={};
        				poziom_spisu_tresci=nil;
        				HNumerPoziomow=HNumerPoziomow_2;
        				HNumerPoziomowNaglowkow=HNumerPoziomowNaglowkow_2;
        				czy_poziom_ujemny_spisu_tresci=false;
        				pierwszy_ujemny_spis_tresci=nil;
        			end;
        		end;
        		local hnumer=numer_rozdzialu;

        		if(poprzedni_tab_poziomowo)then
        			local lens=math.min(#poprzedni_tab_poziomowo,hnumer-#tab_numer);
        			local len_tab_numer=#tab_numer;
        			for i=1,lens,1 do
        			 	tab_numer[len_tab_numer+i]=poprzedni_tab_poziomowo[i];
        			end;
        		end;
        		if(#tab_numer<hnumer)then
        			for i=#tab_numer+1,hnumer,1 do
        				table.insert(tab_numer,1);
        			end;
        		elseif(#tab_numer>hnumer)then
        			for i=#tab_numer, hnumer+1,-1 do
        				table.remove(tab_numer,i);
        			end;
        			tab_numer[#tab_numer]=(tab_numer[#tab_numer] or 0) + 1;
        		else
        			tab_numer[#tab_numer]=(tab_numer[#tab_numer] or 0) + 1;
        		end;
        	else
        		--[[if(poziom_rozdzialu==0)then
        			if(tab_lista_artykulow_w_ksiazce[m+1])then
        		    	if(tab_lista_artykulow_w_ksiazce[m+1][1][2]>0)then
        		            tab_numer={0,};
        		    	elseif(tab_lista_artykulow_w_ksiazce[m+1][1][2]<0)then
    		        		tab_numer={};
        		        end;
        		     else    	 
        				tab_numer={};
        			end;
        		end;]]
        	end;
       --end;
        if((czy_jest_teraz_spis_tresci)and(((not pierwszy_dodatni_spis_tresci)and(poziom_znakowy_rozdzialu>0))or((not pierwszy_ujemny_spis_tresci)and(poziom_znakowy_rozdzialu<0))))then
        	if(poziom_znakowy_rozdzialu>0)then
        		tab_poziomowo_1=tab_poziomowo;
        		tab_poziomowo={};
        		czy_poziom_dodatni_spisu_tresci=true;
        	
        		HNumerPoziomow_1=HNumerPoziomow;
        		HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        	
        		HNumerPoziomowNaglowkow_1=HNumerPoziomowNaglowkow;
        		HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        
        		tab_numer_1=tab_numer;
        		tab_numer={};
        		pierwszy_dodatni_spis_tresci=true;
        	elseif(poziom_znakowy_rozdzialu<0)then
        		tab_poziomowo_2=tab_poziomowo;
        		tab_poziomowo={};
        		czy_poziom_ujemny_spisu_tresci=true;
        	
        		HNumerPoziomow_2=HNumerPoziomow;
        		HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        	
        		HNumerPoziomowNaglowkow_2=HNumerPoziomowNaglowkow;
        		HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        
        		tab_numer_2=tab_numer;
        		tab_numer={};
        		pierwszy_ujemny_spis_tresci=true;
        	end;
        end;
        local function OTakimSamymLubMniejszymPoziomie(m)
        	if(poziom_rozdzialu==0)then return true;end;
        	local lens=parametry_modul["LiczbaElementówNumerowanychTablicy"](tab_lista_artykulow_w_ksiazce);
        	if(m==lens)then return true;end;
            if(poziom_znakowy_rozdzialu>0)then
        		for k=m+1,lens,1 do
        			if(tab_lista_artykulow_w_ksiazce[k])then
        				if(tab_lista_artykulow_w_ksiazce[k][1][2]>0)then
								if(math.abs(tab_lista_artykulow_w_ksiazce[k][1][2])<=poziom_rozdzialu)then
        			    			return true;
								end;
        			    end;
        			end;
        		end;
        	elseif(((m==1)or((tab_lista_artykulow_w_ksiazce[m-1])and(tab_lista_artykulow_w_ksiazce[m-1][1][2]>0)))and(poziom_znakowy_rozdzialu<0))then
        				for k=m+1,lens,1 do
        					if(tab_lista_artykulow_w_ksiazce[k])then
        						if(tab_lista_artykulow_w_ksiazce[k][1][2]<0)then
									if(math.abs(tab_lista_artykulow_w_ksiazce[k][1][2])<=poziom_rozdzialu)then
        			    				return true;
									end;
    			    			else
    			    				break;
        						end;
        					end;
        				end;
        	else
        		return true;
        	end;
        end;
 --      if(not czy_nie_ten_rozdzial)then
    		if((tab_lista[2])
       			and(tab_lista[2][1])
       	    		and(tab_lista[2][1][2]==0)
       	    			and(not tab_lista[2][1][4])
       	        			and(tab_lista_artykulow_w_ksiazce[m+1])
       	        			   and(((poziom_znakowy_rozdzialu>0)
        							and(tab_lista_artykulow_w_ksiazce[m+1][1][2]>0)
        		    					and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2])>poziom_rozdzialu)
        		    				)or(
        		    					((poziom_znakowy_rozdzialu<0)
        									and(tab_lista_artykulow_w_ksiazce[m+1][1][2]<0)
        		    							and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2])>poziom_rozdzialu)
        		    				)
        		    				)or(
        		    					(poziom_znakowy_rozdzialu==0)and(tab_lista_artykulow_w_ksiazce[m+1][1][2]~=0)
        		    				))
        	)then
       			if(m==1)then
       				  tab_numer={0,}
       			else
       		 		  table.insert(tab_numer,0);
       			end;
    		elseif((m==1)and(not tab_lista_artykulow_w_ksiazce[m+1]))then
        		 tab_numer={};
    		elseif((poziomowo)and(m==1)and(poziom_znakowy_rozdzialu==0)and(tab_lista_artykulow_w_ksiazce[m+1])and(tab_lista_artykulow_w_ksiazce[m+1][1][2]<0))then
    	    	 tab_numer={};
    		elseif((poziomowo)and(m==1)and(poziom_znakowy_rozdzialu==0)and(tab_lista_artykulow_w_ksiazce[m+1])and(tab_lista_artykulow_w_ksiazce[m+1][1][2]>0))then
    			tab_numer={0,}
        	elseif((poziomowo)and(m==2)and(poziom_znakowy_rozdzialu<0)and(tab_lista_artykulow_w_ksiazce[m-1])and(tab_lista_artykulow_w_ksiazce[m-1][1][2]==0))then
        		local min=math.min(math.abs(numer_rozdzialu),#poprzedni_tab_poziomowo);
        		for i=#poprzedni_tab_poziomowo,min+1,-1 do
        			table.remove(poprzedni_tab_poziomowo,i)
        		end;
        		tab_numer=poprzedni_tab_poziomowo;
        		tab_numer[#tab_numer]=(tab_numer[#tab_numer] or 0)+1;
        	elseif((not czy_jest_teraz_spis_tresci)and(((not pierwszy_dodatni_naglowek)and(poziom_znakowy_rozdzialu>0))or((not pierwszy_ujemny_naglowek)and(poziom_znakowy_rozdzialu<0))))then
            	if(poziom_rozdzialu>0)then
        			if(not OTakimSamymLubMniejszymPoziomie(m))then
        				HNumerPoziomowNaglowkow_2=HNumerPoziomowNaglowkow;
        				HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        				
        				if(poziom_znakowy_rozdzialu>0)then
        					tab_numer_3=tab_numer;
	        				tab_numer={0,};
        				
        				    HNumerPoziomow_3=HNumerPoziomow;
        					HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        					
        					pierwszy_dodatni_naglowek=true;
        					poziom_pierwszego_dodatniego_naglowka=poziom_rozdzialu;
        					glowny_dodatni_rozdzial=true;
        				else
        					tab_numer_4=tab_numer;
        					tab_numer=parametry_modul["KopiujTabelęElementów"](tab_numer);
	        				tab_numer[#tab_numer]=0;
        				
        				    HNumerPoziomow_4=HNumerPoziomow;
        					HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        				
        					pierwszy_ujemny_naglowek=true;
        					poziom_pierwszego_ujemnego_naglowka=poziom_rozdzialu;
        					glowny_ujemny_rozdzial=true;
        				end;
        			else
        				if(poziom_znakowy_rozdzialu>0)then pierwszy_dodatni_naglowek=true;else pierwszy_ujemny_naglowek=true;end;
        			end;
            	end;
        	elseif((czy_jest_teraz_spis_tresci)and(not czy_nie_ten_rozdzial))then
        		if((not spis)and(poziom_rozdzialu>0)
        			    and(tab_lista_artykulow_w_ksiazce[m+1])
        			       and((
        		    			(poziom_znakowy_rozdzialu>0)	
        		    				and(tab_lista_artykulow_w_ksiazce[m+1][1][2]>0)
        		        				and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2])>poziom_rozdzialu)
        		           )or(
        		            	(poziom_znakowy_rozdzialu<0)
        		            		and(tab_lista_artykulow_w_ksiazce[m+1][1][2]<0)
        		        					and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2])>poziom_rozdzialu)
        		           ))
            	)then
        			tab_numer={0,};
        			spis=true;
            	end
        	elseif((tab_lista_artykulow_w_ksiazce[m+1])
        		   and((
        		   	     (poziom_znakowy_rozdzialu>0)
        		   	       and(tab_lista_artykulow_w_ksiazce[m+1][1][2]>0)
        			        	and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2])>poziom_rozdzialu)
        			  )or(
        			      (poziom_znakowy_rozdzialu<0)  
        			    	and(tab_lista_artykulow_w_ksiazce[m+1][1][2]<0)
        			        	 and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2])>poziom_rozdzialu)
        			  ))
        	)then
        		table.insert(tab_numer,0);
        	end;
   --    end;
	end;
 	if(tab_lista[2])then
 		local HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
 		local HNumerPoziomu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        
        local czy_ostatni_naglowek=nil;

 		local czy_tytul_rozdzial=nil;local poprzedni_b=nil;local ile_odjac=0;
 		
 		local HNumerB=nil;

 		local poprzedni_poziom_artykulu=nil;
 		local czy_ma_elementy=nil;
  		for p,artykul_w_bazie in ipairs(tab_lista[2])do
  			local artykul=artykul_w_bazie[1][1] or artykul_w_bazie[1];
			artykul=(not naglowek)and mw.ustring.gsub(artykul,"^([^#]*)#(.*)$","%1") or artykul;
			if(naglowek or not tab_artykul[artykul])then
				czy_ma_elementy=true;
				if(not naglowek)then
					tab_artykul[artykul]=true;
				end;
				local tab_artykul_w_bazie;
				
				if(poziomowo)then
					  local poziom_artykulu=artykul_w_bazie[2];
					  local function ToNumberPoziomArtykulu(poziom_artykulu)
					  	  local numer=tonumber(poziom_artykulu) or 1;
					  	  if(numer<1)then numer=1;end;
					  	  return numer;
					  end;
  				      poziom_artykulu=ToNumberPoziomArtykulu(poziom_artykulu);
  				      
  				      local poziom_poprzedni_artykulu=poziom_artykulu;
  				      local numer_poziomu=HNumerPoziomow(poziom_artykulu+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka);
  					  
  					  local prefix_poprzedni_poziom_artykulu=poprzedni_poziom_artykulu;
  					  
  					  if(p>1)then
  							local numer_poprzedni=tonumber(tab_lista[2][p-1][2]) or 1;
  							local id_poprzednie=tab_lista[2][p-1][4];
  							local numer=tonumber(tab_lista[2][p][2]) or 1;
  							local id=tab_lista[2][p][4];
  							if((numer_poprzedni==0)and(not id_poprzednie)and(not id)and(numer>0))then
  								if(#tab_numer>(HNumerPoziomowNaglowkow(0) or 0))then
  					  				tab_numer[#tab_numer]=(tab_numer[#tab_numer] or 0)+1;
  					  				tab_poziomowo={};
  					  			end;
  							end;
  					  end;
  					  local prefix_poziom_artykulu=poziom_artykulu;
					  local b=0;
					  local tab_artykul_w_bazie=mw.text.split(artykul,"/");
					  
					  if(tab_poprzedni_artykul_w_bazie)then
  							for c=1,#tab_artykul_w_bazie,1 do
					  			local podstrona_artykul=tab_artykul_w_bazie[c];
					  			local podstrona_nazwy_artykulu=tab_poprzedni_artykul_w_bazie[c];
					  			if(podstrona_artykul==podstrona_nazwy_artykulu)then
					  	  			b=b+1;
					  			end;
  							end;
  							if(poziom_znakowy_rozdzialu<0)then
  								if(#tab_numer~=0)then
  									if(poziom_rozdzialu==poziom_artykulu)then
  											local tab_numer2={};
  											for i=1,(HNumerPoziomowNaglowkow(0) or 0),1 do
  												tab_numer2[i]=tab_numer[i];
  											end;
  											local tab_poziomowo2={};
  											for i=(HNumerPoziomowNaglowkow(0) or 0)+1,#tab_numer,1 do
  												tab_poziomowo2[i-(HNumerPoziomowNaglowkow(0) or 0)]=tab_numer[i];
  											end;
  											local indeks=(((HNumerPoziomowNaglowkow(0) or 0)+1>#tab_numer) and 0 or (#tab_numer-(HNumerPoziomowNaglowkow(0) or 0)));
  											for i=1,numer_poziomu,1 do
  												tab_poziomowo2[i+indeks]=tab_poziomowo[i];
  											end;
  											tab_numer=tab_numer2;
  											tab_poziomowo=tab_poziomowo2;
  											--[[tab_poziomowo=tab_numer;
  											tab_numer={};]]
  											HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
  											--local numer_poziomu=HNumerPoziomow(poziom_artykulu+(ostatni_rozdzial_dodatni or 0),#tab_poziomowo+1);
  									elseif(poziom_artykulu<=(poziom_pierwszego_ujemnego_naglowka or 0))then
  										tab_poziomowo=tab_numer_4;
  										tab_numer={};
  										HNumerArtykulu=HNumerPoziomow_4;
  									elseif((poziom_artykulu>(poziom_pierwszego_ujemnego_naglowka or 0))and(poziom_poprzedni_artykulu>(poziom_pierwszego_ujemnego_spisu_tresci or 0))and(poziom_artykulu<=(poziom_pierwszego_ujemnego_spisu_tresci or 0)))then
  										HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
  										for i=#tab_poziomowo,numer_poziomu+1,-1 do
  											table.remove(tab_numer,i);
  										end;
  										tab_numer[#tab_numer]=(tab_numer[#tab_numer] or 0 ) + 1;
  										tab_poziomowo=tab_numer;
  										tab_numer={};
  									end;
  								end;
  							end;
  					  elseif(#tab_numer>numer_poziomu)then
					  		tab_poziomowo={};
					  		tab_poziomowo[1]=tab_numer[numer_poziomu];
					  		for i=#tab_numer,numer_poziomu,-1 do
					  			  table.remove(tab_numer,i);
					  		end;
  					  elseif(#tab_numer<=numer_rozdzialu) then
  					  		local numer_rozdzialu_dodatniego=(HNumerPoziomowNaglowkow(0) or 0);
  					  		if(numer_rozdzialu_dodatniego>0)then
  					  			if(#tab_numer>=numer_rozdzialu_dodatniego)then
					  				local tab_numer2={};
					  				for i=1,numer_rozdzialu_dodatniego,1 do
					  					tab_numer2[i]=tab_numer[i];
					  				end;
					  				tab_poziomowo={};
					  				for i=numer_rozdzialu_dodatniego+1,#tab_numer,1 do
					  					tab_poziomowo[i-numer_rozdzialu_dodatniego]=tab_numer[i];
					  				end;
					  				tab_numer=tab_numer2;
					  			end;
					  		end;
  					  end;
					  if(poprzedni_poziom_artykulu)then
					  		if(poprzedni_poziom_artykulu~=poziom_artykulu)then 
					  			ile_odjac=0;
					  			HNumerB=stronicowyparser_potrzebne_modul.LiczonyHNumer();
					  		end;
					  else
					  		ile_odjac=0;
					  		HNumerB=stronicowyparser_potrzebne_modul.LiczonyHNumer();
					  end;
  					  poprzedni_poziom_artykulu=poziom_artykulu;
  					  local czy_z_rozdzialem=(tab_artykul_w_bazie[1]==rozdzial);
  				      if((p==1)and(czy_z_rozdzialem))then b=1;end;
  					  czy_tytul_rozdzial=((p==1)and true or czy_tytul_rozdzial) and (czy_z_rozdzialem);
  					  
  					  if(poprzednie_b)then
  					  	    local roznica_b=b-b_poprzednie;roznica_b=((roznica_b>0) and 1 or ((roznica_b<0) and -1 or 0));
  					  		local ile_odjac_dodatek=HNumerB(#tab_artykul_w_bazie-b,nil,true)-(#tab_poprzedni_artykul_w_bazie-b_poprzednie)-roznica_b;
  					  		ile_odjac=ile_odjac+b-b_poprzednie+ile_odjac_dodatek;
  					  		ile_odjac=((ile_odjac>0) and ile_odjac or 0);
  						end;
  					  
  					  local dodatek=((czy_tytul_rozdzial)and (b-1) or b)-ile_odjac;
  					  dodatek=((dodatek>0)and dodatek or 0);
  					  poprzedni_b=b;
  					  
  					  if(not czy_ostatni_naglowek)then
  							if((poziomowo)and(poziom_znakowy_rozdzialu<0)and((HNumerPoziomowNaglowkow(0) or 0)>0))then
  								if(poziom_rozdzialu>=poziom_artykulu)then
 									local numer_poziomu=HNumerPoziomu(poziom_rozdzialu,numer_rozdzialu-(HNumerPoziomowNaglowkow(0) or 0));
 								end;
  							end;
  							czy_ostatni_naglowek=true;
 					  end;
  					  
					  local stala=poziom_artykulu;
					  
					  local numer_poziomu=HNumerPoziomu(stala);
					  poziom_artykulu=stala+dodatek;
					  
					  local numer=HNumerArtykulu(poziom_artykulu);
					  local roznica=numer_poziomu-numer;
					  
					  if(roznica>0)then
					  		numer=HNumerArtykulu(poziom_artykulu,numer_poziomu);
					  end;
					  
                      if(#tab_poziomowo<numer)then
                      	   for i=#tab_poziomowo+1,numer,1 do
                      			table.insert(tab_poziomowo,1);
                      	   end;
                      else
                      	  if(#tab_poziomowo>numer)then
                      	  	   for i=#tab_poziomowo,numer+1,-1 do
                      	  	   	  table.remove(tab_poziomowo,i);
                      	  	   end;
                      	  end;
                      	  tab_poziomowo[#tab_poziomowo]=(tab_poziomowo[#tab_poziomowo] or 0)+1;
                      end;
                      tab_poprzedni_artykul_w_bazie=tab_artykul_w_bazie;
				end;
				local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,artykul,tab_numer,tab_poziomowo);
				if(poziomowo)then
					if(tab_lista[2][p+1])then
  						local numer_nastepny=tonumber(tab_lista[2][p+1][2]) or 1;
  						local id_nastepny=tab_lista[2][p+1][4];
  						local numer=tonumber(tab_lista[2][p][2]) or 1;
  						local id=tab_lista[2][p][4];
  						if((numer_nastepny==0)and(not id_nastepny)and(not id)and(numer>0))then
  							tab_poziomowo={tab_numer[(HNumerPoziomowNaglowkow(0) or 0)+1],};
  					  		for i=#tab_numer,(HNumerPoziomowNaglowkow(0) or 0)+1,-1 do
  					  			table.remove(tab_numer,i);
  					  		end;
  						end;
					end;
  				    poprzedni_tab_poziomowo=tab_poziomowo;
				end;
				if(wartosc)then return wartosc;end;
				if(not poziomowo)then
					i=i+1;
				end;
			end;
  		end;
  		if(not czy_ma_elementy)then
  			poprzedni_tab_poziomowo=nil;
  		end;
 	end;
  end;
  return;
end;
p["PobierzNazwęArtykułu"]=function(frame)
	local s=1;
	local function __FUNKCJA(poziomowo,i,ktory,numer,artykul,tab_numer,tab_poziomowo)
		if((not poziomowo)and(i==numer))then
			if(s==ktory)then
				return artykul;
			else
				s=s+1;
			end;
		elseif(poziomowo)then
			if((table.concat(tab_numer,".")
						..((#tab_numer>0) and "." or "")
						..table.concat(tab_poziomowo,"."))==numer)then
			    if(s==ktory)then
					return artykul;
				else
					s=s+1;
				end;
			end;
		end;
  end;
  return PobierzNumerLubNazweArtykulu(frame,__FUNKCJA,true);
end;
p["PobierzNumerArtykułu"]=function(frame)
  local s=1;
  local function __FUNKCJA(poziomowo,i,ktory,nazwa_artykulu,artykul,tab_numer,tab_poziomowo)
  	   if(nazwa_artykulu==artykul)then
  	   	    if(s==ktory)then
				if(poziomowo)then
					return (table.concat(tab_numer,".")..((#tab_numer>0) and "." or "")..table.concat(tab_poziomowo,"."));
				else
					return i;
				end;
  	   	    end;
		    s=s+1;
		end;
  end;
  return PobierzNumerLubNazweArtykulu(frame,__FUNKCJA,false);
end;
p["SubNazwaNadArtykułu"]=function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;

  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local numer=tonumber(args[1]) or 0;
  local krok=tonumber(args[2])or 1;
  
  local nazwa_artykulu=stronicowyparser_potrzebne_modul:NazwaArtykuluKsiazki(frame);
  return stronicowyparser_potrzebne_modul.SubNazwaNadStrony(nazwa_artykulu,numer,krok);
end;
p["NazwaNadArtykułu"]=function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;

  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local numer=tonumber(args[1]) or 1;
  
  local nazwa_artykulu=stronicowyparser_potrzebne_modul:NazwaArtykuluKsiazki(frame);
  return stronicowyparser_potrzebne_modul.SubNazwaNadStrony(nazwa_artykulu,1,numer);
end;

p["NazwaLinkuArtykułu"]=function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  
  local nazwa_artykulu=stronicowyparser_potrzebne_modul:NazwaArtykuluKsiazki(frame);
    
  local ostatni_artykul;
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
	if(tab_lista[2])then
  		for _,artykul_w_bazie in ipairs(tab_lista[2])do
  			if(type(artykul_w_bazie[1])~="table")then
  				if(artykul_w_bazie[1]==nazwa_artykulu)then
  					return artykul_w_bazie[1];
  				end;
  			elseif(artykul_w_bazie[1][1]==nazwa_artykulu)then
  				return artykul_w_bazie[1][2];
  			end;
  		end;
	 end;
  end;
  return "(błąd)";
end;
p["LiczbaArtykułówKsiążki"]=function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  local parametry_modul=require("Module:Parametry");
  local args=stronicowyparser_potrzebne_modul:Args();
  local naglowek=parametry_modul.CzyTak(args["nagłówek"]);
  local tab_artykul=(not naglowek) and {} or nil;
  local i=0;
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
	if(tab_lista[2])then
  		for _,artykul_w_bazie in ipairs(tab_lista[2])do
  			local nazwa_artykulu=artykul_w_bazie[1][1] or artykul_w_bazie[1];
  			local artykul=(not naglowek) and mw.ustring.gsub(nazwa_artykulu,"^([^#]*)#(.*)$","%1") or nazwa_artykulu;
  			if(naglowek or not tab_artykul[artykul])then
  				if(not naglowek)then
  					tab_artykul[artykul]=true;
  				end;
  				i=i+1;
  			end;
  		end;
	 end;
  end;
  return i;
end;
p["LiniaArtykułuKsiążki"]=function(frame)
	local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
	stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
	stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
	local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
	if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
	local nazwa_artykulu=stronicowyparser_potrzebne_modul:NazwaArtykuluKsiazki(frame);
	
	local parametry_modul=require("Module:Parametry");
	local args=stronicowyparser_potrzebne_modul:Args();
	local czy_analiza=parametry_modul.CzyTak(args["analiza"]);
	
	for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
		if(tab_lista[2])then
  			for _,artykul_w_bazie in ipairs(tab_lista[2])do
  				local artykul_ksiazki=artykul_w_bazie[1][1] or artykul_w_bazie[1];
  				if(artykul_ksiazki==nazwa_artykulu)then
  					if(not czy_analiza)then
  						return artykul_w_bazie[3];
  					else
  						local function AnalizaLiniiArtykolow()
  							local czy_spis_tresci=mw.ustring.match(artykul_w_bazie[3],"({{%s*[Ss]pisTreści%s*|[^{}]*}})");
  							if(czy_spis_tresci)then
  								local techniczne_modul=require("Module:Techniczne");
  								local parametry_szablony=techniczne_modul["ParsujWywołanieSzablonu"](czy_spis_tresci);
  								local nazwa_artykulu=parametry_szablony[1];
  								------
  								local nazwa_ksiazki=stronicowyparser_potrzebne_modul:PelnaNazwaKsiazki(frame);
    							local pelna_nazwa_strony=(nazwa_artykulu=="")and nazwa_ksiazki or nazwa_ksiazki.."/"..nazwa_artykulu;
    							local link= "[["..pelna_nazwa_strony.."|"..nazwa_artykulu.."]]";	
    							local linia2,_=mw.ustring.gsub(artykul_w_bazie[3],"({{%s*[Ss]pisTreści%s*|[^{}]*}})",link);
    							return linia2;
    						else
    					  		local czy_spis_tresci=mw.ustring.match(artykul_w_bazie[3],"({{%s*[Ss]ekcja[%s_]+referencyjna%s*|[^{}]*}})");
    					  		if(czy_spis_tresci)then
    					  			local linia2,_=mw.ustring.gsub(artykul_w_bazie[3],"({{%s*[Ss]ekcja[%s_]+referencyjna%s*|)","%1astandardowo=tak|");
    					  			return linia2;
    					  		else
    					  			local nazwa_ksiazki=stronicowyparser_potrzebne_modul:PelnaNazwaKsiazki(frame);
    					  			local function adresuj_linki(a,b)
    					  				return "[["..nazwa_ksiazki.."/"..a..(b or "").."]]";
    					  			end;
    					  			local artykul=mw.ustring.gsub(artykul_w_bazie[3],"%[%[%s*/([^%[%]|]-)/*%s*(|.*)%]%]",adresuj_linki);
    					  			artykul=mw.ustring.gsub(artykul,"%[%[%s*/([^%[%]|]-)/*%s*%]%]",adresuj_linki);
    					  			return artykul;
    					  		end;
    					  	end;
  						end;
				        return AnalizaLiniiArtykolow();
  				   end
  				end;
  			end;
		end;
	end;
	local uzupelniaj_sekcje_artykulow=parametry_modul.CzyTak(args["uzupełniaj sekcje artykułów"]);
	if(uzupelniaj_sekcje_artykulow)then
		if(mw.ustring.match(nazwa_artykulu,"^[^#]*#(.+)$"))then
			local naglowek=mw.ustring.match(nazwa_artykulu,"^[^#]*#(.+)$");
			if(parametry_modul["CzyTakCiąg"](naglowek))then
				local pelna_nazwa_ksiazki=stronicowyparser_potrzebne_modul:PelnaNazwaKsiazki(frame)
				return "[["..pelna_nazwa_ksiazki..((nazwa_artykulu~="")and("/"..nazwa_artykulu) or "").."|"..naglowek.."]]";
			end;
		end;
	end;
end;
p["AktualnaKsiążka"]=function(frame)
   local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
   stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
   stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
   return stronicowyparser_potrzebne_modul:PelnaNazwaKsiazki(frame) or "(błąd)"
end;
p["NazwaAktualnyArtykuł"]=function(frame)
   local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
   stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
   stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
   return stronicowyparser_potrzebne_modul:NazwaArtykuluKsiazki(frame) or "(błąd)";
end;
p["ListaNagłówkówKsiążki"] = function(frame)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  
  local stronicowyparser_obiekty=mw.loadData("Module:StronicowyParser/obiekty");
  local tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek=stronicowyparser_obiekty.tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek;
  local tab_rozdzialow_glownych_spisow_tresci_ksiazek=stronicowyparser_obiekty.tab_rozdzialow_glownych_spisow_tresci_ksiazek;
  
  local czy_sa_rozdzialy=nil;
   
  local pelna_nazwa_ksiazki=stronicowyparser_potrzebne_modul:PelnaNazwaKsiazki(frame);
   
  local args=stronicowyparser_potrzebne_modul:Args();
  
  local wikikod="";
  local linki_modul=require("Module:Linki");
   
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
       local rozdzial=tab_lista[1][1];
       local numer_rozdzialu=tab_lista[1][2];
       if(numer_rozdzialu>0)then
    		if(not tab_rozdzialow_glownych_spisow_tresci_ksiazek[rozdzial])then
        		wikikod=((wikikod~="")and (wikikod.." &nbsp;—&nbsp; ") or "")
                	    ..linki_modul["Link wewnętrzny"]{
                       	                            ["strona"]=pelna_nazwa_ksiazki,
                       	                            ["nagłówek"]=rozdzial,
                       	                            ["nazwa"]=rozdzial,
                       	                            ["bez znaczników"]=args["bez znaczników"],
                       	                            ["bez przetwarzania"]=args["bez przetwarzania"],
                                                   };
    		end;
    		czy_sa_rozdzialy=true;
    	end;
   end;
   if(not czy_sa_rozdzialy)then return "(błąd: brak rozdziałów)";end;
   return wikikod;
end;
p["ArtykułSubst"] = function(frame)
	 local tabela_listy_danych_analizy_ksiazki=mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;	
	 local nazwa_przestrzeni;local nazwa_ksiazki;local nazwa_artykulu;
	 if(not tabela_listy_danych_analizy_ksiazki.zastepczy)then
		nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
		nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
		nazwa_artykulu=tabela_listy_danych_analizy_ksiazki.nazwa_artykulu;
	 else
	 	nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.normalna_nazwa_przestrzeni;
		nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.normalna_nazwa_ksiazki;
		nazwa_artykulu=tabela_listy_danych_analizy_ksiazki.normalna_nazwa_artykulu;
 	 end;
     local parametry_modul=require("Module:Parametry");
	 local PobierzParametr=parametry_modul.PobierzParametr(frame);
     local pobierz_nazwa_artykulu=PobierzParametr("pobierz pełną nazwę artykułu");
     local pobierz_adres_ksiazki=PobierzParametr("pobierz pełną nazwę książki");
     local czy_pobierz_pelna_nazwa_artykulu=parametry_modul.CzyTak(pobierz_nazwa_artykulu);
     local czy_pobierz_pelna_nazwa_ksiazki=parametry_modul.CzyTak(pobierz_adres_ksiazki);
     if(czy_pobierz_pelna_nazwa_artykulu and not czy_pobierz_pelna_nazwa_ksiazki)then
     		return ((nazwa_przestrzeni~="")and(nazwa_przestrzeni..":") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and "/" or "")..nazwa_artykulu;
     elseif(not czy_pobierz_pelna_nazwa_artykulu and czy_pobierz_pelna_nazwa_ksiazki)then
     	return ((nazwa_przestrzeni~="")and(nazwa_przestrzeni..":") or "")..nazwa_ksiazki;
     elseif(czy_pobierz_pelna_nazwa_artykulu and czy_pobierz_pelna_nazwa_ksiazki)then
     	return "(błąd)";
     end;
     local nazwa_strony=((nazwa_przestrzeni~="")and(nazwa_przestrzeni..":") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and "/" or "")..nazwa_artykulu;
	 local techniczne_modul=require("Module:Techniczne");
	 local szablon=techniczne_modul.NazwaSzablonu(nazwa_strony);
     return frame:expandTemplate{title=szablon,args={},};
end;
p["KsiążkaSubst"] = function(frame)
    local tabela_listy_danych_analizy_ksiazki=mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;	
    local str=tabela_listy_danych_analizy_ksiazki["KsiążkaSubst"];
    return str;
end;
p["StronaSubst"] = function(frame)
	local parametry_modul=require("Module:Parametry");
	local args=frame and ((frame.getParent and ((parametry_modul.CzyTak(frame.args["wyspecjalizowana"]))and frame or frame:getParent()) or frame).args or frame) or {};
	local tabela_listy_danych_analizy_ksiazki=mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;
	local tab_stronasubst=tabela_listy_danych_analizy_ksiazki["StronaSubst"];
	if(not tab_stronasubst)then return;end;
	local pierwszy,_=mw.ustring.gsub(args[1],"[%s_]+"," ");
	local tab_strona=tab_stronasubst[pierwszy];
	if(not tab_strona)then return;end;
	local link=args["link"];
	local czy_link=parametry_modul.CzyTak(link);
	local stronasubst=tab_strona[(czy_link and "tak" or "")];
	return stronasubst;
end;
p["CzyStronęNumerować"] = function(frame)
	local strona=frame.args[1];
	local nazwy_modul=require("Module:Nazwy");
	strona=nazwy_modul["PEŁNANAZWASTRONY"](strona);
	
	local pudelko_modul=require("Module:Pudełko");
	if(strona==pudelko_modul["Strona główna tego projektu"](frame))then
		return;
	end;
	if(strona==pudelko_modul["Strona główna dla dzieci tego projektu"](frame))then
		return;
	end;
	if(mw.ustring.match(strona,"^Szablon:SG/"))then
		return;
	end;
	
	local zbiory={
		["Szablon:Nowe podręczniki miesiąca/Zwycięzca"]=true,
		["Wikibooks:Polecane książki"]=true,
		["Szablon:Wyróżnienia książek miesiąca/Wyróżniony"]=true,
	}
	if(zbiory[strona])then
		return;
	end;
	if(mw.ustring.match(strona,"^Szablon:Polecane książki/")
		or(mw.ustring.match(strona,"^Szablon:Nowe podręczniki miesiąca/"))
		  or(mw.ustring.match(strona,"^Szablon:Wyróżnienia książek miesiąca/"))
	)then
	   return;
    end;
	return "tak";
end;
function p.HNumer(frame)
	local p=frame.args["wyspecjalizowana"] and frame or frame:getParent();
    if((not p) or (not p.args[1]))then 
    	local blad_module=require("Module:Błąd");
    	local frame2=p:newChild{args={[1]="Podano złe parametry w szablonie: [[Szablon:HLiczba]].",["tag"]="span",},}
    	blad_module.error(frame2);
    	return;
    end;
    local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
    local naglowek,licznik=stronicowyparser_rozdzialy_modul.PodajRozdzial(p.args[1]);
    local id2,_=mw.ustring.gsub(naglowek,"^[%s_]","");
    id2,_=mw.ustring.gsub(id2,"[%s_]$","");
    id2,_=mw.ustring.gsub(id2,"[%s_]","_");
    local id3,_=mw.ustring.gsub(mw.uri.encode(mw.text.encode(id2),"WIKI"),"(%%)",".");
    if(licznik>6)then 
    	local id=p.args["id"];
    	local styl=p.args["styl"];
    	local klasa=p.args["klasa"];
    	local atrybuty=p.args["atrybuty"];
    	local parametry_modul=require("Module:Parametry");
       	return "<h6"..(parametry_modul.CzyTak(id)and " id=\""..id.."\"" or "")
       			            ..(parametry_modul.CzyTak(styl)and " style=\""..styl.."\"" or "")
       			            .." class=\"mw-hnumber mw-hnumber-"..licznik..((parametry_modul.CzyTak(klasa)) and (" "..klasa) or "").."\""
       			            ..(parametry_modul.CzyTak(atrybuty)and " "..atrybuty or "")
       			            ..">"..((id2~=id3) and ("<span id=\""..id3.."\"></span>") or "").."<span id=\""..id2.."\" class=\"mw-headline\">"..naglowek.."</span></h6>";
    elseif(licznik<1)then
       	local blad_module=require("Module:Błąd");
    	local frame2=pf:newChild{args={[1]="Nie podano nagłówka w szablonie: [[Szablon:HLiczba]].",["tag"]="span",},}
    	blad_module.error(frame2);
    else
    	local id=p.args["id"];
    	local styl=p.args["styl"];
    	local klasa=p.args["klasa"];
    	local atrybuty=p.args["atrybuty"];
    	local parametry_modul=require("Module:Parametry");
       	return "<h"..licznik..(parametry_modul.CzyTak(id)and " id=\""..id.."\"" or "")
       			            ..(parametry_modul.CzyTak(styl)and " style=\""..styl.."\"" or "")
       			            .." class=\""..((parametry_modul.CzyTak(klasa)) and klasa or "").."\""
       			            ..(parametry_modul.CzyTak(atrybuty)and " "..atrybuty or "")..">"..((id2~=id3) and ("<span id=\""..id3.."\"></span>") or "").."<span id=\""..id2.."\" class=\"mw-headline\">"..naglowek.."</span></h"..licznik..">";	
   end;
end;
function p.TOC(frame,czy_rozciagnij,gdy_pusty_spis_tresci)
    local tabela_listy_danych_analizy_ksiazki=mw.loadData('Module:StronicowyParser/informacje').tablica_zebranych_danych_ksiazkowych;
    local nazwy_modul=require("Module:Nazwy");
    local parametry_modul=require("Module:Parametry");
    local ksiazkowe_modul=require("Module:Książkowe");
    local args=(frame)and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"])and frame.args or frame:getParent().args) or {};
	local nazwa_przestrzeni=args[2] and nazwy_modul["NAZWAPRZESTRZENI"](args[2]) or tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
	local nazwa_ksiazki=args[2] and ksiazkowe_modul["NazwaKsiążki"](args[2]) or tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
	local nazwa_artykulu=args[1] and args[1] or tabela_listy_danych_analizy_ksiazki.nazwa_artykulu;
	local toc_czy_tocramka=parametry_modul.CzyTak(args["toc"]);
	local spis_artykulu=parametry_modul.CzyTak(args["spis artykułu"]);
	local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
	if ((tabela_listy_danych_analizy_ksiazki.TOC_StronaZbiorcza)or(tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu and tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni] and tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki] and tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki].lista_artykolow[nazwa_artykulu] and tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki].lista_artykolow[nazwa_artykulu].TOC)) then
		mw.log(tabela_listy_danych_analizy_ksiazki.TOC_StronaZbiorcza);
    	local spis_tresci_artykulu=stronicowyparser_potrzebne_modul.TOC(tabela_listy_danych_analizy_ksiazki.TOC_StronaZbiorcza or tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki].lista_artykolow[nazwa_artykulu].TOC,toc_czy_tocramka,spis_artykulu,czy_rozciagnij);
    	return spis_tresci_artykulu;
    elseif(not gdy_pusty_spis_tresci)then
    	local spis_tresci_artykulu=stronicowyparser_potrzebne_modul.TOC(nil,toc_czy_tocramka,spis_artykulu,czy_rozciagnij);
    	return spis_tresci_artykulu;
   end;
end;
function p.WykazModolow(frame,czy_rozciagnij)
    local tabela_listy_danych_analizy_ksiazki=mw.loadData('Module:StronicowyParser/informacje').tablica_zebranych_danych_ksiazkowych;
	local nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
	local nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
	local lista_ksiazek_w_przestrzeni_nazw=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni];
	if(not lista_ksiazek_w_przestrzeni_nazw)then return nil;end;
	local tab_lista_artykulow_w_ksiazce_w_ksiazce=lista_ksiazek_w_przestrzeni_nazw[nazwa_ksiazki];
	if(not tab_lista_artykulow_w_ksiazce_w_ksiazce)then return nil;end;
	local spis=tab_lista_artykulow_w_ksiazce_w_ksiazce.spis;
	if(not spis)then return nil;end;
	local parametry_modul=require("Module:Parametry");
	local spis_ksiazkowy=parametry_modul.CzyTak(frame.args["spis książkowy"]);
	local spis_rzeczy=parametry_modul.CzyTak(frame.args["spis rzeczy"]);
	local tylko_naglowki=parametry_modul.CzyTak(frame.args["nagłówki"]);
	local wykaz_modolow_w_liscie="";
	local i=1;
	for _,tab_artykul in ipairs(spis)do
		if(tab_artykul[2])then
			for _,tab_pozycja in ipairs(tab_artykul[2])do
				if(type(tab_pozycja[1])~="table")then
					sformatowana_nazwa_artykulu,_=mw.ustring.gsub(tab_pozycja[1],"_"," ");
				else
					sformatowana_nazwa_artykulu,_=mw.ustring.gsub(tab_pozycja[1][1],"_"," ");
				end;
				local id=tab_pozycja[4]
				if(not tylko_naglowki or id)then
					if(not spis_ksiazkowy)then
						wykaz_modolow_w_liscie=((wykaz_modolow_w_liscie~="") and (wykaz_modolow_w_liscie.."\n") or "")..'<li>[['..((not spis_rzeczy or not id)and (((nazwa_przestrzeni=="")and nazwa_ksiazki or nazwa_przestrzeni..":"..nazwa_ksiazki).."/") or "#")..sformatowana_nazwa_artykulu.."|<span class=\"tocnumber\">"..i.."</span><span class=\"toctext\">"..sformatowana_nazwa_artykulu..'</span>]]</li>';
					else
						wykaz_modolow_w_liscie=((wykaz_modolow_w_liscie~="") and (wykaz_modolow_w_liscie.."\n") or "")..'{{SpisZw||[['..((not spis_rzeczy or not id)and (((nazwa_przestrzeni=="")and nazwa_ksiazki or nazwa_przestrzeni..":"..nazwa_ksiazki).."/") or "#")..sformatowana_nazwa_artykulu.."|"..sformatowana_nazwa_artykulu.."]]|"..i.."|100%}}";
					end;
					i=i+1;
				end;
			end;
		end;
	end;
	if(wykaz_modolow_w_liscie=="")then return nil;end;
	if(not spis_ksiazkowy)then
		wykaz_modolow_w_liscie="<ul>"..wykaz_modolow_w_liscie.."</ul>";
		wykaz_modolow_w_liscie='<div  class="toc_wykaz" style="width:100%;max-height:400px;overflow:auto;">'..wykaz_modolow_w_liscie.."</div>";
		wykaz_modolow_w_liscie='{{Tabela nawigacyjna|styl=width:'..(czy_rozciagnij and "100%" or "auto")..';font-size:14px;line-height:1.2em;background-color:white;|tytuł=<div style="font-size:14px;line-height:1.2em;background-color:white;text-align:left;white-space:nowrap;">Wykaz modułów w książce</div>|spis='..wykaz_modolow_w_liscie..'|funkcja=UkrytaWikitabelowaListaMenu}}';
	else
	     wykaz_modolow_w_liscie="<div style=\"border:solid #aaa 1px;padding:10px;width:auto;background-color:white;\">"..wykaz_modolow_w_liscie.."</div>";
	end;
    local rozwiniety_wikikod=frame:preprocess(wykaz_modolow_w_liscie);
	return rozwiniety_wikikod;
end;
function p.NazwaModolu()
	local tabela_listy_danych_analizy_ksiazki=mw.loadData('Module:StronicowyParser/informacje').tablica_zebranych_danych_ksiazkowych;
	local nazwy_np_modul=mw.loadData('Moduł:Nazwy/Np');
	local nazwa_artykulu=tabela_listy_danych_analizy_ksiazki.nazwa_artykulu;
	if(nazwa_artykulu==nil)then 
		 return "[["..nazwy_np_modul.Category..": Nie można wygenerować nazwy strony]]";
     else
	    return nazwa_artykulu;
	end;
end;
function p.Wstep_do_licencji(frame)
	  local element_licencji_1='<strong>Autor:</strong> '..frame.args[1]..'<BR>';
	  local element_licencji_2;
	    if((frame.args[2]~='')and(frame.args[2]~=nil))then 
	    	element_licencji_2=frame.args[2]..'<BR>';
	  end;
	  local element_licencji_3; 
	  if((frame.args[3]~='')and(frame.args[3]~=nil))then 
	  	 element_licencji_3='<strong>Email:</strong> '..frame.args[3]..'<BR>';
	  end;
	  local element_licencji_4;
	  if((frame.args[4]~='')and(frame.args[4]~=nil))then 
	  	  element_licencji_4='<strong>Dotyczy:</strong> '..frame.args[4].."<BR>";
	  else
	  	 element_licencji_4='<strong>Dotyczy:</strong> książki, do której należy ta strona, oraz w niej zawartych stron i w nich podstron, a także w nich kolumn, wraz z zawartościami.<BR>';
	  end;
	   if((frame.args[5]~='')and(frame.args[5]~=nil))then 
	  	  element_licencji_5=frame.args[5].."<BR>";
	  else
	  	 element_licencji_5='Użytkownika książki, do której należy ta strona, oraz w niej zawartych stron i w nich podstron, a także w nich kolumn, wraz z zawartościami nie zwalnia z odpowiedzialności prawnoautorskiej nieprzeczytanie warunków licencjonowania.<BR>';
	  end;
	  local element_licencji_6;
	  if((frame.args[6]~='')and(frame.args[6]~=nil))then 
	  	   element_licencji_6='<strong>Umowa prawna:</strong> '..frame.args[6]..'<BR>'; 
	  else 
	  	   element_licencji_6='<strong>Umowa prawna:</strong> [http://creativecommons.org/licenses/by-sa/3.0/deed.pl Creative Commons: uznanie autorstwa oraz miejsca pochodzenia książki i jej jakikolwiek części, a także treści, teksty, tabele, wykresy, rysunki, wzory i inne elementy oraz ich części zawarte w książce, i tą książkę, nawet w postaci przerobionej nie można umieszczać w jakikolwiek formie na czasopismach naukowych, archiwach prac, itp.]<BR>';
	  end;	  
	  if((frame.args[7]~='')and(frame.args[7]~=nil))then 
	  	  element_licencji_7=frame.args[7].."<BR>";
	  else
	  	 element_licencji_7='Autor tej książki dołożył wszelką staranność, aby informacje zawarte w książce były poprawne i najwyższej jakości, jednakże nie udzielana jest żadna gwarancja, czy też rękojma. Autor nie jest odpowiedzialny za wykorzystanie informacji zawarte w książce nawet jeśli wywołaby jakąś szkodę, straty w zyskach, zastoju w prowadzeniu firmy, przedsiębiorstwa lub spółki bądź utraty informacji niezależnie, czy autor (a nawet [https://pl.wikibooks.org Wikibooks]) został powiadomiony o możliwości wystąpienie szkód. Informacje zawarte w książce mogą być wykorzystane tylko na własną odpowiedzialność.<BR>';
	  end;
	  local licencja=element_licencji_1..((element_licencji_2)and element_licencji_2 or "")..((element_licencji_3)and element_licencji_3 or "")
	                     ..element_licencji_4..element_licencji_5..element_licencji_6..element_licencji_7;
	  return licencja; 
end;
function p.Licencja(frame,czy_rozciagnij)
  local tabela_listy_danych_analizy_ksiazki=mw.loadData('Module:StronicowyParser/informacje').tablica_zebranych_danych_ksiazkowych;
  local menu_z_licencja;
  local nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
  local nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
  local licencja=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki].licencja;
  if(licencja)then
	if(licencja[1])then
		local frame={};
		frame.args={licencja[1],licencja[2],licencja[3],licencja[4],licencja[5],licencja[6],licencja[7]};
		local ramka_z_licencja='<div style="margin-left:0px;padding:3px;width:100%;height:auto;box-sizing:border-box;">'..p.Wstep_do_licencji(frame)..'</div>';
	    menu_z_licencja='{{Tabela nawigacyjna|styl=width:'..(czy_rozciagnij and "100%" or "auto")..';font-size:14px;line-height:1.2em;background-color:white;|tytuł=<div style="font-size:14px;line-height:1.2em;background-color:white;text-align:left;white-space:nowrap;">Licencja</div>|spis='..ramka_z_licencja..'|funkcja=StatycznaWikitabelowaListaMenu}}';
	else
		return nil;
	end; 
	local frame=mw.getCurrentFrame();
    local rozwiniety_wikikod=frame:preprocess(menu_z_licencja);
    return rozwiniety_wikikod;
  else
    return nil;
  end;
end;
function p.Autor(frame)
  local tabela_listy_danych_analizy_ksiazki=mw.loadData('Module:StronicowyParser/informacje').tablica_zebranych_danych_ksiazkowych;
  local nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
  local nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
  local licencja=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki].licencja;
  if(tabela_listy_danych_analizy_ksiazki.licencja)then
		return licencja[1];
  end;
end;
function p.PierwszaStrona(frame)
	local prawe_menu="";
	local parametry_modul=require("Module:Parametry");
	local czy_rozciagnij=parametry_modul.CzyTak(frame.args["rozciągnij"])
	if(parametry_modul.CzyTak(frame.args[1]))then 
		prawe_menu='<div style="margin-top:5px;font-size:1.9em;line-height:25px;text-align:left;">'..p.NazwaModolu()..'</div><hr style=\"margin:5px 0\"/>';
    end;
	if(parametry_modul.CzyTak(frame.args[2]))then 
		 local licencja=p.Licencja(frame,czy_rozciagnij);
		 if(licencja~=nil)then
		 	prawe_menu=prawe_menu..licencja;
		 else
    		local obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
  	    	local uchwyt_strony=mw.title.getCurrentTitle();
  	    	local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
  	    	local nazwa_przestrzeni_nazw_strony=require("Module:Nazwy")["NAZWAPRZESTRZENI"]();
  	    	local element_zdania_kategorii=(nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)and "na stronach głównych, książek" 
  	    	            or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)and "na stronach głównych, książek dla dzieci" 
  	    	            	 or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User)and "na stronach głównych, książek użytkowników" 
  	    	            	 	or((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks)and "na stronach głównych, książek brudnopisu projektu" 
  	    	            	 	   or "na stronach głównych, publikacji")));
  	    	local tabela_listy_danych_analizy_ksiazki=mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;           	 	   
    		local kategoria_braku_licencji=(not tabela_listy_danych_analizy_ksiazki.korzystane_strona_glowna_nie_istnieje)and"[["..nazwy_np_modul.Category..": Brak licencji, "..element_zdania_kategorii.."]]" or "";
    		prawe_menu=prawe_menu..kategoria_braku_licencji;
	   end;
	end;
	if(parametry_modul.CzyTak(frame.args[3]))then 
		 local wykaz_artykulow=p.WykazModolow(frame,czy_rozciagnij);
		 if(wykaz_artykulow~=nil)then
		 	prawe_menu=prawe_menu.."<hr style=\"margin:5px 0\"/>"..wykaz_artykulow;
	    end;
	end;
	if(parametry_modul.CzyTak(frame.args[4]))then 
		
		 local spis_tresci=p.TOC(frame,czy_rozciagnij,true);
		 if(spis_tresci~=nil)then
		 	prawe_menu=prawe_menu.."<hr style=\"margin:5px 0\"/>"..spis_tresci;
	    end;
	end;
	return "<div style=\"width:auto;height:auto;\">"..prawe_menu.."</div>";
end;
function p.SpisTresci(frame)
	local parametry_modul=require("Module:Parametry");
    local args=parametry_modul.PobierzArgsParametry(frame);
    local nazwa_artykulu=args["artykuł"] or args[1];
    local nazwa_ksiazki=args["książka"] or args[2];
    
    if(not parametry_modul.CzyTak(nazwa_ksiazki))then
    	local tabela_listy_danych_analizy_ksiazki=mw.loadData('Module:StronicowyParser/informacje').tablica_zebranych_danych_ksiazkowych;
		local uzyskana_nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
		local uzyskana_nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
		nazwa_ksiazki=((uzyskana_nazwa_przestrzeni~=nil) and (uzyskana_nazwa_przestrzeni..":") or "")..uzyskana_nazwa_ksiazki;
    end;
    local brak=(nazwa_artykulu and mw.ustring.match(nazwa_artykulu,"[|<>{}%[%]]") or nil) or (nazwa_ksiazki and mw.ustring.match(nazwa_ksiazki,"[|<>{}%[%]]") or nil);
    if(brak~=nil)then
    	local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
    	local nazwa_przestrzeni_nazw_strony=require("Module:Nazwy")["NAZWAPRZESTRZENI"]();
  	    local element_zdania_kategorii=(nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)and "artykułów," 
  	            or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)and "artykułów dla dzieci," 
  	    	        or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User)and "stron użytkowników," 
  	    	        	or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks)and "stron brudnopisu projektu," 
  	    	        	    or "stron,")));
    	return "[["..nazwy_np_modul.Category..":Nazwy "..element_zdania_kategorii.." w spisach treści, zawierają niedozwolone znaki]]";
    end;
    local html_modul=require("Module:Html");
    local nazwy_modul=require("Module:Nazwy");
    local ksiazkowe_modul=require("Module:Książkowe");
    local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa_ksiazki);
    local nazwa_ksiazki=ksiazkowe_modul["NazwaKsiążki"](nazwa_ksiazki);
    nazwa_ksiazki=html_modul.TransformacjaKlasyZnakowej(nazwa_ksiazki);
    local nazwa_artykulu=html_modul.TransformacjaKlasyZnakowej(nazwa_artykulu);
    local nazwa_strony=(nazwa_artykulu=="")and nazwa_ksiazki or nazwa_ksiazki.."/"..nazwa_artykulu;
    local pelna_nazwa_strony=(nazwa_przestrzeni=="")and nazwa_strony or nazwa_przestrzeni..":"..nazwa_strony;
    local tekst_artykulu=p.SpreparowanyWikikodStrony(pelna_nazwa_strony);
    local nazwa=args["nazwa"] or args[3];
    local nazwa_strony_artykulu=parametry_modul.CzyTak(nazwa) and nazwa or mw.ustring.gsub(mw.ustring.match(nazwa_artykulu,"[^/]*$"),"_"," ");
    local dodatek=args["dodatek"] or args[4];
    if(not tekst_artykulu)then
    	if(nazwa_artykulu~="")then
	    	return "\n"..mw.ustring.rep("=",6).."<span style=\"color:red\">[["..pelna_nazwa_strony.."|"..nazwa_strony_artykulu.."]]</span>"..mw.ustring.rep("=",6).."\n";
	    else
	         return frame:getParent():preprocess("{{Błąd|Wywołano szablon z argumentem pierwszym pustym.}}");
	    end;
    else
       local twor_spisu_tresci="[["..pelna_nazwa_strony.."|"..nazwa_strony_artykulu.."]]"..(((dodatek)and(dodatek~="")) and (" "..dodatek) or "");
       twor_spisu_tresci=mw.ustring.rep("=",6)..twor_spisu_tresci..mw.ustring.rep("=",6).."\n";
       local stronicowyparser_dalszefunkcje_modul=require("Module:StronicowyParser/DalszeFunkcje");
       local ulozenia_w_menu_spisu_tresci=stronicowyparser_dalszefunkcje_modul:SpisTresciWstep(tekst_artykulu, pelna_nazwa_strony);	
       local atrybuty="style=\"margin-left:20px\"";
       
       local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
       local toc=stronicowyparser_potrzebne_modul.TOCSilnik(ulozenia_w_menu_spisu_tresci, atrybuty);
       return twor_spisu_tresci..(toc and toc or "");
    end;
end;
function IteratorFunkcja()
	local obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
	local tabela_wypowiedzi=obiekty_modul.tablica_obiektow;
	local licznik=1;
	return function()
		local tabela_obiektu=tabela_wypowiedzi[licznik];
		if(not tabela_obiektu)then return nil;end;
		local wartosc1=mw.ustring.gsub(tabela_obiektu[1],"%d+$","");
		local wartosc2=tabela_obiektu[4];
		licznik=licznik+1;
		return wartosc1,wartosc2;
	end;
end;
local iterator=IteratorFunkcja();
for nazwa_obiektu,czesc_nazwy_funkcji in iterator do
	p["Numer"..czesc_nazwy_funkcji] = function(frame)
		local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
		return stronicowyparser_potrzebne_modul.NumerObiektu(frame,nazwa_obiektu);
	end;
end;
p["AnalizujSzablonemStronicowymArtykuł"]=function(frame)
	local tabela_listy_danych_analizy_ksiazki=mw.loadData('Module:StronicowyParser/informacje').tablica_zebranych_danych_ksiazkowych;
    return "";
end;
function p.formatowanie()
	local tabela_listy_danych_analizy_ksiazki=mw.loadData('Module:StronicowyParser/informacje').tablica_zebranych_danych_ksiazkowych;
	return tabela_listy_danych_analizy_ksiazki.formatowanie;
end;
function p.WstawKategorie(frame)
  local stronicowyparser_kategorie_modul=require("Module:StronicowyParser/Kategorie");
  return stronicowyparser_kategorie_modul.WstawKategorie(frame);
end;
function p.CzyStronaSubst(frame,pelnanazwastrony,czy_wymusic)
	if(czy_wymusic)then
		local nazwy_modul=require("Module:Nazwy");
		local pelnanazwastronyaktualnej=nazwy_modul["PEŁNANAZWASTRONY"]();
		if(pelnanazwastrony~=pelnanazwastronyaktualnej)then
                local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
                local TakFun=function(frame) return "tak";end;local NieFun=function(frame) return "";end;
                return stronicowyparser_potrzebne_modul.AnalizaStronaSubst(nil,pelnanazwastrony,TakFun,NieFun,nil);
        end;
	end;
	local tabela_listy_danych_analizy_ksiazki=mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;
	if(tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"])then
		return "tak";
	end;
	return "";
end;
return p;