Dokumentacja modułu [stwórz] [odśwież]
local p={};
function p.LiczonyHNumer()
	local tab={};
	local h_numer_zapamietane=nil;
	--local ostatnie_poprz=nil;
	return function(h_numer,h_numer_nowe)
		if(h_numer==0)then
			if(#tab>0)then
				local h_numer_poprz,ostatnie_poprz=unpack(tab[#tab]);
				return ostatnie_poprz;
			end;
			return nil;
		elseif(h_numer<0)then
			h_numer=math.abs(h_numer);
		end;
		local ostatnie;---=tab[h_numer];
		local max_h_numer=nil;local min_h_numer=nil;
		
		local ostatnie_max;local ostatnie_min;local ostatnie_ost;local ostatnie_ost_prawda=true;
		for i=#tab,1,-1 do
			----
			local h_numer_pos,ostatnie_pos=unpack(tab[i]);
			if(ostatnie_ost_prawda)then
				if(h_numer_pos==h_numer)then 
					ostatnie_ost=ostatnie_pos;
					break;
				end;
				ostatnie_ost_prawda=nil;
			end;
			----
			if((h_numer>h_numer_pos)and((max_h_numer or 0)<h_numer_pos))then 
				if((h_numer_pos or 0)<=(max_h_numer or h_numer))then
					ostatnie_max=ostatnie_pos;
					max_h_numer=h_numer_pos;
				end;
			end;
		end;
		
		if(ostatnie_ost)then
			ostatnie=ostatnie_ost;
		else
			ostatnie=(ostatnie_max or 0)+1;
		end;
		local h_numer_poprz,ostatnie_poprz=nil,nil;
		if(#tab>0)then
			h_numer_poprz,ostatnie_poprz=unpack(tab[#tab]);
		end;
		if(ostatnie>(ostatnie_poprz or 0)+1)then
			ostatnie=(ostatnie_poprz or 0)+1;
		end;
		table.insert(tab,{h_numer,ostatnie,});
		if(h_numer_nowe)then
			local roznica=h_numer_nowe-ostatnie;
			if(roznica==0)then 
				return ostatnie;
			end;
			local tab2={};
			for i,tabs in pairs(tab)do
				local name,value=unpack(tabs);
				tab2[i]={name,value+roznica,};
			end;
			tab=tab2;
			return h_numer_nowe;
		end;
		return ostatnie;
	end;
end;
function p.PoziomAdresu(adres)
	local lens=#adres;
	local i=1;
	for p=1, lens,1 do
		local znak=mw.ustring.sub(adres,p,p);
		if(znak=="/")then
			i=i+1;
		end;
	end;
	return i;
end;
function p.NazwaNadStrony(adres,numer)
	if((numer)and(numer==0))then return nil;end;
	if((numer)and(numer<1)or(numer~=math.floor(numer)))then return nil;end;
	local lens=#adres;
	local i=1;
	for p=1, lens,1 do
		local znak=mw.ustring.sub(adres,p,p);
		if(znak=="/")then
			i=i+1;
		end;
		if(i==numer)then
			return mw.ustring.sub(adres,1,p-1);
		end;
	end;
	return adres;
end;
function p.SubNazwaNadStrony(adres,numer,krok)
	if((not numer)or(numer<1)or(numer~=math.floor(numer)))then return adres;end;
	krok=krok or 1;
	if((krok<1)or(krok~=math.floor(krok)))then return adres;end;
	local lens=#adres;
	local i=1;
	local a=nil;local b=nil;
	for p=1, lens,1 do
		local znak=mw.ustring.sub(adres,p,p);
		if(znak=="/")then
			i=i+1;
			if(i==numer)then
				if(not a)then a=p+1;end;
			end;
			if(i==numer+krok)then 
				if(not b)then b=p-1;break;end;
			end;
		end;
	end;
	if(not a)then a=1;end;
	if(not b)then b=lens;end;
	return mw.ustring.sub(adres,a,b);
end;
function p.ParametryKonteneraWoluminu(self,frame,tabela_listy_danych_analizy_ksiazki)
  local nazwa_przestrzeni=self.args["nazwa przestrzeni nazw"];
  local nazwa_jednostki=self.args["nazwa jednostki"];
  if(((nazwa_przestrzeni)and(nazwa_jednostki))or((nazwa_przestrzeni)and(not nazwa_jednostki))or((not nazwa_przestrzeni)and(nazwa_jednostki)))then
  		local html_modul=require("Module:Html");
	    if(nazwa_jednostki)then
			self.naglowek=html_modul["NagłówekStronyAdresu"](nazwa_jednostki,true);
			self.parametry=html_modul["ParametryStronyAdresu"](nazwa_jednostki,true);
	    end;
	    local nazwy_modul=require("Module:Nazwy");
		local nazwa_przestrzeni=((nazwa_przestrzeni)and ((nazwa_przestrzeni~="")and (nazwa_przestrzeni..":") or "") or nazwy_modul["NAZWAPRZESTRZENI"]());
		local nazwa_jednostki=(((nazwa_jednostki)and(nazwa_jednostki~=""))and nazwa_jednostki or nazwy_modul["NAZWASTRONY"]());
		local pelna_nazwa_jednostki=((nazwa_przestrzeni~="")and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
		
		pelna_nazwa_jednostki=html_modul.DecodeHtml(pelna_nazwa_jednostki,true);
		pelna_nazwa_jednostki=html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](pelna_nazwa_jednostki);
   		---
   		local techniczne_modul=require("Module:Techniczne");
   		local tabela_listy_danych_analizy_ksiazki=tabela_listy_danych_analizy_ksiazki or mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;
   		local nazwa_modulu=nazwy_modul["NazwaModułu"](tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni,tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu,tabela_listy_danych_analizy_ksiazki.nazwa_woluminu,tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu);
    	pelna_nazwa_jednostki=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=pelna_nazwa_jednostki,[2]=nazwa_modulu,};
    	pelna_nazwa_jednostki=nazwy_modul["PEŁNANAZWASTRONY"](pelna_nazwa_jednostki);
        local strona=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_jednostki);
        if(strona)then
        	pelna_nazwa_jednostki=strona;
        end;
        
		local nazwy_modul=require("Module:Nazwy");
		self.nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_jednostki);
		self.nazwa_przestrzeni_woluminu=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](pelna_nazwa_jednostki);
		self.nazwa_woluminu=(self.nazwa_przestrzeni_woluminu~="")and nazwy_modul["SUBNAZWAKSIĄŻKI"](pelna_nazwa_jednostki) or nazwy_modul["NAZWAKSIĄŻKI"](pelna_nazwa_jednostki);
		self.nazwa_podstrony_woluminu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](pelna_nazwa_jednostki);
		 
		local lista_artykulow_w_ksiazkach_w_danej_przestrzeni=tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[self.nazwa_przestrzeni];
		if(not lista_artykulow_w_ksiazkach_w_danej_przestrzeni)then return;end;
		local tab_lista_ksiazek_w_danej_przestrzeni_nazw_ksiazki=lista_artykulow_w_ksiazkach_w_danej_przestrzeni[self.nazwa_przestrzeni_woluminu];
		if(not tab_lista_ksiazek_w_danej_przestrzeni_nazw_ksiazki)then return;end;
		local tab_lista_artykulow_w_ksiazce=tab_lista_ksiazek_w_danej_przestrzeni_nazw_ksiazki[self.nazwa_woluminu];
		if(not tab_lista_artykulow_w_ksiazce)then
			return;
		end;
		local oryginalna_ksiazka=tab_lista_artykulow_w_ksiazce.adres_woluminu_bazowego_spisu_rzeczy;
		if(oryginalna_ksiazka)then
			self.nazwa_przestrzeni=oryginalna_ksiazka[1];
			self.nazwa_przestrzeni_woluminu=oryginalna_ksiazka[2];
			self.nazwa_woluminu=oryginalna_ksiazka[3];
		end;
  else
  	  local tabela_listy_danych_analizy_ksiazki=tabela_listy_danych_analizy_ksiazki or mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;	
	  self.nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
  	  self.nazwa_przestrzeni_woluminu=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
	  self.nazwa_woluminu=tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
	  self.nazwa_podstrony_woluminu=tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu;
  end;
end;
function p.TabelaListyStronWoluminu(self,frame,tabela_listy_danych_analizy_ksiazki,czy_podana)
  local self_tab,tabela_listy_danych_analizy_ksiazki=p.Self(self,tabela_listy_danych_analizy_ksiazki);
  local lista_artykulow_w_ksiazkach_w_danej_przestrzeni=tabela_listy_danych_analizy_ksiazki.dane_analizy_stron[(not czy_podana) and self_tab.nazwa_przestrzeni_podana or self_tab.nazwa_przestrzeni];
  if(not lista_artykulow_w_ksiazkach_w_danej_przestrzeni)then 
  	return nil,nil,nil,nil,nil;
  end;
  local tab_lista_ksiazek_w_danej_przestrzeni_nazw_ksiazki=lista_artykulow_w_ksiazkach_w_danej_przestrzeni[(not czy_podana) and self_tab.nazwa_przestrzeni_woluminu_podana or self_tab.nazwa_przestrzeni_woluminu];
  if(not tab_lista_ksiazek_w_danej_przestrzeni_nazw_ksiazki)then 
  	  return nil,lista_artykulow_w_ksiazkach_w_danej_przestrzeni,nil,nil,nil;--[[--Do poprawienia--]]
  end;
  local tab_lista_artykulow_w_ksiazce=tab_lista_ksiazek_w_danej_przestrzeni_nazw_ksiazki[(not czy_podana) and self_tab.nazwa_woluminu_podana or self_tab.nazwa_woluminu];
  if(not tab_lista_artykulow_w_ksiazce)then 
  	  return nil,lista_artykulow_w_ksiazkach_w_danej_przestrzeni,tab_lista_ksiazek_w_danej_przestrzeni_nazw_ksiazki,nil,nil;
  end;
  local tab_lista_zmiennych_w_artykule=tab_lista_artykulow_w_ksiazce.lista_podstron_woluminu and tab_lista_artykulow_w_ksiazce.lista_podstron_woluminu[(not czy_podana) and self_tab.nazwa_podstrony_woluminu_podana or self_tab.nazwa_podstrony_woluminu] or nil;
  --if(not tab_lista_zmiennych_w_artykule)then return nil;end;
  return tab_lista_artykulow_w_ksiazce.spis,lista_artykulow_w_ksiazkach_w_danej_przestrzeni,tab_lista_ksiazek_w_danej_przestrzeni_nazw_ksiazki,tab_lista_artykulow_w_ksiazce,tab_lista_zmiennych_w_artykule;
end;
function p.AnalizujArgumentySzablonu(self,frame)
  local parametry_modul=require("Module:Parametry");
  self.args=parametry_modul.PobierzArgsParametry(frame,true);
end;
function p.Args(self)
	return self.args;
end;
function p.Self(self,tabela_listy_danych_analizy_ksiazki)
  local tabela_listy_danych_analizy_ksiazki=tabela_listy_danych_analizy_ksiazki or mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;	
  local self_tab={};

  self_tab.nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
  self_tab.nazwa_przestrzeni_woluminu=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
  self_tab.nazwa_woluminu=tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
  self_tab.nazwa_podstrony_woluminu=tabela_listy_danych_analizy_ksiazki.nazwa_podstrony_woluminu;
		
  self_tab.nazwa_przestrzeni_podana=self.nazwa_przestrzeni;
  self_tab.nazwa_przestrzeni_woluminu_podana=self.nazwa_przestrzeni_woluminu;
  self_tab.nazwa_woluminu_podana=self.nazwa_woluminu;
  self_tab.nazwa_podstrony_woluminu_podana=self.nazwa_podstrony_woluminu;
  return self_tab,tabela_listy_danych_analizy_ksiazki;
end;
function p.KompletnaNazwaWoluminu(self,frame)
   return ((self.nazwa_przestrzeni~="")and(self.nazwa_przestrzeni..":") or "")..((self.nazwa_przestrzeni_woluminu~="")and (self.nazwa_przestrzeni_woluminu.."/") or "")..self.nazwa_woluminu
end;
function p.NazwaPodStronyWoluminu(self,frame)
   return self.nazwa_podstrony_woluminu..(self.parametry and ("?"..self.parametry) or "")..(self.naglowek and ("#"..self.naglowek) or "");
end;
function p.StronaArtykularnaKompletna(artykul,pelna_nazwa_ksiazki_w_bazie,przekierowanie_w_bazie,ksiazka,analizowana)
	local stronicowyparser_modul=require("Module:StronicowyParser");
	local nazwy_modul=require("Module:Nazwy");
	local pelna_nazwa_ksiazki=(ksiazka and (not analizowana) and pelna_nazwa_ksiazki_w_bazie and (pelna_nazwa_ksiazki_w_bazie[4])) and nazwy_modul["NazwaModułu"](pelna_nazwa_ksiazki_w_bazie[1],pelna_nazwa_ksiazki_w_bazie[2],pelna_nazwa_ksiazki_w_bazie[3],"") or nil;
	return ksiazka and ((((pelna_nazwa_ksiazki)and(pelna_nazwa_ksiazki~=""))
                						and(pelna_nazwa_ksiazki)or stronicowyparser_modul["AktualnaKsiążka"](mw.getCurrentFrame())).."/"..artykul) 
                					or artykul;
end;
function p.TablicaNapisowaPoWprowadzeniachTekstu(self,frame,tabela_listy_danych_analizy_ksiazki)
	p:AnalizujArgumentySzablonu(frame);
	p:ParametryKonteneraWoluminu(frame,tabela_listy_danych_analizy_ksiazki);
	local tab_lista_artykulow_w_ksiazce_spis=p:TabelaListyStronWoluminu(frame,tabela_listy_danych_analizy_ksiazki);
	if(not tab_lista_artykulow_w_ksiazce_spis)then return nil;end;
	local tab_naglowkow={};
	for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce_spis)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
        	table.insert(tab_naglowkow,rozdzial);
        end;
	end;
	self.tablica_napisowa_wprowadzenia_tekstu=tab_naglowkow;
	return tab_naglowkow;
end;
function p.LosowyNapisProwadzeniaTekstuBezPierwszegoOrazOstatniegoNapisuSpisuRzeczy(self,frame,tabela_listy_danych_analizy_ksiazki)
  self.numer_pomiedzy_napisu_wprowadzenia_tekstu=tonumber(frame.args[1]) or 1;
  self.tablica_napisowa_wprowadzenia_tekstu=self.tablica_napisowa_wprowadzenia_tekstu or p.TablicaNapisowaPoWprowadzeniachTekstu(self,frame,tabela_listy_danych_analizy_ksiazki);
  if(not self.tablica_napisowa_wprowadzenia_tekstu)then return nil;end;
  self.len_pomiedzy_napisu_wprowadzenia_tekstu=self.len_pomiedzy_napisu_wprowadzenia_tekstu or #(self.tablica_napisowa_wprowadzenia_tekstu);
  self.reszta_pomiedzy_napisu_wprowadzenia_tekstu=math.fmod(self.numer_pomiedzy_napisu_wprowadzenia_tekstu,self.len_pomiedzy_napisu_wprowadzenia_tekstu-2);
  local artykul=self.tablica_napisowa_wprowadzenia_tekstu[self.reszta_pomiedzy_napisu_wprowadzenia_tekstu+2];
  return artykul;
end;
function p.LosowyNapisProwadzeniaTekstuWoluminu(self,frame,tabela_listy_danych_analizy_ksiazki)
	self.numer_losowy_napis_wprowadzenia_tekstu=tonumber(frame.args[1]) or 1;
	self.tablica_napisowa_wprowadzenia_tekstu=self.tablica_napisowa_wprowadzenia_tekstu or p.TablicaNapisowaPoWprowadzeniachTekstu(self,frame,tabela_listy_danych_analizy_ksiazki);
	if(not self.tablica_napisowa_wprowadzenia_tekstu)then return nil;end;
	self.len_pomiedzy_napisu_wprowadzenia_tekstu=self.len_pomiedzy_napisu_wprowadzenia_tekstu or #(self.tablica_napisowa_wprowadzenia_tekstu);
	self.reszta_losowy_napis_wprowadzenia_tekstu=math.fmod(self.numer_losowy_napis_wprowadzenia_tekstu,self.len_pomiedzy_napisu_wprowadzenia_tekstu);
	local artykul=self.tablica_napisowa_wprowadzenia_tekstu[self.reszta_losowy_napis_wprowadzenia_tekstu+1];
	return artykul;
end;
function p.PierwszyNapisWprowadzeniaTekstu(self,frame)
	self.tablica_napisowa_wprowadzenia_tekstu=self.tablica_napisowa_wprowadzenia_tekstu or p.TablicaNapisowaPoWprowadzeniachTekstu(self,frame,tabela_listy_danych_analizy_ksiazki);
	return self.tablica_napisowa_wprowadzenia_tekstu[1];
end;
function p.OstatniNapisWprowadzeniaTekstu(self,frame)
	self.tablica_napisowa_wprowadzenia_tekstu=self.tablica_napisowa_wprowadzenia_tekstu or p.TablicaNapisowaPoWprowadzeniachTekstu(self,frame,tabela_listy_danych_analizy_ksiazki);
	return self.tablica_napisowa_wprowadzenia_tekstu[#(self.tablica_napisowa_wprowadzenia_tekstu)];
end;
function p.LiczbaNapisowaWprowadzeniaTekstu(self,frame)
	self.tablica_napisowa_wprowadzenia_tekstu=self.tablica_napisowa_wprowadzenia_tekstu or p.TablicaNapisowaPoWprowadzeniachTekstu(self,frame,tabela_listy_danych_analizy_ksiazki);
	self.len_pomiedzy_napisu_wprowadzenia_tekstu=self.len_pomiedzy_napisu_wprowadzenia_tekstu or #(self.tablica_napisowa_wprowadzenia_tekstu);
	return self.len_pomiedzy_napisu_wprowadzenia_tekstu;
end;
function p.IteratorPoWprowadzeniachNapisowychTekstu(self,frame)
	local tab_naglowkow=self.tablica_napisowa_wprowadzenia_tekstu or p.TablicaNapisowaPoWprowadzeniachTekstu(self,frame);
	local parametry_modul=require("Module:Parametry");
	return parametry_modul.IteratorPoNumerowanychElementachTablicy(tab_naglowkow);
end;
function p.IteratorPoStronachWoluminuEwentualnieWedleAutonawigacji(frame,tabela_listy_danych_analizy_ksiazki)
	p:AnalizujArgumentySzablonu(frame);
	p:ParametryKonteneraWoluminu(frame,tabela_listy_danych_analizy_ksiazki);
	local tab_lista_artykulow_w_ksiazce_spis=p:TabelaListyStronWoluminu(frame,tabela_listy_danych_analizy_ksiazki);
	if(not tab_lista_artykulow_w_ksiazce_spis)then return nil;end;
  
    local args=p:Args();
    local parametry_modul=require("Module:Parametry");
    local czy_naglowek=parametry_modul.CzyTak(args["nagłówek"]);
    
    local tab_artykulow=(not czy_naglowek) and {} or nil;
    
	local tab_listy_artykulow={};
	local tab_listy_artykulow_spis={};
  
	local czy_inne_spisy=false;
  
	local html_modul=require("Module:Html");
	  
	local nazwa_tabeli_danego_spisu_tresci=args["spis"];
	if(nazwa_tabeli_danego_spisu_tresci)then
		local techniczne_modul=require("Module:Techniczne");
		nazwa_tabeli_danego_spisu_tresci=html_modul.DecodeHtml(nazwa_tabeli_danego_spisu_tresci,true);
		nazwa_tabeli_danego_spisu_tresci=html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](nazwa_tabeli_danego_spisu_tresci);
   		nazwa_tabeli_danego_spisu_tresci=parametry_modul["Odstępy"]{[1]=nazwa_tabeli_danego_spisu_tresci,[2]="tak",};

		nazwa_tabeli_danego_spisu_tresci=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"](nazwa_tabeli_danego_spisu_tresci,"");
		local nazwa_ksiazki=p:KompletnaNazwaWoluminu(frame)
		local nazwa_artykulu=nazwa_ksiazki.."/"..nazwa_tabeli_danego_spisu_tresci;
		local strona=techniczne_modul.PrzekierowanieDoStrony(nazwa_artykulu);
		if(strona)then
			local nazwy_modul=require("Module:Nazwy");
			nazwa_tabeli_danego_spisu_tresci=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona);
		end;
	end;
	  
	local czy_dany_spis=nil; 
	  
	for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce_spis)do
		local poziom_rozdzialu=tab_lista[1][2][1];
  		local nazwa_spisu=nil;
		if((poziom_rozdzialu)and(poziom_rozdzialu==1))then
			local spis=tab_lista[1]["spis"];
			nazwa_spisu=spis and spis[1] or nil;
			----
			if(not nazwa_tabeli_danego_spisu_tresci)then
				if(nazwa_spisu)then
					if(not tab_listy_artykulow["spis"])then tab_listy_artykulow["spis"]={};end;
					local spis_artykulow=tab_listy_artykulow["spis"];
					spis_artykulow[nazwa_spisu]={};
					tab_listy_artykulow_spis=spis_artykulow[nazwa_spisu];
					czy_inne_spisy=true;
				else
					local dodatkowe=tab_lista[1]["dodatkowe"];
					if(dodatkowe)then
						tab_listy_artykulow["dodatkowe"]={};
						tab_listy_artykulow_spis=tab_listy_artykulow["dodatkowe"];
						czy_inne_spisy=true;
					end;
				end;
			else
				if(nazwa_spisu)then
					if(nazwa_spisu==nazwa_tabeli_danego_spisu_tresci)then
						czy_dany_spis=true;
					else
						if(czy_dany_spis)then 
							czy_dany_spis=nil;
							break;
						else
							czy_dany_spis=nil;
						end;
					end;
				end;
			end;
		end;
		if((tab_lista[2])and((not nazwa_tabeli_danego_spisu_tresci)or((nazwa_tabeli_danego_spisu_tresci)and(czy_dany_spis))))then
			local pomin_pozycje=true;
			for _,artykul_w_bazie in ipairs(tab_lista[2])do
				if((not pomin_pozycje)or(not nazwa_spisu))then
					local czy_table_baza_artykulu=p.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie[1]);
  					local artykul=czy_table_baza_artykulu and artykul_w_bazie[1][1] or artykul_w_bazie[1];
  					----
  					artykul=p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(artykul,czy_naglowek);
  					----
  					if(czy_naglowek or (not tab_artykulow[artykul]))then
  						if(not czy_naglowek)then tab_artykulow[artykul]=true;end;
  						local nazwa=czy_table_baza_artykulu and artykul_w_bazie[1][2] or nil;
						local przekierowanie=czy_table_baza_artykulu and artykul_w_bazie[1][3] or nil;
						local pelna_nazwa_ksiazki=czy_table_baza_artykulu and  artykul_w_bazie[1][4] or nil;
						table.insert(tab_listy_artykulow_spis,(nazwa or przekierowanie or pelna_nazwa_ksiazki) and {artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki,} or artykul);
  					end;
				else
					pomin_pozycje=false;
				end;
			end;
		end;
	end;
	local stronicowyparser_modul=require("Module:StronicowyParser");
	local parametry_modul=require("Module:Parametry");
	local spis_tresci,inne_spisy,dodatkowe_artykuly=stronicowyparser_modul["DaneUkładuAutonawigacji"](frame,tabela_listy_danych_analizy_ksiazki);
	
	if((nazwa_tabeli_danego_spisu_tresci)or(((not inne_spisy)
		or(not parametry_modul["CzySąElementyNumerowaneTablicy"](inne_spisy)))
			and((not dodatkowe_artykuly)
				or(not parametry_modul["CzySąElementyNumerowaneTablicy"](dodatkowe_artykuly)))
	))then
		local tablica_spisu_glownego;
		if(not nazwa_tabeli_danego_spisu_tresci)then
			if(czy_inne_spisy)then
				local czy_table_spis_tresci=parametry_modul.TypeTable(spis_tresci);
				local tab_listy_artykulow_spis=tab_listy_artykulow["spis"] or {};
				tablica_spisu_glownego=tab_listy_artykulow_spis[czy_table_spis_tresci and spis_tresci[1] or spis_tresci];
			else
				tablica_spisu_glownego=tab_listy_artykulow_spis;
			end;
		else
			tablica_spisu_glownego=tab_listy_artykulow_spis;
		end;
		local iter_glowny=parametry_modul.IteratorPoNumerowanychElementachTablicy(tablica_spisu_glownego);
		return function()
			local wartosc=iter_glowny();
			if(not wartosc)then return nil;end;
			local czy_table_wartosc=p.CzyTabelaStronyWoluminuSpisuRzeczy(wartosc);
	    	local artykul=czy_table_wartosc and wartosc[1] or ((not czy_table_wartosc) and wartosc or nil);
	    	local nazwa=czy_table_wartosc and wartosc[2] or nil;
	    	local przekierowanie=czy_table_wartosc and wartosc[3] or nil;
	    	local pelna_nazwa_ksiazki=czy_table_wartosc and wartosc[4] or nil;
	    	return artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki;
		end;
	end;
	local wykorzystane_spisy={};
	local iter_innych_spisow=parametry_modul.IteratorPoNumerowanychElementachTablicy(inne_spisy or {});
	local czy_dodatkowe_zaanalizowane=false;
	local function IteratorMain(wartosc,numer)
		----
		local tabela_spisu_spis=tab_listy_artykulow["spis"] or {};
		local tabela_spisu=tabela_spisu_spis[wartosc];
		if(tabela_spisu)then
			if((wykorzystane_spisy)and(wykorzystane_spisy[wartosc]))then
				tabela_spisu=nil;
			else
				wykorzystane_spisy[wartosc]=true;
			end;
		end;
		local iter=parametry_modul.IteratorPoNumerowanychElementachTablicy(tabela_spisu or {});
		----
		local tak=nil;
		local iter2=nil;
		local function Iterator()
			local function IterMain()
				local wartosc=iter();
				local artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki;
	    		if(not wartosc)then 
	    			if(numer~=0)then
	    				return nil;
	    			else
	    				local function InneSpisy()
	    					local spis=iter_innych_spisow();
	    					if(not spis)then 
	    						if(czy_dodatkowe_zaanalizowane)then return nil;end;
	    						local tabela_spisu_spis=tab_listy_artykulow["dodatkowe"];
	    						if((not tabela_spisu_spis)or(not parametry_modul["CzySąElementyNumerowaneTablicy"](tabela_spisu_spis)))then return nil;end;
	    						iter=parametry_modul.IteratorPoNumerowanychElementachTablicy(tabela_spisu_spis or {});
	    						czy_dodatkowe_zaanalizowane=true;
	    						wartosc=iter();
	    						return true;
	    					end;
	    					local czy_table_spis=parametry_modul.TypeTable(spis);
	    					local spis_artykul=czy_table_spis and spis[1] or spis;
							if(not wykorzystane_spisy[spis_artykul])then
								wykorzystane_spisy[spis_artykul]=true;
								local tabela_spisu_spis=tab_listy_artykulow["spis"] or {};
								local tabela_spisu=tabela_spisu_spis[spis_artykul];
								if(tabela_spisu)then
									iter=parametry_modul.IteratorPoNumerowanychElementachTablicy(tabela_spisu or {});
									wartosc=iter();
									if(not wartosc)then 
										return InneSpisy();
									end;
								else
									return InneSpisy();
								end;
							else
								return InneSpisy();
							end;
							return true;
	    				end;
						local koniec=InneSpisy();
						if(not koniec)then return nil;end;
	    			end;
	    		end;
				----
	    		local czy_table_wartosc=p.CzyTabelaStronyWoluminuSpisuRzeczy(wartosc);
	    		artykul=czy_table_wartosc and wartosc[1] or ((not czy_table_wartosc) and wartosc);
	    		nazwa=czy_table_wartosc and wartosc[2] or nil;
	    		przekierowanie=czy_table_wartosc and wartosc[3] or nil;
	    		pelna_nazwa_ksiazki=czy_table_wartosc and wartosc[4] or nil;
	    		----
	    		artykul=p.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul);
	    		----
	    		tak=true;
				iter2=IteratorMain(artykul,numer+1);
	    		return artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki;  
			end;
			if(not tak)then
	    		local artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki=IterMain();
	    		return artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki;
	    	else
		    	local artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki=iter2();
	    		if(not artykul)then 
	    			tak=nil;
	    			local artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki=IterMain();
	    			return artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki;
	    		else 
	    			return artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki;
	    		end;
	    	end;
		end;
		return Iterator;
	end;
	local czy_table_spis_tresci=parametry_modul.TypeTable(spis_tresci);
	return IteratorMain(czy_table_spis_tresci and spis_tresci[1] or spis_tresci,0);
end;
function p.ObliczeniaInformacje(self,frame)	
	local iterator=p.IteratorPoStronachWoluminuEwentualnieWedleAutonawigacji(frame,tabela_listy_danych_analizy_ksiazki);
	if (not iterator)then return nil;end;
	----
	self.tab_artykul={};
	----
	for artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki in iterator do
		 table.insert(self.tab_artykul, (nazwa or przekierowanie or pelna_nazwa_ksiazki) and {artykul,nazwa,przekierowanie,pelna_nazwa_ksiazki,} or artykul);
	end;
	self.len_tab_artykul=#self.tab_artykul;
	return true;
end;
function p.LosowaStronaBezPierwszejOrazOstatniejStronyWoluminu(self,frame)
  self.numer_pomiedzy_artykul=tonumber(frame.args[1]) or 1;
  self.reszta_pomiedzy_artykul=math.fmod(self.numer_pomiedzy_artykul,self.len_tab_artykul-2);
  local artykul=self.tab_artykul[self.reszta_pomiedzy_artykul+2];
  return artykul;
end;
function p.LosowaStronaWoluminu(self,frame)
	self.numer_losowy_artykul=tonumber(frame.args[1]) or 1;
	self.reszta_losowy_artykul=math.fmod(self.numer_losowy_artykul,self.len_tab_artykul);
	local artykul=self.tab_artykul[self.reszta_losowy_artykul+1];
	return artykul;
end;
function p.RozwijanieZakodowanejNazwySzablonu(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
	local szablonowe_modul=require("Module:Szablonowe");
	local czy_rozwijane=nil;
 	local function RozwinSzablon(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
   		if((szablonowe_modul.CzyModyfikatoryInstrukcjiWarunkowychSzablonowych(tabela_modyfikatorow))
   			or (szablonowe_modul.CzyModyfikatoryCharakterystyczneSzablonowe(tabela_modyfikatorow))
   		)then 
   			return;
   		end;
   		local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
   		local function __FUNKCJA(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul)
 			local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(nazwa_szablonu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
 			local techniczne_modul=require("Module:Techniczne");
 			local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
    		local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe;
    		local tab_naglowki=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu;
    		local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe;
    		---
    		local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego;
    		local tab_szablony_strona_zbiorcza=stronicowyparser_obiekty_modul.strona_zbiorcza;
    		local tab_szablony_strona_start=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu;
    		---
 			for szablon,obiekt,kod in iterator do
 				if(obiekt=="SZABLON")then
 					local nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["NazwaSzablonuWywołania"](szablon);
 					if((tab_szablony[nazwa_szablonu])
 						or(tab_naglowki[nazwa_szablonu])
 						or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu])
 						or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu])
 						or(tab_szablony_strona_zbiorcza[nazwa_szablonu])
 						or(tab_szablony_strona_start[nazwa_szablonu])
 					)then return;end;
 					for _,nazwa_modulu_lua in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_ramek_lua)do
 					   	if((nazwa_szablonu==nazwy_np_modul.Module..":"..nazwa_modulu_lua)
 					   		or(mw.ustring.match(nazwa_szablonu,'^'..nazwy_np_modul.Module..":"..techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](nazwa_modulu_lua).."/"))
 					   	)then
 					   		return;
 					   	end;
 					end;
 				 end;
 		    end;
 			return true;
   		end;
 		if(__FUNKCJA(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul))then
   			local nazwa_szablonu=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(nazwa_szablonu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul);
    		local frame=mw.getCurrentFrame();
    		nazwa_szablonu=frame:preprocess(nazwa_szablonu);
    		czy_rozwijane=true;
			return nazwa_szablonu;
 		end;
		return;
 	end;
   	nazwa_szablonu=RozwinSzablon(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu;
	nazwa_szablonu=czy_rozwijane and szablonowe_modul["SzablonowaNazwaStrony"](nazwa_szablonu) or nazwa_szablonu;
	return nazwa_szablonu;
 end;
function p.TOCSilnik(frame,lista_elementow_spisu_tresci, atrybuty,bez_przypisow)
        if(lista_elementow_spisu_tresci==nil)then return nil;end;
        local twor_listy="";
        local liczba_ulozenia_w_menu_spisu_tresci=lista_elementow_spisu_tresci[1][2];
        local poziom=1;
        local num={};
        
        local nazwa_strony_z_naglowkami=lista_elementow_spisu_tresci.nazwa_strony or "";
        
        local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
        
        for licznik, element_w_tablicy in ipairs(lista_elementow_spisu_tresci) do
        	local czy_w_tym_szablony=mw.ustring.match(element_w_tablicy[1][1],"{{[^{}]+}}");
        	local adres=element_w_tablicy[1][1];
        	local naglowek=element_w_tablicy[1][2];
        	
        	local czy_przypis=(bez_przypisow and stronicowyparser_obiekty_modul.napisy_wprowadzenia_tekstu_przypisowych[naglowek] or nil);
        	if(czy_w_tym_szablony)then
        		local specjalne_modul=require("Module:Specjalne");
				adres=specjalne_modul["PrzetwórzNagłówek"](adres,true);
				naglowek=specjalne_modul["PrzetwórzNagłówek"](naglowek,false);
        	end;
        	adres=nazwa_strony_z_naglowkami.."#"..adres;
			----
        	if(licznik==1)then
        		   num[#num+1]=1;
                   twor_listy=(atrybuty and '<ul '..atrybuty..'>' or '<ul>')..'<li '..(czy_przypis and ('style="display:none;" ') or "")..'class=\"toclevel-1 tocsection-1\">'.."[["..adres.."|<span class=\"tocnumber\">"..table.concat(num,".").."</span><span class=\"toctext\">"..naglowek.."</span>]]";
                else
                  if(element_w_tablicy[2]==liczba_ulozenia_w_menu_spisu_tresci)then
                  	   num[#num]=num[#num]+1;
                       twor_listy=twor_listy..'</li><li '..(czy_przypis and ('style="display:none;" ') or "")..'class="toclevel-'..poziom..' tocsection-'..licznik..'">'.."[["..adres.."|<span class=\"tocnumber\">"..table.concat(num,".").."</span><span class=\"toctext\">"..naglowek.."</span>]]";
                  elseif(element_w_tablicy[2]>liczba_ulozenia_w_menu_spisu_tresci)then
                  	  num[#num+1]=1;
                  	  poziom=poziom+1;
                      twor_listy=twor_listy..'<ul><li '..(czy_przypis and ('style="display:none;" ') or "")..'class="toclevel-'..poziom..' tocsection-'..licznik..'">'.."[["..adres.."|<span class=\"tocnumber\">"..table.concat(num,".").."</span><span class=\"toctext\">"..naglowek.."</span>]]";
                      liczba_ulozenia_w_menu_spisu_tresci=element_w_tablicy[2];
                  elseif(element_w_tablicy[2]<liczba_ulozenia_w_menu_spisu_tresci)then
                  	   local num_length=#num;
                  	   for i=num_length,num_length-liczba_ulozenia_w_menu_spisu_tresci+element_w_tablicy[2]+1,-1 do 
                  	   	   table.remove(num);
                  	   end;
                  	   num[#num]=num[#num]+1;
                  	   
                  	   local roznica_poziomow=liczba_ulozenia_w_menu_spisu_tresci-element_w_tablicy[2];
                  	   poziom=poziom-roznica_poziomow;
                  	   
                       twor_listy=twor_listy..mw.ustring.rep('</li></ul>',roznica_poziomow)..'</li><li '..(czy_przypis and ('style="display:none;" ') or "")..'class="toclevel-'..poziom..' tocsection-'..licznik..'">'
                                             .."[["..adres.."|<span class=\"tocnumber\">"..table.concat(num,".").."</span><span class=\"toctext\">"..naglowek.."</span>]]";
                       liczba_ulozenia_w_menu_spisu_tresci=element_w_tablicy[2];
                  end;
               end;	
        end;
        twor_listy=twor_listy..mw.ustring.rep('</li></ul>',liczba_ulozenia_w_menu_spisu_tresci or 0);
        return twor_listy;
end;
function p.TOC(frame,lista_elementow_spisu_tresci,czy_nie_aktualny,rozciagnij)
		local frame=frame or mw.getCurrentFrame();
		
		local parametry_modul=require("Module:Parametry");
		local PobierzParametr=parametry_modul.PobierzParametr(frame,true);
		local bez_przypisow=parametry_modul.CzyTak(PobierzParametr("bez przypisów"));
		
	    local twor_listy=p.TOCSilnik(frame,lista_elementow_spisu_tresci,nil,bez_przypisow);
	    
	    local toc_czy_tocramka=PobierzParametr("toc");toc_czy_tocramka=parametry_modul.CzyTak(toc_czy_tocramka);
	    
	    if(not toc_czy_tocramka)then
	    	local czy_ukryte=twor_listy;
        	local funkcja=PobierzParametr("funkcja") or "UkrytaWikitabelowaListaMenu";
        	local wysokosc=PobierzParametr("wysokość");wysokosc=parametry_modul.CzyTak(wysokosc) and wysokosc  or "700px";
        	local szerokosc=PobierzParametr("szerokość");szerokosc=parametry_modul.CzyTak(szerokosc)and szerokosc  or "100%";
        	local spis_tresci=PobierzParametr("spis treści");spis_tresci=parametry_modul.CzyTak(spis_tresci)and spis_tresci  or "Spis treści";
        	local bez_not_overflow_x=PobierzParametr("bez pasków poziomych przewijania");bez_not_overflow_x=parametry_modul.CzyTak(bez_not_overflow_x);
        	
			local spis_artykulu=PobierzParametr("spis artykułu");spis_artykulu=parametry_modul.CzyTak(spis_artykulu);
        	
        	local czy_bez_arginesu_dolnego=PobierzParametr("bez marginesu dolnego");czy_bez_arginesu_dolnego=parametry_modul.CzyTak(czy_bez_arginesu_dolnego);
        	local z_marginesami_ramki=PobierzParametr("z marginesami ramki");local czy_z_marginesami_ramki=parametry_modul.CzyTak(z_marginesami_ramki);
        	local zawartosc_z_marginesami=PobierzParametr("zawartość z marginesami");local czy_zawartosc_z_marginesami=parametry_modul.CzyTak(zawartosc_z_marginesami);
        	local maxwidth=PobierzParametr("max-width");
        	local czy_maxwidth=((maxwidth)and(maxwidth~="none"))and tonumber(mw.ustring.match(maxwidth,"^(%d+)%a+$")) or nil;
        	
        	twor_listy='<div class="toc_ogólnie_spis '..(not czy_nie_aktualny and 'toc_spis' or 'toc_inny_spis')..' mw-overflow-x mw-overflow-y '..((not bez_not_overflow_x) and ("mw-not-overflow-x") or "")..'" style="'..(czy_zawartosc_z_marginesami and ("padding:"..zawartosc_z_marginesami)..";" or "")..(czy_maxwidth and ('max-width:'..maxwidth..";") or '')..'width:'..szerokosc..';max-height:'..wysokosc..';overflow:auto;padding-right:3px;box-sizing:border-box;">'..(czy_ukryte or "<ul></ul>").."</div>";
        	local wikikod_menu='{{Tabela nawigacyjna|styl='..((czy_z_marginesami_ramki) and ("margin:"..z_marginesami_ramki)..";" or "")..((czy_bez_arginesu_dolnego) and 'margin-bottom:0;' or "")..(czy_ukryte and "" or "visibility:hidden")..';font-size:0.875rem;background-color:white;line-height:1.2em;width:'..(rozciagnij and "100%" or "auto")..';box-sizing:border-box'..(spis_artykulu and ';border:#aaa 1px solid' or '')..'|tytuł=<div style="text-align:left;font-size:0.875rem;background-color:white;line-height:1.2em;'..(spis_artykulu and ';border-bottom:#aaa 1px solid' or '')..';white-space:nowrap;min-width:8.125rem;">'..spis_tresci..'</div>|spis='..twor_listy..'|funkcja='..funkcja..'|klasa=spis_treści}}';
        	local rozwiniety_wikikod=frame:preprocess(wikikod_menu);
	    	return rozwiniety_wikikod;
	    else
	    	return (twor_listy and ('\n<div style="color: #000;font-family: \'Linux Libertine\',\'Georgia\',\'Times\',serif;font-weight: normal;font-size:1.8rem;border-bottom:1px solid #a2a9b1;line-height: 1.3;margin-top:1em;margin-bottom:0.25em">Spis treści</div>\n<div class="toc_ogólnie_spis '..(not czy_nie_aktualny and 'toc_spis' or 'toc_inny_spis')..'" style="margin-left:10px">'..twor_listy..'</div>') or "");
	    end;
end;
function p.AnalizaSzablonuStronicowegoParsera(self,uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,nazwa_modulu,tablica_danych_parametrow_szablonu_strony,__Funkcja, __Funkcja2)
	if(obiekt~="SZABLON")then return;end;
	--uzyskano_w_wyniku_parsowania_wywolanie_szablonu=mw.ustring.gsub(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,"\n+","");
	--local tablica_obiektow_strony=self.tablica_obiektow_strony[nazwa_modulu];
	----
	local szablonowe_modul=require("Module:Szablonowe");
	----
	local function GlownaFunkcja(wywolanie,obiekt,kod)
    	local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(wywolanie,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
    		__Funkcja(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,wywolanie);
    
    		if(__Funkcja2)then
    			__Funkcja2(wywolanie,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,uzyskano_w_wyniku_parsowania_wywolanie_szablonu);
    		end;
    	end);
	end;
    GlownaFunkcja(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod);
end;
function p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(artykul,czy_naglowek)
	local parametry_modul=require("Module:Parametry");
	if((parametry_modul.TypeTable(artykul))and(artykul["LINK"]))then
		if(not czy_naglowek)then
			return artykul[1];
		else
			return artykul;
		end;
	end;
	return artykul;
end;
function p.CzyTabelaStronyWoluminuSpisuRzeczy(tab_artykul)
	local parametry_modul=require("Module:Parametry");
	if((parametry_modul.TypeTable(tab_artykul))and(tab_artykul["LINK"]))then return false;end;
	local czy_table_baza_artykulu=parametry_modul.TypeTable(tab_artykul);
	return czy_table_baza_artykulu;
end;
function p.TylkoNazwaStronyWoluminuZTabeliPublikacji(tab_artykulu,pomin_link)
	local parametry_modul=require("Module:Parametry");
	if((parametry_modul.TypeTable(tab_artykulu))and(pomin_link or tab_artykulu["LINK"]))then return tab_artykulu[1];end;
	return tab_artykulu;
end;
function p.TylkoStronaWoluminuBezParametrowOrazReferencji(tab_artykulu)
	local parametry_modul=require("Module:Parametry");
	if((parametry_modul.TypeTable(tab_artykulu))and(tab_artykulu["LINK"]))then return nil;end;
	return tab_artykulu;
end;
function p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(nazwa_artykulu_strony,parametry,naglowek,tab_innej_przekierowania_strony)
	local parametry_modul=require("Module:Parametry");
	parametry=parametry_modul.CzyTak(parametry) and parametry or nil;
	naglowek=parametry_modul.CzyTak(naglowek) and naglowek or nil;
	return (parametry or naglowek or tab_innej_przekierowania_strony) and {nazwa_artykulu_strony,parametry,naglowek,["LINK"]=true,tab_innej_przekierowania_strony,} or nazwa_artykulu_strony;
end;
function p.UzykanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab_artykul,naglowek,pomin_link)
	local parametry_modul=require("Module:Parametry");
	if(parametry_modul.TypeTable(tab_artykul))then
		if(pomin_link or tab_artykul["LINK"])then
			local nazwa_artykulu_strony=tab_artykul[1];
			if(naglowek)then
				local parametry=tab_artykul[2];
				local naglowek=tab_artykul[3];
				return nazwa_artykulu_strony..(parametry and ("?"..parametry) or "")..(naglowek and ("#"..naglowek) or "");
			else
				return nazwa_artykulu_strony;
			end;
		else
			return tab_artykul;
		end;
	else
		return tab_artykul;
	end;
end;
function p.DekodowanieTekstu(tekst,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,czy_nie_odstepy)
	if(not tekst)then return tekst;end;
	local szablonowe_modul=require("Module:Szablonowe");
	tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul);
	local html_modul=require("Module:Html");
	tekst=html_modul.DecodeHtml(tekst,true);
    tekst=html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](tekst);
    tekst=html_modul.UsuwanieSpecjalnychNieschematycznychSymboli(tekst);
    ----
    if(not czy_nie_odstepy)then
    	local parametry_modul=require("Module:Parametry");
    	tekst=parametry_modul["Odstępy"]{[1]=tekst,[2]="tak",};
    end;
    return tekst;
end;
function p.CzyNieMaDwukropkaWNazwieStrony(pozycja_artykulu)
	local czy_nie_dwukropek=(mw.ustring.match(pozycja_artykulu,"^[%s‎]*:?[^:#]*$") or mw.ustring.match(pozycja_artykulu,"^[%s‎]*:?[^:#]*#"))and true or false;
	return czy_nie_dwukropek;
end;
function p.DekodowanieNazwySzablonu(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
	----
	local szablonowe_modul=require("Module:Szablonowe");
	local czy_kodowanie=mw.ustring.match(nazwa_szablonu,szablonowe_modul.NormaWzoruKodowaniaTekstu());
	if(not czy_kodowanie)then return nil,true;end;
	local czy_modyfikatory=mw.ustring.match(nazwa_szablonu,"^[%s_]*#[%s_]*%a+[%s_]*:");
	if(czy_modyfikatory)then return nil,false;end;
    local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
    local tab_szablony=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_kontenerowe;
    local tab_naglowki=stronicowyparser_obiekty_modul.szablony_stronicowego_parsera.szablony_wprowadzenia_tekstu;
    local tab_szablony_stronicowe_niekontenerowe=stronicowyparser_obiekty_modul.szablony_stronicowe_niekontenerowe;
    ---
    local tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego=stronicowyparser_obiekty_modul.szablony_stronicowe_kontenerowe_formatowania_wzorowego;
    local tab_szablony_strona_zbiorcza=stronicowyparser_obiekty_modul.strona_zbiorcza;
    local tab_szablony_strona_start=stronicowyparser_obiekty_modul.szablony_stronicowe_formatowania_tekstu;
    ---
    local techniczne_modul=require("Module:Techniczne");
    local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
	local nazwa_szablonu=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstuBezPewnychSzablonowychNormZgodnieZJegoSzablonowymiElementami(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,function(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
		if(obiekt=="SZABLON")then
			tablica_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["ParsowanieWywołaniaSzablonu"](szablon,nil,nil,nil,tablica_danych_parametrow_szablonu_strony,kod);
			if((tab_szablony[nazwa_szablonu])
				or(tab_naglowki[nazwa_szablonu])
				or(tab_szablony_stronicowe_niekontenerowe[nazwa_szablonu]) 						
				or(tab_szablony_stronicowe_kontenerowe_formatowania_wzorowego[nazwa_szablonu])
 				or(tab_szablony_strona_zbiorcza[nazwa_szablonu])
 				or(tab_szablony_strona_start[nazwa_szablonu])
			)then return nil;end;
			for _,nazwa_modulu_lua in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_ramek_lua)do
 				if((nazwa_szablonu==nazwy_np_modul.Module..":"..nazwa_modulu_lua)
 					   or(mw.ustring.match(nazwa_szablonu,'^'..nazwy_np_modul.Module..":"..techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](nazwa_modulu_lua).."/"))
 				)then
 					return nil;
 				end;
			end;
     	end;
		return true;
	end);
	local frame=mw.getCurrentFrame();
	nazwa_szablonu=frame:preprocess(nazwa_szablonu);
	return nazwa_szablonu,true;
end;
function p.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa,tablica_danych_parametrow_szablonu_strony,kod)
	if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[0];
		if(tablica_danych_parametrow_szablonu_strony_numer)then
			local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
			if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
				return tablica_danych_parametrow_szablonu_strony_numer_kod.tablica_analizy_linku;
			end;
		end;
	end;
	local function AnalizaSzablonowaLinku()
		local nazwa,dwa=mw.ustring.match(nazwa,"^Link(%a+)(2?)$");
		if(not nazwa)then return;end;
		if(dwa=="")then dwa=nil;else dwa=true;end;
		local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
		----
		local tab_przestrzen=stronicowyparser_obiekty_modul.kody_szablony_linkowe_przestrzenne;
		local tab_jezyk=stronicowyparser_obiekty_modul.kody_szablony_linkowe_dialektu;
		local tab_projektowe=stronicowyparser_obiekty_modul.kody_szablony_linkowe_projektowe;
		----
		local przestrzen=mw.ustring.match(nazwa,"^(%u%l+)$");
		if(przestrzen)then
			local przestrzenne=tab_przestrzen[przestrzen];
			if(przestrzenne)then
				return {przestrzenne[1],przestrzenne[2],nil,dwa,};
			end;
		end;
		----
		local jezyk,przestrzen=mw.ustring.match(nazwa,"^(%u%l+)(%u%l+)$");
		if(jezyk and przestrzen)then
			local jezykowe=tab_jezyk[jezyk];local przestrzenne=tab_przestrzen[przestrzen];
			if(jezykowe and przestrzenne)then
				return {przestrzenne[1],przestrzenne[2],jezykowe,dwa,};
			end;
		----
			local projektowe=tab_projektowe[jezyk];
			if(projektowe and przestrzenne)then
				return {przestrzenne[1],projektowe or przestrzenne[2],nil,dwa,};
			end;
		end;
		-----
		local jezyk,projekt,przestrzen=mw.ustring.match(nazwa,"^(%u%l+)(%u%l+)(%u%l+)$");
		if(jezyk and projekt and przestrzen)then
			local jezykowe=tab_jezyk[jezyk];local projektowe=tab_projektowe[projekt];local przestrzenne=tab_przestrzen[przestrzen]
			if(jezykowe and projektowe and przestrzenne)then
				return {przestrzenne[1], projektowe or przestrzenne[2],jezykowe,dwa,}
			end;
			local projektowe=tab_projektowe[jezyk..projekt];
			if(projektowe and przestrzenne)then
				return {przestrzenne[1],projektowe or przestrzenne[2],nil,dwa,};
			end;
		end;
		return nil;
	end;
	local wynik=AnalizaSzablonowaLinku();
	if((tablica_danych_parametrow_szablonu_strony)and(kod))then
		if(not tablica_danych_parametrow_szablonu_strony[0])then tablica_danych_parametrow_szablonu_strony[0]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[0];
		if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
		local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
		tablica_danych_parametrow_szablonu_strony_numer_kod.tablica_analizy_linku=wynik;
	end;
	return wynik;
end;
function p.AnalizujLinkSzablonyOrazLinki(wyzyskane_wywolanie_szablonu_spis_tresci,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,__FUNKCJA,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych)
	
	if((obiekt)and(kod))then
		if(obiekt=="SZABLON")then numer=-2;else numer=-3;end;
		if((tablica_danych_parametrow_szablonu_strony)and(kod))then
			local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[numer];
			if(tablica_danych_parametrow_szablonu_strony_numer)then
				local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
				if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
					return tablica_danych_parametrow_szablonu_strony_numer_kod[1],tablica_danych_parametrow_szablonu_strony_numer_kod[2],tablica_danych_parametrow_szablonu_strony_numer_kod[3],tablica_danych_parametrow_szablonu_strony_numer_kod[4],tablica_danych_parametrow_szablonu_strony_numer_kod[5];
				end;
			end;
		end;
	end;
	local local1,local2,local3,local4,local5=p.AnalizujLinkSzablonyOrazLinki2(wyzyskane_wywolanie_szablonu_spis_tresci,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,__FUNKCJA,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych);
	if((obiekt)and(kod))then
		if((tablica_danych_parametrow_szablonu_strony)and(kod))then
			if(not tablica_danych_parametrow_szablonu_strony[numer])then tablica_danych_parametrow_szablonu_strony[numer]={};end;
			local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[numer];
			if(not tablica_danych_parametrow_szablonu_strony_numer[kod])then tablica_danych_parametrow_szablonu_strony_numer[kod]={};end;
			tablica_danych_parametrow_szablonu_strony_numer[kod]={local1,local2,local3,local4,local5,};
		end;
	end;
	return local1,local2,local3,local4,local5;
end;
function p.AnalizujLinkSzablonyOrazLinki2(wyzyskane_wywolanie_szablonu_spis_tresci,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,__FUNKCJA,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych)
	----
    local parametry_modul=require("Module:Parametry");
	local pozycja_artykulu=nil;local nazwa=nil;
	local czy_tabela_do_parsowania_artykulu=parametry_modul.TypeTable(wyzyskane_wywolanie_szablonu_spis_tresci);
	if(not czy_tabela_do_parsowania_artykulu)then
		pozycja_artykulu,nazwa=mw.ustring.match(wyzyskane_wywolanie_szablonu_spis_tresci,"^%[%[([^|%[%]]+)|([^%[%]]+)%]%]$") 
		if(not((pozycja_artykulu)and(nazwa)))then
			pozycja_artykulu=mw.ustring.match(wyzyskane_wywolanie_szablonu_spis_tresci,"^%[%[([^|%[%]]+)%]%]$");
		end;
	end;
	local html_modul=require("Module:Html");
	local nazwy_modul=require("Module:Nazwy")
	local techniczne_modul=require("Module:Techniczne");
   	local pelna_nazwa_spisu_tresci_analizowana=nazwy_modul["NazwaModułu"](nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci);
	local function Artykul(strona,parametry--[[_ref]],naglowek--[[_ref]])
        ----
        --local parametry=parametry_modul.CzyTak(parametry_ref) and parametry_ref or html_modul["ParametryStronyAdresu"](strona,true);
        --local naglowek=parametry_modul.CzyTak(naglowek_ref) and naglowek_ref or html_modul["NagłówekStronyAdresu"](strona,true);
        ----
        strona=html_modul["NazwaStronyAdresu"](strona,true);
        strona=parametry_modul["Odstępy"]{[1]=strona,[2]="tak",};
   		local techniczne_modul=require("Module:Techniczne");
    	strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_spisu_tresci_analizowana,};
        ----
        local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](strona);
        local nazwa_przestrzeni_ksiazki_strony=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona);
        local nazwa_ksiazki_strony=(nazwa_przestrzeni_ksiazki_strony~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona) or nazwy_modul["NAZWAKSIĄŻKI"](strona);
        local nazwa_artykulu_strony=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona);
        
        --if((tab_nazwa_spisow_przekierowaniowych)and(tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony])and
        --[[else]]
        if(tab_nazwa_spisow_przekierowaniowych)then
        	local techniczne_modul=require("Module:Techniczne");
        	local strona_przekierowania=techniczne_modul.PrzekierowanieDoStrony(strona);
        	local function DaneRozwazone(strona_przekierowania,inna_ksiazka)
        		local nazwa_przestrzeni_strony_przekierowania=nazwy_modul["NAZWAPRZESTRZENI"](strona_przekierowania);
        		local nazwa_przestrzeni_ksiazki_strony_przekierowania=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKI"](strona_przekierowania);
        		local nazwa_ksiazki_strony_przekierowania=(nazwa_przestrzeni_ksiazki_strony~="") and nazwy_modul["SUBNAZWAKSIĄŻKI"](strona_przekierowania) or nazwy_modul["NAZWAKSIĄŻKI"](strona_przekierowania);
        		local nazwa_artykulu_strony_przekierowania=((not inna_ksiazka) and (nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona_przekierowania)) or (nazwa_artykulu_strony));
        		----
        		local parametry_przekierowania=((not inna_ksiazka) and (html_modul["ParametryStronyAdresu"](strona_przekierowania,true)) or nil);
        		local naglowek_przekierowania=((not inna_ksiazka) and (html_modul["NagłówekStronyAdresu"](strona_przekierowania,true)) or nil);
        		----
        		if((nazwa_przestrzeni_strony_przekierowania==nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki_strony_przekierowania==nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki_strony_przekierowania==nazwa_ksiazki))then
        			local czy_inne_ksiazka=((inna_ksiazka)or(((nazwa_przestrzeni_strony~=nazwa_przestrzeni)or(nazwa_przestrzeni_ksiazki_strony~=nazwa_przestrzeni_ksiazki)or(nazwa_ksiazki_strony~=nazwa_ksiazki))));
        			if(czy_inne_ksiazka)then
        		   		if(not tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony])then
        		   			tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony]={};
        		   		end;
        		   		if(not tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony][nazwa_przestrzeni_ksiazki_strony])then
        		   			tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony][nazwa_przestrzeni_ksiazki_strony]={};
        		   		end;
        		   		if(not tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony][nazwa_przestrzeni_ksiazki_strony][nazwa_ksiazki_strony])then
        		   			tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony][nazwa_przestrzeni_ksiazki_strony][nazwa_ksiazki_strony]=true;
        		   		end;
        			end;
        		   	return {nazwa_artykulu_strony_przekierowania,parametry_modul.CzyTak(parametry_przekierowania) and parametry_przekierowania or nil,parametry_modul.CzyTak(naglowek_przekierowania) and naglowek_przekierowania or nil,{czy_inne_ksiazka and {nazwa_przestrzeni_strony,nazwa_przestrzeni_ksiazki_strony,nazwa_ksiazki_strony,inna_ksiazka,} or nil,(not inna_ksiazka) and nazwa_artykulu_strony or ((nazwa_artykulu_strony~=nazwa_artykulu_strony_przekierowania)and nazwa_artykulu_strony or nil),parametry,naglowek,} or nil,};
        		 else
        		   	return nil,strona,nazwa_przestrzeni_strony,nazwa_przestrzeni_ksiazki_strony,nazwa_ksiazki_strony,nazwa_artykulu_strony;
        		 end;
        	end;
        	if(strona_przekierowania)then
        		return DaneRozwazone(strona_przekierowania);
        	else
        		if((tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony])
        			and(tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony][nazwa_przestrzeni_ksiazki_strony])and(tab_nazwa_spisow_przekierowaniowych[nazwa_przestrzeni_strony][nazwa_przestrzeni_ksiazki_strony][nazwa_ksiazki_strony]))then
        				return {nazwa_artykulu_strony,parametry_modul.CzyTak(parametry) and parametry or nil,parametry_modul.CzyTak(naglowek) and naglowek or nil,{{nazwa_przestrzeni_strony,nazwa_przestrzeni_ksiazki_strony,nazwa_ksiazki_strony,true,},nil,nil,nil,},};
        		end;
        		local pelna_nazwa_ksiazki=nazwy_modul["NazwaModułu"](nazwa_przestrzeni_strony,nazwa_przestrzeni_ksiazki_strony,nazwa_ksiazki_strony,"");
        		local strona_przekierowania=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_ksiazki);
        		if(strona_przekierowania)then
        			 return DaneRozwazone(strona_przekierowania,true);
        		end;
        	end;
        end;
        if((nazwa_przestrzeni_strony==nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki_strony==nazwa_przestrzeni_ksiazki)and(nazwa_ksiazki_strony==nazwa_ksiazki))then
        	  return {nazwa_artykulu_strony,parametry,naglowek,};
        end
        return nil,strona,nazwa_przestrzeni_strony,nazwa_przestrzeni_ksiazki_strony,nazwa_ksiazki_strony,nazwa_artykulu_strony;
	end;
	---
	local pudelko_modul=require("Module:Pudełko");
	local kod_jezyka_tego_projektu=pudelko_modul["Kod języka tego projektu"]();
	local kod_projektu_tego_projektu=pudelko_modul["Kod projektu tego projektu"]();
	local function DaneKsiazkowychProjektowychMiedzyProjektowychArtykulu(pozycja_artykulu,parametry_ref,naglowek_ref,nazwa,czy_link,czy_nie_dwukropek,klucz_projektu,kod_jezyka,kod_projektu,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
		if(not mw.ustring.match(pozycja_artykulu,"[{}%[%]|]"))then
			if((czy_nie_dwukropek)and(((not kod_jezyka)and(not kod_projektu)and(not klucz_projektu))or (parametry_modul.CzyTak(klucz_projektu)and((klucz_projektu==kod_jezyka_tego_projektu)or(klucz_projektu==kod_projektu_tego_projektu)or(klucz_projektu==kod_jezyka_tego_projektu..":"..kod_projektu_tego_projektu)or(klucz_projektu==kod_projektu_tego_projektu..":"..kod_jezyka_tego_projektu))) or(((kod_jezyka)and(kod_jezyka==kod_jezyka_tego_projektu)and(kod_projektu)and(kod_projektu==kod_projektu_tego_projektu))) or ((kod_jezyka)and(not kod_projektu)and(kod_jezyka==kod_jezyka_tego_projektu))or((kod_projektu)and(not kod_jezyka)and(kod_projektu==kod_projektu_tego_projektu))))then
				----
				pozycja_artykulu=p.DekodowanieTekstu(pozycja_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,nil)
                parametry_ref=p.DekodowanieTekstu(parametry_ref,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,nil);
                naglowek_ref=p.DekodowanieTekstu(naglowek_ref,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,nil);
                ----
                local czy_link=czy_link or mw.ustring.match(pozycja_artykulu,"^:");
                parametry_ref=parametry_modul.CzyTak(parametry_ref) and parametry_ref or html_modul["ParametryStronyAdresu"](pozycja_artykulu,true);
        		naglowek_ref=parametry_modul.CzyTak(naglowek_ref) and naglowek_ref or html_modul["NagłówekStronyAdresu"](pozycja_artykulu,true);
        		pozycja_artykulu=html_modul["NazwaStronyAdresu"](pozycja_artykulu,true);
                ----
                local czy_pozycja_artykulu=pozycja_artykulu;
    	    	local pozycja_artykulu,strona,nazwa_przestrzeni_strony,nazwa_przestrzeni_ksiazki_strony,nazwa_ksiazki_strony,nazwa_artykulu_strony=Artykul(pozycja_artykulu,parametry_ref,naglowek_ref);
        		if(pozycja_artykulu)then
        			return {p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(pozycja_artykulu[1],pozycja_artykulu[2],pozycja_artykulu[3],pozycja_artykulu[4]),nazwa,nil,nil,},1,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
        		else
        			local nazwy_modul=require("Module:Nazwy");
        			--local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"]{nazwa=czy_pozycja_artykulu,};
        			strona=nazwy_modul["NazwaModułu"](nazwa_przestrzeni_strony,nazwa_przestrzeni_ksiazki_strony,nazwa_ksiazki_strony,nazwa_artykulu_strony);
        			local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
        			
        			if((nazwa_przestrzeni_strony==nazwy_np_modul.Main)
        				or(nazwa_przestrzeni_strony==nazwy_np_modul.Wikijunior)
        					or(nazwa_przestrzeni_strony==nazwy_np_modul.Wikibooks)
        						or(nazwa_przestrzeni_strony==nazwy_np_modul.User)
        			)then
        				return {p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(strona,parametr_ref,naglowek_ref,nil),nazwa,nil,nil,},2,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
        			elseif(czy_link or ((nazwa_przestrzeni_strony~=nazwy_np_modul.Category)and(nazwa_przestrzeni_strony~=nazwy_np_modul.File)and(nazwa_przestrzeni_strony~=nazwy_np_modul.Media)))then
        				 return {p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(strona,parametry_ref,naglowek_ref,nil),nazwa,nil,nil,},3,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
        			end;
        		end;
        	else
        		local pozycja_artykulu_stara=pozycja_artykulu;
        		local pudelko_modul=require("Module:Pudełko");
        		local kod_jezyka=kod_jezyka or pudelko_modul["Kod języka tego projektu"]();
        		local kod_projektu=kod_projektu or pudelko_modul["Kod projektu tego projektu"]();
        		local wiki_modul=require("Module:Wiki");
        		local kod_jezyka_koncowy,kod_projektu_koncowy=wiki_modul.KodyWiki(klucz_projektu,kod_jezyka,kod_projektu);
        		
        		pozycja_artykulu=p.DekodowanieTekstu(pozycja_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,nil);
        		local czy_link=czy_link or mw.ustring.match(pozycja_artykulu,"^:");
				local nazwa_strony_linku;
				local uzyskana_nazwa_strony_linku;
				if(czy_nie_dwukropek)then
					nazwa_strony_linku=pozycja_artykulu;
				else
					local kod_jezyka_poczatkowy, kod_projektu_poczatkowy;
					nazwa_strony_linku,kod_jezyka_koncowy,kod_projektu_koncowy, kod_jezyka_poczatkowy, kod_projektu_poczatkowy=wiki_modul.KodyNazwyStrony(pozycja_artykulu,kod_jezyka_koncowy,kod_projektu_koncowy);
					uzyskana_nazwa_strony_linku=nazwa_strony_linku;
				end;
				----
        		parametry_ref=p.DekodowanieTekstu(parametry_ref,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,nil);
                naglowek_ref=p.DekodowanieTekstu(naglowek_ref,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,nil);
				----
				local html_modul=require("Module:Html");
				local parametry_strony=parametry_modul.CzyTak(parametry_ref) and parametry_ref or html_modul["ParametryStronyAdresu"](nazwa_strony_linku,true);
        		local naglowek_strony=parametry_modul.CzyTak(naglowek_ref) and naglowek_ref or html_modul["NagłówekStronyAdresu"](nazwa_strony_linku,true);
        		nazwa_strony_linku=html_modul["NazwaStronyAdresu"](nazwa_strony_linku,true);
        	    local nazwy_modul=require("Module:Nazwy");
				----
				local nazwa_przestrzeni=nazwy_modul["PRZEDMIOTOWAPRZESTRZEŃ"]{nazwa=nazwa_strony_linku,['kod języka']=kod_jezyka_koncowy,["kod projektu"]=kod_projektu_koncowy,}
				local nazwa_kanoniczna_przestrzeni;
				local biezaca_wiki=wiki_modul["CzyBieżącaWiki"]{["kod języka"]=kod_jezyka_koncowy,["kod projektu"]=kod_projektu_koncowy,};
				
				local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
				if(biezaca_wiki)then
					local czy_wyswietlic_link=((uzyskana_nazwa_strony_linku)and(uzyskana_nazwa_strony_linku~=pozycja_artykulu))and true or false;
					if(nazwa_przestrzeni)then
						if((nazwa_przestrzeni==nazwy_np_modul.Main)
							   or(nazwa_przestrzeni==nazwy_np_modul.Wikijunior)
							      or(nazwa_przestrzeni==nazwy_np_modul.Wikibooks)
							        or(nazwa_przestrzeni==nazwy_np_modul.User)
					    )then
    	    				local pozycja_artykulu,strona,nazwa_przestrzeni_strony,nazwa_przestrzeni_ksiazki_strony,nazwa_ksiazki_strony,nazwa_artykulu_strony=Artykul(nazwa_strony_linku);
    	    				if(pozycja_artykulu)then
								return {p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(pozycja_artykulu[1],pozycja_artykulu[2] or parametry_strony,pozycja_artykulu[3] or naglowek_strony,pozycja_artykulu[4]),nazwa,czy_wyswietlic_link and kod_jezyka_koncowy or nil,czy_wyswietlic_link and kod_projektu_koncowy or nil,czy_wyswietlic_link and pozycja_artykulu_stara or nil,},1,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
							else
								nazwa_strony_linku=nazwy_modul["NazwaModułu"](nazwa_przestrzeni_strony,nazwa_przestrzeni_ksiazki_strony,nazwa_ksiazki_strony,nazwa_artykulu_strony);
								return {p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(nazwa_strony_linku,parametry_strony,naglowek_strony),nazwa,czy_wyswietlic_link and kod_jezyka_koncowy or nil,czy_wyswietlic_link and kod_projektu_koncowy or nil,czy_wyswietlic_link and pozycja_artykulu_stara or nil,},2,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
							end;
					    elseif(czy_link or ((nazwa_przestrzeni~=nazwy_np_modul.Category)and(nazwa_przestrzeni~=nazwy_np_modul.File)and(nazwa_przestrzeni~=nazwy_np_modul.Media)))then 
							nazwa_strony_linku=nazwy_modul["PEŁNANAZWASTRONY"]{nazwa=nazwa_strony_linku,['kod języka']=kod_jezyka_koncowy,["kod projektu"]=kod_projektu_koncowy,}
							return {p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(nazwa_strony_linku,parametry_strony,naglowek_strony),nazwa,czy_wyswietlic_link and kod_jezyka_koncowy or nil,czy_wyswietlic_link and kod_projektu_koncowy or nil,czy_wyswietlic_link and pozycja_artykulu_stara or nil,},3,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
						end;
					else
						return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
					end;
				else
					nazwa_strony_linku=nazwy_modul["PEŁNANAZWASTRONY"]{nazwa=nazwa_strony_linku,['kod języka']=kod_jezyka_koncowy,["kod projektu"]=kod_projektu_koncowy,};
					nazwa_kanoniczna_przestrzeni=nazwy_modul.NpDane{nazwa=nazwa_przestrzeni,["kanoniczna"]="tak",["nazwij projektem"]="tak",["nazwij dyskusją projektu"]="tak",["kod języka"]=kod_jezyka_koncowy,["kod projektu"]=kod_projektu_koncowy,["istnieje"]="tak",["wynik błędu nietekstowy"]="tak",};
					if(nazwa_kanoniczna_przestrzeni)then
						if((nazwa_kanoniczna_przestrzeni==nazwy_np_modul.kanoniczna.Main)
							   or(nazwa_kanoniczna_przestrzeni==nazwy_np_modul.kanoniczna.Wikijunior)
							     or(nazwa_kanoniczna_przestrzeni==nazwy_np_modul.kanoniczna.Project)
							    	or(nazwa_kanoniczna_przestrzeni==nazwy_np_modul.kanoniczna.User)
					    )then
							return {p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(nazwa_strony_linku,parametry_strony,naglowek_strony),nazwa,kod_jezyka_koncowy,kod_projektu_koncowy,pozycja_artykulu_stara,},4,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
						else
							return {p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(nazwa_strony_linku,parametry_strony,naglowek_strony),nazwa,kod_jezyka_koncowy,kod_projektu_koncowy,pozycja_artykulu_stara,},5,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
						end;
					else
						return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
					end;
				end;
				return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
			end;
    	else
    		return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
		end;
	end;
	---
    local czy_pozycja_artykulu=nil;
	if((not pozycja_artykulu)and(not czy_tabela_do_parsowania_artykulu))then
		local link_szablon=mw.ustring.match(wyzyskane_wywolanie_szablonu_spis_tresci,"^({{[^{}]+}})$");
		if(link_szablon)then
				local szablonowe_modul=require("Module:Szablonowe");
            	local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["ParsowanieWywołaniaSzablonu"](link_szablon,nil,nil,nil,tablica_danych_parametrow_szablonu_strony,kod);
				if(szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow,nazwa_szablonu,tabela_parametrow_szablonu,tablica_danych_parametrow_szablonu_strony,kod))then
					nazwa_szablonu=pelna_nazwa_spisu_tresci_szablonowa and techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]({[1]=nazwa_szablonu,[2]=pelna_nazwa_spisu_tresci_szablonowa,},tablica_danych_parametrow_szablonu_strony,kod) or nazwa_szablonu;
   					nazwa_szablonu=szablonowe_modul["SzablonowaNazwaStrony"](nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod);

            		if(nazwa_szablonu=="SpisTreści")then
                	    pozycja_artykulu=tabela_parametrow_szablonu[1];
                	    if(not pozycja_artykulu)then
                	    	 return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
                	    end;
                	    ------
                    	pozycja_artykulu=p.DekodowanieTekstu(pozycja_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul);
                    	------
                	    return {pozycja_artykulu,nil},1,true,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
            		elseif(nazwa_szablonu=="Sekcja referencyjna")then
                		local strona=tabela_parametrow_szablonu[1] or tabela_parametrow_szablonu["strona"];
                		--if(not strona)then
                    	--	return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
                    	--end;
                		local podstrona=tabela_parametrow_szablonu[3] or tabela_parametrow_szablonu["podstrona"];
                		local pozycja_artykulu;
                		if(not podstrona)then
                			local nazwy_modul=require("Module:Nazwy");
                    		pozycja_artykulu=strona or "";
                    	else
                    		pozycja_artykulu=(((podstrona) and (podstrona~="")) and (podstrona..(((strona)and(not mw.ustring.match(strona,"^#"))) and "/" or "")) or "")..(strona or "");
                    	end;
                    	local nazwa=tabela_parametrow_szablonu["nazwa"] or tabela_parametrow_szablonu[2];
                    	------
                    	pozycja_artykulu=p.DekodowanieTekstu(pozycja_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)
        				----
        				local html_modul=require("Module:Html");
        			    local parametry_ref=html_modul["ParametryStronyAdresu"](pozycja_artykulu,true);
        				local naglowek_ref=html_modul["NagłówekStronyAdresu"](pozycja_artykulu,true);
        				----
        				local pozycja_artykulu_ref=html_modul["NazwaStronyAdresu"](pozycja_artykulu,true);
                    	------
                    	return {p.UzyskanieTabeliStronyWoluminuParametremOrazIdentyfikatorem(pozycja_artykulu_ref,parametry_ref,naglowek_ref),nazwa},1,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
                	else
                    	if(nazwa_szablonu=="Link wewnętrzny")then
                    		local pozycja_artykulu=tabela_parametrow_szablonu["strona"];
                    		if(not pozycja_artykulu)then
                    			return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
                    		end;
                    		local nazwa=tabela_parametrow_szablonu["nazwa"];
                    		local naglowek=tabela_parametrow_szablonu["nagłówek"];
                    		
                    		local klucz_projektu=tabela_parametrow_szablonu["klucz projektu"];
                    		local kod_jezyka=tabela_parametrow_szablonu['kod języka'];
                    		local kod_projektu=tabela_parametrow_szablonu["kod projektu"];
                   			local czy_nie_dwukropek=p.CzyNieMaDwukropkaWNazwieStrony(pozycja_artykulu);
                    		return DaneKsiazkowychProjektowychMiedzyProjektowychArtykulu(pozycja_artykulu,nil,naglowek,nazwa,true,czy_nie_dwukropek,klucz_projektu,kod_jezyka,kod_projektu,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
                    	elseif(nazwa_szablonu=="LinkOgólne")then
                    		local pozycja_artykul;
                    		local strona=tabela_parametrow_szablonu[1];
                    		if(not strona)then
                    			return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
                    		end;
                    		local nazwa=tabela_parametrow_szablonu[2];
                    		local klucz_projektu=tabela_parametrow_szablonu["klucz projektu"];
                    		local kod_jezyka=tabela_parametrow_szablonu['kod języka'];
                    		local kod_projektu=tabela_parametrow_szablonu["kod projektu"];
                    		local miano_przestrzeni_nazw=tabela_parametrow_szablonu["miano przestrzeni nazw"];
                    		if(miano_przestrzeni_nazw)then
                    			pozycja_artykulu=((miano_przestrzeni_nazw~="")and(miano_przestrzeni_nazw..":") or "")..strona;
                    		else
                    		    pozycja_artykulu=strona;
                    		end;
                   			local czy_nie_dwukropek=p.CzyNieMaDwukropkaWNazwieStrony(pozycja_artykulu);
                    		return DaneKsiazkowychProjektowychMiedzyProjektowychArtykulu(pozycja_artykulu,nil,nil,nazwa,true,czy_nie_dwukropek,klucz_projektu,kod_jezyka,kod_projektu,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
                    	else 
                    		local dane_szablonu_linku=p.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod);
                    		if(dane_szablonu_linku)then
                    			local pozycja_artykulu=tabela_parametrow_szablonu[1];
                    			if(not pozycja_artykulu)then
                    				return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},false;
                    			end;
                    			local nazwa_przestrzeni=dane_szablonu_linku[1];
                    			local pozycja_artykulu=(((nazwa_przestrzeni)and(nazwa_przestrzeni~=""))and (nazwa_przestrzeni..":") or "")..tabela_parametrow_szablonu[1];
                    			local nazwa=(not dane_szablonu_linku[4]) and (tabela_parametrow_szablonu[2]) or nil;
                    			local klucz_projektu;local kod_jezyka;local kod_projektu;
                    			if((not dane_szablonu_linku[2])and(not dane_szablonu_linku[3]))then
                    				klucz_projektu=tabela_parametrow_szablonu["klucz projektu"];
                    				kod_jezyka=tabela_parametrow_szablonu['kod języka'];
                    				kod_projektu=tabela_parametrow_szablonu["kod projektu"];
                    			else
                    				kod_jezyka=dane_szablonu_linku[3];
                    				kod_projektu=dane_szablonu_linku[2];
                    			end;
                    			local czy_nie_dwukropek;
                    			if(nazwa_przestrzeni=="")then
                    				czy_nie_dwukropek=p.CzyNieMaDwukropkaWNazwieStrony(pozycja_artykulu);
                    			elseif((not kod_jezyka)and(not kod_projektu)and(not klucz_projektu))then
                    				czy_nie_dwukropek=true;
                    			else
                    				czy_nie_dwukropek=false;
	                    		end;
    	                		return DaneKsiazkowychProjektowychMiedzyProjektowychArtykulu(pozycja_artykulu,nil,nil,nazwa,true,czy_nie_dwukropek,klucz_projektu,kod_jezyka	,kod_projektu,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow);
                    		elseif((__FUNKCJA)and(__FUNKCJA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)))then
                    			return nil,nil,false,{tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,},true;
                    		end;
                    	end;
                    end;
               end;
		end;
    elseif(not czy_tabela_do_parsowania_artykulu)then
    	local specjalne_modul=require("Module:Specjalne");
    	if(specjalne_modul.CzyInterwiki(wyzyskane_wywolanie_szablonu_spis_tresci))then
    		return nil,nil,false,nil,true;
    	end;
    	local parametry_modul=require("Module:Parametry");
        --pozycja_artykulu=mw.getContentLanguage():ucfirst(parametry_modul["Odstępy"]{[1]=pozycja_artykulu,[2]="tak",});
        local czy_pozycja_artykulu=mw.ustring.match(pozycja_artykulu,"^/(.-)/+$") or mw.ustring.match(pozycja_artykulu,"^/(.+)$");
        if(czy_pozycja_artykulu)then
        	if(parametry_modul["CzyTakCiąg"](czy_pozycja_artykulu))then
        		czy_pozycja_artykulu=pelna_nazwa_spisu_tresci_analizowana.."/"..czy_pozycja_artykulu;
    	        return DaneKsiazkowychProjektowychMiedzyProjektowychArtykulu(czy_pozycja_artykulu,nil,nil,nazwa,true,true,nil,nil,nil,nil);
    	    else
    	    	pozycja_artykulu=nil;
    	    	return {pozycja_artykulu,nazwa},1,false,nil,false;
    	    end;
         else
         	local czy_nie_dwukropek=p.CzyNieMaDwukropkaWNazwieStrony(pozycja_artykulu);
         	return DaneKsiazkowychProjektowychMiedzyProjektowychArtykulu(pozycja_artykulu,nil,nil,nazwa,false,czy_nie_dwukropek,nil,nil,nil,nil);
        end;
    else
    	local pozycja_artykulu=wyzyskane_wywolanie_szablonu_spis_tresci[1];
    	local nazwa=wyzyskane_wywolanie_szablonu_spis_tresci[2];
    	local czy_nie_dwukropek=p.CzyNieMaDwukropkaWNazwieStrony(pozycja_artykulu);
     	return DaneKsiazkowychProjektowychMiedzyProjektowychArtykulu(pozycja_artykulu,nil,nil,nazwa,true,czy_nie_dwukropek,nil,nil,nil,nil);
	end;
end;
return p;