Moduł:StronicowyParser/NumerLubNazwaNagłówkówKsiążek

 Dokumentacja modułu [stwórz] [odśwież]
local p={};
local function PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,typ)
  local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_potrzebne_modul:ParametryKonteneraWoluminu(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyStronWoluminu(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
  
  local args=stronicowyparser_potrzebne_modul:Args(frame);
  local parametry_modul=require("Module:Parametry");
  local poziomowo=parametry_modul.CzyTak(args["poziomowo"]);
  
  local nie_wszystkie=parametry_modul.CzyTak(args["nie wszystkie"]);
  
  local ktory=(tonumber(args["który"]) or 1);
  
  local parametr_pierwszy_szablonu=typ and ((not poziomowo) and (tonumber(args[1]) or 1) or args[1]) or args[1];
  
  if(not typ)then
		parametr_pierwszy_szablonu,_=mw.ustring.gsub(parametr_pierwszy_szablonu,"^[%s_]+","");
		parametr_pierwszy_szablonu,_=mw.ustring.gsub(parametr_pierwszy_szablonu,"[%s_]+$","");
		parametr_pierwszy_szablonu,_=mw.ustring.gsub(parametr_pierwszy_szablonu,"[%s_]+"," ");
  end;
  
  local HNumer=stronicowyparser_potrzebne_modul.LiczonyHNumer();
  local HNumer_2=nil;
  local tab_numer_2=nil;
  local tab_numer={};
  local i=(not poziomowo) and 0 or nil;
  
  local i_2=nil;
  
  local juz_nie_rozwazaj_spisu_tresci=nil;
  local juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
  
  local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
  
  local tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu;
  if(nie_wszystkie)then
		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;
		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);
  end;
  
  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);
  
  if(nie_wszystkie)then
		setmetatable(tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
  end;
  setmetatable(tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
  
  local poziom_spisu_tresci=nil;
  
  local pierwszy_dodatni_spis_tresci=nil;
  
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
        local rozdzial=tab_lista[1][1];
        local poziom_rozdzialu=tab_lista[1][2][1];
        local czy_centrowany=tab_lista[1][2][4];
        if((poziom_rozdzialu)and(poziom_rozdzialu>0)and(not czy_centrowany))then
        	   
        	   local czy_nie_ten_rozdzial=nil;
        	   
        	   local czy_jest_teraz_spis_tresci=tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu[rozdzial];
        	   if((not juz_nie_rozwazaj_spisu_tresci)and(not juz_nie_rozwazaj_rozdzialu_spisu_tresci)and(czy_jest_teraz_spis_tresci))then
        			poziom_spisu_tresci=poziom_rozdzialu;
        			juz_nie_rozwazaj_rozdzialu_spisu_tresci=true;
        			if(nie_wszystkie)then
        				czy_nie_ten_rozdzial=tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
        			else
        				czy_nie_ten_rozdzial=false;
        			end;
        		elseif((not juz_nie_rozwazaj_spisu_tresci)and(juz_nie_rozwazaj_rozdzialu_spisu_tresci))then
        			if((poziom_spisu_tresci<poziom_rozdzialu))then
        				czy_nie_ten_rozdzial=false;
        			else
        				juz_nie_rozwazaj_spisu_tresci=true;
        				if(nie_wszystkie)then
        					czy_nie_ten_rozdzial=tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
        				else
        					czy_nie_ten_rozdzial=false;
        				end;
        			end;
        		else
        			local juz_nie_rozwazaj_spisu_tresci=nil;
					local juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
					if(nie_wszystkie)then
        				czy_nie_ten_rozdzial=tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
        			else
        				czy_nie_ten_rozdzial=false;
        			end;
        		end;
        		
        		if(not czy_nie_ten_rozdzial)then
        			if(poziomowo)then
        				local hnumer=HNumer(poziom_rozdzialu);
        				if(#tab_numer<hnumer)then
        					for i=#tab_numer+1,hnumer,1 do
        						table.insert(tab_numer,1);
        					end;
        				elseif(#tab_numer>hnumer)then
        					for i=#tab_numer, hnumer+1,-1 do
        						table.remove(tab_numer,i);
        					end;
        					tab_numer[#tab_numer]=tab_numer[#tab_numer]+1;
        				else
        					tab_numer[#tab_numer]=tab_numer[#tab_numer]+1;
        				end;
        				----
        				local wartosc=__FUNKCJA(poziomowo,i,tab_numer,ktory,parametr_pierwszy_szablonu,rozdzial);
       					----
        				if(wartosc)then return wartosc;end;
        				----
        				if((czy_jest_teraz_spis_tresci)and(not pierwszy_dodatni_spis_tresci))then
        					HNumer_2=HNumer;
        					HNumer=stronicowyparser_potrzebne_modul.LiczonyHNumer();
        					tab_numer_2=tab_numer;
        					tab_numer={};
        					pierwszy_dodatni_spis_tresci=true;
        				elseif((pierwszy_dodatni_spis_tresci)and(poziom_spisu_tresci>=poziom_rozdzialu))then
        					HNumer=HNumer_2;
        					HNumer_2=nil;
    	    				tab_numer=tab_numer_2;
	        				tab_numer_2=nil;
	        				pierwszy_dodatni_spis_tresci=false;
        				end;
        			else
        				i=i+1;
        				----
        				local wartosc=__FUNKCJA(poziomowo,i,tab_numer,ktory,parametr_pierwszy_szablonu,rozdzial);
        				---
        				if(wartosc)then return wartosc;end;
        				---
        				if((czy_jest_teraz_spis_tresci)and(not pierwszy_dodatni_spis_tresci))then
							i_2=i;
							i=0;
							pierwszy_dodatni_spis_tresci=true;
        				elseif((pierwszy_dodatni_spis_tresci)and(poziom_spisu_tresci>=poziom_rozdzialu))then
							i=i_2;
							i_2=nil;
							pierwszy_dodatni_spis_tresci=false;
        				end;
        			end;
        		end;
        	end;
	  end;
end;
p["PobierzNumerNagłówka"]=function(frame)
	local s=1;
	local function __FUNKCJA(poziomowo,i,tab_numer,ktory,naglowek,rozdzial)
		if(naglowek==rozdzial)then
			if(s==ktory)then
				if(poziomowo)then
					if(#tab_numer==0)then return;end;
					return table.concat(tab_numer,".");
				else
  					return i;
				end;
			end;
			s=s+1;
		end;
	end;
	return PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,false);
end;
p["PobierzNazwęNagłówka"]=function(frame)
	local s=1;
	local function __FUNKCJA(poziomowo,i,tab_numer,ktory,numer,rozdzial)
		if(poziomowo)then
			if(#tab_numer==0)then return;end;
			if(numer==table.concat(tab_numer,"."))then
				if(s==ktory)then
					return rozdzial;
				else
					s=s+1;
				end;
			end;
		elseif(numer==i)then
			if(s==ktory)then
  				return rozdzial;
  			else
  				s=s+1;
  			end;
		end
	end;
	return PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,true);
end;
return p;