Przejdź do zawartości

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

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [stwórz] [odśwież]
local p={};
local function PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,typ,zbieraj_dane_wszystkie)
  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 nie_wszystkie=parametry_modul.CzyTak(args["nie wszystkie"]);
  ----
  local dane=tonumber(args["dane"]);
  if((not dane)or((dane~=1)and(dane~=2)and(dane~=3)))then dane=1;end;
  ----
  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_wszystkie)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,dane,};
			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_tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=stronicowyparser_obiekty_modul.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu;
  local tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu);
  
  local odczyt_tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu;
  local tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu);
  
  setmetatable(tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
  setmetatable(tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
  
  local HNumerPoziomow_4=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 tab_numer=poziomowo and {} or nil;
  tab_numer_baza_spis_tresci=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 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 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 czy_pierwszy_nilowy_rozdzial=nil;
  
  local czy_ostatni_rozdzial_jest_centrowany=nil;
  
  local glowny_spis_tresci_ksiazki=nil;
  local poprz_poziom_rozdzialu_lub_artykulu=nil;
  local poprz_numeracji_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 poziom_spisu_tresci_dodatek=nil;
  ----
  local odejmnij_od_dwukropka=0;
  -----
  local czy_w_trakcie_dwukropkowania=nil;
  -----
   local numer_poprz=nil;
  ----
  
  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][6]==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 ZerowyArtykul(tab_lista_2,p,w_rozdziale,poziom_zerowego_artykulu,poziom_zerowego_naglowka,poziom_zerowego_artykulu_poprz)
  		if((not w_rozdziale)
  			and(poziom_zerowego_artykulu>0)
  			and(poziom_zerowego_naglowka>0))then 
  			if(p>1)then
  				 local czy_jest_nast=tab_lista_2[p-1];
  				 if(czy_jest_nast)then
  					 local numer=tonumber(tab_lista_2[p-1][2][1]);
  				    	if(numer>0)then
  				    		poziom_zerowego_artykulu=0;
  				    	end;
  				  else
  					  poziom_zerowego_artykulu=0;
  				  end;
  			end;
  		elseif(poziom_zerowego_artykulu==0)then
  			poziom_zerowego_artykulu=poziom_zerowego_artykulu_poprz;
  		end;
		return poziom_zerowego_artykulu;
	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;
	local prawdziwy_poziom_rozdzialu_poprz=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;
  		local czy_jest_teraz_spis_tresci=nil;
  		local czy_rozdzial_centrowany=nil;
  		-----
  		local zbieraj_dane=true;
  		-----
  		local function PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu)
  			if(not poprz_czysty_poziom_rozdzialu_lub_artykulu)then
				staly_dodatek_rozdzialu={poziom_numeracji_rozdzialu,};
				return poziom_naglowka,staly_dodatek_rozdzialu;
  			end;
			if(poziom_naglowka==poprz_czysty_poziom_rozdzialu_lub_artykulu)then
				local poziom_numeracji=poziom_numeracji_rozdzialu-(staly_dodatek_rozdzialu[1] or 0);
				return poziom_naglowka+((poziom_numeracji>=0)and poziom_numeracji or 0),staly_dodatek_rozdzialu;
			elseif(poziom_naglowka~=poprz_czysty_poziom_rozdzialu_lub_artykulu)then
				staly_dodatek_rozdzialu={poziom_numeracji_rozdzialu,};
				return poziom_naglowka,staly_dodatek_rozdzialu;
			end;
  		end;
  		local function PoziomNumerNaglowkaStalyDodatekRozdzialu(staly_dodatek_rozdzialu,poziom_naglowka,poprz_czysty_poziom_rozdzialu_lub_artykulu)
			if(parametry_modul.TypeTable(staly_dodatek_rozdzialu))then
				return 0;
			elseif(poziom_naglowka>poprz_czysty_poziom_rozdzialu_lub_artykulu)then
				local dodatek=(parametry_modul.TypeTable(staly_dodatek_rozdzialu) and staly_dodatek_rozdzialu[2] or 0);
				return dodatek;
			elseif(poziom_naglowka<poprz_czysty_poziom_rozdzialu_lub_artykulu)then
				local dodatek=(parametry_modul.TypeTable(staly_dodatek_rozdzialu) and staly_dodatek_rozdzialu[1] or 0);
				return dodatek;
			end;
  		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_temp=poziom_zerowego_naglowka or 0;
        local poziom_srednikowego_naglowka_temp=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_temp=staly_dodatek_rozdzialu or 0;
        local poczatek_poprz=nil;
        local ostatni_rozdzial_dodatni_temp=ostatni_rozdzial_dodatni;
        local ostatni_rozdzial_centrowany_temp=ostatni_rozdzial_centrowany;
        local poziom_zerowego_artykulu=0;
        local staly_poziom_rozdzialu_z_artykulami=0;
        local ostatni_artykul_w_rozdziale=nil;
        local czy_dwukropek=nil;
        local czy_rozdzial_centrowany_temp=nil;
        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
            	 		local rozdzial=nil;
            	 		if(czy_rozdzial)then
            	 			artykul_w_bazie=artykul_w_bazie[1];
            	 			rozdzial=artykul_w_bazie[1];
            	 			czy_rozdzial_centrowany_temp=artykul_w_bazie[2][4];
            	 		end;
            	  		local poziom_artykulu=artykul_w_bazie[2][1];
            	  		local czy_dwukropek_aktualnie=nil;
            	  		if((czy_rozdzial)and(rozdzial)and(poziom_artykulu)and(poziom_artykulu==0))then
            	  			czy_dwukropek_aktualnie=mw.ustring.match(rozdzial,":%s*$")
            	  			czy_dwukropek=czy_dwukropek_aktualnie or czy_dwukropek;
            	  		end;
            	  		local poziom_znakowy_artykulu=poziom_artykulu;
            	  		poziom_artykulu=math.abs(poziom_artykulu);
            	  		local poziom_poczatku_artykulu=artykul_w_bazie[2][2];
            	  		local w_rozdziale=(not czy_rozdzial) and artykul_w_bazie[2][4] or nil;
  				    	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;
  				    	local poziom_srednikowego_naglowka_srednik=0;
  				    	if(czy_rozdzial)then
  				    		if(poziom_znakowy_artykulu)then
  				    			if(poziom_znakowy_artykulu==0)then
  				    				poziom_zerowego_naglowka_temp=1;
  				    			elseif(poziom_znakowy_artykulu>0)then
  				    				poziom_zerowego_naglowka_temp=0;
  				    				poziom_srednikowego_naglowka_temp=0;
  				    				ostatni_rozdzial_dodatni_temp=(not czy_rozdzial_centrowany_temp) and ostatni_rozdzial_dodatni_temp or nil;
  				    				czy_dwukropek=nil;
  				    			else
  				    				local poziom_srednikowego_naglowka_srednik_temp=mw.ustring.match(poziom_poczatku_artykulu,"^;+.*$");
  				    				if(poziom_srednikowego_naglowka_srednik_temp)then
  				    					poziom_srednikowego_naglowka_srednik=#poziom_srednikowego_naglowka_srednik_temp;
  				    					poziom_srednikowego_naglowka_temp=poziom_srednikowego_naglowka_srednik;
  				    				end;
  				    			end;
  				    		end;
  				    	end;
  				    	
						if((czy_rozdzial)and(poziom_znakowy_artykulu>0))then
							ostatni_rozdzial_dodatni_temp=0;
							ostatni_rozdzial_centrowany_temp=w_rozdziale and 0 or ostatni_rozdzial_centrowany_temp;
						end;
						local id=(not czy_rozdzial)and artykul_w_bazie[4] or nil;
						local poziom_zerowego_artykulu_aktualny=poziom_artykulu;
						local poziom_artykulu_zerowy;
						if(not czy_rozdzial)then
							local poziom_zerowego_artykulu_poprz=poziom_zerowego_artykulu;
							poziom_artykulu,poziom_zerowego_artykulu=ToNumberPoziomArtykulu(poziom_artykulu);
							poziom_artykulu_zerowy=poziom_artykulu;
							----
							poziom_zerowego_artykulu=ZerowyArtykul(tab_lista_artykulowa,p,w_rozdziale,poziom_zerowego_artykulu,poziom_zerowego_naglowka_temp,poziom_zerowego_artykulu_poprz);
							----
							poziom_artykulu=poziom_artykulu+poziom_zerowego_artykulu;
						end;
						if((not czy_rozdzial)and(poziom_znakowy_rozdzialu<0)and(rozdzial==""))then
							poziom_artykulu=poziom_artykulu+poziom_naglowka_bez_poprawki;
						else
							---
							if(not czy_rozdzial)then
								poziom_zerowego_naglowka_temp=((not w_rozdziale)and(ostatni_artykul_w_rozdziale)and(poziom_zerowego_naglowka_temp>0)and(poziom_zerowego_artykulu_aktualny==0)) and (poziom_zerowego_naglowka_temp-1) or poziom_zerowego_naglowka_temp;
							end;
							----
  				    		poziom_artykulu=(((czy_rozdzial)and(--[[((ostatni_rozdzial_centrowany_temp or 0)>0)or]](poziom_znakowy_artykulu<=0))or(not czy_rozdzial))and ((ostatni_rozdzial_centrowany_temp or 0)+(ostatni_rozdzial_dodatni_temp or 0)+(poziom_zerowego_naglowka_temp+(((poziom_znakowy_artykulu)and(poziom_znakowy_artykulu==0)and(czy_dwukropek)and(not czy_dwukropek_aktualnie))and 1 or 0)+poziom_srednikowego_naglowka_temp)) or 0)+(((czy_rozdzial)and(poziom_znakowy_artykulu>0)and(not czy_rozdzial_centrowany_temp))and ostatni_rozdzial_centrowany_temp or 0)+poziom_artykulu--[[+staly_dodatek_rozdzialu_temp]]+(id and 1 or 0);
  				    		-----
  				    		if(czy_rozdzial)then
  				    			if(poziom_znakowy_artykulu==0)then
  				    				if(not czy_dwukropek_aktualnie)then
  				    					poziom_zerowego_naglowka_temp=1+(czy_dwukropek and 1 or 0);
  				    				else
  				    					poziom_zerowego_naglowka_temp=2;
  				    				end;
  				    			end;
  				    		end;
						end;
						if(not czy_rozdzial)then
							if(w_rozdziale)then ostatni_artykul_w_rozdziale=true else ostatni_artykul_w_rozdziale=false;end;
						end;
  				    	if((czy_rozdzial)and(poziom_znakowy_artykulu>0))then
  				    		if(w_rozdziale)then
								ostatni_rozdzial_dodatni_temp=nil;
								ostatni_rozdzial_centrowany_temp=poziom_znakowy_artykulu;
							else
								ostatni_rozdzial_dodatni_temp=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_temp=#poziom_poczatku_artykulu;end;
            	  		
        				poczatek_poprz=poziom_poczatku_artykulu;
        				poziom_artykulu=poziom_artykulu+((czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
            	  		local wynik=__FUNKCJA(poziom_artykulu,poziom_naglowka_bez_poprawki,poziom_znakowy_artykulu,w_rozdziale,ostatni_rozdzial_centrowany_temp,{poziom_srednikowego_naglowka_temp,poziom_srednikowego_naglowka_srednik,},poziom_zerowego_naglowka_temp,poziom_artykulu_zerowy);
            	  		ostatni_rozdzial_dodatni_temp=(czy_rozdzial_centrowany_temp) and poziom_artykulu or ostatni_rozdzial_dodatni_temp;
            	  		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;
				else
					break;
				end;
			end;
		end;
		return ile_w_rozdziale
	end;
	local function KoniecSpisuTresci(poziom_naglowka_bez_poprawki,znak_poziom,czy_srednik)
         if((tab_numer_baza_spis_tresci)and(#tab_numer_baza_spis_tresci>0))then
        	local function UsunElementySpisTresci(tab_numer_temp)
        		if(not tab_numer_temp)then return;end;
        		local tab_numer_prawd;local HNumerPoziomow_prawd;local HNumerPoziomowNaglowkow_prawd;
        		for i=#tab_numer_temp,1,-1 do
        			local tab_naglowka=tab_numer_temp[i];
        			if((tab_naglowka[4]>=poziom_naglowka_bez_poprawki)or((tab_naglowka[5]<0)and((znak_poziom>0)or(czy_srednik))))then
        				tab_numer_prawd=tab_naglowka[1];
        				HNumerPoziomow_prawd=tab_naglowka[2];
        				HNumerPoziomowNaglowkow_prawd=tab_naglowka[3]
        				table.remove(tab_numer_temp,i);
        			else
        				break;
        			end;
        		end;
        		if(tab_numer_prawd)then
        			tab_numer=tab_numer_prawd;
        			HNumerPoziomow=HNumerPoziomow_prawd;
        			if(HNumerPoziomowNaglowkow_prawd)then HNumerPoziomowNaglowkow=HNumerPoziomowNaglowkow_prawd;end;
        			return true;
        		end;
        		return nil;
        	end;
        	if(znak_poziom>0)then
        		if(not UsunElementySpisTresci(tab_numer_baza_spis_tresci))then return;end;
        		if(#tab_numer_baza_spis_tresci==0)then
        			glowny_spis_tresci_ksiazki=false;
        		end;
        		tab_poziomowo={};
    	   end;
    	end;
	end;
	----
  		-----
		czy_nienilowy_rozdzial=tab_lista[1][2][1];
		poziom_rozdzialu=czy_nienilowy_rozdzial or 0;
        ----
        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;

        tab_poziomowo={};
        local rozdzial_bez_dwukropka=mw.ustring.match(rozdzial,"^%s*(.-)%s*:[%s:]*$") or rozdzial;
        czy_jest_teraz_spis_tresci=((m==1)and (czy_nienilowy_rozdzial and tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu[rozdzial_bez_dwukropka] 
        	                                  or ((not czy_nienilowy_rozdzial)and true or false))
                                             	  or ((m>1)and tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu[rozdzial_bez_dwukropka] 
                                             	      or false));
        poziom_spisu_tresci_dodatek=(czy_jest_teraz_spis_tresci and ((poziom_rozdzialu==0)and 1 or 0) or (poziom_spisu_tresci_dodatek or 0));
         
        local czy_nie_ten_rozdzial;
        if((tab_numer_baza_spis_tresci)and(#tab_numer_baza_spis_tresci>0))then
        	czy_nie_ten_rozdzial=false;
        	glowny_spis_tresci_ksiazki=true;
        else
        	glowny_spis_tresci_ksiazki=false;
        	if(nie_wszystkie)then
        		czy_nie_ten_rozdzial=tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial_bez_dwukropka];
        	end;
        end;
        
        if((m==1)and(not czy_nienilowy_rozdzial))then
			czy_pierwszy_nilowy=true;
			czy_pierwszy_nilowy_rozdzial=true;
        end;
        if(not czy_nie_ten_rozdzial)then
        	if(poziomowo)then
        		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);
        		czy_rozdzial_centrowany=tab_lista[1][2][4];
        		----
        		local czy_z_dwukropkiem=nil;
        		----
        		if(poziom_rozdzialu<0)then
        			poziom_rozdzialu,odejmnij_od_dwukropka,czy_w_trakcie_dwukropkowania=OdejmnijOdDwukropka(-poziom_rozdzialu,poziom_poczatku_rozdzialu,numer_poprz or 0,czy_w_trakcie_dwukropkowania,odejmnij_od_dwukropka);
        			numer_poprz=-tab_lista[1][2][1] or 0;
        			poziom_rozdzialu=-poziom_rozdzialu;
        		else
        			numer_poprz=nil;
        			czy_w_trakcie_dwukropkowania=nil;
        			odejmnij_od_dwukropka=0;
        		end;
        		local czy_sredniki;
        		-----
        		poprzedni_poziom_znakowy_rozdzialu=poziom_znakowy_rozdzialu;
        		poziom_znakowy_rozdzialu=poziom_rozdzialu;
            	poziom_rozdzialu=math.abs(poziom_rozdzialu);
            
            	local poprzedni_tab_poziomowo_temp=poprzedni_tab_poziomowo;
            	
            	if(poziom_znakowy_rozdzialu>0)then
            		poziom_naglowka=poziom_rozdzialu+(czy_rozdzial_centrowany and 0 or (ostatni_rozdzial_centrowany or 0));
            		poziom_naglowka_bez_poprawki=poziom_naglowka;
            		poziom_spisu_tresci_dodatek=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;
            			----
            			czy_poziom_ujemny_spisu_tresci=nil;
            			----
            			if((poprz_ujemnego_rozdzialu_dodatniego_rozdzialu)and(poprz_ujemnego_rozdzialu_dodatniego_rozdzialu>0))then
            				pierwszy_ujemny_naglowek=nil;
            			end;
            		end;
            		KoniecSpisuTresci(poziom_naglowka_bez_poprawki,1);
            	
            		if((tab_numer_baza_spis_tresci)and(#tab_numer_baza_spis_tresci>0)and(not spis_tresci))then
            			numer_rozdzialu=HNumerPoziomow(poziom_naglowka,1);
            			spis_tresci=true;
            			pierwszy_rozdzial_dodatni=1;
            		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;
            		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(glowny_ujemny_rozdzial)then
            				HNumerPoziomow=HNumerPoziomow_4;
	            			HNumerPoziomow_4=nil;
    	        			tab_numer=tab_numer_4;
        	    			poziom_pierwszego_ujemnego_naglowka=nil;
            				glowny_ujemny_rozdzial=nil;
            				----
            				czy_poziom_ujemny_spisu_tresci=nil;
            				----
            				if((poprz_ujemnego_rozdzialu_dodatniego_rozdzialu)and(poprz_ujemnego_rozdzialu_dodatniego_rozdzialu>0))then
            					pierwszy_ujemny_naglowek=nil;
            				end;
            			end;
            			----
            			poziom_srednikowego_naglowka=poziom_rozdzialu;
            			poziom_naglowka=(ostatni_rozdzial_centrowany or 0) + (ostatni_rozdzial_dodatni or 0) + poziom_zerowego_naglowka + poziom_srednikowego_naglowka+((not czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
            			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;
            			
            			KoniecSpisuTresci(poziom_naglowka_bez_poprawki,-1,true);
            		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+((not czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
            					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+((not czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
            					 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+((not czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
            				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;
            			----
            			KoniecSpisuTresci(poziom_naglowka_bez_poprawki,-1);
            			----		
            			numer_rozdzialu=HNumerPoziomow(poziom_naglowka);
            				
            			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;
            		end;
            	else
            		if((m>1)or((m==1)and(not czy_pierwszy_nilowy)))then
            			local poziom_zerowego_naglowka_temp=poziom_zerowego_naglowka;
            			czy_z_dwukropkiem=mw.ustring.match(rozdzial,":%s*$");
            			local dodatek=((czy_z_dwukropkiem)and 1 or 0);
            			poziom_zerowego_naglowka=1+((not czy_z_dwukropkiem)and ((poziom_zerowego_naglowka_temp==2) and 1 or 0) or 1);
            			poziom_naglowka=1+(((not czy_z_dwukropkiem)and(poziom_zerowego_naglowka_temp==2))and 1 or 0)+ (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);
            			KoniecSpisuTresci(poziom_naglowka_bez_poprawki,-1);
            			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_naglowka);
            	elseif(poziom_znakowy_rozdzialu<0)then
            	end;
        	
        		if(poziom_rozdzialu>0)then
	        		if(((czy_ostatni_rozdzial_jest_centrowany)and(ostatni_rozdzial_centrowany or 0)>0)and(#tab_numer>0)and(tab_numer[#tab_numer]==0)and(#tab_numer<=numer_rozdzialu))then
    	    			tab_numer[#tab_numer]=nil;
    	    			numer_rozdzialu=HNumerPoziomow(poziom_naglowka,((numer_rozdzialu>1)and(numer_rozdzialu-1) or 1));
    	    			czy_ostatni_rozdzial_jest_centrowany=nil;
	        		elseif(poprzedni_tab_poziomowo)then
    	    			local lens=math.min(#poprzedni_tab_poziomowo,numer_rozdzialu-#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<numer_rozdzialu)then
        				for i=#tab_numer+1,numer_rozdzialu,1 do
        					table.insert(tab_numer,1);
	        			end;
    	    		elseif(#tab_numer>numer_rozdzialu)then
        				for i=#tab_numer, numer_rozdzialu+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,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
    					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(((m==2)and(czy_pierwszy_nilowy_rozdzial))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
            		local czy_artykuly=nil;
            		if(tab_lista[2])then
            			local czy_w_rozdziale_artykuly=nil;
        	  			local wynik=AnalizaArtykulowaLubRozdzialowa(tab_lista[2],nil,function(poziom_artykulu,poziom_naglowka,_,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
        	  				if(not w_rozdziale)then
        	  					czy_artykuly=true;
        	  					if(((((not czy_z_dwukropkiem)and(czy_w_rozdziale_artykuly))or(poziom_artykulu-(poziom_zerowego_naglowka or 0)<=poziom_naglowka)or(poziom_artykulu-(poziom_srednikowego_naglowka[1] or 0)<=poziom_naglowka))and(poziom_artykulu_zerowy)and(poziom_artykulu_zerowy==0)and(poziom_zerowego_naglowka)and(poziom_zerowego_naglowka>0))and((m>2)or((m==2)and(not czy_pierwszy_nilowy_rozdzial))))then
        	  						return true;
        	  					end;
        	  					if(poziom_artykulu<=poziom_naglowka)then
            	  					return true;
        	  					end;
        	  				 else
        	  				 	czy_w_rozdziale_artykuly=true;
        	  				 end;
        	  			end);
        	  			if(wynik)then return true;end;
            		end;
        	  		if((czy_artykuly)or(m==1))then
    					local wynik=AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_aktualnego_naglowka,poziom_naglowka,poziom_znakowy_naglowka,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
    						if(poziom_znakowy_naglowka<=0)then
    							if(poziom_aktualnego_naglowka<=poziom_naglowka)then
    								if((poziom_srednikowego_naglowka[2])and(poziom_srednikowego_naglowka[2]>0))then
    									return false;
    								else
    									return true;
    								end;
    							end;
    						else
    							if((m==1)and(poziom_znakowy_rozdzialu<0)and(poziom_znakowy_naglowka>0))then return true;end;
    							return false;
    						end
    					end);
    					return wynik;
    				else
    					return true;
    				end;
    			else
    				return true;
        		end;
        	end;
        		local function DodajNaSamPoczatek()
        			local function ArtykulyNieWRozdziale()
        				local ile=0;
        				if(tab_lista[2])then
        					for p,artykul_w_bazie in ipairs(tab_lista[2])do
        						local w_rozdziale=artykul_w_bazie[2][4];
        						if(not w_rozdziale)then
        							ile=ile+1;
        						end;
        					end;
        				end;
        				return ile;
        			end;
        	    	if((tab_lista_artykulow_w_ksiazce[m+1])and(ArtykulyNieWRozdziale()>0)
        					and((
        		   	    		(poziom_znakowy_rozdzialu>0)
        			        	and AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
        	  							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 AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka_temp,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
        			        			if((poziom_srednikowego_naglowka_temp[2])and(poziom_srednikowego_naglowka)and(poziom_srednikowego_naglowka_temp[2]>poziom_srednikowego_naglowka))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); 
        					if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        					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); 
        					if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        					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);
        			 	if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        				zbieraj_dane=false;
        			end;
    	    		tab_numer={};
        		elseif((czy_jest_teraz_spis_tresci)and((poziom_znakowy_rozdzialu>0)or(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,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
        	  				if(poziom_artykulu>poziom_naglowka)then
            	  				return true;
        	  				elseif(czy_sredniki)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,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
	        				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,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
        	  				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); 
        					if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        					zbieraj_dane=false;
        				end;
        				----
        				if(not tab_poziomowo_1)then tab_poziomowo_1={};end;
	        			table.insert(tab_poziomowo_1,{tab_poziomowo,poziom_naglowka_bez_poprawki,});
	        			----
    	    			tab_poziomowo={};
        
	        			tab_numer_zapasowe=tab_numer;
	        			------
	        			if(not tab_numer_baza_spis_tresci)then tab_numer_baza_spis_tresci={};end;
    	    			table.insert(tab_numer_baza_spis_tresci,{tab_numer,HNumerPoziomow,HNumerPoziomowNaglowkow,poziom_naglowka_bez_poprawki,1,});
    	    			-----
        				HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        				HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        				spis_tresci=false;
    	    			-----
        				tab_numer={};
        			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); 
        					if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        					zbieraj_dane=false;
        				end;
        				----
        				if(not tab_poziomowo_1)then tab_poziomowo_2={};end;
	        			table.insert(tab_poziomowo_2,{tab_poziomowo,poziom_naglowka_bez_poprawki,});
	        			----
	        			tab_poziomowo={};
        		
	        			tab_numer_zapasowe=tab_numer;
	        			-----
    	        		if(not tab_numer_baza_spis_tresci)then tab_numer_baza_spis_tresci={};end;
    	    			table.insert(tab_numer_baza_spis_tresci,{tab_numer,HNumerPoziomow,nil,poziom_naglowka_bez_poprawki,-1,});
    	    			spis_tresci=false;
    	    			-----
    	    			HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
    	    			-----
	    	    		tab_numer={};
        			end;
    		    	local wartosc,glowny_spis_tresci_ksiazki=DodajNaSamPoczatek();
    		    	if((not parametry_modul.TypeBoolean(wartosc))and(wartosc))then return wartosc,glowny_spis_tresci_ksiazki;end;
        		elseif(((not czy_jest_teraz_spis_tresci)and(((not pierwszy_dodatni_naglowek)and(poziom_znakowy_rozdzialu>0))
    						or(((not pierwszy_ujemny_naglowek)or((prawdziwy_poziom_rozdzialu_poprz)and(prawdziwy_poziom_rozdzialu_poprz>0)))and(poziom_znakowy_rozdzialu<0))))
    					and(not CzyJestONumerzeMniejszymLubRownymPoziomieNizAktualnyRozdzial()))and((not czy_pierwszy_nilowy_rozdzial)or((#tab_numer~=1)or(tab_numer[1]==1)))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);
        					if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        					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); 
        				    if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        					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;
        				poprz_ujemnego_rozdzialu_dodatniego_rozdzialu=(m>1) and prawdziwy_poziom_rozdzialu_poprz or false;
        				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); 
        				if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        				zbieraj_dane=false;
        			end;
            	end;
        		local wartosc,glowny_spis_tresci_ksiazki=DodajNaSamPoczatek();
        		if((not parametry_modul.TypeBoolean(wartosc))and(wartosc))then return wartosc,glowny_spis_tresci_ksiazki;end;
        	else
        		local wartosc,glowny_spis_tresci_ksiazki=DodajNaSamPoczatek();
        		if((not parametry_modul.TypeBoolean(wartosc))and(wartosc))then return wartosc,glowny_spis_tresci_ksiazki;end;
        		----
        		if(wartosc)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);
        				if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        				zbieraj_dane=false;
        			end;
        		end;
        	end;
   --    end;
   			zbieraj_dane=true;
   			poprz_numeracji_rozdzialu_lub_artykulu=poziom_numeracji_rozdzialu;
   			poprz_poziom_rozdzialu_lub_artykulu=poziom_naglowka;
   			poprz_numer_rozdzialu_lub_artykulu=numer_rozdzialu;
   			poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_naglowka_bez_poprawki;
   			prawdziwy_poziom_rozdzialu_poprz=prawdziwy_poziom_rozdzialu;
   			-----
   			if((m>1)or((m==1)and(not czy_pierwszy_nilowy_rozdzial)))then
   				if(prawdziwy_poziom_rozdzialu>0)then
   					pierwszy_dodatni_naglowek=true;
   					pierwszy_ujemny_naglowek=nil;
   				else
   					pierwszy_ujemny_naglowek=true;
   					pierwszy_dodatni_naglowek=true;
   				end;
   			end;
   			----
   			czy_ostatni_rozdzial_jest_centrowany=((poziom_znakowy_rozdzialu>0)and(czy_rozdzial_centrowany and true or nil) or ((poziom_znakowy_rozdzialu<=0)and czy_ostatni_rozdzial_jest_centrowany or nil));
    	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);
    		if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
        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 k=1;
 			-----
	 		local czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
	 		local artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
	 		local czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka=nil;
 			-----
 			local numer_poprz_w_rozdziale=nil;
	  		local poczatek_poprz=nil;
  			local id_poprz=nil;
  			local poprz_numer_artykulu=nil;
  			
  			local tab_poprzedni_artykul_w_bazie=nil;
  			local odejmnij_od_dwukropka_w_rozdziale=0;
  			-----
  			local czy_w_trakcie_dwukropkowania_w_rozdziale=nil;
 			-----
 			local poziom_zerowego_artykulu=0;
 			local staly_poziom_rozdzialu_z_artykulami=0;
 			local nilowanie_poprzedniego_rejestru_tab_poziomowo=nil;
 			local czy_w_podreczniku_poprz=nil;
 			-----
 			local stare_HNumerPoziomu_poza_rozdzialem=nil;
 			local czy_dodano_zero_do_tab_numer=nil;
 			local ile_w_rozdziale_licznik=1;
 			local staly_dodatek_rozdzialu_temp=0;
 			local staly_dodatek_rozdzialu_roz=staly_dodatek_rozdzialu;
 			local staly_dodatek_artykulu=0;
 			local ostatni_artykul_w_rozdziale=nil;
 			local tab_numer_w_rozdziale=nil;
 			local podrozdzial_spisu=nil;
 			local dodatek_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_w_podreczniku=artykul_w_bazie[5];
  				local przekierowanie=(czy_w_podreczniku) and (czy_table_baza_artykulu and ((not artykul_w_bazie[1][4])and(not artykul_w_bazie[1][7]) and Przekierowanie(artykul_w_bazie[1][3]) or {Przekierowanie(artykul_w_bazie[1][3]),artykul_w_bazie[1][4],nil,nil,artykul_w_bazie[1][7],}) or nil) or (((not czy_w_podreczniku)and(czy_table_baza_artykulu)and(artykul_w_bazie[1][5])or(artykul_w_bazie[1][6])or(artykul_w_bazie[1][7])) and {nil,nil,artykul_w_bazie[1][5],artykul_w_bazie[1][6],artykul_w_bazie[1][7],} or nil);
  				---
  				local czy_dodane=czy_table_baza_artykulu and artykul_w_bazie[1][8] 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;
				
					local w_rozdziale;
					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));
							
							w_rozdziale=artykul_w_bazie[2][4];
							if(w_rozdziale)then
								poziom_artykulu,odejmnij_od_dwukropka_w_rozdziale,czy_w_trakcie_dwukropkowania_w_rozdziale=OdejmnijOdDwukropka(poziom_artykulu,poziom_poczatku_artykulu,numer_poprz_w_rozdziale or 0,czy_w_trakcie_dwukropkowania_w_rozdziale,odejmnij_od_dwukropka_w_rozdziale);
								numer_poprz_w_rozdziale=tonumber(tab_lista[2][p][2][1]);
							else
								poziom_artykulu,odejmnij_od_dwukropka,czy_w_trakcie_dwukropkowania=OdejmnijOdDwukropka(poziom_artykulu,poziom_poczatku_artykulu,numer_poprz or 0,czy_w_trakcie_dwukropkowania,odejmnij_od_dwukropka);
							end;
							----
							local numeracja_artykulu=artykul_w_bazie[2][3];
							local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
					  
							local w_rozdziale=artykul_w_bazie[2][4];
							
							local czy_rozdzial_z_poczatkiem_jedynki=nil;
							
							if(w_rozdziale)then
								if(not stare_HNumerPoziomu_poza_rozdzialem)then
									stare_HNumerPoziomu_poza_rozdzialem=HNumerPoziomow;
									HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
									-----
									tab_numer_w_rozdziale=tab_numer;
									tab_numer=tab_numer_zapasowe or tab_numer;
								end;
					  			function CzyRozdzialMaArtykulyNieWewnetrzNaglowka()
					  				local czy_artykuly=nil;
					  				return AnalizaArtykulowaLubRozdzialowa(tab_lista[2],false,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
	        							if(not w_rozdziale)then
	        								czy_artykuly=true;
        	  								if(poziom_artykulu>poziom_naglowka)then
            	  								return true;
        	  								end;
    	  									return false;
    	  								end;
	        						end),czy_artykuly;
					  			end;
					  			function CzyRozdzialMaRozdzialyNieWewnetrzNaglowka()
					  				return AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu_artykulu,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
					  					if((poziom_znakowy_rozdzialu<0)and(poziom_znakowy_rozdzialu_artykulu>0))then
					  						return false;
					  					else
        	  								if(poziom_artykulu>poziom_naglowka)then
            	  								return true;
        	  								end;
    	  									return false;
    	  								end;
	        						end);
					  			end;
					  			if(not ile_w_rozdziale)then
					  				ile_w_rozdziale=IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista,false);
					  			end;
					  			if(ile_w_rozdziale_licznik==ile_w_rozdziale)then
					  				czy_w_trakcie_dwukropkowania_w_rozdziale=nil;
					  				odejmnij_od_dwukropka_w_rozdziale=0;
					  				numer_poprz_w_rozdziale=nil;
					  				ostatni_artykul_w_rozdziale=true;
					  			end;
					  			ile_w_rozdziale_licznik=ile_w_rozdziale_licznik+1;
					  			if((poziom_znakowy_rozdzialu>0)and(ile_w_rozdziale==1))then
					  				local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,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
					  				artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=true;
					  				if(parametry_modul.TypeNil(czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka))then
					  					local czy_ma_artykuly;
					  					czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka,czy_artykuly=CzyRozdzialMaArtykulyNieWewnetrzNaglowka();
					  					if((not czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka)and(not czy_artykuly))then
					  						czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka=CzyRozdzialMaRozdzialyNieWewnetrzNaglowka();
					  					end;
					  				end;
					  				if((czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka)and(not glowny_ujemny_rozdzial))then
					  					tab_numer[#tab_numer+1]=0;
					  		    	end;
					  			end;
							else
								if((artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)or(czy_w_rozdziale_rejestrowane_osobno_artykuly))then
					  				-----
					  				tab_poziomowo={};
					  				HNumerPoziomu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
					  				HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
					  				-----
				  					artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
				  					czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
				  					----	
					  				k=1;
					  				tab_poprzedni_artykul_w_bazie=nil;
					  			end;
					  			---
								if(not czy_zera)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;
  							else
  					  			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;
  					  			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_numeracji_rozdzialu_lub_artykulu==0)and(numer+poziom_numeracji_artykulu>0)));
							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_sa_jakies_artykuly_niezerowe=false;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_nie_ma_artykulow=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_sa_jakies_artykuly_niezerowe=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_sa_jakies_artykuly_niezerowe)or(not czy_nienilowy_rozdzial))or(poziom_zerowy>0))then
            						if(ile<=5)then
    									table.insert(tab_numer,0);
    								else
    									nilowanie_poprzedniego_rejestru_tab_poziomowo=true;
    								end
    							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);
  				    		
  				    		local poziom_zerowego_artykulu_aktualny=poziom_artykulu;

  				    		poziom_zerowego_artykulu=ZerowyArtykul(tab_lista[2],p,w_rozdziale,poziom_zerowego_artykulu,poziom_zerowego_naglowka,poziom_zerowego_artykulu_poprz);

  				    		----
  				    		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;
            						----
            						czy_poziom_ujemny_spisu_tresci=nil;
            					end;
            					KoniecSpisuTresci(poziom_naglowka_bez_poprawki,-1,true);
            				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_zerowego_naglowka=((ostatni_artykul_w_rozdziale)and(not w_rozdziale)and(poziom_zerowego_naglowka>0)and(poziom_zerowego_artykulu_aktualny==0)) and (poziom_zerowego_naglowka-1) or poziom_zerowego_naglowka;
  				    		
  				    		if((ostatni_artykul_w_rozdziale)and(not w_rozdziale))then
  				    			ostatni_artykul_w_rozdziale=nil;
  				    		end;
  				    		----
  				    		if((poziom_znakowy_rozdzialu<0)and(rozdzial==""))then
  				    			poziom_artykulu=poziom_naglowka+poziom_artykulu+poziom_zerowego_artykulu+(poziom_spisu_tresci_dodatek or 0);
  				    		else
  				    			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)+(poziom_spisu_tresci_dodatek or 0);
  				    		end;
  				    		----
            	    		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;
            	     		
            	     		if(not w_rozdziale)then
            	     			if(k==1)then
            	     				staly_dodatek_rozdzialu_temp=staly_dodatek_rozdzialu_roz;
            	     			end;
            	     		end;
            	     		poziom_artykulu,staly_dodatek_rozdzialu_temp--[[staly_dodatek]]=PoziomNumerNaglowka(poziom_podany_artykulu_bez_numeracji,poziom_numeracji_artykulu,__poprz_poziom_rozdzialu_lub_artykulu,__poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu_temp--[[staly_dodatek]]);
            	     		if(not w_rozdziale)then staly_dodatek_rozdzialu=staly_dodatek_rozdzialu_temp;end;
  							----
  							local prefix_poziom_artykulu=poziom_artykulu;
							local function WielopoziomowyAdres(poziom_artykulu,poprz_poziom_artykulu_bez_b,tab_poprzedni_artykul_w_bazie,staly_dodatek_artykulu)
								local b=0;	
								local tab_artykul_w_bazie=mw.text.split(artykul,"/");
								if((tab_poprzedni_artykul_w_bazie)and((czy_w_podreczniku_poprz)and(czy_w_podreczniku)))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;
								else
									if(k==1)then
		  				    			if(#tab_artykul_w_bazie>1)then
		  				    				local podrozdzial_artykulu=tab_artykul_w_bazie[1];
		  				    				podrozdzial_artykulu=parametry_modul["Odstępy"]{[1]=podrozdzial_artykulu,[2]="tak",};
		  				    				podrozdzial_artykulu=mw.getContentLanguage():ucfirst(podrozdzial_artykulu);
		  				    				if(not podrozdzial_spisu)then
		  				    					podrozdzial_spisu=parametry_modul["Odstępy"]{[1]=rozdzial,[2]="tak",};
		  				    					podrozdzial_spisu=mw.getContentLanguage():ucfirst(podrozdzial_spisu);
		  				    				end;
		  				    				local czy_z_rozdzialem=(podrozdzial_artykulu==podrozdzial_spisu);
		  				    				if(czy_z_rozdzialem)then b=1;end;
		  				    			end;
		  				    		end
								end;
								if((#tab_artykul_w_bazie==b)and(#tab_poprzedni_artykul_w_bazie==b))then b=b-1;end;
  								if(not poprz_poziom_artykulu_bez_b)then
									staly_dodatek_artykulu={b,true};
									return 0,staly_dodatek_artykulu,tab_artykul_w_bazie;
  								end;
								if(poziom_artykulu==poprz_poziom_artykulu_bez_b)then
									if((k>=2)and(czy_w_podreczniku)and(staly_dodatek_artykulu[2])and(staly_dodatek_artykulu[1]==0)and(#tab_poprzedni_artykul_w_bazie>1)and(b>0)and(#tab_poprzedni_artykul_w_bazie>=b+1))then
										staly_dodatek_artykulu[1]=b;
										staly_dodatek_artykulu[2]=false;
									end;
									if(((k==2)or(staly_dodatek_artykulu[3]))and(not czy_w_podreczniku))then
										staly_dodatek_artykulu[3]=k;
									elseif((k>2)and(czy_w_podreczniku)and((staly_dodatek_artykulu[3] or 0)+2==k)and(b>0))then
										staly_dodatek_artykulu[3]=nil;
										staly_dodatek_artykulu[1]=b;
									end;
									local poziom_numeracji=b-(staly_dodatek_artykulu[1] or 0);
									return ((czy_w_podreczniku)and ((poziom_numeracji>=0)and poziom_numeracji or 0)or(dodatek_poprz)),staly_dodatek_artykulu,tab_artykul_w_bazie;
								elseif(poziom_artykulu~=poprz_poziom_artykulu_bez_b)then
									staly_dodatek_artykulu={b,true};
									if((k==2)and(not czy_w_podreczniku))then
										staly_dodatek_artykulu[3]=k;
									end;
									return 0,staly_dodatek_artykulu,tab_artykul_w_bazie;
								end;
								return 0,staly_dodatek_artykulu,tab_artykul_w_bazie;
							end;
							-----
							local dodatek;
							dodatek,staly_dodatek_artykulu,tab_artykul_w_bazie=WielopoziomowyAdres(poziom_artykulu,poprz_poziom_artykulu_bez_b,tab_poprzedni_artykul_w_bazie,staly_dodatek_artykulu);
							poprz_poziom_artykulu_bez_b=poziom_artykulu;
							local numer_poziomu=HNumerPoziomow(poziom_artykulu);
							-----
							if(not w_rozdziale)then
  								if(poziom_znakowy_rozdzialu<0)then
  									if(poziom_artykulu<=(poziom_pierwszego_ujemnego_naglowka or 0))then
  										tab_poziomowo=tab_numer_4;
  										tab_numer={};
  										HNumerPoziomu=HNumerPoziomow_4;
  										HNumerArtykulu(poziom_artykulu,HNumerPoziomu(0));
									else	
  										local numer=numer_rozdzialu-numer_poziomu;
  										if(numer>=0)then
  											local tab_numer_s=tab_numer;
  											local tab_poziomowo_s=tab_poziomowo;
  											tab_numer={};tab_poziomowo={};
  											if(#tab_numer_s>=numer_poziomu-1)then
  												for i=1,numer_poziomu-1,1 do
  													tab_numer[i]=tab_numer_s[i];
  												end;
  												for i=numer_poziomu,#tab_numer_s,1 do
  													tab_poziomowo[i-numer_poziomu+1]=tab_numer_s[i];
  												end;
  												for i=1,#tab_poziomowo_s,1 do
  													tab_poziomowo[i+#tab_numer_s-numer_poziomu+1]=tab_poziomowo_s[i];
  												end;
  											else
  												for i=1,#tab_numer_s,1 do
  													tab_numer[i]=tab_numer_s[i];
  												end;
  												for i=1,numer_poziomu-1,1 do
  													tab_numer[i+#tab_numer_s]=tab_poziomowo_s[i];
  												end;
  												for i=numer_poziomu,#tab_poziomowo_s,1 do
  													tab_poziomowo[i-numer_poziomu+1]=tab_poziomowo_s[i];
  												end;
  											end;
  										end;
  									end;
  								end;
							end;
  					  		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);
 										HNumerArtykulu(poziom_artykulu,1);
 									end;
  								end;
								 								
								local stala=poziom_artykulu;
								
								if(czy_rozdzial_z_poczatkiem_jedynki)then
									HNumerPoziomu(stala,1);
									HNumerArtykulu(stala,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_numeracji_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=(not w_rozdziale)and tonumber(tab_lista[2][p][2][1]) or ((w_rozdziale)and numer_poprz or nil);
                    		poprz_numer_artykulu=numer;
                    		poprz_numer_rozdzialu_lub_artykulu=numer_poziomu;
  					  		poczatek_poprz=tab_lista[2][p][2][2];
  					  		id_poprz=tab_lista[2][p][4];
  					  		czy_w_podreczniku_poprz=czy_w_podreczniku;
  					  		dodatek_poprz=dodatek;
						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;
						else
							if((ostatni_artykul_w_rozdziale)and(w_rozdziale))then
 								HNumerPoziomow=stare_HNumerPoziomu_poza_rozdzialem;
 								stare_HNumerPoziomu_poza_rozdzialem=nil;
 								tab_numer=tab_numer_w_rozdziale;
 								poprzedni_tab_poziomowo=nil;
 								-----
 								poziom_zerowego_artykulu=0;
 								-----
					  			czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka=nil;
					  			if((#tab_numer>0)and(tab_numer[#tab_numer]==0))then
					  				tab_numer[#tab_numer]=nil;
					  			end;
							else
 								if(not nilowanie_poprzedniego_rejestru_tab_poziomowo)then
  					  				poprzedni_tab_poziomowo=tab_poziomowo;
  					  			else
  					  				poprzedni_tab_poziomowo={1,};
  					  			end;
				  			end;
						end;
						k=k+1;
					end;
  				end;
  				if(not czy_ma_elementy)then
  					poprzedni_tab_poziomowo=nil;
  				end;
  			else
  				poprzedni_tab_poziomowo=nil;
 			end;
 		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;
  				if(czy_artykul)then
  					tab_w_spis[artykul]=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_podrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki)
  	----
  	   local dane_szablonu=pierwszy_parametr_szablonu();
  	   local nazwa_artykulu,czy_nazwa,dane=dane_szablonu[1],dane_szablonu[2],dane_szablonu[3];
  	   ----
  	   if((((dane==2)or(dane==3))and(artykul=="")and(rozdzial==nazwa_artykulu))or(((dane==1)or(dane==3))and(artykul~="")and((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_podrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki)
	   ----
  	   local dane_szablonu=pierwszy_parametr_szablonu();
  	   local numer,czy_nazwa,dane=dane_szablonu[1],dane_szablonu[2],dane_szablonu[3];
  	   ----
		if((not poziomowo)and(i==numer))then
			if(s==ktory)then
				if(artykul~="")then
					local wartosc=(not czy_nazwa) and artykul or (nazwa or artykul);
					return wartosc;
				else
					return rozdzial;
				end;
			else
				s=s+1;
			end;
		elseif(poziomowo)then
			local function NumerArtykulu(tab_numer,tab_poziomowo)
				return (table.concat(tab_numer,".")..((#tab_numer>0) and ((#tab_poziomowo>0) and "." or "") or "")..table.concat(tab_poziomowo,"."));
			end;
			local function WynikArtykulowyZNumeru(numer_artykulu)
				if((((dane==2)or(dane==3))and(artykul=="")and(numer_artykulu==numer))or(((dane==1)or(dane==3))and(artykul~="")and(numer_artykulu==numer)))then
			    	if(s==ktory)then
			    		if(artykul~="")then
							local wartosc=(not czy_nazwa) and artykul or (nazwa or artykul);
							return wartosc;
						else
							return rozdzial;
						end;
					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 tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu;
  local pierwszy_spis_tresci=nil;
  
  local artykul_spisowy=nil;
  
  local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_podrecznikowe,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))then
  	  		if((artykul_spisu~=nazwa_spisu))then 
  	  			if(not artykul_spisowy)then return false;else return true;end;
  	  		elseif((not artykul_spisowy)and(artykul_spisu==nazwa_spisu))then
  	  			artykul_spisowy=true;
  	  		end;
  	  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=tablica_nazw_wprowadzenia_tekstu_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,["link"]=czy_tabelka and przekierowanie[5] or nil,["nazwa"]=nazwa,["spis treści"]=czy_nienilowy_rozdzial,["czy w podręczniku"]=(((artykul~="")or(numer_artykulu~="")) and ((czy_artykuly_podrecznikowe) 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;