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="Szablon:Podręcznik/Ustawienia/"..((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 zastepczy=frame:expandTemplate{title=nazwa_szablonu.."/config",args={[1]="zastępczy",}};
        if(not mw.ustring.match(zastepczy,"^%s*$"))then
        	self.tabela_listy_danych_analizy_ksiazki.zastepczy=true;
        	local ksiazka=frame:expandTemplate{title=nazwa_szablonu.."/config",args={[1]="książka zastępcza",}};
        	local artykul=frame:expandTemplate{title=nazwa_szablonu.."/config",args={[1]="artykuł zastępczy",}};
        	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);
    				local ksiazka_normalna=frame:expandTemplate{title=nazwa_szablonu.."/config",args={[1]="książka",}};
        			local artykul_normalny=frame:expandTemplate{title=nazwa_szablonu.."/config",args={[1]="artykuł",}};
        			if(not mw.ustring.match(ksiazka_normalna,"^%s*$"))then
        				 local strona=ksiazka_normalna..((artykul_normalny~="") and ("/"..artykul_normalny) or "");
        				 local ile,_=techniczne_modul.PoliczZbiory{[1]=strona,};
        				 if(ile>0)then
        					self.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona);
        					self.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_ksiazki=ksiazkowe_modul["NazwaKsiążki"](strona);
    						self.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_artykulu=ksiazkowe_modul["NazwaArtykułuKsiążki"](strona);
    					end;
        			end;
    			end;
        	end;
        else
        	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;
    end;
    
    local tabela_listy_danych_analizy_ksiazki2={};
    local linkobiekt={};
    local tabela_listy_danych_analizy_ksiazki=p:ZbieranieInformacji(nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, true,tabela_listy_danych_analizy_ksiazki2,linkobiekt);
    local parametry_modul=require("Module:Parametry");
    if(parametry_modul.CzyTak{[1]=tabela_listy_danych_analizy_ksiazki,})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=nazwa_strony and mw.ustring.gsub(nazwa_strony,"(|)",function (s) return "&#"..tostring(mw.ustring.byte(s))..";";end) or nil;
    local tablica_spisu_tresci=nil;
    local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
    local HNumer=stronicowyparser_potrzebne_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);

    local numeracja;

    local function SzablonNaglowkujWNaglowkuRozdzialu(naglowek)
        local wywolanie_naglowek_iterator=mw.ustring.match(naglowek,"{{%s*Śródtytuł%s*}}") or mw.ustring.gmatch(naglowek,"{{%s*Śródtytuł%s*|[^{}]*}}");
        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="Śródtytuł:"..(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="Śródtytuł:"..(numeracja or "");
             			end;
             		end;
             	end;
             	break;
             end;
            powtorka=powtorka+1;
       end;
    end;
           
    local function SzablonNaglowkujWTekscieRozdzialu(text_rozdzialu)       		
        local jest_naglowkuj_w_tekscie_rozdzialu=mw.ustring.match(text_rozdzialu,"{{%s*Śródtytuł%s*}}") or mw.ustring.match(text_rozdzialu,"{{%s*Śródtytuł%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);
            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="Śródtytuł:"..(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="Śródtytuł:"..(numeracja or "");
             	end;
             end;
        end;
    end;
    for naglowek,text_rozdzialu,poziom_rozdzialu in iterator do
    	numeracja=nil;
    	if(self)then
			SzablonNaglowkujWNaglowkuRozdzialu(naglowek)
			SzablonNaglowkujWTekscieRozdzialu(text_rozdzialu);
        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,"<[^<>]+>","");
        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==nazwa_rozdzialu_w_artykule)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~=""))and (":"..nazwa_strony) or "").."#"..nazwa_rozdzialu_w_artykule,naglowek};
        else
            elementy_linku={(((nazwa_strony)and(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;
             
        if(poziom_rozdzialu>0)then
        	local numer_rozdzialu_ustalony=HNumer(poziom_rozdzialu);
        	tablica_powtarzajacych_sie_elementow[#tablica_powtarzajacych_sie_elementow+1]=nazwa_rozdzialu_w_artykule;  
        	if(tablica_spisu_tresci==nil)then tablica_spisu_tresci={};end;
        	tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony};
        end;
    end;
    if(self)then
    	if(czy_artukul_korzystany)then
			if(not self.tabela_listy_danych_analizy_ksiazki.problemy.naglowek_tekscie_rozdzialu_w_stronie_korzystanej)then
				local linia_poczatkowa=mw.ustring.match(tekst_artykulu,"^[^\n]+");
	 			if((linia_poczatkowa)and(mw.ustring.match(linia_poczatkowa,"^=+.+=+%s*")))then
	 				return tablica_spisu_tresci;
	 			end;
	 			local tekst_zerowy=mw.ustring.match(tekst_artykulu,"^(.-)\n=+[^=]+=+") or tekst_artykulu;
	 			SzablonNaglowkujWTekscieRozdzialu(tekst_zerowy);
	 		end;
		end;
	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,true);
   if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
   
   ----
	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*}}";
    local wywolanie_spis_tresci2="{{%s*(/[Ss]pis[%s_]+treści)%s*}}";
    
    local strona_ze_spisem_tresci=mw.ustring.match(tekst_rozwiniety_calego_artykulu,wywolanie_spis_tresci) 
    local strona_ze_spisem_tresci2=(not strona_ze_spisem_tresci) and mw.ustring.match(tekst_rozwiniety_calego_artykulu,wywolanie_spis_tresci2) or nil;
    if(strona_ze_spisem_tresci or strona_ze_spisem_tresci2)then
        local tekst_rozwiniety_calego_spisu_tresci=p.SpreparowanyWikikodStrony(nil,nazwa_modolu..strona_ze_spisem_tresci,true);
		if(tekst_rozwiniety_calego_spisu_tresci)then
    		tekst_rozwiniety_calego_spisu_tresci=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](tekst_rozwiniety_calego_spisu_tresci);
    		----
    		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.spis_tresci)then tablica_ksiazki.spis_tresci={};end;
			tablica_ksiazki.spis_tresci.tekst=tekst_rozwiniety_calego_spisu_tresci;
			if(not tablica_ksiazki.spis_tresci.wywolanie)then tablica_ksiazki.spis_tresci.wywolanie={};end;
			tablica_ksiazki.spis_tresci.wywolanie[1]=wywolanie_spis_tresci;
			tablica_ksiazki.spis_tresci.wywolanie[2]=wywolanie_spis_tresci2;
    		----
    		local wywolanie=strona_ze_spisem_tresci and wywolanie_spis_tresci or wywolanie_spis_tresci2;
			tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,wywolanie,tekst_rozwiniety_calego_spisu_tresci);
		end;
	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 nazwy_modul=require("Module:Nazwy");
   local stronicowyparser_modul=require("Module:StronicowyParser");
   
    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 stronicowyparser_informacje=mw.loadData("Module:StronicowyParser/obiekty");
	local jakie_nie_rozdzialy=stronicowyparser_informacje.tab_rozdzialow_pomijanych_w_rozwazaniach_na_stronach_glownych_ksiazek;
	local jakie_spisy_tresci=stronicowyparser_informacje.tab_rozdzialow_glownych_spisow_tresci_ksiazek;
	
    local wyrazenie_regularne="(&#123;&#123;[&#;!%(%)]+&#125;&#125;)";
    
    local numer_rozdzialu_w_ksiazce=1;
    local parametry_modul=require("Module:Parametry");
    local html_modul=require("Module:Html");
    
    local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne")
    
    local czy_jest_spis_tresci=nil;
    local poziom_spisu_tresci=nil;
    local dalej_nie_rozwazaj_spis_tresci=nil;
    local wliczaj_artykuly_tego_rozdzialu=nil;
    
    local function AnalizaRozdzialu(rozdzial,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja)
    	
    	rozdzial,_=mw.ustring.gsub(rozdzial,"{{[^|{}]+|([^|{}]+)[^{}]*}}","%1");
    	if((not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[rozdzial]))then
    		poziom_spisu_tresci=poziom_rozdzialu;
    		czy_jest_spis_tresci=true;
    	elseif((czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci))then
    		if(poziom_spisu_tresci<poziom_rozdzialu)then
    			wliczaj_artykuly_tego_rozdzialu=true;
    		else
    			wliczaj_artykuly_tego_rozdzialu=nil;
    			dalej_nie_rozwazaj_spis_tresci=true;
    		end;
    	end;
    	
    	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,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,},};
   	   	end;
        local function iteratorTekstuNaglowka()
        	local re="([#:*;]*)[^%S\n]*([^{}%[%]\n]*)[^%S\n]*([^\n]+)";
        	local iter=nil;
        	local tak=nil;
        	local czy_rozdzial=nil;
        	return function()
        		if(not czy_rozdzial)then
        			czy_rozdzial=true;
        			if(poziom_rozdzialu>0)then
        				return "","",rozdzial,true;
        			end;
        		end;
        		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,false;
        			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,false;
        	end;
        end;
        
        ----
        local function LiniaArtykolow(linia)            				
              repeat
              	linia,_=mw.ustring.gsub(linia,"(%[%[[^%[%]]*)(,)([^%[%]]*%]%])", function(a,b,c) return a.."&#"..mw.ustring.byte(b)..";"..c;end);
              	linia,_=mw.ustring.gsub(linia,"({{[^{}]*)(,)([^{}]*}})",function(a,b,c) return a.."&#"..mw.ustring.byte(b)..";"..c;end);
              until not mw.ustring.match(linia,"(%[%[[^%[%]]*)(,)([^%[%]]*%]%])") and not mw.ustring.match(linia,"({{[^{}]*)(,)([^{}]*}})");
              
              if(mw.ustring.match(linia,"^[%s%w]*({{[%s_]*[Kk]ompletność[%s_]*|[^{}]*}})") 
              	    or mw.ustring.match(linia,"^[%s%w]*({{[%s_]*[Kk]ompletność[%s_]+krótka[%s_]*|[^{}]*}})") 
              	    	or mw.ustring.match(linia,"^[%s%w]*({{[%s_]*[Kk]ompletność[%s_]+junior[%s_]*|[^{}]*}})") 
              	    	  or mw.ustring.match(linia,"^[%s%w]*({{[%s_]*[Kk]Książka[%s_]*|[^{}]*}})") 
              )then
              	    linia,_=mw.ustring.gsub(linia,"([%]}]+)%s*({{[%s_]*[Kk]ompletność[%s_]*|[^{}]*}})","%1,%2");
              	    linia,_=mw.ustring.gsub(linia,"([%]}]+)%s*({{[%s_]*[Kk]ompletność[%s_]+krótka[%s_]*|[^{}]*}})","%1,%2");
              	    linia,_=mw.ustring.gsub(linia,"([%]}]+)%s*({{[%s_]*[Kk]ompletność[%s_]+junior[%s_]*|[^{}]*}})","%1,%2");
              	    linia,_=mw.ustring.gsub(linia,"([%]}]+)%s*({{[%s_]*[Kk]siążka[%s_]*|[^{}]*}})","%1,%2");
              else
              	    linia,_=mw.ustring.gsub(linia,"({{[%s_]*[Kk]ompletność[%s_]*|[^{}]*}})%s*([%[{]+)","%1,%2");
              	    linia,_=mw.ustring.gsub(linia,"({{[%s_]*[Kk]ompletność[%s_]+krótka[%s_]*|[^{}]*}})%s*([%[{]+)","%1,%2");
              	    linia,_=mw.ustring.gsub(linia,"({{[%s_]*[Kk]ompletność[%s_]+junior[%s_]*|[^{}]*}})%s*([%[{]+)","%1,%2");
              	    linia,_=mw.ustring.gsub(linia,"({{[%s_]*[Kk]siążka[%s_]*|[^{}]*}})%s*([%[{]+)","%1,%2");
              end; 
              
              local tabela_linii_artykolow=mw.text.split(linia,"%s*,%s*",false);
              for i=1,#tabela_linii_artykolow,1 do
              		tabela_linii_artykolow[i],_=mw.ustring.gsub(tabela_linii_artykolow[i],"&#"..mw.ustring.byte(',')..";",",");
              end;
              return tabela_linii_artykolow;
        end;
    	local iterator=iteratorTekstuNaglowka();
    	
    	local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial]));
    	
    	for przedrostek_listy,tekstowy_przedrostek,linia, w_rozdziale in iterator do
    		local tab_linia=LiniaArtykolow(linia)
    	    for k=1,#tab_linia,1 do
    			local iterator2=mw.ustring.gmatch(tab_linia[k],"([%[{][%[{][^{}]-[%]}][%]}])");
	    		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"]{[1]=wyzyskane_wywolanie_szablonu_spis_tresci2,[2]="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 pozycja_artykulu;local nazwa;local link_szablon;local id;local parametry_szablonu;
					if(wliczaj_artykuly_tego_rozdzialu)then
						pozycja_artykulu,nazwa,parametry_szablonu,id=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(wyzyskane_wywolanie_szablonu_spis_tresci,nazwa_przestrzeni,nazwa_ksiazki);
   		    		--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
   	   						pozycja_artykulu=html_modul["PoprawAdresNagłówkaStronyAdresu"](pozycja_artykulu);
            				if(not tabela_artykulow[numer_rozdzialu_w_ksiazce][2])then tabela_artykulow[numer_rozdzialu_w_ksiazce][2]={};end;
            				local linia_artykokow=tab_linia[k];
            				linia_artykokow=mw.ustring.gsub(linia_artykokow,wyrazenie_regularne,mikroszablony_odwrotne);
            				
            				local strona=stronicowyparser_modul.PrzekierowanieDoStrony(nazwa_ksiazki..((pozycja_artykulu~="") and ("/"..pozycja_artykulu) or ""));
            				if(strona)then
            					pozycja_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona);
            				end;
            				
            				local tab_stare={((nazwa) and ({pozycja_artykulu,nazwa,})or pozycja_artykulu),{#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,w_rozdziale,},linia_artykokow,id,};
        					table.insert(tabela_artykulow[numer_rozdzialu_w_ksiazce][2],tab_stare);
        					break;
   	   					end;	
   	   				else
   	   					link_szablon=mw.ustring.match(wyzyskane_wywolanie_szablonu_spis_tresci,"({{[^{}]+}})");
    				end;
    				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;
    	   	    				break;
       						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;
    	end;
    	numer_rozdzialu_w_ksiazce=numer_rozdzialu_w_ksiazce+1;
    end
    local parsuj_rozdzialami=nil;
    for rozdzial,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja in iterator do
    	AnalizaRozdzialu(rozdzial,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja);
    	if(not parsuj_rozdzialami)then  parsuj_rozdzialami=true;end
    end;
    if(not parsuj_rozdzialami)then
    	AnalizaRozdzialu("Spis treści",tekst_rozwiniety_calego_artykulu,1,nil,nil);
    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"] 
		                         and mw.ustring.gsub(tabela_parametrow_szablonu["nazwa jednostki"],"^([^#]*)#(.*)$","%1") 
		                            or nil
		                 ) 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(not parametry_modul.CzyTak{[1]=tabela_listy_danych_analizy_ksiazki0,})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,dokumentacja)
   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,dokumentacja);
   elseif(nazwy_np_modul.Template~=nazwa_przestrzeni)then
   	   return p.LadujZawartoscStrony(self,nazwa_modolu,true,nil,dokumentacja);
   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,dokumentacja);
		else
   	    	local szablony_magiczne={};
			local tekst_artykulu_caly=p.LadujZawartoscStrony(self,nazwa_modolu,true,szablony_magiczne,false,nil,true);
			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");
			local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
			
			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,dokumentacja);
		  				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,dokumentacja,nazwa_modolu);
		  	  					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_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
					local wywolanie2,_=mw.ustring.gsub(wywolanie,stronicowyparser_potrzebne_modul.OgolnyWzor(oznaczenie_szablonu),stronicowyparser_potrzebne_modul.AnalizaSzablonu(oznaczenie_szablonu));
					
					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;
				stronicowyparser_potrzebne_modul.AnalizaSzablonuStronicowegoParsera(wywolanie,AnalizujDokumentacja,__Funkcja2)
			end;
			return tekst_artykulu_caly;
		end;
	end;
end;
function p.LadujZawartoscStrony(self,nazwa_strony,czy_noinclude,szablony_magiczne,dokumentacja,nazwa_modolu_szablonu_opisu,szablon_nie_opis)
   local czy_nazwa_strony_z_tylko_odstepami_lub_pusta=mw.ustring.match(nazwa_strony,"^%s*$");
   local uchwyt_strony;
   local tekst_artykulu;
   local nazwa_strony_bez_kodow_html;
   if(not czy_nazwa_strony_z_tylko_odstepami_lub_pusta)then
   	  nazwa_strony_bez_kodow_html=require("Module:Html").TransformacjaKlasyZnakowej(nazwa_strony);
      
      uchwyt_strony = mw.title.makeTitle('', nazwa_strony_bez_kodow_html);
      tekst_artykulu = uchwyt_strony and uchwyt_strony:getContent() or nil;
      local czy_istnieje = tekst_artykulu or (uchwyt_strony and uchwyt_strony.exists or nil);
      
      if(not czy_istnieje)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;
    
    if((czy_noinclude)and(not dokumentacja)and(szablon_nie_opis))then
    	local iterator=mw.ustring.gmatch(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->");
    	for dokumentacja_tekst in iterator do
    		local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
    		local tekst=stronicowyparser_potrzebne_modul.KodujStroneSzablonowa(dokumentacja_tekst);
    		
    		if(tekst~=dokumentacja_tekst)then
    			local techniczne_modul=require("Module:Techniczne");
    			dokumentacja_tekst=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](dokumentacja_tekst);
				tekst=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](tekst);
		    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->"..dokumentacja_tekst.."<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->",tekst);
		    end;
    	end;
    end;
    
    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,"<[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>(.-)</[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>","");
    
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<!--(.-)-->","");
    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"](nazwa_modolu_szablonu_opisu or nazwa_strony_bez_kodow_html);
    	szablony_magiczne["{{NAMESPACE}}"]=nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modolu_szablonu_opisu or nazwa_strony_bez_kodow_html);
    	szablony_magiczne["{{PAGENAME}}"]=nazwy_modul["NAZWASTRONY"](nazwa_modolu_szablonu_opisu or nazwa_strony_bez_kodow_html);
    	szablony_magiczne["{{FULLPAGENAME}}"]=nazwy_modul["PEŁNANAZWAKSIĄŻKI"](nazwa_modolu_szablonu_opisu or nazwa_strony_bez_kodow_html);
    end;
    if(szablony_magiczne)then 
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"{{[^{}]+}}",szablony_magiczne);
    	local ramka_modul=require("Module:Ramka");
    	tekst_artykulu=ramka_modul.InstrukcjeWarunkowe(tekst_artykulu);
    end;
    if(not szablon_nie_opis)then
    	if(not dokumentacja)then
    		local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
    		tekst_artykulu=stronicowyparser_potrzebne_modul.KodujStroneSzablonowa(tekst_artykulu);
    	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 czy_artukul_korzystany)then
 		if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
 	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((self.tabela_listy_danych_analizy_ksiazki.zastepczy) or (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;
        			local normalna_nazwa_przestrzeni;local normalna_nazwa_ksiazki;
        			if(not self.tabela_listy_danych_analizy_ksiazki.zastepczy)then
     					tabela_wstepnych_informacji=p:ZbierajJakieSaArtykulyIInformacjeOLicencji(nazwa_przestrzeni,nazwa_ksiazki,czy_artukul_korzystany);
     				else
     					normalna_nazwa_przestrzeni=self.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_przestrzeni;
     					normalna_nazwa_ksiazki=self.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_ksiazki;
     					tabela_wstepnych_informacji=p:ZbierajJakieSaArtykulyIInformacjeOLicencji(self.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_przestrzeni,self.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_ksiazki,czy_artukul_korzystany);
     				end;
     				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
     							if(not self.tabela_listy_danych_analizy_ksiazki.zastepczy)then
     								tablica_ksiazki.spis=tabela_wstepnych_informacji[1];
     	 					    	tablica_ksiazki.licencja=tabela_wstepnych_informacji[2];
     	 					    else
     	 					    	if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[normalna_nazwa_przestrzeni])then
     	 					    		self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[normalna_nazwa_przestrzeni]={};
     	 					    	end;
     	 					    	if(not self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[normalna_nazwa_przestrzeni][normalna_nazwa_ksiazki])then
     	 					    		self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[normalna_nazwa_przestrzeni][normalna_nazwa_ksiazki]={};
     	 					    	end;
     	 					    	self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[normalna_nazwa_przestrzeni][normalna_nazwa_ksiazki].spis=tabela_wstepnych_informacji[1];
     	 					    	self.tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[normalna_nazwa_przestrzeni][normalna_nazwa_ksiazki].licencja=tabela_wstepnych_informacji[2];
     	 					    end;
     	 						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;
    
    function StronaZbiorcza()
    	 if(czy_artukul_korzystany)then 
    	 	    local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
                local TakFun=function(frame) return true;end;local NieFun=function(frame) return nil;end;
                return stronicowyparser_stronasubst_modul.AnalizaStronaSubst(self.tabela_listy_danych_analizy_ksiazki,nil,TakFun,NieFun,nil);
    	 end;
    	 return nil;
    end;
    InneInformacjePrzebneDoAnalizowanejKsiazki();
    
    local strona_zbiorcza=StronaZbiorcza();
    if(strona_zbiorcza)then
    	 if((tablica_ksiazki.spis_tresci)and(tablica_ksiazki.spis_tresci.tekst)and(tablica_ksiazki.spis_tresci.wywolanie)
  	    		and(tablica_ksiazki.spis_tresci.wywolanie[1])and(tablica_ksiazki.spis_tresci.wywolanie[2]))then
  	    			local pelny=mw.ustring.match(tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis_tresci.wywolanie[1])
  	    			if(pelny)then
  	    				 tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis_tresci.wywolanie[1],tablica_ksiazki.spis_tresci.tekst);
  	    			else 
  	    				 local wzgledny=mw.ustring.match(tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis_tresci.wywolanie[2])
  	    				 if(wzgledny)then
  	    				 	tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,tablica_ksiazki.spis_tresci.wywolanie[2],tablica_ksiazki.spis_tresci.tekst);
  	    				 end;
  	    		   end;
  	    end;
    end;
    
    if(czy_artukul_korzystany)then
 		if(not tekst_rozwiniety_calego_artykulu)then 
 			if(strona_zbiorcza)then
 				self.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak";
 			end;
 			return nil;
 		end;
     end;
 
    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["Śródtytuł"],nazwa_przestrzeni,nazwa_ksiazki,czy_artukul_korzystany);
    end;
    local uzyskano_w_wyniku_parsowania_wywolanie_szablonu;
    
    local analiza_stron_korzystanych_zbiorczych=nil;
    
    local stronastart=nil;
    
    local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}");
    local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne")
       	
    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(obiekty_modul.strona_start[tabela_parametrow_szablonu[0]])then
        					self.tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
        				    stronastart=true;
        					return;
    					elseif(obiekty_modul.strona_start_inne[tabela_parametrow_szablonu[0]])then
    						self.tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
    						stronastart=true;
    						return;
    					elseif(obiekty_modul.strona_start_analiza_spis_tresci[tabela_parametrow_szablonu[0]])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(obiekty_modul.strona_zbiorcza[tabela_parametrow_szablonu[0]]))then
    						    analiza_stron_korzystanych_zbiorczych=true;
    						    return;
    					end;
    				elseif((strona_zbiorcza)and(not analiza_stron_korzystanych_zbiorczych)and(obiekty_modul.strona_zbiorcza[tabela_parametrow_szablonu[0]]))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("Śródtytuł");
              								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,"Śródtytuł", 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;
    	stronicowyparser_potrzebne_modul.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
	   		local stronicowyparser_stronasubst_modul=require("Module:StronicowyParser/StronaSubst");
	   		tekst_rozwiniety_calego_artykulu=stronicowyparser_stronasubst_modul.LiczOperacjeStronZbiorczych(self,tekst_rozwiniety_calego_artykulu);
	   		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["Śródtytuł"],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.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 prosto=true;
			if(self.tabela_listy_danych_analizy_ksiazki.zastepczy)then
				if((nazwa_przestrzeni==self.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_przestrzeni)
					and(nazwa_ksiazki==self.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_ksiazki))then
					  prosto=false;
				end;
			end;
	        if(prosto)then
	 			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;
	 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;