Moduł:StronicowyParser/DalszeFunkcje

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Template-info.png Dokumentacja modułu [stwórz] [odśwież]
local p={};
function p.ZaczynajAnalizowacArtykulyKsiazek(self)
    self.tabela_listy_danych_analizy_ksiazki={};
    
    self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu={};
    local obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
    
    self.tabela_listy_danych_analizy_ksiazki.problemy={};
    
    self.tabela_listy_danych_analizy_ksiazki.problemy.bledy_uchwytow_korzystanych_stron={};
    self.tabela_listy_danych_analizy_ksiazki.problemy.bledy_uchwytow_doloczonych_stron={};
    self.tabela_listy_danych_analizy_ksiazki.problemy.brak_uchwytu={};
    self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych={};
    for _,elementy_w_tablicy_obiekty in pairs(obiekty_modul.tablica_obiektow)do
    	local wartosc=elementy_w_tablicy_obiekty[1];
    	self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych[wartosc]={};
    end;
    self.tabela_listy_danych_analizy_ksiazki.licencja={};
    
    local nazwy_modul=require("Module:Nazwy");
    local ksiazkowe_modul=require("Module:Książkowe")
    
    local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"]();
    local nazwa_ksiazki=ksiazkowe_modul["NazwaKsiążki"]();
    local nazwa_artykulu=ksiazkowe_modul["NazwaArtykułuKsiążki"]();
    
    local pelna_nazwa_ksiazki=((nazwa_przestrzeni~="")and (nazwa_przestrzeni..":") or "")..nazwa_ksiazki;
    local techniczne_modul=require("Module:Techniczne");
    local ile,_=techniczne_modul.PoliczZbiory{[1]=pelna_nazwa_ksiazki.."/config",};
    if(ile>0)then
    	local frame=mw.getCurrentFrame();
    	local nazwa_szablonu=techniczne_modul.NazwaSzablonu(pelna_nazwa_ksiazki);
        local ksiazka=frame:expandTemplate{title=nazwa_szablonu.."/config",args={[1]="książka",}};
        local artykul=frame:expandTemplate{title=nazwa_szablonu.."/config",args={[1]="artykuł",}};
        
        if(not mw.ustring.match(ksiazka,"^%s*$"))then
        	local strona=ksiazka..((artykul~="") and ("/"..artykul) or "");
        	local ile,_=techniczne_modul.PoliczZbiory{[1]=strona,};
        	if(ile>0)then
        		nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona);
        		nazwa_ksiazki=ksiazkowe_modul["NazwaKsiążki"](strona);
    			nazwa_artykulu=ksiazkowe_modul["NazwaArtykułuKsiążki"](strona);
    		end;
    	end;
    end;
    
    local tabela_listy_danych_analizy_ksiazki2={};
    local linkobiekt={};
    local tabela_listy_danych_analizy_ksiazki0=p:ZbieranieInformacji(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, true,tabela_listy_danych_analizy_ksiazki2,linkobiekt);
    if(tabela_listy_danych_analizy_ksiazki0)then
       p:PrzetworzZebraneInformacje(tabela_listy_danych_analizy_ksiazki2,linkobiekt,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu);
    end;
    return self.tabela_listy_danych_analizy_ksiazki;
end;
function p.DodawanieElementowDoTablicy(self,element_tablicy,nazwa_obiektu,nazwa_przestrzeni,nazwa_ksiazki)
	local tabela_listy_danych_analizy_ksiazki=self.tabela_listy_danych_analizy_ksiazki.problemy;
	if(not tabela_listy_danych_analizy_ksiazki[element_tablicy])then 
		tabela_listy_danych_analizy_ksiazki[element_tablicy]={};
	end;
    tabela_listy_danych_analizy_ksiazki=tabela_listy_danych_analizy_ksiazki[element_tablicy];
    
   	if(nazwa_obiektu)then
		if(not tabela_listy_danych_analizy_ksiazki[nazwa_obiektu])then
		      tabela_listy_danych_analizy_ksiazki[nazwa_obiektu]={};
		end;
		tabela_listy_danych_analizy_ksiazki=tabela_listy_danych_analizy_ksiazki[nazwa_obiektu];
	end;
	if(not tabela_listy_danych_analizy_ksiazki[nazwa_przestrzeni])then 
		tabela_listy_danych_analizy_ksiazki[nazwa_przestrzeni]={};
	end;
	tabela_listy_danych_analizy_ksiazki=tabela_listy_danych_analizy_ksiazki[nazwa_przestrzeni];
	tabela_listy_danych_analizy_ksiazki[nazwa_ksiazki]=true;
end;
function  p.SpisTresciWstep(self,tekst_artykulu,nazwa_strony,obiekty,nazwa_przestrzeni,nazwa_ksiazki,czy_artukul_korzystany)
    nazwa_strony=mw.ustring.gsub(nazwa_strony,"(|)",function (s) return "&#"..tostring(mw.ustring.byte(s))..";";end);
    local tablica_spisu_tresci=nil;
    local stronicowyparser_dalszefunkcje2_modul=require("Module:StronicowyParser/DalszeFunkcje2");
    local HNumer=stronicowyparser_dalszefunkcje2_modul.LiczonyHNumer();
    local uzyskany_w_wyniku_parsowania;    
    local tablica_powtarzajacych_sie_elementow={};
    local elementy_linku=nil;
    local frame=mw.getCurrentFrame();
    local parametry_modul=require("Module:Parametry");
    local techniczne_modul=require("Module:Techniczne");
    
    local tab_szablony=mw.loadData("Module:StronicowyParser/obiekty").szablony_stronicowego_parsera;
    
    local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
    local iterator=stronicowyparser_rozdzialy_modul.IterTekst(tekst_artykulu);
                 		
    for naglowek,text_rozdzialu,numer_rozdzialu in iterator do
             local wywolanie_naglowek_iterator=mw.ustring.gmatch(naglowek,"{{%s*Nagłówkuj%s*|[^{}]+}}");
             local numeracja;
             local powtorka=0;
             for wywolanie_naglowek in wywolanie_naglowek_iterator do
             	wywolanie_naglowek=mw.ustring.gsub(wywolanie_naglowek,"([%^%$%(%)%%%.%[%]%*%+%-%?])","%%%1");
             	local parametry_wywolania_szablonu_naglowek=techniczne_modul["ParsujWywołanieSzablonu"](wywolanie_naglowek);
             	numeracja=parametry_wywolania_szablonu_naglowek["uchwyt"] or parametry_wywolania_szablonu_naglowek[1];
             	if(powtorka>=1)then 
             		if(self.tabela_listy_danych_analizy_ksiazki)then
             		   if(czy_artukul_korzystany)then
             		   	    if(not self.tabela_listy_danych_analizy_ksiazki.problemy.powtorka_naglowek_w_stronie_korzystanej)then
             				    self.tabela_listy_danych_analizy_ksiazki.problemy.powtorka_naglowek_w_stronie_korzystanej=0;
             				    if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
             				    	self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Nagłówkuj:"..(numeracja or "");
             				    end;
             				end;
             			else
             				p:DodawanieElementowDoTablicy("powtorka_naglowek_w_stronie_doloczonej",nil,nazwa_przestrzeni,nazwa_ksiazki)
             				if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
             				    	self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Nagłówkuj:"..(numeracja or "");
             				 end;
             			end;
             		end;
             		break;
             	end;
            	powtorka=powtorka+1;
             end;
             local jest_naglowkuj_w_tekscie_rozdzialu=mw.ustring.match(text_rozdzialu,"{{%s*Nagłówkuj%s*}}") or mw.ustring.match(text_rozdzialu,"{{%s*Nagłówkuj%s*|[^{}]*}}");
             if(jest_naglowkuj_w_tekscie_rozdzialu)then
             	jest_naglowkuj_w_tekscie_rozdzialu=mw.ustring.gsub(jest_naglowkuj_w_tekscie_rozdzialu,"([%^%$%(%)%%%.%[%]%*%+%-%?])","%%%1");
             	local parametry_wywolania_szablonu_naglowek=techniczne_modul["ParsujWywołanieSzablonu"](jest_naglowkuj_w_tekscie_rozdzialu);
             	local numeracja=parametry_wywolania_szablonu_naglowek["uchwyt"] or parametry_wywolania_szablonu_naglowek[1];
             	if(czy_artukul_korzystany)then
             		if(not self.tabela_listy_danych_analizy_ksiazki.problemy.naglowek_tekscie_rozdzialu_w_stronie_korzystanej)then
             		     self.tabela_listy_danych_analizy_ksiazki.problemy.naglowek_tekscie_rozdzialu_w_stronie_korzystanej=0;
             		     if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
             				   self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Nagłówkuj:"..(numeracja or "");
             		     end;
             		end;
             	else
             		p:DodawanieElementowDoTablicy("naglowek_w_tekscie_rozdzialu_w_stronie_doloczonej",nil,nazwa_przestrzeni,nazwa_ksiazki);
             		if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then
             			self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Nagłówkuj:"..(numeracja or "");
             		end;
             	end;
             end;
             
             local function SzablonyWywolywane(wywolanie)
             	local parametry_wywolania_szablonu=techniczne_modul["ParsujWywołanieSzablonu"](wywolanie);
             	if(tab_szablony[parametry_wywolania_szablonu[0]])then return "";end;
             	return wywolanie;
             end;
             naglowek,_=mw.ustring.gsub(naglowek,"({{[^{}]+}})",SzablonyWywolywane);
             
             naglowek=frame:preprocess(naglowek);
             
             naglowek=mw.ustring.gsub(naglowek,"%[%[[^{}|%[%]]+:[^{}|%[%]]+:([^{}|%[%]]+)%]%]","%1");
             naglowek=mw.ustring.gsub(naglowek,"%[%[[^{}|%[%]]+:([^{}|%[%]]+)%]%]","%1");
             naglowek=mw.ustring.gsub(naglowek,"%[%[:?([^{}|%[%]]+)%]%]","%1");
             naglowek=mw.ustring.gsub(naglowek,"%[%[[^{}|%[%]]+|([^{}|%[%]]+)%]%]","%1");
             naglowek=mw.ustring.gsub(naglowek,"%[%s*%S+%s+([^%[%]]*)%]","%1");
             naglowek=mw.ustring.gsub(naglowek,"[{}|]",function(s) return "&#"..tostring(mw.ustring.byte(s))..";";end)
             local linki_modul=require("Module:Linki");
             local nazwa_rozdzialu_w_artykule=linki_modul["UsuńZnaczniki"](naglowek);
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"[<>]",function(s) return "&#"..tostring(mw.ustring.byte(s))..";";end);
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"\'\'\'","");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"\'\'","");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"^[%s_]*","");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"[%s_]*$","");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"_"," ");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"|","&#"..tostring(mw.ustring.byte('|'))..";");
             local numer_tego_samego_naglowka=1;
             local nazwa_rozdzialu_w_artykule_p=mw.ustring.lower(nazwa_rozdzialu_w_artykule);
            
             local numer_tego_samego_naglowka=1;
             for s=1,#tablica_powtarzajacych_sie_elementow,1 do
                    local element=tablica_powtarzajacych_sie_elementow[s];
                    if(element==naglowek)then
                    	numer_tego_samego_naglowka=numer_tego_samego_naglowka+1;
                    end;
             end;
            
             if(numer_tego_samego_naglowka==1)then
                 elementy_linku={((nazwa_strony~="")and (":"..nazwa_strony) or "").."#"..nazwa_rozdzialu_w_artykule,naglowek};
             else
                 elementy_linku={((nazwa_strony~="")and (":"..nazwa_strony) or "").."#"..nazwa_rozdzialu_w_artykule.."_"..numer_tego_samego_naglowka,naglowek};
             end;
             if((obiekty)and(numeracja))then
             	obiekty[#obiekty+1]={numeracja,{elementy_linku[1], elementy_linku[2]}};
             end;
             
             local numer_rozdzialu_ustalony=HNumer(numer_rozdzialu);
             tablica_powtarzajacych_sie_elementow[#tablica_powtarzajacych_sie_elementow+1]=naglowek;  
             if(tablica_spisu_tresci==nil)then tablica_spisu_tresci={};end;
             tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony};
     end;
     return tablica_spisu_tresci;
end;
function p.ZbierajJakieSaArtykulyIInformacjeOLicencji(self,nazwa_przestrzeni,nazwa_ksiazki,czy_artykul_korzystany)
   local parametry_modul=require("Module:Parametry");
   if((not nazwa_przestrzeni)or(not nazwa_ksiazki))then return 0;end;
   local nazwa_modolu=(parametry_modul.CzyTak(nazwa_przestrzeni)and parametry_modul.CzyTak(nazwa_ksiazki))and nazwa_przestrzeni..":"..nazwa_ksiazki or nazwa_ksiazki;
   
   local tekst_rozwiniety_calego_artykulu=p.SpreparowanyWikikodStrony(nil,nazwa_modolu);
   if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
   
   
   local tekst_rozwiniety_calego_spisu_tresci=p.SpreparowanyWikikodStrony(nil,nazwa_modolu.."/Spis treści") or p.SpreparowanyWikikodStrony(nil,nazwa_modolu.."/spis treści");
   if(tekst_rozwiniety_calego_spisu_tresci)then
		local techniczne_modul=require("Module:Techniczne");
		local wywolanie_spis_tresci="{{%s*"..((nazwa_przestrzeni~="")and techniczne_modul["WzórDanejPrzestrzeniNazw"](nazwa_przestrzeni) or ":")
                                   ..techniczne_modul["WzórNazwyStrony"](nazwa_ksiazki).."/[Ss]pis[%s_]+treści%s*}}";
        tekst_rozwiniety_calego_spisu_tresci=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](tekst_rozwiniety_calego_spisu_tresci);
		tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,wywolanie_spis_tresci,tekst_rozwiniety_calego_spisu_tresci);
   end;
   local wyzyskane_wywolanie_szablonu_spis_tresci="";
   local tabelalisty2=nil;
   local licencja_z_autorem=true;
   local tabela_artykulow=nil;
   local tabela_licencji_spisu_tresci=nil;
   local techniczne_modul=require("Module:Techniczne");
   local parametry_modul=require("Module:Parametry");
   local html_modul=require("Module:Html");
   
    local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały")
    local iterator=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_ksiazki,true);
    local html_modul=require("Module:Html");
    
    local _1=html_modul["KodyHTMLZnakówWikiCiągu"]("{{!}}");
    local _2=html_modul["KodyHTMLZnakówWikiCiągu"]("{{!(()}}");
    local _3=html_modul["KodyHTMLZnakówWikiCiągu"]("{{))!}}");
    local mikroszablony={
    	["{{!}}"]=_1,
    	["{{!((}}"]=_2,
    	["{{))!}}"]=_3,
    };
    local mikroszablony_odwrotne={
    	[_1]="|",
    	[_2]="[[",
    	[_3]="]]",
    };
    local jakie_nie={
    	["Bibliografia"]=true,
    	["Licencja"]=true,
    	["Zobacz też"]=true,
    	["Inne"]=true,
    };
    local wyrazenie_regularne="(&#123;&#123;[&#;!%(%)]+&#125;&#125;)";
    
    local numer_rozdzialu_w_ksiazce=1;
    local parametry_modul=require("Module:Parametry");
    local function AnalizaRozdzialu(rozdzial,text,numer_rozdzialu)
    	rozdzial,_=mw.ustring.gsub(rozdzial,"{{[^|{}]+|([^|{}]+)[^{}]*}}","%1");
    	repeat
    		text,_=mw.ustring.gsub(text,"{{([%w_%s:]+)|([^{}]-)%[%[([^%[%]|{}]+)%]%]([^{}]-)}}","{{%1|%2".._2.."%3".._3.."%4}}");
    		text,_=mw.ustring.gsub(text,"{{([%w_%s:]+)|([^{}]-)%[%[([^%[%]|{}]+)|([^%[%]|{}]+)%]%]([^{}]-)}}","{{%1|%2".._2.."%3".._1.."%4".._3.."%5}}");
    	until((not mw.ustring.match(text,"{{([%w_%s:]+)|([^{}]-)%[%[([^%[%]|{}]+)%]%]([^{}]-)}}") )
    	       and (not mw.ustring.match(text,"{{([%w_%s:]+)|([^{}]-)%[%[([^%[%]|{}]+)|([^%[%]|{}]+)%]%]([^{}]-)}}")));
    	       
        text,_=mw.ustring.gsub(text,"{{[^{}]+}}",mikroszablony);
        
        if(not tabela_artykulow)then tabela_artykulow={};end;
   	   	if(not tabela_artykulow[numer_rozdzialu_w_ksiazce])then 
   	   		tabela_artykulow[numer_rozdzialu_w_ksiazce]={};
   	   		tabela_artykulow[numer_rozdzialu_w_ksiazce][1]={rozdzial,numer_rozdzialu,};
   	   	end;
        
        local function iteratorTekstuNaglowka()
        	local re="([#:*;]*)%s*([^{}%[%]]*)%s*([^\n]+)";
        	local iter=nil;
        	local tak=nil;
        	return function()
        		if(not tak)then
        			tak=true;
        			local przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci=mw.ustring.match(text,"^"..re);
        			if(przedrostek_listy and tekstowy_przedrostek and wyzyskane_wywolanie_szablonu_spis_tresci)then
        				return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci;
        			end;
        		end;
        		if(not iter)then
        			iter=mw.ustring.gmatch(text,"\n"..re);
        		end;
        		local przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci=iter();
        		return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci;
        	end;
        end;
        
    	local iterator=iteratorTekstuNaglowka();
    	for przedrostek_listy,tekstowy_przedrostek,linia in iterator do
    		local iterator2=mw.ustring.gmatch(linia,"([%[{][%[{][^{}]-[%]}][%]}])")
    		for wyzyskane_wywolanie_szablonu_spis_tresci in iterator2 do
		    	wyzyskane_wywolanie_szablonu_spis_tresci2,_=mw.ustring.gsub(wyzyskane_wywolanie_szablonu_spis_tresci,"{{[^|{}]+|([^|{}]+)[^{}]*}}","%1");
		    	wyzyskane_wywolanie_szablonu_spis_tresci2,_=mw.ustring.gsub(wyzyskane_wywolanie_szablonu_spis_tresci2,wyrazenie_regularne,mikroszablony_odwrotne);
		    	wyzyskane_wywolanie_szablonu_spis_tresci2=parametry_modul["Odstępy"](wyzyskane_wywolanie_szablonu_spis_tresci2,"tak");
		    	if(mw.ustring.match(wyzyskane_wywolanie_szablonu_spis_tresci2,"^%[%[([^%[%]]+)%]%]$"))then
		    		wyzyskane_wywolanie_szablonu_spis_tresci=wyzyskane_wywolanie_szablonu_spis_tresci2;
		    	end;
			
				local pozycja_artykulu=nil;local nazwa=nil;
				local link_szablon=mw.ustring.match(wyzyskane_wywolanie_szablonu_spis_tresci,"({{[^{}]+}})");
				if(not jakie_nie[rozdzial])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;
					local function Artykul(strona)
        				local nazwy_modul=require("Module:Nazwy");
        	    		local nazwa_przestrzeni_strony=nazwy_modul["NAZWAPRZESTRZENI"](strona);
        	    		local nazwa_ksiazki_strony=nazwy_modul["NAZWAKSIĄŻKI"](strona);
        	    		local nazwa_artykulu_strony=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona);
        	    		if((nazwa_przestrzeni_strony==nazwa_przestrzeni)and(nazwa_ksiazki_strony==nazwa_ksiazki))then
        	    			return nazwa_artykulu_strony;
        				else
        					return;
        				end;
					end;
					--local link_szablon;
					if(not pozycja_artykulu)then
						--link_szablon=mw.ustring.match(wyzyskane_wywolanie_szablonu_spis_tresci,"({{[^{}]+}})");
						if(link_szablon)then
			  				local techniczne_modul=require("Module:Techniczne");
                    		local parametry=techniczne_modul["ParsujWywołanieSzablonu"](link_szablon);
                    		local szablon=parametry[0];
                    		if(szablon=="SpisTreści")then
                    			pozycja_artykulu=parametry[1];
                    		elseif(szablon=="Sekcja referencyjna")then
                    			pozycja_artykulu=parametry[1] or parametry["strona"];
                    			nazwa=parametry["nazwa"];
                    		else
                    			if(szablon=="Link wewnętrzny")then
                    				local strona=parametry["strona"];
                    				nazwa=parametry["nazwa"];
                    	    		pozycja_artykulu=Artykul(strona);
                    			elseif(szablon=="LinkOgólne")then
                    				local strona=parametry[1];
                    				nazwa=parametry[2];
                    				local miano_przestrzeni_nazw=parametry["miano przestrzeni nazw"];
                    				if(miano_przestrzeni_nazw)then
                    					pozycja_artykulu=Artykul(((miano_przestrzeni_nazw~="")and(miano_przestrzeni_nazw..":") or "")..parametry[1]);
                    				else
                    		    		pozycja_artykulu=Artykul(parametry[1])
                    				end;
                    			elseif(szablon=="LinkGłówna")then
                    				pozycja_artykulu=Artykul(parametry[1])
                    				nazwa=parametry[2];
                    			elseif((szablon=="LinkWikijunior")or(szablon=="LinkWikijunior2"))then
                    				local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
                    				pozycja_artykulu=Artykul(nazwy_np_modul.Wikijunior..":"..parametry[1]);
                    				nazwa=parametry[2];
                    			elseif((szablon=="LinkProjekt")or(szablon=="LinkProjekt2"))then
                    				local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
                    				pozycja_artykulu=Artykul(nazwy_np_modul.Wikibooks..":"..parametry[1]);
                    				nazwa=parametry[2];
                    			elseif((szablon=="LinkUżytkownik")or(szablon=="LinkUżytkownik2"))then
                    				local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
                    				pozycja_artykulu=Artykul(nazwy_np_modul.User..":"..parametry[1]);
                    				nazwa=parametry[2];
                    			end;
                    		end;
                		end;
            		else
            			pozycja_artykulu=mw.getContentLanguage():ucfirst(parametry_modul["Odstępy"](pozycja_artykulu,"tak"));
            			local czy_pozycja_artykulu=mw.ustring.match(pozycja_artykulu,"^/(.+)/$")
            			if(czy_pozycja_artykulu)then
            				pozycja_artykulu=czy_pozycja_artykulu;
            			else
        					pozycja_artykulu=Artykul(pozycja_artykulu);
            			end;
            		end;
			
   		    		--Rozdzialy początek
   		    		local znaki_niedozwolone;
   		    		if(pozycja_artykulu)then
   	   					pozycja_artykulu=parametry_modul["Odstępy"]{[1]=pozycja_artykulu,[2]="tak",}
   	   					pozycja_artykulu=mw.getContentLanguage():ucfirst(pozycja_artykulu);
   	   					pozycja_artykulu=html_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](pozycja_artykulu);
   	   	    			znaki_niedozwolone=mw.ustring.match(pozycja_artykulu,"[|<>{}%[%]]");
   	   					if(znaki_niedozwolone)then
   	   						if(not self.tabela_listy_danych_analizy_ksiazki.problemy.niedozwolone_znaki_w_spisach_tresci)then
        						self.tabela_listy_danych_analizy_ksiazki.problemy.niedozwolone_znaki_w_spisach_tresci=0;
        					end;
        				end;
   	   				end;
   	   				if(pozycja_artykulu)then
            			if(not tabela_artykulow[numer_rozdzialu_w_ksiazce][2])then tabela_artykulow[numer_rozdzialu_w_ksiazce][2]={};end;
        				table.insert(tabela_artykulow[numer_rozdzialu_w_ksiazce][2],{((nazwa) and ({pozycja_artykulu,nazwa,})or pozycja_artykulu),#przedrostek_listy,});
   	   				end;	
    			end;
        		--Rozdziały koniec
    			if((not pozycja_artykulu)and(link_szablon)and(czy_artykul_korzystany)and(licencja_z_autorem))then
       				local wywolanie_spisu_tresci=mw.ustring.match(wyzyskane_wywolanie_szablonu_spis_tresci,"^{{[Ll]icencja|([^{}]-)}}$");
       				if(wywolanie_spisu_tresci)then
       					wyzyskane_wywolanie_szablonu_spis_tresci=mw.ustring.gsub(wyzyskane_wywolanie_szablonu_spis_tresci,"(%[%[[^|%[%]]-)(|)([^|%[%]]-%]%])","%1&#"..tostring(mw.ustring.byte('|'))..";%3");
       					local tabela_parametrow=techniczne_modul["ParsujWywołanieSzablonu"](wyzyskane_wywolanie_szablonu_spis_tresci);
       					if(tabela_parametrow)then
       	    				local autor=tabela_parametrow["Autor"];
       	    				local szkoly=tabela_parametrow["Ukończone szkoły"];
       	    				local email=tabela_parametrow["Email"];
       	    				local dotyczy=tabela_parametrow["Dotyczy"];
       	    				local licencjonowanie=tabela_parametrow["Licencjonowanie"];
       	    				local umowa_prawna=tabela_parametrow["Umowa prawna"];
       	    				local konsekwencje=tabela_parametrow["Konsekwencje"];
       	    				if(autor~=nil)then
       	    					autor,_=mw.ustring.gsub(autor,wyrazenie_regularne,mikroszablony_odwrotne);
       	    				end;	
       	    				if(szkoly~=nil)then
       	    					szkoly,_=mw.ustring.gsub(szkoly,wyrazenie_regularne,mikroszablony_odwrotne);
       	    				end; 
       	    				if(email~=nil)then
       	    					email,_=mw.ustring.gsub(email,wyrazenie_regularne,mikroszablony_odwrotne);
       	    				end;
       	    				if(dotyczy~=nil)then
       	    					dotyczy,_=mw.ustring.gsub(dotyczy,wyrazenie_regularne,mikroszablony_odwrotne);
       	    				end;
       	    				if(licencjonowanie~=nil)then
       	    					licencjonowanie,_=mw.ustring.gsub(licencjonowanie,wyrazenie_regularne,mikroszablony_odwrotne);
       	    				end;
       	    				if(umowa_prawna~=nil)then
       	    					umowa_prawna,_=mw.ustring.gsub(umowa_prawna,wyrazenie_regularne,mikroszablony_odwrotne);
       	    				end;
       	    				if(konsekwencje~=nil)then
       	    					konsekwencje,_=mw.ustring.gsub(konsekwencje,wyrazenie_regularne,mikroszablony_odwrotne);
       	    				end;
       	    				if(autor~=nil)then 
       	  						tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje};
	      	  					licencja_z_autorem=false; 
    	   	    			end;
       					elseif(self.tabela_listy_danych_analizy_ksiazki.problemy.blad_wewnetrzny_modulu_lua_stronicowego_parsera==nil)then
       	   					self.tabela_listy_danych_analizy_ksiazki.problemy.blad_wewnetrzny_modulu_lua_stronicowego_parsera=0;
       					end
       				end;
       			end;
    		end;
    	end;
    	numer_rozdzialu_w_ksiazce=numer_rozdzialu_w_ksiazce+1;
    end
    local parsuj_rozdzialami=nil;
    for rozdzial,text,numer_rozdzialu in iterator do
    	AnalizaRozdzialu(rozdzial,text,numer_rozdzialu);
    	if(not parsuj_rozdzialami)then  parsuj_rozdzialami=true;end
    end;
    if(not parsuj_rozdzialami)then
    	AnalizaRozdzialu("Spis treści",tekst_rozwiniety_calego_artykulu,1);
    end;
    if(czy_artykul_korzystany)then tabelalisty2={tabela_artykulow, tabela_licencji_spisu_tresci,};else tabelalisty2=tabela_artykulow;end;
    return tabelalisty2;
end;
function p.ObslugaSzczegolnaElementu(self,kod_uchwytu,tabela_listy_danych_analizy_ksiazki2, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany)
    local lista_dwuelementowa={};
    lista_dwuelementowa[1]=kod_uchwytu;
    local parametry_modul=require("Module:Parametry");
    if((not tabela_listy_danych_analizy_ksiazki2.sprawdzenie_dokonane_obiektu)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu])))then 
        if(not (p:Czy_jest_taki_element_w_tabeli_wynikow("strony_poza_zakresem_obslugiwanym",nazwa_przestrzeni, nazwa_ksiazki)))then 
       			p:SprawdzCzyJestDostepnySpisTresci(nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu);
		end;
       	tabela_listy_danych_analizy_ksiazki2.sprawdzenie_dokonane_obiektu=true;
    end;
    table.insert(tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa);
end;
function p.ObsluzSzablonWzor(self,tabela_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki2,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji)
	local kod_uchwytu=nil;
	if(tabela_parametrow_szablonu["uchwyt"])then 
		local parametry_modul=require("Module:Parametry");
        kod_uchwytu=parametry_modul["Odstępy"](tabela_parametrow_szablonu["uchwyt"]);
    elseif(tabela_parametrow_szablonu[numer_numeracji])then
        local parametry_modul=require("Module:Parametry");
		kod_uchwytu=parametry_modul["Odstępy"](tabela_parametrow_szablonu[numer_numeracji]);
	end;
	if(kod_uchwytu and not mw.ustring.match(kod_uchwytu,"^%s*$"))then 
		p:ObslugaSzczegolnaElementu(kod_uchwytu,tabela_listy_danych_analizy_ksiazki2, nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany);
	end;
end;
function p.Czy_jest_taki_element_w_tabeli_wynikow(self,element, nazwa_przestrzeni, nazwa_ksiazki)
	local parametry_modul=require("Module:Parametry");
  	local tabela_problemow=self.tabela_listy_danych_analizy_ksiazki.problemy[element];
  	return (parametry_modul.CzyJestTakiKluczTabeli(tabela_problemow,nazwa_przestrzeni)
  	    		      and parametry_modul.CzyJestTakiKluczTabeli(tabela_problemow[nazwa_przestrzeni],nazwa_ksiazki));
end;
function p.SprawdzCzyJestDostepnySpisTresci(self,nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu)
	if(nazwa_przestrzeni)then
		if(nazwa_ksiazki)then
			if(nazwa_artykulu=="")then return;end;
  			local czy_element_wystepuje_w_tablicy=false;
  			local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu;
			if(tablica_przestrzeni)then
				local tabela_ksiazek=tablica_przestrzeni[nazwa_przestrzeni];
				if(tabela_ksiazek)then
					local tab_ksiazki=tabela_ksiazek[nazwa_ksiazki];
					if(tab_ksiazki)then
						if(tab_ksiazki.spis)then
							czy_lista_niepusta=true;
				    		for _,tab_value1 in ipairs(tab_ksiazki.spis)do
				    			if(tab_value1[2])then
				    				for _,nazwa_artykulu1 in ipairs(tab_value1[2])do
  										if(nazwa_artykulu1[1]==nazwa_artykulu)then
  	                						czy_element_wystepuje_w_tablicy=true;
  	                						break;
  	                					end;
  	    							end;
				    			end;
				    			if(czy_element_wystepuje_w_tablicy)then break;end;
				    		end;
				    	end;
                    end;
  	    		end;
			end;
    		if(not czy_element_wystepuje_w_tablicy)then 
        		if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni)or(self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki~=nazwa_ksiazki)or(self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu~=nazwa_artykulu))then
        			if(not (p:Czy_jest_taki_element_w_tabeli_wynikow("strony_poza_zakresem_obslugiwanym",nazwa_przestrzeni, nazwa_ksiazki)))then
	            		p:DodawanieElementowDoTablicy("brak_spisy_tresci_do_doloczanych_stron",nil,nazwa_przestrzeni,nazwa_ksiazki);
	            	end;
        		elseif(not self.tabela_listy_danych_analizy_ksiazki.problemy.brak_spisu_tresci_do_korzystanych_stron)then
       				if(not (p:Czy_jest_taki_element_w_tabeli_wynikow("strony_poza_zakresem_obslugiwanym",nazwa_przestrzeni, nazwa_ksiazki)))then
            				self.tabela_listy_danych_analizy_ksiazki.problemy.brak_spisu_tresci_do_korzystanych_stron=0;
            		end;
        		end;
    		end;
    	end;
    end;
end;
function p.PusteParametryLinkow(self,nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu)
  local czy_ksiazka_z_tylko_odstepami_lub_pusty=(nazwa_ksiazki)and mw.ustring.match(nazwa_ksiazki,"^%s*$") or nil;
  local czy_artykul_z_tylko_odstepami_lub_pusty=(nazwa_artykulu)and mw.ustring.match(nazwa_artykulu,"^%s*$") or nil;
  local czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty=(uchwyt_obiektu)and mw.ustring.match(uchwyt_obiektu,"^%s*$") or nil;
  if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then
  		if(not self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][1])then
	 		self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][1]=0;
		end;
  end;
  if(czy_artykul_z_tylko_odstepami_lub_pusty)then 
		if(not self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][2])then
	 			self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][2]=0;
 		end;
  end;
  if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then
		if(not self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][3])then
			self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][3]=0;
		end;
  end;
end;
function p.ZbieranieInformacjiArtykolowKsiazek(self,tabela_parametrow_szablonu)
   local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1];
   local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2];
   
   local parametry_modul=require("Module:Parametry");
   nazwa_artykulu=(nazwa_artykulu)and parametry_modul["Odstępy"]{[1]=nazwa_artykulu,[2]="tak",} or nil;
   pelna_nazwa_ksiazki=(pelna_nazwa_ksiazki)and parametry_modul["Odstępy"]{[1]=pelna_nazwa_ksiazki,[2]="tak",} or nil;
   
   local ksiazkowe_modul=require("Module:Książkowe");
   pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki);
   
   pelna_nazwa_ksiazki=parametry_modul["Odstępy"]{[1]=pelna_nazwa_ksiazki,[2]="tak",};
   
   local nazwy_modul=require("Module:Nazwy");
   local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki);
   local nazwa_ksiazki=ksiazkowe_modul["NazwaKsiążki"](pelna_nazwa_ksiazki);
   local nazwa_artykulu=nazwa_artykulu or (pelna_nazwa_ksiazki and (((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki==nazwa_ksiazki))and ksiazkowe_modul["NazwaArtykułuKsiążki"]() or "") or ksiazkowe_modul["NazwaArtykułuKsiążki"]());
   local tabela_listy_danych_analizy_ksiazki=p:ZbieranieInformacji(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, false);
end;
function p.ZbieranieInformacjiPudelek(self,tabela_parametrow_szablonu)
	if((not tabela_parametrow_szablonu["nazwa przestrzeni nazw"])and(not tabela_parametrow_szablonu["nazwa jednostki"]))then return;end;
	local nazwy_modul=require("Module:Nazwy");
	local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or nazwy_modul["NAZWASTRONY"]();
	local nazwa_przestrzeni=nazwy_modul.Np{nazwa=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or nazwy_modul["NAZWAPRZESTRZENI"]()};
	
	local pelna_nazwa_ksiazki=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
	
	local ksiazkowe_modul=require("Module:Książkowe");
	
    local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki);
    local nazwa_ksiazki=ksiazkowe_modul["NazwaKsiążki"](pelna_nazwa_ksiazki);
    local nazwa_artykulu=ksiazkowe_modul["NazwaArtykułuKsiążki"](pelna_nazwa_ksiazki);
    
	local tabela_listy_danych_analizy_ksiazki=p:ZbieranieInformacji(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, false);
end;
function p.LinkowanieOgolnie(self,tabela_listy_danych_analizy_ksiazki2,tabela_parametrow_szablonu,nazwa_obiektu, linkobiekt)
   local nazwa_artykulu=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[2];
   local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1];
   local pelna_nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[3];
   local parametry_modul=require("Module:Parametry");
   nazwa_artykulu=(nazwa_artykulu)and parametry_modul["Odstępy"]{[1]=nazwa_artykulu,[2]="tak",} or nil;
   pelna_nazwa_ksiazki=(pelna_nazwa_ksiazki)and parametry_modul["Odstępy"]{[1]=pelna_nazwa_ksiazki,[2]="tak",} or nil;
   uchwyt_obiektu=(uchwyt_obiektu)and parametry_modul["Odstępy"](uchwyt_obiektu) or nil;
   local nazwy_modul=require("Module:Nazwy");
   local html_modul=require("Module:Html");
   if(nazwa_artykulu)then 
   	    nazwa_artykulu=html_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](nazwa_artykulu);
   	    nazwa_artykulu=require("Module:Parametry")["Odstępy"]{[1]=nazwa_artykulu,[2]="tak",};
   end;
   local nazwa_ksiazki;local nazwa_przestrzeni;
   
   if(pelna_nazwa_ksiazki)then 
   	   pelna_nazwa_ksiazki=html_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](pelna_nazwa_ksiazki);
   	   local ksiazkowe_modul=require("Module:Książkowe");
   	   pelna_nazwa_ksiazki=ksiazkowe_modul["PełnaNazwaStronicowejKsiążki"](pelna_nazwa_ksiazki);
   	   pelna_nazwa_ksiazki=parametry_modul["Odstępy"]{[1]=pelna_nazwa_ksiazki,[2]="tak",};
   	   nazwa_ksiazki=nazwy_modul["NAZWASTRONY"](pelna_nazwa_ksiazki);
   	   nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](pelna_nazwa_ksiazki);
   end;
   if((uchwyt_obiektu)and(uchwyt_obiektu~=""))then
    	if(nazwa_artykulu)then
    		if(nazwa_artykulu~="")then
        		if(not nazwa_ksiazki)then
        			nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
        			nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
        		elseif(nazwa_ksiazki=="")then
        		   p:PusteParametryLinkow(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
        		   return;
        		end;
        	elseif((nazwa_ksiazki)and(nazwa_ksiazki~=""))then
        		nazwa_artykulu="";
        	elseif((nazwa_ksiazki)and(nazwa_ksiazki==""))then
        		  p:PusteParametryLinkow(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
        		  return;
        	else
        		nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
        		nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
        	end;
        	if((nazwa_przestrzeni~=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)or(nazwa_ksiazki~=self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki)or(nazwa_artykulu~=self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu))then
        		p:LinkowanieNastepne(nazwa_obiektu, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
        	else	
        		p:LinkowanieDalszePrace(tabela_listy_danych_analizy_ksiazki2,nazwa_obiektu,uchwyt_obiektu,linkobiekt);
        		p:PusteParametryLinkow(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); 
        	end;
    	else 
    		p:LinkowanieDalszePrace(tabela_listy_danych_analizy_ksiazki2,nazwa_obiektu,uchwyt_obiektu,linkobiekt) 
    		p:PusteParametryLinkow(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); 
    	end;
   elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then
   	   	  p:PusteParametryLinkow(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
   elseif(not self.tabela_listy_danych_analizy_ksiazki.problemy.brak_uchwytu[nazwa_obiektu])then
   	  p:PusteParametryLinkow(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
   	  self.tabela_listy_danych_analizy_ksiazki.problemy.brak_uchwytu[nazwa_obiektu]=0;
   end;
end;
function p.LinkowanieDalszePrace(self,tabela_listy_danych_analizy_ksiazki2,nazwa_obiektu,uchwyt_obiektu,linkobiekt,Funkcja_sprawdzania_parametrow_linkow)
	local linkobiekttab=linkobiekt[nazwa_obiektu];
	local parametry_modul=require("Module:Parametry");
	if((not tabela_listy_danych_analizy_ksiazki2.sprawdzenie_dokonane_linku)and(not parametry_modul["CzySąElementyNumerowaneTablicy"](linkobiekttab)))then 
		local parametry_modul=require("Module:Parametry");
		local nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
		local nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
		local nazwa_artykulu=self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu;
		if(not (p:Czy_jest_taki_element_w_tabeli_wynikow("strony_poza_zakresem_obslugiwanym",nazwa_przestrzeni, nazwa_ksiazki)))then 
			p:SprawdzCzyJestDostepnySpisTresci(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu);
		end;
		tabela_listy_danych_analizy_ksiazki2.sprawdzenie_dokonane_linku=true;
	end;
    table.insert(linkobiekttab,uchwyt_obiektu);
end;
function p.LinkowanieNastepne(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu)
	if(((nazwa_przestrzeni)and(((nazwa_przestrzeni~="")and(not mw.ustring.match(nazwa_przestrzeni,"[|<>{}%[%]]")))or(nazwa_przestrzeni=="")))
		and((nazwa_artykulu)and(((nazwa_artykulu~="")and(not mw.ustring.match(nazwa_artykulu,"[|<>{}%[%]]")))or(nazwa_artykulu=="")))
			and((nazwa_ksiazki)and(nazwa_ksiazki~="")and(not mw.ustring.match(nazwa_ksiazki,"[|<>{}%[%]]"))))then
        local parametry_modul=require("Module:Parametry");
		if((nazwa_przestrzeni)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu))then
			local tabela_listy_danych_analizy_ksiazki2={}
    		local tabela_listy_danych_analizy_ksiazki0=p:ZbieranieInformacji(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, false,tabela_listy_danych_analizy_ksiazki2);
    		if(tabela_listy_danych_analizy_ksiazki0)then 
        			if(tabela_listy_danych_analizy_ksiazki0==0)then return;end;
        			p:SprawdzCzyJestDostepnySpisTresci(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
        			local czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2=tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu];
        			local ile_razy=0;
            		if(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2)then                                 
            			for _, parametry_obiektu in pairs(czy_jest_nazwa_obiektu_w_tabela_listy_danych_analizy_ksiazki2) do
                			if(parametry_obiektu[1]==uchwyt_obiektu)then
                    			ile_razy=ile_razy+1;
                    			if(ile_razy>1)then break;end;
                			end;                                      
            			end;
            		end
        			if(ile_razy~=1)then
            			if(self.tabela_listy_danych_analizy_ksiazki.problemy.bledy_uchwytow_korzystanych_stron["Link"..nazwa_obiektu]==nil)then
            				self.tabela_listy_danych_analizy_ksiazki.problemy.bledy_uchwytow_korzystanych_stron["Link"..nazwa_obiektu]=0;
            			end;
    				    p:PusteParametryLinkow(nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
        			end;
    		else
    			if(not self.tabela_listy_danych_analizy_ksiazki.problemy.blad_wewnetrzny_modulu_lua_stronicowego_parsera)then
    				self.tabela_listy_danych_analizy_ksiazki.problemy.blad_wewnetrzny_modulu_lua_stronicowego_parsera=0;
    			end;
    		end;
		else
    		p:PusteParametryLinkow(nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
    	end;
    else
        if(self.tabela_listy_danych_analizy_ksiazki.problemy.nieprawidlowe_nazwy_korzystanych_stron==nil)then
        	if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu==nazwa_artykulu))then 
  		    	self.tabela_listy_danych_analizy_ksiazki.problemy.nieprawidlowe_nazwy_korzystanych_stron=0;
  	    	else
  		        self.tabela_listy_danych_analizy_ksiazki.problemy.nieprawidlowe_nazwy_stron_doloczanych_do_stron=0;
        	end;
        end;
    end;
end;
function p.SpreparowanyWikikodStrony(self,nazwa_modolu,bez_analizy_szablonowej)
   local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
   local nazwy_modul=require("Module:Nazwy");
   nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modolu);
   if(nazwy_np_modul.Module==nazwa_przestrzeni)then
   	    local techniczne_modul=require("Module:Techniczne");
   		nazwa_modolu=techniczne_modul["PełnaNazwaOpisuModułu"](nazwa_modolu);
   		return p.LadujZawartoscStrony(self,nazwa_modolu,true,nil,true);
   elseif(nazwy_np_modul.Template~=nazwa_przestrzeni)then
   	   return p.LadujZawartoscStrony(self,nazwa_modolu,true,nil,bez_analizy_szablonowej);
   elseif(nazwy_np_modul.Template==nazwa_przestrzeni)then
   	   if(mw.ustring.match(nazwa_modolu,"^[^:]+:(.*/opis)%s*$"))then
   			local szablony_magiczne={};
   			return p.LadujZawartoscStrony(self,nazwa_modolu,true,szablony_magiczne,true);
		else
   	    	local szablony_magiczne={};
			local tekst_artykulu_caly=p.LadujZawartoscStrony(self,nazwa_modolu,true,szablony_magiczne,false);
			if(not tekst_artykulu_caly)then return;end;
			local iterator=mw.ustring.gmatch(tekst_artykulu_caly,"{{[^{}]-}}");
	    	local parametry_modul=require("Module:Parametry");
	    	local techniczne_modul=require("Module:Techniczne");
			
			for wywolanie in iterator do
				local function AnalizujDokumentacja(_,wywolanie)
   					local nazwa_strony2;
		  			local dokumentacja=mw.ustring.match(wywolanie,"{{%s*[Dd]okumentacja%s*}}");
		  			if(dokumentacja)then
		  				local nazwa_strony2=nazwa_modolu.."/opis";
		  				local tekst_artykulu2=p.LadujZawartoscStrony(self,nazwa_strony2,false,szablony_magiczne,true);
		  				local techniczne_modul=require("Module:Techniczne");
		  				tekst_artykulu2=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](tekst_artykulu2);
				    	tekst_artykulu_caly=mw.ustring.gsub(tekst_artykulu_caly,"{{%s*[Dd]okumentacja%s*}}",tekst_artykulu2);
			  		else
			  	    	local dopasowanie=mw.ustring.match(wywolanie,"{{%s*[Dd]okumentacja%s*|");
		  		    	if(dopasowanie)then
		  	    			local tablica_parametrow_dokumentacja=techniczne_modul["ParsujWywołanieSzablonu"](wywolanie)
		  	    			local nazwa_strony2=tablica_parametrow_dokumentacja[1];
		  	    			local zawartosc=tablica_parametrow_dokumentacja["zawartość"];
		  	    			if((nazwa_strony2)and(not zawartosc))then
		  	  					local tekst_artykulu2=p.LadujZawartoscStrony(self,nazwa_strony2,false,szablony_magiczne,true);
		  	  					tekst_artykulu2=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](tekst_artykulu2);
								wywolanie=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](wywolanie);
								tekst_artykulu_caly=mw.ustring.gsub(tekst_artykulu_caly,wywolanie,tekst_artykulu2);		  	    	
							elseif(zawartosc)then
								wywolanie=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](wywolanie);
								zawartosc=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](zawartosc);
								tekst_artykulu_caly=mw.ustring.gsub(tekst_artykulu_caly,wywolanie,zawartosc);
							end;
						end;
		  			end;
				end; 
				local function __Funkcja2(oznaczenie_szablonu,wywolanie,tabela_parametrow_szablonu,uzyskano_w_wyniku_parsowania_wywolanie_szablonu)
					if(not oznaczenie_szablonu)then return; end;
					local stronicowyparser_dalszefunkcje2_modul=require("Module:StronicowyParser/DalszeFunkcje2");
					local wywolanie2,_=mw.ustring.gsub(wywolanie,parser_dalszefunkcje2_modul.OgolnyWzor(ss),stronicowyparser_dalszefunkcje2_modul.AnalizaSzablonu(ss));
					
					wywolanie=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](wywolanie);
					wywolanie2=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](wywolanie2);
				    
					tekst_artykulu_caly,_=mw.ustring.gsub(tekst_artykulu_caly,wywolanie,wywolanie2);
					
				end;
				p.AnalizaSzablonuStronicowegoParsera(wywolanie,AnalizujDokumentacja,__Funkcja2)
			end;
			return tekst_artykulu_caly;
		end;
	end;
end;
function p.LadujZawartoscStrony(self,nazwa_strony,czy_noinclude,szablony_magiczne,dokumentacja)
   local czy_nazwa_strony_z_tylko_odstepami_lub_pusta=mw.ustring.match(nazwa_strony,"^%s*$");
   local uchwyt_strony;
   if(not czy_nazwa_strony_z_tylko_odstepami_lub_pusta)then
   	  local nazwa_strony2=require("Module:Html").TransformacjaKlasyZnakowej(nazwa_strony);
      uchwyt_strony = mw.title.makeTitle('', nazwa_strony2);
      if((uchwyt_strony==nil)or(not uchwyt_strony.exists))then 
      	if(self and self.tabela_listy_danych_analizy_ksiazki)then
        	if(self.tabela_listy_danych_analizy_ksiazki.problemy.strona_nie_istnieje==nil)then
         		self.tabela_listy_danych_analizy_ksiazki.problemy.strona_nie_istnieje=0
        	end;
        end;
        return nil;
      end;
    else
      return nil;
    end;
    local tekst_artykulu = uchwyt_strony:getContent();
    if(czy_noinclude)then
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->(.-)<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->","%1");
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->.-<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->","");
    else
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->.-<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->","");
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->(.-)<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->","%1");
    end;
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->.-<%s-/%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->","");
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Pp][Rr][Ee]%s->.-<%s-/%s-[Pp][Rr][Ee]%s->","");
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(<%s-[mM][aA][tT][hH]%s->.-<%s-/%s-[mM][aA][tT][hH]%s->)",""); 	
    if(szablony_magiczne)then
    	local nazwy_modul=require("Module:Nazwy");
    	szablony_magiczne["{{ROOTPAGENAME}}"]=nazwy_modul["NAZWAKORZENIASTRONY"]();
    	szablony_magiczne["{{NAMESPACE}}"]=nazwy_modul["NAZWAPRZESTRZENI"]();
    	szablony_magiczne["{{PAGENAME}}"]=nazwy_modul["NAZWASTRONY"]();
    	szablony_magiczne["{{FULLPAGENAME}}"]=nazwy_modul["PEŁNANAZWAKSIĄŻKI"]();
    end;
    if(szablony_magiczne)then 
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"{{[^{}]+}}",szablony_magiczne);
    	local szablony_magiczne_fun=function(s)
    		local czy_if=mw.ustring.match(s,"({{%s*#if:[^|]+|[^{}]*}})");
    		if(czy_if)then
    		  return mw.getCurrentFrame():preprocess(s);
    		end;
    		local czy_ifeq=mw.ustring.match(s,"({{%s*#ifeq:[^|]+|[^{}]*}})");
    		if(czy_ifeq)then
    			return mw.getCurrentFrame():preprocess(s);
    	    end;
		    local czy_switch=mw.ustring.match(s,"({{%s*#switch:[^|]+|[^{}]*}})");
    		if(czy_switch)then
    			return mw.getCurrentFrame():preprocess(s);
    		end;
	        return s;
    	end;
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"{{[^{}]+}}",szablony_magiczne_fun);
    end;
    if(not dokumentacja)then
        local stronicowyparser_dalszefunkcje2_modul=require("Module:StronicowyParser/DalszeFunkcje2");
        stronicowyparser_dalszefunkcje2_modul:ZamieniajSzablonyStart();
        local function ZamieniajSzablony(szablon1,szablon2,szablon3)
        	return stronicowyparser_dalszefunkcje2_modul:ZamieniajSzablony(szablon1,szablon2,szablon3);
        end;
    	while mw.ustring.match(tekst_artykulu,"{{[^{}|]-|.-{{[^{}]-}}[^{}]-}}") do
        	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"({{[^{}|]-|.-)({{[^{}]-}})([^{}]-}})",ZamieniajSzablony);
    	end;
    end;
    return tekst_artykulu;
end;
function p.ZbieranieInformacji(self,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, czy_artukul_korzystany,tabela_listy_danych_analizy_ksiazki2,linkobiekt)
   if(not czy_artukul_korzystany)then
   	 if(self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki and self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu)then
   	   if((self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki==nazwa_ksiazki)and(self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu==nazwa_artykulu))then
   	        return 0; 
   	  else
   	  	  if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci)then
   	  	       self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=true;
   	  	  end;
   	  end;
   	else
   		return nil;
   	end;
   end;
   local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
   if((nazwa_przestrzeni~=nazwy_np_modul.Main)
   	    and(nazwa_przestrzeni~=nazwy_np_modul.Wikijunior)
   	        and((nazwa_przestrzeni~=nazwy_np_modul.User)or(not mw.ustring.match(nazwa_ksiazki,"^[^/]+/(.-)$")))
   	          and((nazwa_przestrzeni~=nazwy_np_modul.Wikibooks)or(not mw.ustring.match(nazwa_ksiazki,"^%s*[Bb]rudnopis/[^/]+/(.-)$")))
   	        )then
        p:DodawanieElementowDoTablicy("strony_poza_zakresem_obslugiwanym",nil,nazwa_przestrzeni,nazwa_ksiazki)
   end;
   local parametry_modul=require("Module:Parametry");
   if(self.tabela_listy_danych_analizy_ksiazki)then
      if(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu)then
      	local tabela_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni];
      	if(tabela_przestrzeni)then
      		local tabela_ksiazka=tabela_przestrzeni[nazwa_ksiazki];
        	if(tabela_ksiazka)then
        		local lista_artykolow=tabela_ksiazka.lista_artykolow;
        		if(lista_artykolow)then
         			local tabela_artykul=lista_artykolow[nazwa_artykulu];
         			if(tabela_artykul)then
         				local uchwyty_i_numeracje=tabela_artykul.uchwyty_i_numeracje;
         				if(uchwyty_i_numeracje)then
         	    			return 0;
         				end;
     	    		end;
         		end;
        	end;
        end;
      else	
        return nil; 
      end;
    else 
       return nil; 
   end;
    if(czy_artukul_korzystany)then 
   	  if((not self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki)and(not self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu))then
   	  	self.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni;
   	    self.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki=nazwa_ksiazki;
   	    self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu=nazwa_artykulu;
   	  end;
    end;
    local nazwa_modolu=(nazwa_przestrzeni=="")and ((nazwa_artykulu=="")and nazwa_ksiazki or nazwa_ksiazki.."/"..nazwa_artykulu) 
                                                  or nazwa_przestrzeni..":"..((nazwa_artykulu=="")and nazwa_ksiazki or nazwa_ksiazki.."/"..nazwa_artykulu);
 	local tekst_rozwiniety_calego_artykulu=p:SpreparowanyWikikodStrony(nazwa_modolu);
 	if(not tekst_rozwiniety_calego_artykulu)then return 0;end;

-- przydzielanie tablicy
   if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni])then self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni]={};end;
   local tablica_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni];
   
   if(not tablica_przestrzeni[nazwa_ksiazki])then tablica_przestrzeni[nazwa_ksiazki]={};end;
   local tablica_ksiazki=tablica_przestrzeni[nazwa_ksiazki];
   
   if(not tablica_ksiazki.lista_artykolow)then tablica_ksiazki.lista_artykolow={};end;
   if(not tablica_ksiazki.lista_artykolow[nazwa_artykulu])then tablica_ksiazki.lista_artykolow[nazwa_artykulu]={};end;
   
   local artykul_analizowany=tablica_ksiazki.lista_artykolow[nazwa_artykulu];
   
   local tablica_ksiazki=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki];
   if(czy_artukul_korzystany)then
		artykul_analizowany.artykul_biezacy=true;
		tablica_ksiazki.ksiazka_analizowana=true;
   end;							
--koniec

    local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}");
    if(not tabela_listy_danych_analizy_ksiazki2)then tabela_listy_danych_analizy_ksiazki2={};end;
    local obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
    for _,element_w_tablicy_obiekt in pairs(obiekty_modul.tablica_obiektow)do
    	local wartosc=element_w_tablicy_obiekt[1];
    	tabela_listy_danych_analizy_ksiazki2[wartosc]={};
    	if(czy_artukul_korzystany)then linkobiekt[wartosc]={};end;
    end;
    local strona;
    if(czy_artukul_korzystany)then 
    	strona="";
    else
    	strona=((nazwa_przestrzeni~="")and (nazwa_przestrzeni..":") or "")..nazwa_ksiazki..((nazwa_artykulu~="")and "/"..nazwa_artykulu or "")
    end;
    local function InneInformacjePrzebneDoAnalizowanejKsiazki()
       	if(not (p:Czy_jest_taki_element_w_tabeli_wynikow("strony_poza_zakresem_obslugiwanym",nazwa_przestrzeni, nazwa_ksiazki)))then
    		if((nazwa_przestrzeni)and(nazwa_ksiazki))then
    			local czy_ksiazka_istnieje_w_tablicy=false;
    			local tabela_ksiazek=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni];
        		if(tabela_ksiazek)then
        			for nazwa_ksiazki_i,tablica_spisu in pairs(tabela_ksiazek) do
                		if(nazwa_ksiazki_i==nazwa_ksiazki)then
                			if(tablica_spisu.spis)then
                    			czy_ksiazka_istnieje_w_tablicy=true;
                    			break;
                    		end;
            			end;
            		end;
        		end;
        		if(not czy_ksiazka_istnieje_w_tablicy)then
     				local tabela_wstepnych_informacji=p:ZbierajJakieSaArtykulyIInformacjeOLicencji(nazwa_przestrzeni,nazwa_ksiazki,czy_artukul_korzystany);
     				if(tabela_wstepnych_informacji==0)then 
     					if(czy_artukul_korzystany)then
	     					self.tabela_listy_danych_analizy_ksiazki.problemy.korzystane_strona_glowna_nie_istnieje=0;
    	 				else
     						p:DodawanieElementowDoTablicy("doloczone_strony_glowne_nie_istnieja",nil,nazwa_przestrzeni,nazwa_ksiazki);
     					end;
     				else
     					if(tabela_wstepnych_informacji)then 
     						if(czy_artukul_korzystany)then
     							tablica_ksiazki.spis=tabela_wstepnych_informacji[1];
     	 					    self.tabela_listy_danych_analizy_ksiazki.licencja=tabela_wstepnych_informacji[2];
     	 						if(not tabela_wstepnych_informacji[1])then
     	 							if(not self.tabela_listy_danych_analizy_ksiazki.problemy.brak_spisow_tresci_do_korzystanych_ksiazek_na_ich_stronach_glownych)then 
     	 					    		if(((self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu=="")and(nazwa_artykulu~=""))or(self.tabela_listy_danych_analizy_ksiazki.nazwa_artykulu~=""))then
	     	 		   						self.tabela_listy_danych_analizy_ksiazki.problemy.brak_spisow_tresci_do_korzystanych_ksiazek_na_ich_stronach_glownych=0;
    	 	 		   					end;
     		 						end;
     	 						end;
      						else 
     							tablica_ksiazki.spis=tabela_wstepnych_informacji;
    						end;
    					else
    						if(czy_artukul_korzystany)then
    							if(not self.tabela_listy_danych_analizy_ksiazki.problemy.blad_wewnetrzny_modulu_lua_stronicowego_parsera)then
    								self.tabela_listy_danych_analizy_ksiazki.problemy.blad_wewnetrzny_modulu_lua_stronicowego_parsera=0;
    							end;
    						else
                				p:DodawanieElementowDoTablicy("brak_spisow_tresci_do_doloczonych_ksiazek_na_ich_stronach_glownych",nil,nazwa_przestrzeni,nazwa_ksiazki);
    						end;
    					end;
     				end;
				end;
    		end;
    	end;
    end;
    local LiczOperacjeStronZbiorczych=function()
    	local nazwy_modul=require("Module:Nazwy");
	    local AnalizaStronZbiorczych=function()
			local function CzyStronaSubst()
  	    		if(not self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"])then
  	    			self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak";
  	    		end;
  	    	end;
  	    	local function StronaSubstParametr(tab_strona,link,p)
  	    		local strona;local id;
  	    		if(type(tab_strona)=="table")then strona=tab_strona[2];id=tab_strona[1];else strona=tab_strona;end;
				local str="<div style=\"display:block;\" class=\"rozdział_książki\">\n";
				local parametry_modul=require("Module:Parametry");
				local czy_link=parametry_modul.CzyTak(link);
				local adres=((nazwa_przestrzeni~="")and (nazwa_przestrzeni..":")  or "")..nazwa_ksiazki.."/"..(id and id or strona);
				p=p or 1;
				p=(p<1)and 1 or p;
				p=(p<=6)and p or 6;
				if(not czy_link)then
					local kotwica="";
					if(id)then
						id,_=mw.ustring.gsub(id,"^[%s_]*","");
						id,_=mw.ustring.gsub(id,"[%s_]*$","");						
						id,_=mw.ustring.gsub(id,"[%s_]+","_");	
						kotwica="<span id=\""..id.."\"></span>";
					end;
					str=str..mw.ustring.rep("=",p)..kotwica..(mw.ustring.match(strona,"/([^/]+)$") or strona)..mw.ustring.rep("=",p).."\n";
				else
					local linki_modul=require("Module:Linki");
	            	local str_link=linki_modul["Link wewnętrzny"]{
	                	  ["strona"]=adres,
	                	  ["nazwa"]=(mw.ustring.match(strona,"/([^/]+)$") or strona),
	            	};
	                local kotwica="";
	            	if(id)then
						id,_=mw.ustring.gsub(id,"^[%s_]*","");
						id,_=mw.ustring.gsub(id,"[%s_]*$","");						
						id,_=mw.ustring.gsub(id,"[%s_]+","_");	
						kotwica="<span id=\""..id.."\"></span>";
					end;
					str=str..mw.ustring.rep("=",p)..kotwica..str_link..mw.ustring.rep("=",p).."\n";
				end;
				str=str.."<div class=\"strona_subst\">"..((not czy_link) and (adres) or "").."</div>\n";
				str=str.."</div>";
				return str;
			end;
  	    	local function StronaSubst(ciag)
  	    		local techniczne_modul=require("Module:Techniczne");
            	local parametry=techniczne_modul["ParsujWywołanieSzablonu"](ciag);
            	local strona=parametry[1];
            	local link=parametry["link"];
            	local parametry_modul=require("Module:Parametry");
            	local czy_link=parametry_modul.CzyTak(link);
            	if(self.tabela_listy_danych_analizy_ksiazki["StronaSubst"] 
                	 and self.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona]
	                	 and self.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona][(czy_link and "tak" or "")]
    	    	)then 
        	    	return self.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona][(czy_link and "tak" or "")];
            	end;
            	local str=StronaSubstParametr(strona,link);
            	if(not self.tabela_listy_danych_analizy_ksiazki["StronaSubst"])then
                	  self.tabela_listy_danych_analizy_ksiazki["StronaSubst"]={};
            	end;
            	if(not self.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona])then
                	self.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona]={};
            	end;
            	self.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona][(czy_link and "tak" or "")]=str;
            	return str;
  	    	end;
  	    	function AnalizujArtykulyRozdzialu(tab_lista_artykulow_w_ksiazce,substrona)
  				for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
					local rozdzial=tab_lista[1][1];
					if(substrona==rozdzial)then
						local function KsiazkaRozdzialSubst(ciag)
							if(tab_lista[2])then
								local wikikod="";
  								for _,strona in ipairs(tab_lista[2])do
  									wikikod=((wikikod~="")and (wikikod.."\n") or "")..StronaSubstParametr(strona[1]);
  								end;
  								self.tabela_listy_danych_analizy_ksiazki["KsiążkaSubst"]=wikikod;
  								return wikikod;
							end;
  							return "";
						end;
						tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{StronaSubst|[^{}]+}})",StronaSubst);
  						tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{KsiążkaSubst}})",KsiazkaRozdzialSubst);
  						CzyStronaSubst();
                		break;       
  					end;
  				end;
  			end;
  	    	function AnalizujKsiazka(tab_lista_artykulow_w_ksiazce)
  	    		local function KsiazkaCalaSubst(ciag)
    				local wikikod="";
    				local delta_p=0;
    				local stronicowyparser_dalszefunkcje2_modul=require("Module:StronicowyParser/DalszeFunkcje2");
    				local HNumer=stronicowyparser_dalszefunkcje2_modul.LiczonyHNumer();
     	            for _,tab_lista in pairs(tab_lista_artykulow_w_ksiazce)do
     	                local rozdzial=tab_lista[1][1];
     	                wikikod=wikikod.."<div class=\"klasa_naglowka\">";
     	                local p=tab_lista[1][2];
						if((rozdzial)and(type(rozdzial)=="string")and(rozdzial~="Spis treści")and(rozdzial~="Bibliografia")and(rozdzial~="Zobacz też")and(rozdzial~="Inne")and(rozdzial~="Licencja")
						)then
     	                    local p_uzyskane=HNumer(p);
							wikikod=((wikikod~="")and (wikikod.."\n") or "").."\n"..mw.ustring.rep("=",p_uzyskane)..rozdzial..mw.ustring.rep("=",p_uzyskane).."\n";
							p=p+1;
						end;
						if(tab_lista[2])then
  							for _,strona in ipairs(tab_lista[2])do
  								local roznica=((strona[2]>0) and (strona[2]-1) or 0);
  								local p_roznica=p+roznica;
  								local p_uzyskane=HNumer(p_roznica);
  				        		wikikod=((wikikod~="")and (wikikod.."\n") or "")..StronaSubstParametr(strona[1],nil,p_uzyskane);
  							end;
						end;
  						wikikod=wikikod.."</div>";
     	               end;
     	               self.tabela_listy_danych_analizy_ksiazki["KsiążkaSubst"]=wikikod;
      					return wikikod;
    					end;
    				tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{StronaSubst|[^{}]+}})",StronaSubst);
  					tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{KsiążkaSubst}})",KsiazkaCalaSubst);
  					CzyStronaSubst();
  	    		end;
  				local stronicowyparser_dalszefunkcje2_modul=require("Module:StronicowyParser/DalszeFunkcje2");
  				local NieFun=function(parametr) return "";end;
  				local TakFun=function(tab_lista_artykulow_w_ksiazce)
  				    AnalizujKsiazka(tab_lista_artykulow_w_ksiazce);
  				    return "tak";
  				end;
  				local FunRozdzial=function(tab_lista_artykulow_w_ksiazce,substrona)
  				    AnalizujArtykulyRozdzialu(tab_lista_artykulow_w_ksiazce,substrona);
  				    return "tak";
  				end;
  				stronicowyparser_dalszefunkcje2_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,nil,TakFun,NieFun,FunRozdzial);
  			    return "tak";
		end;
		local val=AnalizaStronZbiorczych();
    end;
    function StronaZbiorcza()
    	 if(czy_artukul_korzystany)then 
    	 	    local stronicowyparser_dalszefunkcje2_modul=require("Module:StronicowyParser/DalszeFunkcje2");
                local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end;
                return stronicowyparser_dalszefunkcje2_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,nil,TakFun,NieFun,nil);
    	 end;
    	 return nil;
    end;
    InneInformacjePrzebneDoAnalizowanejKsiazki();
    local toc;
    if((not czy_artukul_korzystany)and(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone))then
    	toc=p:SpisTresciWstep(tekst_rozwiniety_calego_artykulu,strona,tabela_listy_danych_analizy_ksiazki2["Nagłówkuj"],nazwa_przestrzeni,nazwa_ksiazki,czy_artukul_korzystany);
    end;
    local uzyskano_w_wyniku_parsowania_wywolanie_szablonu;
    
    local analiza_stron_korzystanych_zbiorczych=nil;
    local strona_zbiorcza=StronaZbiorcza();
    local stronastart=nil;
    
    for uzyskano_w_wyniku_parsowania_wywolanie_szablonu in iterator do
    	local function AnalizaParametrowSzablonuISzablonu(tabela_parametrow_szablonu,uzyskano_w_wyniku_parsowania_wywolanie_szablonu)
    		if(czy_artukul_korzystany)then
    			if(tabela_parametrow_szablonu)then
    				if((not stronastart)and(self.tabela_listy_danych_analizy_ksiazki.formatowanie==nil))then
    					if(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ss]tronaStart$")~=nil)then
        					self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
        				    stronastart=true;
        					return;
    					elseif((mw.ustring.match(tabela_parametrow_szablonu[0],"^[Uu]nikatowaStronaStart$")~=nil)
    						or(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ss]tandardowaStronaStart$")~=nil)
    						or(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Pp]odstawowaStronaStart$")~=nil)    		
    						or(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Pp]rostaStronaStart$")~=nil)    		
    					)then
    						self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
    						stronastart=true;
    						return;
    					elseif(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ss]komplikowanaStronaStart$")~=nil)then
    						self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
    						self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
    						stronastart=true;
    						return;
    					elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and((mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ss]tronaSubst$")~=nil)
    					    or(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Kk]siążkaSubst$")~=nil)))then
    						    analiza_stron_korzystanych_zbiorczych=true;
    						    return;
    					end;
    				elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and((mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ss]tronaSubst$")~=nil)
    					    or(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Kk]siążkaSubst$")~=nil)))then
    						    analiza_stron_korzystanych_zbiorczych=true;
    						    return;
    				end;
    			end;
    		end;
    		
    		local plik=mw.ustring.match(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,"^{{:([^:|{}]-)}}$");
        	if(plik==nil)then
        		if(tabela_parametrow_szablonu)then
            		if(not parametry_modul.CzyTak(tabela_parametrow_szablonu["bez automatu"]))then
            			local czy_wypowiedzenie=mw.ustring.match(tabela_parametrow_szablonu[0],"^[wW]ypowiedzenie$");
            			local linkobiekt2;
            			local link;
            			if(czy_wypowiedzenie)then 
            				linkobiekt2=false;
            				link=false;
            			else
            				linkobiekt2=mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ll]inkObiekt$");
            				if(linkobiekt2)then
            					link=true;
            				else
            					link=mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ll]ink");
            				end;
            			end;
            			local czy_obsluzone=true;
            			local funkcja_aliasow=function(nazwa_szablonu,elementy_w_tablicy_obiekty)
            				local wzor_nazwy_szablonu1=mw.ustring.gsub(elementy_w_tablicy_obiekty[1],"^(.)",function(s)return "["..mw.ustring.upper(s)..mw.ustring.lower(s).."]";end);
               	    		local czy_aliasy=mw.ustring.match(tabela_parametrow_szablonu[0],"^"..wzor_nazwy_szablonu1.."$");
               	    		if(not czy_aliasy)then
               	    	    	if(elementy_w_tablicy_obiekty[2])then
               	    	    		if(type(elementy_w_tablicy_obiekty[2])=="table")then
               	    					for _,alias in pairs(elementy_w_tablicy_obiekty[2])do
               	    	    				local wzor_nazwy_szablonu2=mw.ustring.gsub(alias,"^(.)",function(s)return "["..mw.ustring.upper(s)..mw.ustring.lower(s).."]";end);
               	    	    				czy_aliasy=mw.ustring.match(tabela_parametrow_szablonu[0],"^"..wzor_nazwy_szablonu2.."$");
               	    	    				if(czy_aliasy)then
               	    	    					break;
               	    	    				end;
               	    					end;
               	    				else
               	    	    			local wzor_nazwy_szablonu2=mw.ustring.gsub(elementy_w_tablicy_obiekty[2],"^(.)",function(s)return "["..mw.ustring.upper(s)..mw.ustring.lower(s).."]";end);
               	    	    			czy_aliasy=mw.ustring.match(tabela_parametrow_szablonu[0],"^"..wzor_nazwy_szablonu2.."$");
           	        				end;
               	        		end;
               	        	end;
       	        	    	return czy_aliasy;
            			end;
            			for _,elementy_w_tablicy_obiekty in pairs(obiekty_modul.tablica_obiektow_bez_obiektu_nienazwanego)do
              				local wartosc_elementu=elementy_w_tablicy_obiekty[1];
              				if(not link)then
              					if(not obiekty_modul.nienumerowane_z_uchwytami_szablony_naglowka[wartosc_elementu])then
           	        				czy_aliasy=czy_wypowiedzenie or funkcja_aliasow(tabela_parametrow_szablonu[0],elementy_w_tablicy_obiekty);
              						if(czy_aliasy)then
              			    			if((not czy_wypowiedzenie)
              			    		    	     or((czy_wypowiedzenie)and(
              			    		        	     	 (tabela_parametrow_szablonu["rodzaj"]==wartosc_elementu)
              			    		            	 	))
              			    			)then
              								p:ObsluzSzablonWzor(tabela_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki2, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,wartosc_elementu, czy_artukul_korzystany,elementy_w_tablicy_obiekty[5]);
              					    		czy_obsluzone=false;
              								if(czy_artukul_korzystany)then
              						    		if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              						      			local uchwyt_obiektu= tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[elementy_w_tablicy_obiekty[5]];
              						        		if(uchwyt_obiektu and not mw.ustring.match(uchwyt_obiektu,"^%s*$"))then
              						      	  			self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
              						        		end;
              						    		end;			
              								end;
              								break;
              			    			end;
              						end;
              					else
              						self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
              					end;
              				elseif(czy_artukul_korzystany)then
              					if(link)then
              						local funkcja_aliasow_2=function(zmienna)
              								if(wartosc_elementu~=zmienna)then return false;end;
            								local wzor_nazwy_szablonu1="[Ll]ink"..wartosc_elementu;
               	    						local czy_aliasy=mw.ustring.match(tabela_parametrow_szablonu[0],"^"..wzor_nazwy_szablonu1.."$");
               	    						local szablon;
               	    						if(not czy_aliasy)then
               	    	    					if(elementy_w_tablicy_obiekty[3])then
               	    	    						if(type(elementy_w_tablicy_obiekty[3])=="table")then
               	    									for _,alias in pairs(elementy_w_tablicy_obiekty[3])do
               	    	    								local wzor_nazwy_szablonu2=mw.ustring.gsub(alias,"^(.)",function(s)return "["..mw.ustring.upper(s)..mw.ustring.lower(s).."]";end);
               	    	    								czy_aliasy=mw.ustring.match(tabela_parametrow_szablonu[0],"^"..wzor_nazwy_szablonu2.."$");
               	    	    								if(czy_aliasy)then
               	    	    									szablon=alias
               	    	    									break;
               	    	    								end;
               	    									end;
               	    								else
               	    	    							local wzor_nazwy_szablonu2=mw.ustring.gsub(elementy_w_tablicy_obiekty[3],"^(.)",function(s)return "["..mw.ustring.upper(s)..mw.ustring.lower(s).."]";end);
               	    	    							czy_aliasy=mw.ustring.match(tabela_parametrow_szablonu[0],"^"..wzor_nazwy_szablonu2.."$");
               	    	    							if(czy_aliasy)then szablon=elementy_w_tablicy_obiekty[3];end;
               	    	    						end;
       	        								end;
           	        						else
           	        							szablon="Link"..wartosc_elementu;
               	        					end;
       	        	    					return czy_aliasy,szablon;
            							end;
              							if(not obiekty_modul.nienumerowane_z_uchwytami_szablony_naglowka[wartosc_elementu])then
              								local typ=mw.getContentLanguage():lcfirst(wartosc_elementu);
              								local alias,szablon=funkcja_aliasow_2(wartosc_elementu);
              								if((alias)or((linkobiekt2)and(tabela_parametrow_szablonu["typ"]==typ)))then
              									p:LinkowanieOgolnie(tabela_listy_danych_analizy_ksiazki2,tabela_parametrow_szablonu,wartosc_elementu, linkobiekt);
              									
              									if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              										local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1];
              										self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=((alias)and szablon or "LinkObiekt")..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
              									end;
          				    		    		czy_obsluzone=false;
              									break;
              								end;
              							else
              								local alias,szablon=funkcja_aliasow_2("Nagłówkuj");
              								if(alias)then
              									self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
              									self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
              									
              									p:LinkowanieOgolnie(tabela_listy_danych_analizy_ksiazki2,tabela_parametrow_szablonu,"Nagłówkuj", linkobiekt);
              									
              									self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
              									if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
              										self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
              										self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
              									else
              										self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
              									end;
              									czy_obsluzone=false;
              									if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              										local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[elementy_w_tablicy_obiekty[5]];
              										self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=szablon..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
              				    				end;
              									break;
              								end;
              							end;
              						end;
              					end;
            				end;
            				if(czy_obsluzone)then
                				if(czy_wypowiedzenie)then
		               				p:ObsluzSzablonWzor(tabela_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki2,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artukul_korzystany,obiekty_modul.obiekty[5]);
		               				if(czy_artukul_korzystany)then
              							if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              				    			 local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[obiekty_modul.obiekty[5]];
              				    			self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Obiekt"..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
              							end;			
          			    			end;
               					elseif(czy_artukul_korzystany)then
               						if(linkobiekt2)then
               							p:LinkowanieOgolnie(tabela_listy_danych_analizy_ksiazki2,tabela_parametrow_szablonu,"Obiekt", linkobiekt);
               							if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              								local uchwyt_obiektu=tabela_parametrow_szablonu[elementy_w_tablicy_obiekty[1]] or tabela_parametrow_szablonu["uchwyt"];
              			    				self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Link"..wartosc_elementu..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
       	        						end;
       	        					else
       	        						for wartosc_elementu,_ in pairs(obiekty_modul.bez_uchwytow_spis_tresci)do
              								local wzor_artykolow_ksiazek=mw.ustring.gsub(wartosc_elementu,"^(.)",function(s)return "["..mw.ustring.upper(s)..mw.ustring.lower(s).."]";end)
              								if(mw.ustring.match(tabela_parametrow_szablonu[0],"^"..wzor_artykolow_ksiazek.."$"))then
              									self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=true;
              									self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
              									p:ZbieranieInformacjiArtykolowKsiazek(tabela_parametrow_szablonu);
              									self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci=nil;
              									if(not self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone)then
              										self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane=true;
              										self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
              									else
              										self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_doloczone=nil;
              									end;
              									
              									if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              										local nazwa_ksiazki=tabela_parametrow_szablonu["nazwa książki"] or tabela_parametrow_szablonu[2] or "";
              										local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1] or "";
              										self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="ArtykułKsiążki:"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "")
              									end;
              			    				end;
                						end;
                					
                						for wartosc_elementu,_ in pairs(obiekty_modul.szablony_pudelka)do
              								local wzor_szablonu_pudelka=mw.ustring.gsub(wartosc_elementu,"^(.)",function(s)return "["..mw.ustring.upper(s)..mw.ustring.lower(s).."]";end)
              								if(mw.ustring.match(tabela_parametrow_szablonu[0],"^"..wzor_szablonu_pudelka.."$"))then
              									p:ZbieranieInformacjiPudelek(tabela_parametrow_szablonu);
              									if(not self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              										local nazwy_modul=require("Module:Nazwy");
              										local nazwa_przestrzeni=tabela_parametrow_szablonu["nazwa przestrzeni nazw"] or "";
              										local nazwa_jednostki=tabela_parametrow_szablonu["nazwa jednostki"] or "";
              										local nazwa_symulacyjnej_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_jednostki;
              										local uchwyt=tabela_parametrow_szablonu[0]..":"..nazwa_symulacyjnej_strony;
              										self.tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=uchwyt;
              									end;
              			    				end;
                						end;
                				end;
                			end;
                		end;
            		end;
        		end;
        	end; 
    	end;
    	p.AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,AnalizaParametrowSzablonuISzablonu);
    end;
   tablica_ksiazki.lista_artykolow[nazwa_artykulu].uchwyty_i_numeracje=tabela_listy_danych_analizy_ksiazki2;
   
   if(czy_artukul_korzystany)then
   	   if(analiza_stron_korzystanych_zbiorczych)then
	   		LiczOperacjeStronZbiorczych();
	   		mw.log('To jest strona zbiorcza.')
	   end;	
   	   if(self.tabela_listy_danych_analizy_ksiazki.analiza_spis_tresci_korzystane)then
    		toc=p:SpisTresciWstep(tekst_rozwiniety_calego_artykulu,strona,tabela_listy_danych_analizy_ksiazki2["Nagłówkuj"],nazwa_przestrzeni,nazwa_ksiazki,czy_artukul_korzystany);
    		mw.log("Liczę spis treści artykułów korzystanych.");
   	   end;
   	   self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykolu=tabela_listy_danych_analizy_ksiazki2;
   	   self.tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki=self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki];
   end;
   
   tablica_ksiazki.lista_artykolow[nazwa_artykulu].TOC=toc;
   return self.tabela_listy_danych_analizy_ksiazki;
end;
function p.AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,__Funkcja, __Funkcja2)
	uzyskano_w_wyniku_parsowania_wywolanie_szablonu=mw.ustring.gsub(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,"\n+","");
	local tab_wywolania={};
	local function GlownaFunkcja(wywolanie,oznaczenie_szablonu)
		local techniczne_modul=require("Module:Techniczne");
    	local tabela_parametrow_szablonu=techniczne_modul["ParsujWywołanieSzablonu"](wywolanie);
    
       __Funkcja(tabela_parametrow_szablonu,wywolanie);
    
    	if(__Funkcja2)then
    		__Funkcja2(oznaczenie_szablonu,wywolanie,tabela_parametrow_szablonu,uzyskano_w_wyniku_parsowania_wywolanie_szablonu);
    	end;
    	local stronicowyparser_dalszefunkcje2_modul=require("Module:StronicowyParser/DalszeFunkcje2");
    	for parametrs,wartosc in pairs(tabela_parametrow_szablonu) do
    		local __min,__max=stronicowyparser_dalszefunkcje2_modul.MinMaxSzablon(wartosc);
    		if((__min~=nil)and(__max~=0)and(__max>=__min))then
    			for ss=__max,__min,-1 do
    				local parametr2,ile=mw.ustring.gsub(wartosc,stronicowyparser_dalszefunkcje2_modul.OgolnyWzor(ss),stronicowyparser_dalszefunkcje2_modul.AnalizaSzablonu(ss));
    				if((ile)and((tonumber(ile) or 0)>0))then
    					local iterator2=mw.ustring.gmatch(parametr2,"{{[^{}]+}}");
    					for wywolanie in iterator2 do
    						if(not tab_wywolania[ss])then
								GlownaFunkcja(wywolanie,ss);
							end;
    					end;
    					if(not tab_wywolania[ss])then
    				    	tab_wywolania[ss]=true;
    				    end;
    				end;
    	    	end;
    		end;
    	end;
	end;
    GlownaFunkcja(uzyskano_w_wyniku_parsowania_wywolanie_szablonu);
 end;
function p.SprawdzLinki(self,tabela_listy_danych_analizy_ksiazki2,link_obiekt_lub_wypowiedzenie, nazwa_obiektu1, nazwa_obiektu2, nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu)
    if((not self.tabela_listy_danych_analizy_ksiazki.problemy.bledy_uchwytow_korzystanych_stron[nazwa_obiektu2])or(nazwa_artykulu==""))then
    	for _, elementy_w_tablicy_obiekt_lub_wypowiedzenie in ipairs(link_obiekt_lub_wypowiedzenie) do
   			local czy_uchwyty_nie_sa_ponumerowane=true;
    		for _, elementy_w_tablicy_obiekt_lub_wypowiedzenie2 in ipairs(tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu1]) do
            	if(elementy_w_tablicy_obiekt_lub_wypowiedzenie==elementy_w_tablicy_obiekt_lub_wypowiedzenie2[1])then
               		if(elementy_w_tablicy_obiekt_lub_wypowiedzenie2[2])then
               			czy_uchwyty_nie_sa_ponumerowane=false;
                		break;
                    end;
            	end;
    		end;
        	if(czy_uchwyty_nie_sa_ponumerowane)then
        		local czy_tylko_ze_znakami_odstepu_lub_puste=mw.ustring.match(elementy_w_tablicy_obiekt_lub_wypowiedzenie,"^%s*$");
        		if(czy_tylko_ze_znakami_odstepu_lub_puste)then
        	    	if(not self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu1][1]) then
                		self.tabela_listy_danych_analizy_ksiazki.problemy.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu1][1]=0;
                	end;
                	return;
        		elseif(self.tabela_listy_danych_analizy_ksiazki.problemy.bledy_uchwytow_korzystanych_stron[nazwa_obiektu2]==nil)then
            		self.tabela_listy_danych_analizy_ksiazki.problemy.bledy_uchwytow_korzystanych_stron[nazwa_obiektu2]=0;
                    return;
            	end;
        	end;
    	end;
    end;
end;
function p.PrzetworzMozliweWszystkieRodzajeObiektow(self, dane_artykulu,biezacy_artykul,numer_artykulu_w_ksiazce,obiekty_modul,__Funkcja)
   for _,element_w_podtablicy_kategorii_bledow in pairs(obiekty_modul.tablica_obiektow)do
   	    local element_obiekty=element_w_podtablicy_kategorii_bledow[1];
		tabela_listy_danych_analizy_ksiazki=p:Sprawdzanie_i_numerowanie(dane_artykulu,biezacy_artykul,element_obiekty,numer_artykulu_w_ksiazce,obiekty_modul,__Funkcja);
   end;
end;
function p.PrzetworzZebraneInformacje(self,tabela_listy_danych_analizy_ksiazki2,linkobiekt,nazwa_przestrzeni2,nazwa_ksiazki2,nazwa_artykulu2)
	 local obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
	 local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
	 for nazwa_przestrzeni,tablica_nazw_ksiazek in pairs(self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu)do
		for nazwa_ksiazki,tablica_nazw_artykulow in pairs(tablica_nazw_ksiazek)do
	 		local nazwa_przestrzeni_nazw_strony=require("Module:Nazwy")["NAZWAPRZESTRZENI"](nazwa_ksiazki);
    		for nazwa_artykulu, dane_artykulu in pairs(tablica_nazw_artykulow.lista_artykolow) do
    		    local biezacy_artykul=dane_artykulu.artykul_biezacy;
    			local numer_obiektu_w_ksiazce=1;local czy_da_sie_numerowac_obiekty_ze_spisem_tresci =false;
    			if(nazwa_ksiazki)then
    				if(nazwa_artykulu=="")then 
    					 czy_da_sie_numerowac_obiekty_ze_spisem_tresci=false;
    				else
     					local tab_ksiazki=tablica_nazw_artykulow.spis;
     					if(tab_ksiazki)then
     						for _,tab_rozdzialu in pairs(tab_ksiazki)do
     							if(tab_rozdzialu[2])then
     							 	for _,nazwa_artykulu1 in ipairs(tab_rozdzialu[2])do
     									if(nazwa_artykulu1[1]~=nazwa_artykulu)then 
	     									numer_obiektu_w_ksiazce=numer_obiektu_w_ksiazce+1;
     									else 
     										czy_da_sie_numerowac_obiekty_ze_spisem_tresci=true;break;
     									end;
     							 	end;
     							 end;
 	   							if(czy_da_sie_numerowac_obiekty_ze_spisem_tresci)then break;end;
     						end;	
 	   					end;
    				end;
     				local function Problemy_z_doloczonymi_uchywtami(nazwa_obiektu)
     				    p:DodawanieElementowDoTablicy("bledy_uchwytow_doloczonych_stron",nazwa_obiektu,nazwa_przestrzeni,nazwa_ksiazki);
     				end;
     				if(czy_da_sie_numerowac_obiekty_ze_spisem_tresci)then
     					p:PrzetworzMozliweWszystkieRodzajeObiektow(dane_artykulu,biezacy_artykul,numer_obiektu_w_ksiazce,obiekty_modul,Problemy_z_doloczonymi_uchywtami);
    				elseif(not czy_da_sie_numerowac_obiekty_ze_spisem_tresci)then
            			p:PrzetworzMozliweWszystkieRodzajeObiektow(dane_artykulu,biezacy_artykul,0,obiekty_modul,Problemy_z_doloczonymi_uchywtami);
     	    		end;
    			else
            		   p:PrzetworzMozliweWszystkieRodzajeObiektow(dane_artykulu,biezacy_artykul,0,obiekty_modul,Problemy_z_doloczonymi_uchywtami);
    			end;
			end;
		end;
	 end;
    for _,obiekt in pairs(obiekty_modul.tablica_obiektow)do
     	local obiekt2=obiekt[1];
        p:SprawdzLinki(tabela_listy_danych_analizy_ksiazki2,linkobiekt[obiekt2],obiekt2,"Link"..obiekt2, nazwa_przestrzeni2,nazwa_ksiazki2,nazwa_artykulu2);
    end;
    return tabela_listy_danych_analizy_ksiazki;
end;
function p.Sprawdzanie_i_numerowanie(self, dane_artykulu, biezacy_artykul, nazwa_obiektu, numer_artykulu_w_ksiazce,obiekty_modul,__Funkcja)
	local parametry_modul=require("Module:Parametry");
	local tabela_obiektu=dane_artykulu.uchwyty_i_numeracje[nazwa_obiektu];
	
	if(obiekty_modul.nienumerowane_z_uchwytami_szablony_naglowka[nazwa_obiektu])then
		return tabela_listy_danych_analizy_ksiazki;
	end;
	
	for licznik,element_obiektu in pairs(tabela_obiektu)do
    	local czy_numerowac=true;
		for licznik2=1, licznik-1,1 do
   	    	if((tabela_obiektu[licznik2][1])and(element_obiektu[1]==tabela_obiektu[licznik2][1]))then
            	if(biezacy_artykul)then
            		if(not self.tabela_listy_danych_analizy_ksiazki.problemy.bledy_uchwytow_korzystanych_stron[nazwa_obiektu])then
                		self.tabela_listy_danych_analizy_ksiazki.problemy.bledy_uchwytow_korzystanych_stron[nazwa_obiektu]=0;
                	end;
            	else
					__Funkcja(nazwa_obiektu);
            	end;
            	tabela_obiektu[licznik2][1]=nil;
            	czy_numerowac=false;
        	end;
		end;
    	if(czy_numerowac)then
      		if(numer_artykulu_w_ksiazce>0)then
      			element_obiektu[2]=numer_artykulu_w_ksiazce.."."..licznik;
      		elseif(numer_artykulu_w_ksiazce==0)then
      			element_obiektu[2]=licznik
    		elseif(self.tabela_listy_danych_analizy_ksiazki.problemy.blad_wewnetrzny_modulu_lua_stronicowego_parsera==nil)then
            	self.tabela_listy_danych_analizy_ksiazki.problemy.blad_wewnetrzny_modulu_lua_stronicowego_parsera=0
      		end;	
    	end;
	end;
   return tabela_listy_danych_analizy_ksiazki;
end;
return p;