Moduł:StronicowyParser/NumerLubNazwaArtykułówKsiążek

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
 Dokumentacja modułu [stwórz] [odśwież]
local p={};
local function PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,typ)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryKonteneraWoluminu(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyStronWoluminu(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_modul=mw.loadData("Module:StronicowyParser/obiekty");
  
  local odczyt_tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=stronicowyparser_obiekty_modul.tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu;
  local tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu);
  
  local odczyt_tab_nazw_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tab_nazw_generalnego_spisu_rzeczy_woluminu;
  local tab_nazw_generalnego_spisu_rzeczy_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tab_nazw_generalnego_spisu_rzeczy_woluminu);
  
  setmetatable(tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
  setmetatable(tab_nazw_generalnego_spisu_rzeczy_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
  
  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][1] or 0;
        if(poziom_rozdzialu>0)then
        	   
        	   local czy_nie_ten_rozdzial=nil;
        	   
        	   local czy_jest_teraz_spis_tresci=tab_nazw_generalnego_spisu_rzeczy_woluminu[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_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[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_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
        			end;
        		else
        			local juz_nie_rozwazaj_spisu_tresci=nil;
					local juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
        			czy_nie_ten_rozdzial=tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[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,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,typ,zbieraj_dane)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryKonteneraWoluminu(frame,tabela_listy_danych_analizy_ksiazki);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyStronWoluminu(frame,tabela_listy_danych_analizy_ksiazki);
  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 szablonowe_modul=require("Module:Szablonowe");
  local naglowek=parametry_modul.CzyTak(args["nagłówek"]);
  local artykul_spisu=args["spis"];
  artykul_spisu=artykul_spisu and parametry_modul["Odstępy"]{[1]=artykul_spisu,[2]="tak",} or nil;
  
  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 function ParametrySzablonuPobierania()
  		if(not zbieraj_dane)then
			local pierwszy_parametr_szablonu=nil;local czy_nazwa=nil;
        	if(not typ)then
        		pierwszy_parametr_szablonu=args[1] and ((not naglowek) and mw.ustring.gsub(html_modul["PoprawAdresNagłówkaOrazParametrówStronyAdresu"](html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](args[1]),true),"^([^#]*)#(.*)$","%1") or html_modul["PoprawAdresNagłówkaOrazParametrówStronyAdresu"](html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](args[1]),true)) or "Przykładowy artykuł";
        	else
        		pierwszy_parametr_szablonu=args[1] and ((not poziomowo) and (tonumber(args[1]) or 1) or args[1]) or ((not poziomowo) and 1 or "1");
        		czy_nazwa=parametry_modul.CzyTak(args["nazwa"]);
        	end;
			return function()
				return pierwszy_parametr_szablonu,czy_nazwa;
			end;
		end;
  end;
  local pierwszy_parametr_szablonu=ParametrySzablonuPobierania();
  ----
  local ktory=(tonumber(args["który"]) or 1);
  
  local i=(not poziomowo) and 1 or nil;
  
  local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
  local odczyt_tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=stronicowyparser_obiekty_modul.tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu;
  local tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu);
  
  local odczyt_tab_nazw_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tab_nazw_generalnego_spisu_rzeczy_woluminu;
  local tab_nazw_generalnego_spisu_rzeczy_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tab_nazw_generalnego_spisu_rzeczy_woluminu);
  
  setmetatable(tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
  setmetatable(tab_nazw_generalnego_spisu_rzeczy_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
  
  --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 pierwszy_dodatni_naglowek=nil;
  local pierwszy_ujemny_naglowek=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_srednikowego_naglowka=0;
  
  local poziom_spisu_tresci_naglowka=0;
  
  local ostatni_rozdzial_dodatni=nil;
  local ostatni_rozdzial_centrowany=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 ostatni_poczatek_artykulu=nil;
  local pierwszy_rowny_rozdzial=nil;
  
  local rozdzial;
  
  local czy_pierwszy_nilowy=nil;
  local czy_nienilowy_rozdzial=nil;
  
  local pierwszy_dodatni_spis_tresci=nil;
  local pierwszy_ujemny_spis_tresci=nil;
  
  local czy_poziom_dodatni_spisu_tresci=nil;
  local czy_poziom_ujemny_spisu_tresci=nil;
  
  local poziom_spisu_tresci=nil;
  local spis_tresci_ksiazki=nil;
  local glowny_spis_tresci_ksiazki=nil;
  local poprz_poziom_rozdzialu_lub_artykulu=nil;
  local poprz_numer_rozdzialu_lub_artykulu=nil;
  local poprz_czysty_poziom_rozdzialu_lub_artykulu=nil;
  local staly_dodatek_rozdzialu=0;
  
  local tab_lista_artykulow_w_ksiazce2=tab_lista_artykulow_w_ksiazce;
  tab_lista_artykulow_w_ksiazce={};
  function TabLista(tab_lista)
  		local max_ile=0;
 		for name,value in pairs(tab_lista)do
 			max_ile=math.max(max_ile,name);
 		end;
		function Iterator(tab_lista)
			local p2=0;
			local s=0;
			local pp=0;
			local function InneTablica(numer)
				local p1=0;
				return function()
					if((tab_lista[numer])and(tab_lista[numer][p1+1])and(tab_lista[numer][p1+1][5]==pp))then
 			    		p1=p1+1;
 			    		pp=pp+1;
 			    		return s,tab_lista[numer][p1];
 			    	end;
				end;
			end;
 			local function WszystkieInneTablica()
 				local tab={};
 				for i=1,max_ile-2,1 do
 					tab[i]=InneTablica(i+2);
 				end;
 				return function()
 					for i=1,max_ile-2,1 do
 						local wartosc,tab_artykul=tab[i]();
 						if((wartosc)and(tab_artykul))then
 							return wartosc,tab_artykul;
 						end;
 					end;
 				end;
 			end;
 			--local p1=0;
 			--local p2=0;
 			--local s=0;
 			
 			local iter_inne_tablice=WszystkieInneTablica();
 			return function()
 				s=s+1;
 				local wartosc,tab_artykul=iter_inne_tablice();
 				if((wartosc)and(tab_artykul))then
 					return wartosc,tab_artykul;
 				elseif((tab_lista[2])and(tab_lista[2][p2+1]))then
 			    	p2=p2+1;
 			    	pp=pp+1;
 			    	return s,tab_lista[2][p2];
 				else
 					return nil;   	
 				end;
 			end;
		end;
		local tab={};
		local iter=Iterator(tab_lista);
		for s,artykul_w_bazie in iter do
  			tab[s]=artykul_w_bazie;
		end;
		return tab;
	end;
	for s,tab_lista in ipairs( tab_lista_artykulow_w_ksiazce2)do
  		if(not tab_lista_artykulow_w_ksiazce[s])then  tab_lista_artykulow_w_ksiazce[s]={};end;
  		tab_lista_artykulow_w_ksiazce[s][1]=tab_lista[1];
  		tab_lista_artykulow_w_ksiazce[s][2]=TabLista(tab_lista);
	end;
	----
	local function ToNumberPoziomArtykulu(poziom_artykulu)
		local numer_artykulu=tonumber(poziom_artykulu);
		local numer_dodatkowy=((numer_artykulu)and(numer_artykulu>0)) and 0 or 1;
		return (numer_artykulu or 0),numer_dodatkowy;
	end;
	local function OdejmnijOdDwukropka(poziom_artykulu,poziom_poczatku_artykulu,numer_poprz,czy_w_trakcie_dwukropkowania,odejmnij_od_dwukropka)
		if((not czy_w_trakcie_dwukropkowania)and(mw.ustring.match(poziom_poczatku_artykulu,"^:")))then
			odejmnij_od_dwukropka=math.max((#poziom_poczatku_artykulu-(numer_poprz or 0)-1),0);
			czy_w_trakcie_dwukropkowania=true;
		elseif((czy_w_trakcie_dwukropkowania)and(not mw.ustring.match(poziom_poczatku_artykulu,"^:")))then
			odejmnij_od_dwukropka=0;
			czy_w_trakcie_dwukropkowania=nil;
		end;
		if(odejmnij_od_dwukropka>0)then
			poziom_artykulu=poziom_artykulu-odejmnij_od_dwukropka;
			if(poziom_artykulu<1)then
				poziom_artykulu=1;
			end;
		end;
		return poziom_artykulu,odejmnij_od_dwukropka,czy_w_trakcie_dwukropkowania;
	end;
	local function PoziomNumeracji(numeracja_artykulu)
		if(numeracja_artykulu)then
			numeracja_artykulu=mw.ustring.gsub(numeracja_artykulu,"^%s*%.*(.-)%.*%s*$","%1");
			numeracja_artykulu=mw.ustring.gsub(numeracja_artykulu,"%s+","");
			numeracja_artykulu=mw.ustring.gsub(numeracja_artykulu,"%.+",".");
			local tab_numeracja_artykulu=numeracja_artykulu and mw.text.split(numeracja_artykulu,"%s*%.%s*",false);
			poziom_numeracji_artykulu=((numeracja_artykulu~="") and (#tab_numeracja_artykulu) or 0);
			return poziom_numeracji_artykulu;
		end;
		return 0;
  	end;
	-----
	local function UzyskajArtykul(artykul,pomin_link)
  		local artykul=(not naglowek)and stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul,pomin_link)
				or stronicowyparser_potrzebne_modul.UzykanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(artykul,true,pomin_link);
		return artykul;
  	end;
	----
	local nazwa_spisu=nil;local numer_spisu=nil;
  
	for m,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
  		local poziom_rozdzialu;
  		local poziom_poczatku_rozdzialu=nil;
  		local poziom_znakowy_rozdzialu=nil;
  		local prawdziwy_poziom_rozdzialu=nil;
  	
		local poziom_naglowka=nil;
		local poziom_naglowka_bez_poprawki=nil;
		local numer_rozdzialu=nil;
		local tab_numer_zapasowe=nil;
  		local poziom_numeracji_rozdzialu=nil;
  		-----
  		function PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu)
  			local poziom_naglowka_z_numeracja=poziom_naglowka+poziom_numeracji_rozdzialu;
        	if((m>1)and((poprz_numer_rozdzialu_lub_artykulu>0)
        		or(poziom_numeracji_rozdzialu>0)
        	))then
  				local numer_poprz=poprz_czysty_poziom_rozdzialu_lub_artykulu;
  				local numer=poziom_naglowka;
  				if(numer_poprz<numer)then
  					local roznica_rozdzialu=poziom_naglowka_z_numeracja-poprz_poziom_rozdzialu_lub_artykulu;
  					if(roznica_rozdzialu<=0)then
  						  staly_dodatek_rozdzialu=math.abs(roznica_rozdzialu)+1
  						  poziom_naglowka_z_numeracja=poziom_naglowka_z_numeracja+staly_dodatek_rozdzialu;
  					end;
  				elseif(numer_poprz>numer)then
  					local roznica_rozdzialu=poziom_naglowka_z_numeracja-poprz_poziom_rozdzialu_lub_artykulu;
  					if(roznica_rozdzialu>=0)then
  						staly_dodatek_rozdzialu=-roznica_rozdzialu-1;
  						poziom_naglowka_z_numeracja=poziom_naglowka_z_numeracja+staly_dodatek_rozdzialu;
  					end;
  				else
  					if(poprz_numer_rozdzialu_lub_artykulu==poziom_numeracji_rozdzialu)then staly_dodatek_rozdzialu=0;end;
  					poziom_naglowka_z_numeracja=poziom_naglowka_z_numeracja+staly_dodatek_rozdzialu;
  				end;
  			
  				if(numer>poziom_naglowka_z_numeracja)then
  					poziom_naglowka_z_numeracja=numer;
  					staly_dodatek_rozdzialu=0;
  				end;
  			else
  				poziom_naglowka_z_numeracja=poziom_naglowka_z_numeracja+staly_dodatek_rozdzialu;
        	end;
        	return poziom_naglowka_z_numeracja,staly_dodatek_rozdzialu;
  		end;
    	local function PlusIlesDoPoziomuArtykulu(poziom_artykulu,poziom_poczatku_artykulu,poziom_rozdzialu,poziom_poczatku_rozdzialu,staly_poziom_rozdzialu_z_artykulami)
    		local function JedenDwa(poziom_poczatku_rozdzialu,poziom_poczatku_artykulu)
    			   return ((poziom_poczatku_artykulu)and(poziom_poczatku_rozdzialu)
            				and(((mw.ustring.match(poziom_poczatku_rozdzialu,"^*"))
            				    and((mw.ustring.match(poziom_poczatku_artykulu,"^:"))
            			    	     or(mw.ustring.match(poziom_poczatku_artykulu,"^#"))
            			    	)
            					)or((mw.ustring.match(poziom_poczatku_rozdzialu,"^#"))and(mw.ustring.match(poziom_poczatku_artykulu,"^:")))));
    		end;
        		if(JedenDwa(poziom_poczatku_rozdzialu,poziom_poczatku_artykulu))then
            	  local roznica=poziom_rozdzialu-poziom_artykulu;
            	  if(roznica>=0)then
            	  		staly_poziom_rozdzialu_z_artykulami=roznica+1;
            	  else
            			staly_poziom_rozdzialu_z_artykulami=0;	
            	  end;
            	  return (poziom_artykulu+staly_poziom_rozdzialu_z_artykulami),staly_poziom_rozdzialu_z_artykulami;
        	elseif(JedenDwa(poziom_poczatku_artykulu,poziom_poczatku_rozdzialu))then
        		staly_poziom_rozdzialu_z_artykulami=0;
        	elseif(#poziom_poczatku_artykulu==0)then 
        		staly_poziom_rozdzialu_z_artykulami=0;
        	end;
    		return (poziom_artykulu+(staly_poziom_rozdzialu_z_artykulami or 0)),staly_poziom_rozdzialu_z_artykulami;
    	end;
    	local function CzyWliczacBezPoziomowo(p,i)
    		if(naglowek)then return true;end;
    		local tab=tab_lista[2];
    		if(not tab)then return false;end;
    		if(p==i)then return true;end;
  			local tab_artykul2={};
  			for k=p+1,i,1 do
  				-----
  				local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab[k][1]);
  				local artykul=czy_table_baza_artykulu and tab[k][1][1] or tab[k][1];
				artykul=UzyskajArtykul(artykul);
				-----
  				if(k==i)then
  					if((tab_artykul[artykul])or(tab_artykul2[artykul]))then
  						return false;
  					else
  						return true;
  					end;
  				else
  					tab_artykul2[artykul]=true;
  				end;
  			end;
  			return false;
    	end;
    	local function IleNajblizejDalejBezPoziomowo(p)
    		if(naglowek)then return (p+1);end;
    		local tab=tab_lista[2];
    		if(not tab)then return (p+1);end;
  			local tab_artykul2={};
  			local i=p+1;
  			while(true)do
  				if(not tab[i])then return i;end;
  				-----
  				local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab[i][1]);
  				local artykul=czy_table_baza_artykulu and tab[i][1][1] or tab[i][1];
				artykul=UzyskajArtykul(artykul);
				-----
  				if((not tab_artykul[artykul])and(not tab_artykul2[artykul]))then
  					return i;
  				end;
  				tab_artykul2[artykul]=true;
  				i=i+1;
  			end;
  			return i;
    	end;
    		----
	function AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulowa,czy_rozdzial,__FUNKCJA)
        local poziom_zerowego_naglowka=poziom_zerowego_naglowka or 0;
        local poziom_srednikowego_naglowka=poziom_srednikowego_naglowka or 0;
        local staly_dodatek_artykulu=0;
        local poprz_poziom_rozdzialu_lub_artykulu=poziom_naglowka;
        local poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_naglowka_bez_poprawki;
        local staly_dodatek_rozdzialu=staly_dodatek_rozdzialu or 0;
        local poczatek_poprz=nil;
        local ostatni_rozdzial_dodatni=ostatni_rozdzial_dodatni;
        local ostatni_rozdzial_centrowany=ostatni_rozdzial_centrowany;
        local poziom_zerowego_artykulu=0;
        local staly_poziom_rozdzialu_z_artykulami=0;
        for p,artykul_w_bazie in ipairs(tab_lista_artykulowa)do
           if((czy_rozdzial and (p>m)) or (not czy_rozdzial))then
            	 if((not czy_rozdzial) and (CzyWliczacBezPoziomowo(1,p)) or czy_rozdzial)then
            	 		if(czy_rozdzial)then
            	 			artykul_w_bazie=artykul_w_bazie[1];
            	 		end;
            	  		local poziom_artykulu=artykul_w_bazie[2][1];
            	  		local poziom_znakowy_artykulu=poziom_artykulu;
            	  		poziom_artykulu=math.abs(poziom_artykulu);
            	  		local poziom_poczatku_artykulu=artykul_w_bazie[2][2];
            	  		local w_rozdziale=artykul_w_bazie[2][4];
  				    	if(not czy_rozdzial)then
  				    		local __poziom_poczatku_rozdzialu=(not czy_poczatek_rozdzialu) and poziom_poczatku_rozdzialu or poczatek_poprz;
  				    		local __poziom_rozdzialu=(not czy_poczatek_rozdzialu) and poziom_rozdzialu or poziom_artykulu;
  				    		poziom_artykulu,staly_poziom_rozdzialu_z_artykulami=PlusIlesDoPoziomuArtykulu(poziom_artykulu,poziom_poczatku_artykulu,__poziom_rozdzialu,__poziom_poczatku_rozdzialu,staly_poziom_rozdzialu_z_artykulami);
  				    	end;
  				    	if(czy_rozdzial)then
  				    		if(poziom_znakowy_artykulu)then
  				    			if(poziom_znakowy_artykulu==0)then
  				    				poziom_zerowego_naglowka=1;
  				    			elseif(poziom_znakowy_artykulu>0)then
  				    				poziom_zerowego_naglowka=0;
  				    				poziom_srednikowego_naglowka=0;
  				    			end;
  				    		end;
  				    	end;
  				    	
  				    	local czy_sredniki=poziom_poczatku_artykulu and mw.ustring.match(poziom_poczatku_artykulu,"^;+") or nil;
  				    	if(czy_sredniki)then poziom_srednikowego_naglowka=0;end;
						if((czy_rozdzial)and(poziom_znakowy_artykulu>0))then
							ostatni_rozdzial_dodatni=0;
							ostatni_rozdzial_centrowany=w_rozdziale and 0 or ostatni_rozdzial_centrowany;
						end;
						local id=(not czy_rozdzial)and artykul_w_bazie[4] or nil;

						if(not czy_rozdzial)then
							local poziom_zerowego_artykulu_poprz=poziom_zerowego_artykulu;
							poziom_artykulu,poziom_zerowego_artykulu=ToNumberPoziomArtykulu(poziom_artykulu);
							if(poziom_zerowego_artykulu==0)then poziom_zerowego_artykulu=poziom_zerowego_artykulu_poprz;end;
							poziom_artykulu=poziom_artykulu+poziom_zerowego_artykulu;
						end;
  				    	poziom_artykulu=(((czy_rozdzial)and(poziom_znakowy_artykulu<=0)or(not czy_rozdzial))and ((ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)) or 0)+poziom_artykulu+poziom_zerowego_naglowka+poziom_srednikowego_naglowka+staly_dodatek_rozdzialu+(id and 1 or 0);
  				    	if((czy_rozdzial)and(poziom_znakowy_artykulu>0))then
  				    		if(w_rozdziale)then
								ostatni_rozdzial_dodatni=nil;
								ostatni_rozdzial_centrowany=poziom_znakowy_artykulu;
							else
								ostatni_rozdzial_dodatni=poziom_znakowy_artykulu;
							end;
						end;
  				    	
  				    	local czy_sredniki=poziom_poczatku_artykulu and mw.ustring.match(poziom_poczatku_artykulu,"^;+") or nil;
            	  		if(czy_sredniki)then poziom_srednikowego_naglowka=#poziom_poczatku_artykulu;end;
            	  		
            	  		poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_artykulu;
            	  					
            	  		local numeracja_artykulu=artykul_w_bazie[2][3];
        				local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
        				poziom_artykulu,staly_dodatek_artykulu=PoziomNumerNaglowka(poziom_artykulu,poziom_numeracji_artykulu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_artykulu);
        				poprz_poziom_rozdzialu_lub_artykulu=poziom_artykulu;
        				poczatek_poprz=poziom_poczatku_artykulu;
            	  		local wynik=__FUNKCJA(poziom_artykulu,poziom_naglowka,poziom_znakowy_artykulu,w_rozdziale,czy_sredniki);
            	  		if(not parametry_modul.TypeNil(wynik))then return wynik;end;
            	  end;
            end;
        end;
	end;
	local function IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista_artykulowa,bez_sprawdzania)
		local ile_w_rozdziale=0;
		for s=1,#tab_lista_artykulowa[2],1 do
			if(bez_sprawdzania or CzyWliczacBezPoziomowo(1,s))then
				local w_rozdziale=tab_lista_artykulowa[2][s][2][4];
				if(w_rozdziale)then
					  ile_w_rozdziale=ile_w_rozdziale+1;
					  if(ile_w_rozdziale>1)then break;end;
				end;
			end;
		end;
		return ile_w_rozdziale
	end;
	----
  		-----
		if(poziomowo)then
			czy_nienilowy_rozdzial=tab_lista[1][2][1];
			czy_pierwszy_nilowy=(m==1)and (czy_nienilowy_rozdzial==nil) or czy_pierwszy_nilowy;
    	    poziom_rozdzialu=czy_nienilowy_rozdzial or 0;
        	prawdziwy_poziom_rozdzialu=poziom_rozdzialu;
        	poziom_poczatku_rozdzialu=tab_lista[1][2][2];
        	local numeracja_rozdzialu=tab_lista[1][2][3];
        	poziom_numeracji_rozdzialu=PoziomNumeracji(numeracja_rozdzialu);
        	local czy_rozdzial_centrowany=tab_lista[1][2][4];
        	----
        	local czy_sredniki;
        	----
        	rozdzial=tab_lista[1][1];
        	----
        
	        if((m==1)and(not numer_spisu)and(not nazwa_spisu))then
    	    	if(poziom_rozdzialu==1)then
        			local spis=tab_lista[1]["spis"];
        			if(spis)then
        				nazwa_spisu=spis[1];
        				numer_spisu=spis[2];
        			end;
        		end;
        	elseif((m>2)and(numer_spisu)and(nazwa_spisu))then
        		if(poziom_rozdzialu==1)then
           			local spis=tab_lista[1]["spis"];
           			if(spis)then
        				nazwa_spisu=spis[1];
        				numer_spisu=spis[2];
        			end;
        		end;
        	end;
        	--poziom_rozdzialu=poziom_rozdzialu+((poziom_rozdzialu>0)and (poziom_numeracji_rozdzialu or 0) or (-(poziom_numeracji_rozdzialu or 0)));
        	tab_poziomowo={};
        
        	--[[local czy_jest_teraz_spis_tresci=((m>1)and(not spis_tresci_zerowy or not poziom_zerowy)or((m==1)and(spis_tresci_zerowy)))
                                                 and ((m==1) and true or tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial])]]
        	local czy_jest_teraz_spis_tresci=(not juz_nie_rozwazaj_rozdzialu_spisu_tresci) 
                                             and((m==1)and (czy_nienilowy_rozdzial and tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial] or ((not czy_nienilowy_rozdzial)and true or false))
                                             	           or ((m>1)and tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial] 
                                             	           	            or false));
        	if((m>1)and(czy_pierwszy_nilowy))then
        		 czy_jest_teraz_spis_tresci=tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial];
        		if(czy_jest_teraz_spis_tresci)then
        			juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
        			juz_nie_rozwazaj_spisu_tresci=nil;
        			czy_pierwszy_nilowy=nil;
        			pierwszy_ujemny_spis_tresci=nil;
        		end;
        	end;
         
        	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_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
        		glowny_spis_tresci_ksiazki=true;
        	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
        			glowny_spis_tresci_ksiazki=false;
        			juz_nie_rozwazaj_spisu_tresci=true;
        			czy_nie_ten_rozdzial=tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
        		end;
        	else
        		 czy_nie_ten_rozdzial=tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[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_naglowka_bez_poprawki=poziom_rozdzialu;
            		poziom_naglowka=poziom_rozdzialu+(czy_rozdzial_centrowany and 0 or (ostatni_rozdzial_centrowany or 0));
            	    poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
            	
            		poziom_pierwszego_ujemnego_spisu_tresci=nil;
            		----
            		ostatni_poczatek_artykulu=nil;
            		pierwszy_rowny_rozdzial=nil;
            		----
            		if((m>2)or(not czy_pierwszy_nilowy))then
            			poprzedni_tab_poziomowo=nil;
            		end;
            	
            		poziom_zerowego_naglowka=0;
            		poziom_srednikowego_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;
            			----
            			pierwszy_ujemny_spis_tresci=nil;
            			czy_poziom_ujemny_spisu_tresci=nil;
            		elseif(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_naglowka,1);
            				  spis_tresci=true;
            			else
            				if(not pierwszy_rozdzial_dodatni)then
            					pierwszy_rozdzial_dodatni=1;
            					numer_rozdzialu=HNumerPoziomow(poziom_naglowka,1);
            				else
            					numer_rozdzialu=HNumerPoziomow(poziom_naglowka);
            				end;
            			end;
            		else
            			numer_rozdzialu=HNumerPoziomow(poziom_naglowka,1);
            			glowny_dodatni_rozdzial=false;
            		end;
            		if(czy_rozdzial_centrowany)then
            			ostatni_rozdzial_dodatni=nil;
            			ostatni_rozdzial_centrowany=poziom_rozdzialu;
            		else
            			ostatni_rozdzial_dodatni=poziom_rozdzialu;
            		end;
            	elseif(poziom_znakowy_rozdzialu<0)then
            		czy_sredniki=mw.ustring.match(poziom_poczatku_rozdzialu,"^(;+)");
            		if(czy_sredniki)then
            			poziom_zerowego_naglowka=0;
            			----
            			ostatni_poczatek_artykulu=nil;
            			pierwszy_rowny_rozdzial=nil;
            			----
            			if((m>1)and((not mw.ustring.match(tab_lista_artykulow_w_ksiazce[m-1][1][2][2] or "","^;+.*$"))
            					or(#(tab_lista_artykulow_w_ksiazce[m-1][1][2][2] or "")==#(tab_lista_artykulow_w_ksiazce[m][1][2][2] or ""))))then
            				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;
            					----
            					pierwszy_ujemny_spis_tresci=nil;
            					czy_poziom_ujemny_spisu_tresci=nil;
            				elseif(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;
            			end;
            			----
            			poziom_srednikowego_naglowka=#czy_sredniki;
            			poziom_naglowka=(ostatni_rozdzial_centrowany or 0) + (ostatni_rozdzial_dodatni or 0) + poziom_zerowego_naglowka + poziom_srednikowego_naglowka;
            			poziom_naglowka_bez_poprawki=poziom_naglowka;
            			poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
            			numer_rozdzialu=HNumerPoziomow(poziom_naglowka);
            		
            			poziom_znakowy_rozdzialu=-poziom_srednikowego_naglowka;
            			poziom_rozdzialu=poziom_srednikowego_naglowka;
            		
            		else
            			if(not pierwszy_rowny_rozdzial)then
            				if((ostatni_poczatek_artykulu)
            					  and(#ostatni_poczatek_artykulu==#poziom_poczatku_rozdzialu)
            			    			and(mw.ustring.match(ostatni_poczatek_artykulu,"^*"))
            			        			and(mw.ustring.match(poziom_poczatku_rozdzialu,"^:"))
            	    		)then
            					poziom_rozdzialu=poziom_rozdzialu+1;
            					poziom_znakowy_rozdzialu=-poziom_rozdzialu;
            					pierwszy_rowny_rozdzial=1;
            			
            					poziom_naglowka=poziom_rozdzialu+(ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka+poziom_srednikowego_naglowka;
            					poziom_naglowka_bez_poprawki=poziom_naglowka;
            					poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
            				else
            					 poziom_naglowka=poziom_rozdzialu+(ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka+poziom_srednikowego_naglowka;
            					 poziom_naglowka_bez_poprawki=poziom_naglowka;
            					 poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
            				end;
            			else
            				if((not ostatni_poczatek_artykulu)or((#ostatni_poczatek_artykulu==#poziom_poczatku_rozdzialu)and(mw.ustring.match(poziom_poczatku_rozdzialu,"^*"))))then 
	            	    		pierwszy_rowny_rozdzial=0;
    	        			elseif((#ostatni_poczatek_artykulu==#poziom_poczatku_rozdzialu)and(mw.ustring.match(poziom_poczatku_rozdzialu,"^:")))then
        		    			pierwszy_rowny_rozdzial=1;
        		    		elseif((#ostatni_poczatek_artykulu==#poziom_poczatku_rozdzialu)and(mw.ustring.match(poziom_poczatku_rozdzialu,"^#")))then
        	    				pierwszy_rowny_rozdzial=nil;
            	    		end;
            			
            				poziom_rozdzialu=poziom_rozdzialu+(pierwszy_rowny_rozdzial or 0);
            				poziom_znakowy_rozdzialu=-poziom_rozdzialu;
            		
            				poziom_naglowka=poziom_rozdzialu+(ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka+poziom_srednikowego_naglowka;
            				poziom_naglowka_bez_poprawki=poziom_naglowka;
            				poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
            			end;
            	
            			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_naglowka);
            			--end;
            				local numer_rozdzialu_dodatniego=HNumerPoziomowNaglowkow(0) or 0;
            				if(numer_rozdzialu_dodatniego>=numer_rozdzialu)then
	            				numer_rozdzialu=HNumerPoziomow(poziom_naglowka,numer_rozdzialu_dodatniego+1);
    	        			end;
        	    		else
            				numer_rozdzialu=HNumerPoziomow(poziom_naglowka,(HNumerPoziomowNaglowkow(0) or 0)+1);
            				glowny_ujemny_rozdzial=false;
            			end;
            		end;
            	else
            		if((m>1)or((m==1)and(not czy_pierwszy_nilowy)))then
            			poziom_zerowego_naglowka=1;
            			poziom_naglowka= 1 + (ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0) + 0+poziom_srednikowego_naglowka;
            			poziom_naglowka_bez_poprawki=poziom_naglowka;
            			poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
            			numer_rozdzialu=HNumerPoziomow(poziom_naglowka);
            		
            			poziom_znakowy_rozdzialu=-1;
            			poziom_rozdzialu=1;
            		else
            			poziom_zerowego_naglowka=0;
            			numer_rozdzialu=0;
            			poziom_naglowka=(ostatni_rozdzial_centrowany or 0);
            			poziom_naglowka_bez_poprawki=poziom_naglowka;
            			staly_dodatek_rozdzialu=0;
            		end;
            	end;
            
            	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)then
       	    	--	 if((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][1]==0)
    			--	)then
    		    --		local lens_tab_numer=#tab_numer;
    		    --		local roznica=math.min(#(poprzedni_tab_poziomowo or {})+#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;
    			--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;
        					----
            				pierwszy_ujemny_spis_tresci=nil;
	            			czy_poziom_ujemny_spisu_tresci=nil;
    	    			elseif(poziom_znakowy_rozdzialu<0)then
        					tab_numer=tab_numer_2;
        					tab_poziomowo={};
        					poziom_spisu_tresci=nil;
        					HNumerPoziomow=HNumerPoziomow_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;
        				local min_lens=math.min(#poprzedni_tab_poziomowo,lens);
        				for i=1,min_lens,1 do
        				 	tab_numer[len_tab_numer+i]=poprzedni_tab_poziomowo[i];
	        			end;
	        			for i=min_lens+1,#tab_numer do
    	    				tab_numer[len_tab_numer+i]=nil;
        				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;
        		end;
        	local function CzyJestONumerzeMniejszymLubRownymPoziomieNizAktualnyRozdzial()
        		if(poziom_rozdzialu==0)then return true;end;
            	if(poziom_znakowy_rozdzialu>0)then
            		local ile_w_rozdziale_w_naglowku_artykulow=IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista,true);
    				return AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_aktualnego_naglowka,poziom_naglowka,poziom_znakowy_naglowka)
    					if(ile_w_rozdziale_w_naglowku_artykulow>0)then return true;end;
    					if(poziom_znakowy_naglowka>0)then
    						if(poziom_aktualnego_naglowka<=poziom_naglowka)then
    							return true;
    						end;
    					end;
    				end);
            	elseif(((m==1)
            				or((tab_lista_artykulow_w_ksiazce[m-1])
            						and((tab_lista_artykulow_w_ksiazce[m-1][1][2][1] or 0)>0)and(tab_lista_artykulow_w_ksiazce[m-1][2])and(#tab_lista_artykulow_w_ksiazce[m-1][2]==IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista_artykulow_w_ksiazce[m-1],true))))
            							and(poziom_znakowy_rozdzialu<0)
            	)then
            		if(tab_lista[2])then
        	  			local wynik=AnalizaArtykulowaLubRozdzialowa(tab_lista[2],nil,function(poziom_artykulu,poziom_naglowka,_,w_rozdziale)
        	  				if(not w_rozdziale)then
        	  					if(poziom_artykulu<=poziom_naglowka)then
            	  					return true;
        	  					end;
        	  				 end;
        	  			end);
        	  			if(wynik)then return true;end;
            	  	end;
    				return AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_aktualnego_naglowka,poziom_naglowka,poziom_znakowy_naglowka)
    					if(poziom_znakowy_naglowka<=0)then
    						if(poziom_aktualnego_naglowka<=poziom_naglowka)then
    							return true;
    						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][1]==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][1] or 0)>0)
        		    						and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)>poziom_rozdzialu)
        		    					)or(
        		    						((poziom_znakowy_rozdzialu<0)
        										and((tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)<0)
        		    								and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)+poziom_zerowego_naglowka>poziom_rozdzialu)
        		    					)
        		    					)or(
        		    						(poziom_znakowy_rozdzialu==0)and((tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)~=0)
        		    					))
        		)then
        	    	if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
       				if(m==1)then
       					  tab_numer={0,}
       				else
       		 			  table.insert(tab_numer,0);
       				end;
       			
        		else]]--[[if((m==1)and(not tab_lista_artykulow_w_ksiazce[m+1]))then
        			 if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
        			tab_numer={};
        		else]]
        		local function DodajNaSamPoczatek()
        	    	if((tab_lista_artykulow_w_ksiazce[m+1])
        					and((
        		   	    		(poziom_znakowy_rozdzialu>0)
        		   	    			--[[and((tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)>0)
        			        			and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)>poziom_rozdzialu)]]
        			        	and AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu)
        	  							if(poziom_znakowy_rozdzialu>0)then
        	  								if(poziom_artykulu>poziom_naglowka)then
            	  								return true;
        	  								end;
        	  							end;
        	  							return false;
        	  						end)
        					)or(
        			    		(poziom_znakowy_rozdzialu<0)  
        			    			--[[and((tab_lista_artykulow_w_ksiazce[m+1][1][2][2])
        			    				and(poziom_poczatku_rozdzialu)
        			    					and(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)<0)
        			    						and (mw.ustring.match(poziom_poczatku_rozdzialu,"^;+"))
        			    							and (mw.ustring.match(tab_lista_artykulow_w_ksiazce[m+1][1][2][2],"^;+"))
        			        							and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)>poziom_rozdzialu)]]
        			        		and AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,_,czy_sredniki_aktualnego_rozdzialu)
        			        			if((czy_sredniki)and(czy_sredniki_aktualnego_rozdzialu))then
        	  								if(poziom_znakowy_rozdzialu<0)then
        	  									if(poziom_artykulu>poziom_naglowka)then
            	  									return true;
        	  									end;
        	  								end;
        	  							end;
        	  							return false;
        	  						end)
        					))
        			)then
        				if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
        				table.insert(tab_numer,0);
        				return true;
        			else
        				if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
        				return false;
        			end;
        		end;
        		if((m==1)and(czy_pierwszy_nilowy)and(poziom_znakowy_rozdzialu==0))then
        			 if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
    	    		tab_numer={};
        		elseif((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
	        		function Poziom_dodatni_lub_ujemny()
	        			return AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu)
        	  				if(poziom_artykulu>poziom_naglowka)then
            	  				return true;
        	  				end;
    	  					return false;
	        			end);
    	  			end;
	        		local function czy_inaczej_numeruj_rozdzial_dodatni()
	        			return AnalizaArtykulowaLubRozdzialowa(tab_lista[2],false,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,w_rozdziale,id)
	        				if(not w_rozdziale)then
        	  					if(poziom_artykulu>poziom_naglowka)then
            	  					return true;
        	  					end;
    	  						return false;
    	  					end;
	        			end);
    	    		end;
        	
	        		local function czy_inaczej_numeruj_rozdzial_ujemny()
	        			return AnalizaArtykulowaLubRozdzialowa(tab_lista[2],nil,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu)
        	  				if(poziom_artykulu>poziom_naglowka)then
            	  				return true;
            	  			end;
	        			end);
        			end;
        			if((poziom_znakowy_rozdzialu>0)and((czy_inaczej_numeruj_rozdzial_dodatni())or(Poziom_dodatni_lub_ujemny())))then
        				if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
        			----
	        			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_zapasowe=tab_numer;
    	    			tab_numer_1=tab_numer;
        				tab_numer={};
        				pierwszy_dodatni_spis_tresci=true;
        			elseif((poziom_znakowy_rozdzialu<0)and((czy_inaczej_numeruj_rozdzial_ujemny())or(Poziom_dodatni_lub_ujemny())))then
        				if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
        				----
        				tab_poziomowo_2=tab_poziomowo;
	        			tab_poziomowo={};
    	    			czy_poziom_ujemny_spisu_tresci=true;
        		
        				HNumerPoziomow_2=HNumerPoziomow;
        				HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        		
	        			tab_numer_zapasowe=tab_numer;
    	    			tab_numer_2=tab_numer;
	    	    		tab_numer={};
    	    			pierwszy_ujemny_spis_tresci=true;
        			end;
    		    	DodajNaSamPoczatek();
        		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))))
    					and(not CzyJestONumerzeMniejszymLubRownymPoziomieNizAktualnyRozdzial()))then
            	if(poziom_rozdzialu>0)then
        				
        			if(poziom_znakowy_rozdzialu>0)then
        				if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
        				----
        				HNumerPoziomowNaglowkow_2=HNumerPoziomowNaglowkow;
        				HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        					
        				tab_numer_zapasowe=tab_numer;
        				tab_numer_3=tab_numer;
	        			tab_numer={};
        				
        				HNumerPoziomow_3=HNumerPoziomow;
        				HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        					
        				pierwszy_dodatni_naglowek=true;
        				poziom_pierwszego_dodatniego_naglowka=poziom_rozdzialu;
        				glowny_dodatni_rozdzial=true;
        			else
        				if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
        				----
        				tab_numer_zapasowe=tab_numer;
        				tab_numer_4=tab_numer;
        				tab_numer=parametry_modul["KopiujTabelęElementów"](tab_numer);
	        			tab_numer[#tab_numer]=nil;
        				HNumerPoziomow_4=HNumerPoziomow;
        				HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        					
        				if(poprz_poziom_rozdzialu_lub_artykulu)then
        					numer_rozdzialu=HNumerPoziomow(poprz_poziom_rozdzialu_lub_artykulu,#tab_numer);
        				end;
        				
        				pierwszy_ujemny_naglowek=true;
        				poziom_pierwszego_ujemnego_naglowka=poziom_rozdzialu;
        				glowny_ujemny_rozdzial=true;
        			end;
        			--else
        			--	if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
        				--if(poziom_znakowy_rozdzialu>0)then pierwszy_dodatni_naglowek=true;else pierwszy_ujemny_naglowek=true;end;
        			--end;
        		else
        			if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
            	end;
        		DodajNaSamPoczatek();
        	elseif(DodajNaSamPoczatek())then
        	else
        		if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
        	end;
   --    end;
   			zbieraj_dane=true;
   			poprz_numer_rozdzialu_lub_artykulu=poziom_numeracji_rozdzialu;
   			poprz_poziom_rozdzialu_lub_artykulu=poziom_naglowka;
   			poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_naglowka_bez_poprawki;
   			if(prawdziwy_poziom_rozdzialu>0)then
   				pierwszy_dodatni_naglowek=true;
   			else
   				pierwszy_ujemny_naglowek=true;
   				pierwszy_dodatni_naglowek=true;
   			end;
    	else
    		local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki);
		end;
 		if((tab_lista[2])and(parametry_modul["CzySąElementyNumerowaneTablicy"](tab_lista[2])))then
 			local HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
 			local HNumerPoziomu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
 			local czy_dwukropek_artykulu=nil;
 			local stare_HNumerArtykulu=nil;
 			local stare_HNumerPoziomu=nil;

	 		local czy_tytul_rozdzial=nil;

 			local czy_ma_elementy=nil;
 		
 			ostatni_poczatek_artykulu=nil;
 		
 			local czy_zera=nil;
 			local ile_w_rozdziale=nil;
 		
 			local poprz_poziom_artykulu_bez_b=nil;
 		
 			local czy_poziomowo_z_innego=nil;
 			local czy_poziomowo_z_tego_samego=nil;
 		
	 		local b_poprzednie=nil;
 			local staly_dodatek=0;
 			local k=1;
 			-----
	 		local czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
	 		local artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
	 		local czy_sa_artykuly_w_rozdziale_wewnatrz_naglowka=nil;
 			-----
 			local numer_poprz=nil;
	  		local poczatek_poprz=nil;
  			local id_poprz=nil;
  			
  			local tab_poprzedni_artykul_w_bazie=nil;
  			local odejmnij_od_dwukropka=0;
  			-----
  			local czy_w_trakcie_dwukropkowania=nil;
 			-----
 			local poziom_zerowego_artykulu=0;
 			local staly_poziom_rozdzialu_z_artykulami=0;
 			local nilowanie_poprzedniego_rejestru_tab_poziomowo=nil;
 			local czy_poza_podrecznikiem_poprz=nil;
 			-----
  			for p,artykul_w_bazie in ipairs(tab_lista[2])do
  				local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie[1]);
  				local artykul=czy_table_baza_artykulu and artykul_w_bazie[1][1] or artykul_w_bazie[1];
  				local nazwa=czy_table_baza_artykulu and artykul_w_bazie[1][2] or nil;
  				local Przekierowanie=function(przekierowanie)
  					return (((parametry_modul.TypeString(przekierowanie))and(przekierowanie))or(parametry_modul.TypeTable(przekierowanie)and(((przekierowanie[1])and((przekierowanie[2])or(przekierowanie[3])))or(przekierowanie[1]))and(przekierowanie[1]..(przekierowanie[2] and ("?"..(przekierowanie[2] or "")) or "")..(przekierowanie[3] and ("#"..(przekierowanie[3] or "")) or ""))));
  				end;
  				local czy_poza_podrecznikiem=artykul_w_bazie[5];
  				local przekierowanie=(not czy_poza_podrecznikiem) and (czy_table_baza_artykulu and ((not artykul_w_bazie[1][4]) and Przekierowanie(artykul_w_bazie[1][3]) or {Przekierowanie(artykul_w_bazie[1][3]),artykul_w_bazie[1][4],nil,nil,}) or nil) or (((czy_poza_podrecznikiem)and(czy_table_baza_artykulu)and(artykul_w_bazie[1][5])or(artykul_w_bazie[1][6])) and {nil,nil,artykul_w_bazie[1][5],artykul_w_bazie[1][6],} or nil);
  				---
  				local czy_dodane=czy_table_baza_artykulu and artykul_w_bazie[1][7] or nil;
  				----
				artykul=UzyskajArtykul(artykul);
				----
				if(naglowek or not tab_artykul[artykul])then
					pierwszy_rowny_rozdzial=nil;
				
					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][1];
							local poziom_poczatku_artykulu=artykul_w_bazie[2][2];
							----
							local czy_poczatek_rozdzialu=(IleNajblizejDalejBezPoziomowo(p-1)>IleNajblizejDalejBezPoziomowo(0));
							
							poziom_artykulu,odejmnij_od_dwukropka,czy_w_trakcie_dwukropkowania=OdejmnijOdDwukropka(poziom_artykulu,poziom_poczatku_artykulu,(czy_poczatek_rozdzialu and numer_poprz or 0),czy_w_trakcie_dwukropkowania,odejmnij_od_dwukropka);
							----
							local numeracja_artykulu=artykul_w_bazie[2][3];
							local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
					  
							local w_rozdziale=artykul_w_bazie[2][4];
							if(w_rozdziale)then
					  			function CzyRozdzialMaArtykulyNieWewnetrzNaglowka()
					  				for s,artykul_w_bazie in ipairs(tab_lista[2])do
					  					if(s>p)then
					  						if((tab_lista[2][s])and(not tab_lista[2][s][2][4]))then
					  							return true;
					  						end;
					  					end;
					  				end;
					  				return false;
					  			end;
					  			function CzyRozdzialMaRozdzialyNieWewnetrzNaglowka()
					  				  for s,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
					  						if(s>m)then
					  							local poziom_rozdzialu=tab_lista[1][2][1] or 0;	
					  							if(poziom_rozdzialu<0)then
					  								return true;
					  							end;
					  			  			end;
					  				  end;
					  				  return false;
					  			end;
					  			if(not ile_w_rozdziale)then
					  				ile_w_rozdziale=IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista,false);
					  			end;
					  			if(ile_w_rozdziale==1)then
					  				local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer_zapasowe or tab_numer,{},nil,tab_lista[2][p][5],przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki,czy_dodane);
					  				if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
					  				czy_w_rozdziale_rejestrowane_osobno_artykuly=true;
					  			elseif(not artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)then
					  				if(parametry_modul.TypeNil(czy_sa_artykuly_w_rozdziale_wewnatrz_naglowka))then
					  					czy_sa_artykuly_w_rozdziale_wewnatrz_naglowka=((CzyRozdzialMaArtykulyNieWewnetrzNaglowka())or(CzyRozdzialMaRozdzialyNieWewnetrzNaglowka()));
					  				end;
					  				if(czy_sa_artykuly_w_rozdziale_wewnatrz_naglowka)then
					  					if(not artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)then
					  						tab_numer[#tab_numer+1]=0;
					  						artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=true;
					  					end;
					  				else
					  					local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer_zapasowe or tab_numer,{},nil,tab_lista[2][p][5],przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki,czy_dodane);
					  					if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
					  					czy_w_rozdziale_rejestrowane_osobno_artykuly=true;
					  		    	end;
					  			end;
							elseif((artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)or(czy_w_rozdziale_rejestrowane_osobno_artykuly))then
								if(artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)then
					  				czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
					  				artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
					  				table.remove(tab_numer,#tab_numer);
					  				tab_poziomowo={};
					  				HNumerPoziomu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
					  				HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
								end;
				  				artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
				  				czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
				  				----
					  			k=1;
					  			b_poprzednie=nil;
					  			tab_poprzedni_artykul_w_bazie=nil;
					  			----
							end;
							local czy_rozdzial_z_poczatkiem_jedynki=nil;
							if(not czy_zera)then
								if(not w_rozdziale)then
  									if((((not czy_nienilowy_rozdzial)and(m==1))or((czy_nienilowy_rozdzial)and(m>=1)))and(k==1))then
  					  					local numer=tab_lista[2][p][2][1];
  					  					local poczatek=tab_lista[2][p][2][2];
  					  					if(((not czy_nienilowy_rozdzial)and(mw.ustring.match(poczatek,"^:")))or(numer+poziom_numeracji_artykulu==0))then
  					  						for s=p+1,#tab_lista[2],1 do
  					  							if(CzyWliczacBezPoziomowo(p,s))then
  					  								local numer=tab_lista[2][s][2][1];
  					  								local poczatek=tab_lista[2][s][2][2];
  					  								local numeracja_artykulu=tab_lista[2][s][2][3];
													local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
  					  								if((mw.ustring.match(poczatek,"^#"))or(numer+poziom_numeracji_artykulu>0))then
  					  									if(((#tab_numer>0)and(tab_numer[#tab_numer]~=0))or(#tab_numer==0))then
  					  										table.insert(tab_numer,0);
  					  									end;
  					  									tab_poziomowo={};
  					  									czy_zera=true;
  					  									break;
  					  								elseif((not mw.ustring.match(poczatek,"^:"))and(not(#poczatek==0)))then
  					  									break;
  					  								end;
  					  							end;
  					  						end;
  					  					end;
  					  				end;
  					  			end;
  							else
  					  			--local numer_poprz=tonumber(tab_lista[2][p-1][2][1]);
  					  			--local poczatek_poprz=tab_lista[2][p-1][2][2];
  					  			--local id_poprz=tab_lista[2][p-1][4];
  					  			local numer=tonumber(tab_lista[2][p][2][1]);
  					  			local poczatek=tab_lista[2][p][2][2];
  					  			local id=tab_lista[2][p][4];
  					  			local function DodajUsunNumerek(jedno,drugie,trzecie)
  					  				if((not jedno)and(not drugie)and(not trzecie))then return;end;
  									if((#tab_numer>(HNumerPoziomowNaglowkow(0) or 0)+poziom_zerowego_naglowka+poziom_srednikowego_naglowka))then
  					  					czy_zera=false;
  					  					tab_poziomowo={};
  										table.remove(tab_numer,#tab_numer);
  										if(#tab_numer>0)then
  											tab_numer[#tab_numer]=(tab_numer[#tab_numer] or 0)+1;
  										end;
										czy_rozdzial_z_poczatkiem_jedynki=true;
					  				end;
  					  			end;
  					  			local wartosc,glowny_spis_tresci_ksiazki=DodajUsunNumerek(((mw.ustring.match(poczatek_poprz,"^:"))and(mw.ustring.match(poczatek,"^#"))),((#poczatek_poprz==0)and(not id_poprz)and(#poczatek>0)and(not id)),((#poczatek_poprz+poprz_numer_rozdzialu_lub_artykulu==0)and(numer+poziom_numeracji_artykulu>0)));
  					  				if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
							end;
  							if((not czy_zera)
  								and((k==1)and(not w_rozdziale)and(tab_lista_artykulow_w_ksiazce[m+1])
  									and(((m==1)and(not czy_nienilowy_rozdzial)and(((artykul_w_bazie[2][1]+poziom_numeracji_artykulu)==0)or(tab_lista_artykulow_w_ksiazce[m+1][1][2][1]>0)))
  											or((m>1)and(czy_nienilowy_rozdzial)and((artykul_w_bazie[2][1]+poziom_numeracji_artykulu)==0)))
            							))then
            					local czy_puste=false;local czy_jeden=true;local ile=0;
            					local poziom_zerowy=artykul_w_bazie[2][1]+poziom_numeracji_artykulu;
            					if(poziom_zerowy)then
            						for h,artykul_w_bazie in ipairs(tab_lista[2])do
            							if(h>p)then
            								czy_jeden=false;
            								local poziom_artykulu=artykul_w_bazie[2][1];
            								local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
            								if(poziom_artykulu+poziom_numeracji_artykulu>0)then
            									czy_puste=true;
            									break;
            								end;
            							end;
            						end;
            						for h,artykul_w_bazie in ipairs(tab_lista[2])do
            							if(h>=p)then
            								ile=ile+1;
            							end;
            						end;
            					end;
            					if(((poziom_zerowy==0)and(((czy_puste)and(not czy_jeden))or(czy_jeden)))or(poziom_zerowy>0))then
            						if(ile<=5)then
    									table.insert(tab_numer,0);
    								else
    									nilowanie_poprzedniego_rejestru_tab_poziomowo=true;
    								end
    							end;
    						end;
							ostatni_poczatek_artykulu=poziom_poczatku_artykulu;
  				    		-----
  				    		local poziom_zerowego_artykulu_poprz=poziom_zerowego_artykulu;
  				    		poziom_artykulu,poziom_zerowego_artykulu=ToNumberPoziomArtykulu(poziom_artykulu);
  				    		
  				    		if(poziom_zerowego_artykulu==0)then 
  				    			poziom_zerowego_artykulu=poziom_zerowego_artykulu_poprz;
  				    		end;
  				    		----
  				    		local czy_sredniki=mw.ustring.match(poziom_poczatku_artykulu,"^(;+)");
            				if(czy_sredniki)then
            		 			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;
            						----
            						pierwszy_ujemny_spis_tresci=nil;
            						czy_poziom_ujemny_spisu_tresci=nil;
            					elseif(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;
            				end;
  				    		----
  				    		local poziom_czysty_artykulu=poziom_artykulu;
  				    		----
  				    		local __poziom_poczatku_rozdzialu= (not czy_poczatek_rozdzialu) and poziom_poczatku_rozdzialu or poczatek_poprz;
  				    		local __poziom_rozdzialu=(not czy_poczatek_rozdzialu) and poziom_rozdzialu or poziom_artykulu;
  				    		poziom_artykulu,staly_poziom_rozdzialu_z_artykulami=PlusIlesDoPoziomuArtykulu(poziom_artykulu,poziom_poczatku_artykulu,__poziom_rozdzialu,__poziom_poczatku_rozdzialu,staly_poziom_rozdzialu_z_artykulami);
  				    		----
  				    		poziom_zerowego_naglowka=czy_sredniki and 0 or poziom_zerowego_naglowka;
  				    		poziom_zerowego_artykulu=czy_sredniki and 0 or poziom_zerowego_artykulu;
  				    		----
  				    		poziom_srednikowego_naglowka=czy_sredniki and 0 or poziom_srednikowego_naglowka;
  				    		poziom_artykulu=poziom_artykulu+poziom_zerowego_artykulu+(ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka+((not czy_sredniki)and poziom_srednikowego_naglowka or 0)+staly_dodatek_rozdzialu;
  				    		----
            	    		local poziom_podany_artykulu_bez_numeracji=poziom_artykulu;
            	    		poziom_artykulu=poziom_artykulu+(poziom_numeracji_artykulu or 0);
            	    		----
            	     		local __poprz_poziom_rozdzialu_lub_artykulu=((poziom_znakowy_rozdzialu>0) and poprz_poziom_rozdzialu_lub_artykulu or poziom_naglowka);
            	     		local __poprz_czysty_poziom_rozdzialu_lub_artykulu=(poziom_znakowy_rozdzialu>0) and poprz_czysty_poziom_rozdzialu_lub_artykulu or poziom_numeracji_rozdzialu;
            	     		poziom_artykulu,staly_dodatek=PoziomNumerNaglowka(poziom_podany_artykulu_bez_numeracji,poziom_numeracji_artykulu,__poprz_poziom_rozdzialu_lub_artykulu,__poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek);
  							----
  				    		local numer_poziomu=HNumerPoziomow(poziom_artykulu);
  							local prefix_poziom_artykulu=poziom_artykulu;
							local function WielopoziomowyAdres(artykul,tab_poprzedni_artykul_w_bazie,poprz_poziom_artykulu_bez_b,b_poprzednie,czy_poziomowo_z_tego_samego,czy_poziomowo_z_innego)
								local b=0;	
								local tab_artykul_w_bazie=mw.text.split(artykul,"/");
								if((tab_poprzedni_artykul_w_bazie)and((not czy_poza_podrecznikiem_poprz)and(not czy_poza_podrecznikiem)))then
									if((#tab_artykul_w_bazie~=1)or(#tab_poprzedni_artykul_w_bazie~=1))then
  										for c=1,#tab_artykul_w_bazie,1 do
					  						local podstrona_artykul=tab_artykul_w_bazie[c];
					  						local podstrona_poprzedni_artykul=tab_poprzedni_artykul_w_bazie[c];
					  						if(podstrona_artykul==podstrona_poprzedni_artykul)then
					  	  						b=b+1;
					  	  					else
					  	  						break;
					  						end;
					  					end;
					  				end;
					  				if((poprz_poziom_artykulu_bez_b<poziom_artykulu)and(b>0)and(#tab_poprzedni_artykul_w_bazie==b))then
					  					czy_poziomowo_z_innego=true;
					  					b=b_poprzednie;
					  					czy_poziomowo_z_tego_samego=nil;
					  				elseif(poprz_poziom_artykulu_bez_b==poziom_artykulu)then
					  					if(czy_poziomowo_z_innego)then
					  						if(b>0)then
					  							b=b_poprzednie;
					  						end;
					  						czy_poziomowo_z_tego_samego=nil;
					  					elseif((#tab_poprzedni_artykul_w_bazie~=b)and(b_poprzednie<b))then
					  						b=b_poprzednie;
					  						czy_poziomowo_z_tego_samego=true;
					  					else
					  						if(czy_poziomowo_z_tego_samego)then
					  							b=b_poprzednie;
					  						else
					  							czy_poziomowo_z_innego=nil;
					  						end;
					  					end;
					  				else
					  					b=b_poprzednie;
					  					czy_poziomowo_z_innego=nil;
					  					czy_poziomowo_z_tego_samego=nil;
					  				end;
								end;
								return tab_artykul_w_bazie,b,b_poprzednie,czy_poziomowo_z_tego_samego,czy_poziomowo_z_innego;
							end;
							-----
							tab_artykul_w_bazie,b,b_poprzednie,czy_poziomowo_z_tego_samego,czy_poziomowo_z_innego=WielopoziomowyAdres(artykul,tab_poprzedni_artykul_w_bazie,poprz_poziom_artykulu_bez_b,b_poprzednie,czy_poziomowo_z_tego_samego,czy_poziomowo_z_innego);
							-----
  								if(poziom_znakowy_rozdzialu<0)then
  									if(#tab_numer~=0)then
  										if(poziom_artykulu<=(poziom_pierwszego_ujemnego_naglowka or 0))then
  											tab_poziomowo=tab_numer_4;
  											tab_numer={};
  											HNumerArtykulu=HNumerPoziomow_4;
  										elseif((numer_rozdzialu>=numer_poziomu)and(#tab_numer>=numer_poziomu))then
  											local tab_numer2={};
  											for i=1,numer_poziomu-1,1 do
  												tab_numer2[i]=tab_numer[i];
  											end;
  											local tab_poziomowo2={};
  											for i=numer_poziomu,numer_rozdzialu,1 do
  												tab_poziomowo2[i-numer_poziomu+1]=tab_numer[i];
  											end;
  											tab_numer=tab_numer2;
  											tab_poziomowo=tab_poziomowo2;
  											HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
  										end;
  									end;
  								end;
  							local czy_z_rozdzialem=((not czy_poza_podrecznikiem)and(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);
  							local dodatek=b-((czy_tytul_rozdzial)and 1 or 0);
  							b_poprzednie=b or 0;
  					  
  							dodatek=((dodatek>0)and dodatek or 0);
  							poprz_poziom_artykulu_bez_b=poziom_artykulu;
  					  		if(not czy_w_rozdziale_rejestrowane_osobno_artykuly)then
  								if((poziomowo)and(poziom_znakowy_rozdzialu<0))then
  									if((numer_rozdzialu>=numer_poziomu)and(numer_poziomu>=1))then
 										HNumerPoziomu(poziom_artykulu,1);
 									end;
  								end;
  								
								local stala=poziom_artykulu;
								
								if((not czy_dwukropek_artykulu)
									and(poziom_poczatku_rozdzialu)
										and(poziom_poczatku_artykulu)
											and(mw.ustring.match(poziom_poczatku_rozdzialu,"^[#:]"))
												and(mw.ustring.match(poziom_poczatku_artykulu,"^:")))then
									stare_HNumerPoziomu=HNumerPoziomu;
									stare_HNumerArtykulu=HNumerArtykulu;
									HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
 									HNumerPoziomu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
 									local ustalona_wartosc=numer_poziomu-numer_rozdzialu;
 									ustalona_wartosc=((ustalona_wartosc>0)and ustalona_wartosc or 1);
 									HNumerArtykulu(stala,ustalona_wartosc);
 									HNumerPoziomu(stala,ustalona_wartosc);
 									czy_dwukropek_artykulu=true;
								elseif((czy_dwukropek_artykulu)and(not mw.ustring.match(poziom_poczatku_artykulu,"^:")))then
									HNumerPoziomu=stare_HNumerPoziomu;
									HNumerArtykulu=stare_HNumerArtykulu;
									stare_HNumerPoziomu=nil;
									stare_HNumerArtykulu=nil;
									czy_dwukropek_artykulu=nil;
								end;
								if(czy_rozdzial_z_poczatkiem_jedynki)then
									HNumerPoziomu(stala,1);
									HNumerArtykulu(poziom_artykulu,1);
								end;
								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;
  					  		end;
				            tab_poprzedni_artykul_w_bazie=tab_artykul_w_bazie;
                    		poprz_numer_rozdzialu_lub_artykulu=poziom_numeracji_artykulu;
                    		poprz_poziom_rozdzialu_lub_artykulu=poziom_artykulu;
                    		poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_podany_artykulu_bez_numeracji;
                    		poziom_srednikowego_naglowka=czy_sredniki and poziom_czysty_artykulu or poziom_srednikowego_naglowka;
                    		numer_poprz=tonumber(tab_lista[2][p][2][1]);
  					  		poczatek_poprz=tab_lista[2][p][2][2];
  					  		id_poprz=tab_lista[2][p][4];
  					  		czy_poza_podrecznikiem_poprz=czy_poza_podrecznikiem;
  					  		if(not nilowanie_poprzedniego_rejestru_tab_poziomowo)then
  					  			poprzedni_tab_poziomowo=tab_poziomowo;
  					  		else
  					  			poprzedni_tab_poziomowo={1,};
  					  		end;
						end;
						local wartosc;
						if(not czy_w_rozdziale_rejestrowane_osobno_artykuly)then
							wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,nil,tab_lista[2][p][5],przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki,czy_dodane);
							if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
						end;
						if(not poziomowo)then
							i=i+1;
						end;
						k=k+1;
				end;
  			end;
  			if(not czy_ma_elementy)then
  				poprzedni_tab_poziomowo=nil;
  			end;
  		else
  			poprzedni_tab_poziomowo=nil;
 		end;
	end;
	return;
end;
function ZamienNumerArtykuluNaTabele(numer_artykulu)
	local tab_numer_artykulu=mw.text.split(numer_artykulu,".",true);
	return tab_numer_artykulu;
end;
function UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu)
	if(#tab_numer_artykulu<=1)then return tab_numer_artykulu;end;
	local stronicowyparser_modul=require("Module:StronicowyParser");
	local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
	local parametry_modul=require("Module:Parametry");
	local nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly=stronicowyparser_modul["DaneUkładuAutonawigacji"](frame,tabela_listy_danych_analizy_ksiazki);
	if((not tab_inne_spisy)or(not parametry_modul["CzySąElementyNumerowaneTablicy"](tab_inne_spisy)))then return tab_numer_artykulu;end;
	local tab_w_spis={};
	for m,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
		local poziom_rozdzialu=tab_lista[1][2][1];
		if(tab_lista[2])then
			for p,artykul_w_bazie in ipairs(tab_lista[2])do
				if((m>1)and(poziom_rozdzialu==1))then break;end;
				local czy_table_baza_artykulu=parametry_modul.TypeTable(artykul_w_bazie[1]);
  				local artykul=czy_table_baza_artykulu and artykul_w_bazie[1][1] or artykul_w_bazie[1];
  				local przekierowanie=czy_table_baza_artykulu and artykul_w_bazie[1][3] or nil;
  				local czy_artykul=nil;
  				for _,tab_lub_str in ipairs(tab_inne_spisy)do
  					local czy_tab_lub_str=parametry_modul.TypeTable(tab_lub_str);
  					if(czy_tab_lub_str)then
  						if(czy_tab_lub_str[1]==artykul)then
  							czy_artykul=true;
  						end;
  					else
  						if(tab_lub_str==artykul)then
  							czy_artykul=true;
  						end;
  					end;
  				end;
  				--czy_artykul=parametry_modul.CzyJestTakiElementNumerowanyTabeli(tab_inne_spisy,artykul);
  				--local czy_przekierowanie=(przekierowanie) and parametry_modul.CzyJestTakiElementNumerowanyTabeli(tab_inne_spisy,przekierowanie) or nil;
  				if(czy_artykul--[[ or czy_przekierowanie]])then
  					tab_w_spis[--[[czy_artykul and]] artykul --[[or przekierowanie]]]=true;
  				end;
			end;
		end;
	end;
	local czy_w_spis=true;
	for _,name in ipairs(tab_inne_spisy)do
		local czy_table_name=parametry_modul.TypeTable(name);
		czy_w_spis=czy_w_spis and tab_w_spis[czy_table_name and name[1] or name];
		if(not czy_w_spis)then break;end;
	end;
	if(not czy_w_spis)then
		return tab_numer_artykulu;
	end;
	if((tab_numer_artykulu)and(#tab_numer_artykulu>1)and(tab_numer_artykulu[1])and(tab_numer_artykulu[1]=='1'))then
		table.remove(tab_numer_artykulu,1);
	end;
	if((tab_numer_artykulu)and(#tab_numer_artykulu>1)and(tab_numer_artykulu[1])and(tab_numer_artykulu[1]=='1'))then
		local nazwa_spisu,numer_spisu;
		local czy_jedno=true;local pierwszy_rozdzial;
		for m,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
			local poziom_rozdzialu=tab_lista[1][2][1];
			if(m>1)then
				if(poziom_rozdzialu==1)then 
					break;
				elseif(m==2)then
					pierwszy_rozdzial=poziom_rozdzialu;
				elseif(m>2)then
					czy_jedno=czy_jedno and pierwszy_rozdzial and (pierwszy_rozdzial<poziom_rozdzialu);
				end;
			end;
		end;
		if(czy_jedno)then
			table.remove(tab_numer_artykulu,1);
		end;
	end;
	return tab_numer_artykulu;
end;
function LaczNumeracjaArtykuluZNumeracjaSpisuTresci(numer_artykulu,numer_spisu)
	local tab_numer_artykulu=ZamienNumerArtykuluNaTabele(numer_artykulu);
	if(#tab_numer_artykulu<=1)then return tab_numer_artykulu;end;
	local tab_numer_spisu=ZamienNumerArtykuluNaTabele(numer_spisu);
	local lens=#tab_numer_spisu;
	for i=lens,1,-1 do
		if(i==lens)then 
			tab_numer_artykulu[1]=tab_numer_spisu[i];
		else
			table.insert(tab_numer_artykulu,1,tab_numer_spisu[i]);
		end;
	end;
	return tab_numer_artykulu;
end;
p["PobierzNumerArtykułu"]=function(frame,tabela_listy_danych_analizy_ksiazki)
  local s=1;
  local parametry_modul=require("Module:Parametry");
  local args_kopia;
  local tab_spis;
  local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_pozapodrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki)
  	   local nazwa_artykulu=pierwszy_parametr_szablonu();
  	   if((nazwa_artykulu==artykul)or(((przekierowanie)and(parametry_modul.TypeString(przekierowanie))and(przekierowanie==nazwa_artykulu))or(parametry_modul.TypeTable(przekierowanie)and(przekierowanie[1]==nazwa_artykulu))))then
  	   	    if(s==ktory)then
				if(poziomowo)then
					local numer_artykulu=(table.concat(tab_numer,".")..((#tab_numer>0) and ((#tab_poziomowo>0) and "." or "") or "")..table.concat(tab_poziomowo,"."));
					if((not nazwa_spisu)or(not numer_spisu) 
						or ((not glowny_spis_tresci_ksiazki)and((tonumber(numer_artykulu) or 1)>1))
							or((glowny_spis_tresci_ksiazki)and((numer_spisu or 1)>1))
					)then
						return numer_artykulu,glowny_spis_tresci_ksiazki;
					elseif((numer_spisu)and(numer_spisu==1))then
						if(glowny_spis_tresci_ksiazki)then
							
							return numer_artykulu,glowny_spis_tresci_ksiazki;
						else
							local tab_numer_artykulu=ZamienNumerArtykuluNaTabele(numer_artykulu);
							tab_numer_artykulu=UsuwajPoczatkoweJedynki(frame,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu);
							return table.concat(tab_numer_artykulu,"."),glowny_spis_tresci_ksiazki;
						end;
					end;
					local numer_spisu_tresci;local glowny_spis_tresci_ksiazki_spisu_tresci;
					if((not tab_spis)or(not tab_spis[nazwa_spisu]))then
						if(not args_kopia)then
							local args=parametry_modul.PobierzArgsParametry(frame,true);
							args_kopia=parametry_modul["KopiujRekurencyjnieTabelęElementów"](args);	
						end;
						args_kopia[1]=nazwa_spisu;
						if(not tab_spis)then tab_spis={};end;
						tab_spis[nazwa_spisu]={};
						numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci=PobierzNumerLubNazweArtykulu({args=args_kopia,},tabela_listy_danych_analizy_ksiazki,__FUNKCJA,false);
						tab_spis[nazwa_spisu]={numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci,};
					else
						local tab_element=tab_spis[nazwa_spisu];
						numer_spisu_tresci=tab_element[1];
						glowny_spis_tresci_ksiazki_spisu_tresci=tab_element[2];
					end;
					if((not numer_spisu_tresci)or((not glowny_spis_tresci_ksiazki_spisu_tresci)and((tonumber(numer_spisu_tresci) or 1)>1)))then return numer_artykulu,glowny_spis_tresci_ksiazki;end;
					local tab_numer_artykulu=LaczNumeracjaArtykuluZNumeracjaSpisuTresci(numer_artykulu,numer_spisu_tresci);
					tab_numer_artykulu=(not glowny_spis_tresci_ksiazki_spisu_tresci) and UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu) or tab_numer_artykulu;
					return table.concat(tab_numer_artykulu,"."),glowny_spis_tresci_ksiazki;
				else
					return i,glowny_spis_tresci_ksiazki;
				end;
  	   	    end;
		    s=s+1;
		end;
  end;
  local wartosc,glowny_spis_tresci_ksiazki=PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,false);
  return wartosc,glowny_spis_tresci_ksiazki;
end;
p["PobierzNazwęArtykułu"]=function(frame,tabela_listy_danych_analizy_ksiazki)
	local s=1;
	local parametry_modul=require("Module:Parametry");
	local args_kopia;
	local tab_spis;
	local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_pozapodrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki)
		local numer,czy_nazwa=pierwszy_parametr_szablonu();
		if((not poziomowo)and(i==numer))then
			if(s==ktory)then
				return (not czy_nazwa) and artykul or (nazwa or artykul);
			else
				s=s+1;
			end;
		elseif(poziomowo)then
			local function NumerArtykulu(tab_numer,tab_poziomowo)
				return (table.concat(tab_numer,".")..((#tab_numer>0) and "." or "")..table.concat(tab_poziomowo,"."));
			end;
			local function WynikArtykulowyZNumeru(numer_artykulu)
				if(numer_artykulu==numer)then
			    	if(s==ktory)then
						return (not czy_nazwa) and artykul or (nazwa or artykul);
					else
						s=s+1;
					end;
				end;
			end;
			local numer_artykulu=NumerArtykulu(tab_numer,tab_poziomowo);
			if((not nazwa_spisu)or(not numer_spisu) 
				or ((not glowny_spis_tresci_ksiazki)and((tonumber(numer_artykulu) or 1)>1))
					or((glowny_spis_tresci_ksiazki)and((numer_spisu or 1)>1))
			)then
				local wynik=WynikArtykulowyZNumeru(numer_artykulu);
				if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
			elseif((numer_spisu)and(numer_spisu==1))then
				if(glowny_spis_tresci_ksiazki)then
					local wynik=WynikArtykulowyZNumeru(numer_artykulu);
					if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
				else
					local tab_numer_artykulu=ZamienNumerArtykuluNaTabele(numer_artykulu);
					tab_numer_artykulu=UsuwajPoczatkoweJedynki(frame,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu);
					local numer_artykulu=table.concat(tab_numer_artykulu,".");
					local wynik=WynikArtykulowyZNumeru(numer_artykulu);
					if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
				end;
			else
				local numer_spisu_tresci;local glowny_spis_tresci_ksiazki_spisu_tresci;
				if((not tab_spis)or(not tab_spis[nazwa_spisu]))then
					if(not args_kopia)then
						local args=parametry_modul.PobierzArgsParametry(frame,true);
						args_kopia=parametry_modul["KopiujRekurencyjnieTabelęElementów"](args);	
					end;
					args_kopia[1]=nazwa_spisu;
					numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci=p["PobierzNumerArtykułu"]({args=args_kopia,},tabela_listy_danych_analizy_ksiazki);
					if(not tab_spis)then tab_spis={};end;
					tab_spis[nazwa_spisu]={numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci,};
				else
					local tab_element=tab_spis[nazwa_spisu];
					numer_spisu_tresci=tab_element[1];
					glowny_spis_tresci_ksiazki_spisu_tresci=tab_element[2];
				end;
				if((not numer_spisu_tresci)or((not glowny_spis_tresci_ksiazki_spisu_tresci)and((tonumber(numer_spisu_tresci) or 1)>1)))then 
					local wynik=WynikArtykulowyZNumeru(numer_artykulu);
					if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
				end;
				local tab_numer_artykulu=LaczNumeracjaArtykuluZNumeracjaSpisuTresci(numer_artykulu,numer_spisu_tresci);
				tab_numer_artykulu=(not glowny_spis_tresci_ksiazki_spisu_tresci) and UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu) or tab_numer_artykulu;
				local numer_artykulu=table.concat(tab_numer_artykulu,".");
				local wynik=WynikArtykulowyZNumeru(numer_artykulu);
				if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
			end;
		end;
  end;
    local wartosc,glowny_spis_tresci_ksiazki=PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,true);
    return wartosc,glowny_spis_tresci_ksiazki;
end;
p["PobierzDaneKsiążki"]=function(frame,tabela_listy_danych_analizy_ksiazki,kodowanie_nie_json)
  local tab_dane_ksiazki=nil;
  local s=1;
  local nazwy_modul=require("Module:Nazwy");
  local parametry_modul=require("Module:Parametry");
  local args_kopia;
  local tab_spis;
  local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
  local tab_nazw_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tab_nazw_generalnego_spisu_rzeczy_woluminu;
  local pierwszy_spis_tresci=nil;
  
  local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_pozapodrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki,czy_dodane)
  	  if((artykul_spisu)and(nazwa_spisu)and(artykul_spisu~=nazwa_spisu))then return false;end;
  	  if(not tab_dane_ksiazki)then tab_dane_ksiazki={};end;
  	  if(not tab_dane_ksiazki[rozdzial])then tab_dane_ksiazki[rozdzial]={};end;
  	  local tab_rozdzial=tab_dane_ksiazki[rozdzial];
  	  local numer_rozdzialu=tab_numer and table.concat(tab_numer,".") or "";
  	  
  	  if((nazwa_spisu)and(numer_spisu)and(not glowny_spis_tresci_ksiazki)and(numer_rozdzialu~=""))then
  			local numer_spisu_tresci;local glowny_spis_tresci_ksiazki_spisu_tresci;
			if((numer_spisu)and(numer_spisu==1))then
					if(not glowny_spis_tresci_ksiazki)then
						local tab_numer_rozdzialu=ZamienNumerArtykuluNaTabele(numer_rozdzialu);
						tab_numer_rozdzialu=UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_rozdzialu);
						numer_rozdzialu=table.concat(tab_numer_rozdzialu,".");
					end;
			else
				if((not tab_spis)or(not tab_spis[nazwa_spisu]))then	
					if(not args_kopia)then
						local args=parametry_modul.PobierzArgsParametry(frame,true);
						args_kopia=parametry_modul["KopiujRekurencyjnieTabelęElementów"](args);	
					end;
					args_kopia[1]=nazwa_spisu;
					numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci=p["PobierzNumerArtykułu"]({args=args_kopia,},tabela_listy_danych_analizy_ksiazki);
					if(not tab_spis)then tab_spis={};end;
					tab_spis[nazwa_spisu]={numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci,};
				else
					local tab_element=tab_spis[nazwa_spisu];
					numer_spisu_tresci=tab_element[1];
					glowny_spis_tresci_ksiazki_spisu_tresci=tab_element[2];
				end;
				if(((not glowny_spis_tresci_ksiazki_spisu_tresci)and(numer_spisu_tresci)and((tonumber(numer_spisu_tresci) or 1)==1))or((glowny_spis_tresci_ksiazki_spisu_tresci)))then 
					local tab_numer_rozdzialu=LaczNumeracjaArtykuluZNumeracjaSpisuTresci(numer_rozdzialu,numer_spisu_tresci);
					tab_numer_rozdzialu=(not glowny_spis_tresci_ksiazki_spisu_tresci) and UsuwajPoczatkoweJedynki(tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_rozdzialu) or tab_numer_rozdzialu;
					numer_rozdzialu=table.concat(tab_numer_rozdzialu,".");
				end;
			end;
  	  elseif((not pierwszy_spis_tresci)and(nazwa_spisu)and(numer_spisu)and(glowny_spis_tresci_ksiazki)and(numer_rozdzialu~=""))then
  		 local czy_spis_tresci=tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial];
  		 if(czy_spis_tresci)then
  		 	pierwszy_spis_tresci=true;
  		 	local tab_numer_rozdzialu=ZamienNumerArtykuluNaTabele(numer_rozdzialu);
			tab_numer_rozdzialu=UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_rozdzialu);
			numer_rozdzialu=table.concat(tab_numer_rozdzialu,".");
  		 end;
  	  end;
  	  
  	  if(not tab_rozdzial[numer_rozdzialu])then
  			tab_rozdzial[numer_rozdzialu]={};
  	  end;
  	  local tab_numer_rozdzialu=tab_rozdzial[numer_rozdzialu];
  	  if(not tab_numer_rozdzialu[artykul])then 
  			tab_numer_rozdzialu[artykul]={}; 
  	  end;
  	  local tab_artykul=tab_numer_rozdzialu[artykul];
  	  local numer_artykulu=tab_poziomowo and table.concat(tab_poziomowo,".") or "";
  	  if(not tab_artykul[numer_artykulu])then
  			tab_artykul[numer_artykulu]={};
  	  end;	
  	  local tab_numer_artykulu=tab_artykul[numer_artykulu];
  	  local czy_tabelka=parametry_modul.TypeTable(przekierowanie);
  	  ----
  	  table.insert(tab_numer_artykulu,{["przekierowanie"]=czy_tabelka and przekierowanie[1] or ((not czy_tabelka) and przekierowanie or nil),["kod języka"]=czy_tabelka and przekierowanie[3] or nil,["kod projektu"]=czy_tabelka and przekierowanie[4] or nil,["pełna nazwa książki"]=(czy_tabelka and przekierowanie[2]) and nazwy_modul["NazwaModułu"](przekierowanie[2][1],przekierowanie[2][2],przekierowanie[2][3],"") or nil,["nazwa"]=nazwa,["spis treści"]=czy_nienilowy_rozdzial,["czy w podręczniku"]=((artykul~="") and ((not czy_artykuly_pozapodrecznikowe) and true or nil) or nil),["dodane"]=czy_dodane,["numer"]=s});
  	  ----
  	  s=s+1;
  	  return false;
  end;
  PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,false,true);
  return (not kodowanie_nie_json) and mw.text.jsonEncode(tab_dane_ksiazki,mw.text.JSON_PRESERVE_KEYS) or tab_dane_ksiazki;
end;
return p;