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.Zaczynaj()
    local tabela_listy_danych_analizy_ksiazki={};
    tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu={};
    local obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
    tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron={};
    tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_doloczonych_stron={};
    tabela_listy_danych_analizy_ksiazki.brak_uchwytu={};
    tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych={};
    for _,elementy_w_tablicy_obiekty in pairs(obiekty_modul.tablica_obiektow)do
    	wartosc,_=mw.ustring.gsub(elementy_w_tablicy_obiekty[1],"%d+$","");
    	tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych[wartosc]={};
    end;
    tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych={};
    tabela_listy_danych_analizy_ksiazki.licencja={};
    local parametry_modul=require("Module:Parametry");
    local nazwy_modul=require("Module:Nazwy");
    local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENIFUN"]();
    nazwa_ksiazki=parametry_modul["NazwaKsiążkiFun"]();
    nazwa_artykulu=parametry_modul["NazwaArtykułuKsiążkiFun"]();
    local tabela_listy_danych_analizy_ksiazki2={};
    local linkobiekt={};
    local tabela_listy_danych_analizy_ksiazki0=p.ZbieranieInformacji(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, true,tabela_listy_danych_analizy_ksiazki2,linkobiekt);
    if(tabela_listy_danych_analizy_ksiazki0)then
       p.PrzetworzZebraneInformacje(tabela_listy_danych_analizy_ksiazki,tabela_listy_danych_analizy_ksiazki2,linkobiekt,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu);
    end;
    return tabela_listy_danych_analizy_ksiazki;
end;
function p.TOC(lista_elementow_spisu_tresci)
        if(lista_elementow_spisu_tresci==nil)then return nil;end;
        local twor_listy="";
        local liczba_ulozenia_w_menu_spisu_tresci=lista_elementow_spisu_tresci[1][2];
        for licznik, element_w_tablicy in ipairs(lista_elementow_spisu_tresci) do
        	if(licznik==1)then
                   twor_listy='<ol><li>'.."[["..element_w_tablicy[1][1].."|"..element_w_tablicy[1][2].."]]";
                else
                  if(element_w_tablicy[2]==liczba_ulozenia_w_menu_spisu_tresci)then
                       twor_listy=twor_listy..'</li><li>'.."[["..element_w_tablicy[1][1].."|"..element_w_tablicy[1][2].."]]";
                  elseif(element_w_tablicy[2]>liczba_ulozenia_w_menu_spisu_tresci)then
                      twor_listy=twor_listy..'<ol><li>'.."[["..element_w_tablicy[1][1].."|"..element_w_tablicy[1][2].."]]";
                      liczba_ulozenia_w_menu_spisu_tresci=element_w_tablicy[2];
                  elseif(element_w_tablicy[2]<liczba_ulozenia_w_menu_spisu_tresci)then
                       twor_listy=twor_listy..mw.ustring.rep('</li></ol>',liczba_ulozenia_w_menu_spisu_tresci-element_w_tablicy[2])..'</li><li>'
                                             .."[["..element_w_tablicy[1][1].."|"..element_w_tablicy[1][2].."]]";
                       liczba_ulozenia_w_menu_spisu_tresci=element_w_tablicy[2];
                  end;
               end;	
        end;
        twor_listy=twor_listy..mw.ustring.rep('</li></ol>',liczba_ulozenia_w_menu_spisu_tresci);
        twor_listy='<div style="width:100%;max-height:700px;overflow:auto;padding-right:5px;">'..twor_listy.."</div>";
        local wikikod_menu='{{Tabela nawigacyjna|styl=width:100%|tytuł=<div style="text-align:left;font-size:1.1em;">Spis Treści</div>|spis='..twor_listy..'|funkcja=UkrytaWikitabelowaListaMenu|klasa=toc}}';
	    local frame=mw.getCurrentFrame();
        local rozwiniety_wikikod=frame:preprocess(wikikod_menu);
	    return rozwiniety_wikikod;
end;

function  p.SpisTresciWstep(tekst_artykulu,nazwa_strony,obiekty)
    nazwa_strony=mw.ustring.gsub(nazwa_strony,"(|)",function (s) return "&#"..tostring(mw.ustring.byte(s))..";";end);
    local tablica_spisu_tresci=nil;
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<[mM][aA][tT][hH]>.-</[mM][aA][tT][hH]>","");
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<[nN][oO][wW][iI][kK][iI]>.-</[nN][oO][wW][iI][kK][iI]>",""); 	
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(\n=+[^\n]+=+%s-\n)","\n%1\n");
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"^(=+[^\n]+=+%s-\n)","\n%1\n");
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(\n=+[^\n]+=+%s-)$","\n%1\n");
    local ulozenie=nil;
    local ostatnie=nil;
    local uzyskany_w_wyniku_parsowania;    
    local tablica_powtarzajacych_sie_elementow={};
    local iterator=mw.ustring.gmatch(tekst_artykulu, "\n=+%s*[^\n]+%s*=+%s-\n");
    local elementy_linku=nil;
    local frame=mw.getCurrentFrame();
    local parametry_modul=require("Module:Parametry");
    for uzyskany_w_wyniku_parsowania in iterator do
           local liczba_rowna_sie=1;
           local naglowek="";
           while true do
                   local przetwarzany_naglowek=mw.ustring.match(uzyskany_w_wyniku_parsowania,"^\n"..mw.ustring.rep("=",liczba_rowna_sie).."%s*([^\n]+)%s*"..mw.ustring.rep("=",liczba_rowna_sie).."%s*\n$");
                   if(mw.ustring.match(przetwarzany_naglowek,"^=([^\n]+)=$")~=nil)then
                     liczba_rowna_sie=liczba_rowna_sie+1;
                   else
                   	 naglowek=przetwarzany_naglowek;
                   	 break;
                   end;
           end;
             local wywolanie_naglowek=mw.ustring.match(naglowek,"{{%s*Nagłówek1%s*|[^{}]+}}");
             local numeracja;
             if(wywolanie_naglowek)then
             	local parametry_wywolania_szablonu_naglowek=parametry_modul["ParsujWywołanieSzablonu"](wywolanie_naglowek);
             	numeracja=parametry_wywolania_szablonu_naglowek["numeracja"] or parametry_wywolania_szablonu_naglowek[1];
             	wywolanie_naglowek=mw.ustring.gsub(wywolanie_naglowek,"([%^%$%(%)%%%.%[%]%*%+%-%?])","%%%1");
            	naglowek=mw.ustring.gsub(naglowek,wywolanie_naglowek,"");
             end;
             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 nazwa_rozdzialu_w_artykule=mw.ustring.gsub(naglowek,"<[^<>]->","");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"[<>]",function(s) return "&#"..tostring(mw.ustring.byte(s))..";";end);
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"\'\'\'","");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"\'\'","");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"^[%s_]*","");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"[%s_]*$","");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"_"," ");
             nazwa_rozdzialu_w_artykule=mw.ustring.gsub(nazwa_rozdzialu_w_artykule,"|","&#"..tostring(mw.ustring.byte('|'))..";");
             local numer_tego_samego_naglowka=1;
             local nazwa_rozdzialu_w_artykule_p=mw.ustring.lower(nazwa_rozdzialu_w_artykule);
             for licznik=1,#tablica_powtarzajacych_sie_elementow do
             	  if(tablica_powtarzajacych_sie_elementow[licznik][2]==1)then
             	  	if(numer_tego_samego_naglowka==1)then
                       if(tablica_powtarzajacych_sie_elementow[licznik][1]==nazwa_rozdzialu_w_artykule_p)then numer_tego_samego_naglowka=numer_tego_samego_naglowka+1;end;
                    else
                       if(tablica_powtarzajacych_sie_elementow[licznik][1]==nazwa_rozdzialu_w_artykule_p.." "..tostring(numer_tego_samego_naglowka))then 
                       	    numer_tego_samego_naglowka=numer_tego_samego_naglowka+1;
                       	end;
                    end;
                  else
                   if(numer_tego_samego_naglowka==1)then
                  	 if(tablica_powtarzajacych_sie_elementow[licznik][1].." "..tostring(tablica_powtarzajacych_sie_elementow[licznik][2])==nazwa_rozdzialu_w_artykule_p)then 
                  	 	    numer_tego_samego_naglowka=numer_tego_samego_naglowka+1;
                  	  end;
                    else
                  	 if(tablica_powtarzajacych_sie_elementow[licznik][1].." "..tostring(tablica_powtarzajacych_sie_elementow[licznik][2])
                  	 	    ==nazwa_rozdzialu_w_artykule_p.." "..tostring(numer_tego_samego_naglowka))then 
                  	 	 numer_tego_samego_naglowka=numer_tego_samego_naglowka+1;
                  	   end;
                   end;
                 end;
             end;
             for licznik=1, #tablica_powtarzajacych_sie_elementow do
                 if(numer_tego_samego_naglowka>1)then
                 	if(tablica_powtarzajacych_sie_elementow[licznik][2]==1)then
                  	    if(tablica_powtarzajacych_sie_elementow[licznik][1]==nazwa_rozdzialu_w_artykule_p.." "..tostring(numer_tego_samego_naglowka))then 
                  	    	numer_tego_samego_naglowka=numer_tego_samego_naglowka+1;
                  	    end;
                  	else
                  		if(tablica_powtarzajacych_sie_elementow[licznik][1].." "..tostring(tablica_powtarzajacych_sie_elementow[licznik][2])
                  			      ==nazwa_rozdzialu_w_artykule_p.." "..tostring(numer_tego_samego_naglowka))then 
                  			numer_tego_samego_naglowka=numer_tego_samego_naglowka+1;
                  		end;
                  	end;
                 end;
             end;
             if(numer_tego_samego_naglowka==1)then
                 elementy_linku={((nazwa_strony~="")and (":"..nazwa_strony) or "").."#"..nazwa_rozdzialu_w_artykule,naglowek};
             else
                 elementy_linku={((nazwa_strony~="")and (":"..nazwa_strony) or "").."#"..nazwa_rozdzialu_w_artykule.."_"..numer_tego_samego_naglowka,naglowek};
             end;
             if((obiekty)and(numeracja))then
             	obiekty[#obiekty+1]={numeracja,{elementy_linku[1], elementy_linku[2]}};
             end;
             if((ulozenie==nil)or(ulozenie>=liczba_rowna_sie))then 
                  ulozenie=liczba_rowna_sie-1;
             elseif(ostatnie+1<liczba_rowna_sie-ulozenie)then
                  ulozenie=liczba_rowna_sie-ostatnie-1;
             end;
             ostatnie=liczba_rowna_sie-ulozenie;
             tablica_powtarzajacych_sie_elementow[#tablica_powtarzajacych_sie_elementow+1]={mw.ustring.lower(nazwa_rozdzialu_w_artykule),numer_tego_samego_naglowka};  
             if(tablica_spisu_tresci==nil)then tablica_spisu_tresci={};end;
             tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,liczba_rowna_sie-ulozenie};
     end;
     return tablica_spisu_tresci;
end;
function p.ZbierajJakieSaArtykulyIInformacjeOLicencji(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,czy_artykul_korzystany)
   local nazwa_modolu=(nazwa_przestrzeni~="")and nazwa_przestrzeni..":"..nazwa_ksiazki or nazwa_ksiazki;
   local tekst_rozwiniety_calego_artykulu=require("Module:StronicowyParser").SpreparowanyWikikodStrony(nazwa_modolu);
   if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
   local iterator=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"{{[^{}]-}}");
   local wyzyskane_wywolanie_szablonu_spis_tresci="";
   local tabelalisty2=nil;
   local licencja_z_autorem=true;
   local tabela_artykulow=nil;
   local tabela_spisu_tresci=nil;
   for wyzyskane_wywolanie_szablonu_spis_tresci in iterator do
   	   local pozycja_artykulu=mw.ustring.match(wyzyskane_wywolanie_szablonu_spis_tresci,"^{{[Ss]pisTreści|%s*([^{}]-)%s*}}$");
   	   if(pozycja_artykulu~=nil)then
   	   	 local parametry_modul=require("Module:Parametry");
   	   	 pozycja_artykulu=parametry_modul["OdstępyFun"](pozycja_artykulu,"tak")
   	   	 pozycja_artykulu=mw.getContentLanguage():ucfirst(pozycja_artykulu);
   	   	 pozycja_artykulu=require("Module:Parametry")["TransformacjaKoduZnakuDoZnakuŁancucha"](pozycja_artykulu);
   	   	 local znaki_niedozwolone=mw.ustring.match(pozycja_artykulu,"[|<>{}%[%]]");
   	   	 if(not znaki_niedozwolone)then
        	if(not tabela_artykulow)then tabela_artykulow={};end;
        	tabela_artykulow[#tabela_artykulow+1]=pozycja_artykulu;
        else
        	if(not tabela_listy_danych_analizy_ksiazki.niedozwolone_znaki_w_spisach_tresci)then
        		tabela_listy_danych_analizy_ksiazki.niedozwolone_znaki_w_spisach_tresci=0;
        	end;
        end;
       elseif((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=require("Module:Parametry")["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"];
       	    local wyrazenie_regularne="%[%[([^%[%]|]-)&#"..tostring(mw.ustring.byte("|"))..";([^%[%]|]-)%]%]";
       	    if(autor~=nil)then
       	    	 autor=mw.ustring.gsub(autor,wyrazenie_regularne,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(szkoly~=nil)then
       	    	  szkoly=mw.ustring.gsub(szkoly,wyrazenie_regularne,"[[".."%1".."|".."%2".."]]");
       	    end; 
       	    if(email~=nil)then
       	    	  email=mw.ustring.gsub(email,wyrazenie_regularne,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(dotyczy~=nil)then
       	    	  dotyczy=mw.ustring.gsub(dotyczy,wyrazenie_regularne,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(licencjonowanie~=nil)then
       	    	  licencjonowanie=mw.ustring.gsub(licencjonowanie,wyrazenie_regularne,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(umowa_prawna~=nil)then
       	    	  umowa_prawna=mw.ustring.gsub(umowa_prawna,wyrazenie_regularne,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(konsekwencje~=nil)then
       	    	  konsekwencje=mw.ustring.gsub(konsekwencje,wyrazenie_regularne,"[[".."%1".."|".."%2".."]]");
       	    end;
       	    if(autor~=nil)then 
       	  	   tabela_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje};
       	  	   licencja_z_autorem=false; 
       	    end;
       	   elseif(tabela_listy_danych_analizy_ksiazki.blad_wewnetrzny_modulu_lua_stronicowego_parsera==nil)then
       	   	tabela_listy_danych_analizy_ksiazki.blad_wewnetrzny_modulu_lua_stronicowego_parsera=0;
       	   end
       	  end;
       end;
   end;
    if(czy_artykul_korzystany)then tabelalisty2={tabela_artykulow, tabela_spisu_tresci};else tabelalisty2=tabela_artykulow;end;
    return tabelalisty2;
end;
function p.ObslugaSzczegolnaElementu(kod_uchwytu,tabela_listy_danych_analizy_ksiazki2, tabela_listy_danych_analizy_ksiazki, 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(#tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu]==0)then 
       if(not((parametry_modul.CzyJestTakiKluczTabeli(tabela_listy_danych_analizy_ksiazki.strony_poza_zakresem_obslugiwanym,nazwa_przestrzeni))and(parametry_modul.CzyJestTakiKluczTabeli(tabela_listy_danych_analizy_ksiazki.strony_poza_zakresem_obslugiwanym[nazwa_przestrzeni],nazwa_ksiazki))))then 
       			p.SprawdzCzyJestDostepnySpisTresci(tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, kod_uchwytu);
       end;
    end;
    tabela_listy_danych_analizy_ksiazki2[ nazwa_obiektu][#tabela_listy_danych_analizy_ksiazki2[ nazwa_obiektu]+1]=lista_dwuelementowa;
end;
function p.ObsluzSzablonWzor(tabela_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki2, tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,nazwa_obiektu, czy_artykul_korzystany,numer_numeracji)
	local kod_uchwytu=nil;
	if(tabela_parametrow_szablonu["numeracja"])then 
		local parametry_modul=require("Module:Parametry");
        kod_uchwytu=parametry_modul["OdstępyFun"](tabela_parametrow_szablonu["numeracja"]);
    elseif(tabela_parametrow_szablonu[numer_numeracji])then
        local parametry_modul=require("Module:Parametry");
		kod_uchwytu=parametry_modul["OdstępyFun"](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, tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, czy_artykul_korzystany);
	end;
end;
function p.SprawdzCzyJestDostepnySpisTresci(tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, kodr)
	if(nazwa_przestrzeni)then
		if(nazwa_ksiazki)then
			if(nazwa_artykulu=="")then return;end;
  			local czy_element_wystepuje_w_tablicy=false;
  			local czy_lista_niepusta=false;
			if(tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych)then
				local value0=tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni];
				if(value0)then
					local value1=value0[nazwa_ksiazki];
    				if(value1)then
  						czy_lista_niepusta=true;
  						for i, nazwa_artykulu1 in ipairs(value1) do
  							if(nazwa_artykulu1==nazwa_artykulu)then
  	                			czy_element_wystepuje_w_tablicy=true;
  	                			break;
  	    					end;
  	    				end;
  	    			end;
  	    		end;
			end;
	  		local lista;
  			if(czy_lista_niepusta)then lista=#tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni][nazwa_ksiazki];else lista=0;end;
    		if((lista==0)or((lista~=0)and(czy_element_wystepuje_w_tablicy==false)))then 
        		if((tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni)or(tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki~=nazwa_ksiazki)or(tabela_listy_danych_analizy_ksiazki.nazwa_artykulu~=nazwa_artykulu))then
            		p.DodawanieElementowDoTablicy(tabela_listy_danych_analizy_ksiazki,"brakujace_spisy_tresci_do_doloczanych_stron",nazwa_przestrzeni,nazwa_ksiazki);
    			elseif(not tabela_listy_danych_analizy_ksiazki.brak_spisu_tresci_do_korzystanych_stron)then
            		tabela_listy_danych_analizy_ksiazki.brak_spisu_tresci_do_korzystanych_stron=0;
        		end;
    		end;
    	end;
    end;
end;
function p.PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,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_ksiazka_z_tylko_odstepami_lub_pusty)or(czy_artykul_z_tylko_odstepami_lub_pusty)or(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty))then
  		if(not tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][1])then
	 		if(czy_uchwyt_obiektu_z_tylko_odstepami_lub_pusty)then tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][1]=0;end;
		end;
		if(not tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][2])then
	 		if(czy_artykul_z_tylko_odstepami_lub_pusty)then 
	 			if(((tabela_listy_danych_analizy_ksiazki.nazwa_artykulu=="")and(nazwa_artykulu~=""))or(tabela_listy_danych_analizy_ksiazki.nazwa_artykulu~=""))then
	 				tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][2]=0;
	 			end;
 		    end;
		end;
		if(not tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][3])then
	 		if(czy_ksiazka_z_tylko_odstepami_lub_pusty)then tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu][3]=0;end;
		end;
	end;
end;
function p.ObiektyNaStronieGlownejKsiazki(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,uchwyt_obiektu,nazwa_obiektu)
	local parametry_modul=require("Module:Parametry");
	local nazwa_artykulu="";
	local tabela_listy_danych_analizy_ksiazki_nazwy_przestrzeni=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni];
    if(tabela_listy_danych_analizy_ksiazki_nazwy_przestrzeni)then
    	local tabela_listy_danych_analizy_ksiazki_nazwy_ksiazek=tabela_listy_danych_analizy_ksiazki_nazwy_przestrzeni[nazwa_ksiazki];
    	if(tabela_listy_danych_analizy_ksiazki_nazwy_ksiazek)then
    		local tabela_listy_danych_analizy_ksiazki_artykulow=tabela_listy_danych_analizy_ksiazki_nazwy_ksiazek[nazwa_artykulu];
    		if(tabela_listy_danych_analizy_ksiazki_artykulow)then
    			local uchwyty_i_numeracje=tabela_listy_danych_analizy_ksiazki_artykulow.uchwyty_i_numeracje
    			if(uchwyty_i_numeracje)then
    				local tabela_obiektow=uchwyty_i_numeracje[nazwa_obiektu];
    				if(tabela_obiektow)then
    					local czy_jest_jakis_element_tablicy=parametry_modul["CzySąElementyNumerowaneTablicy"](tabela_obiektow);
    					if(czy_jest_jakis_element_tablicy)then 
    						local czy_link_da_sie_ponumerowac=false;
    							for _, parametry_obiektu in pairs(tabela_obiektow) do
                					if(parametry_obiektu[1]==uchwyt_obiektu)then
                    					czy_link_da_sie_ponumerowac=true;
                					end;                                      
            					end;
            					if(czy_link_da_sie_ponumerowac==false)then
            						if(tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron["Link"..nazwa_obiektu]==nil)then
            							tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron["Link"..nazwa_obiektu]=0;
            						end;
    								p.PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
            					end;
    						    return;
    					else
    						 if(tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron["Link"..nazwa_obiektu]==nil)then
            					tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron["Link"..nazwa_obiektu]=0;
        					end;
    					end;
    				end;
    			end;
    		end;
    	end;
    end;
    p.PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
end;
function p.LinkowanieNastepne(tabela_listy_danych_analizy_ksiazki, 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(parametry_modul.CzyTak(nazwa_artykulu)))then
    		local tabela_listy_danych_analizy_ksiazki0=p.ZbieranieInformacji(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, false);
    		if(tabela_listy_danych_analizy_ksiazki0)then 
        				if(tabela_listy_danych_analizy_ksiazki0==0)then return;end;
        			    p.SprawdzCzyJestDostepnySpisTresci(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
        				local czy_link_da_sie_ponumerowac=false;
        				local value=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni];
        				if(value)then
        					local value0=value[nazwa_ksiazki];
        					if(value0)then                            
        						local value1=value0[nazwa_artykulu];
        						if(value1)then
        							local value2=value1.uchwyty_i_numeracje;
        							if(value2)then
            							if(value2[nazwa_obiektu])then                                 
            								for _, parametry_obiektu in pairs(value2[nazwa_obiektu]) do
                								if(parametry_obiektu[1]==uchwyt_obiektu)then
                    								czy_link_da_sie_ponumerowac=true;
                								end;                                      
            								end;
            							end
    								end;
        						end;
        					end;
        				end;
        				 if(czy_link_da_sie_ponumerowac==false)then
            				if(tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron["Link"..nazwa_obiektu]==nil)then
            					tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron["Link"..nazwa_obiektu]=0;
        					end;
        				 end;
    		else
    			if(not tabela_listy_danych_analizy_ksiazki.blad_wewnetrzny_modulu_lua_stronicowego_parsera)then
    				tabela_listy_danych_analizy_ksiazki.blad_wewnetrzny_modulu_lua_stronicowego_parsera=0;
    			end;
    		end;
		elseif((nazwa_przestrzeni)and(parametry_modul.CzyTak(nazwa_ksiazki))and(nazwa_artykulu==""))then
    		local tabela_listy_danych_analizy_ksiazki0=p.ZbieranieInformacji(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, false);
    		if(tabela_listy_danych_analizy_ksiazki0)then
    			if(tabela_listy_danych_analizy_ksiazki0==0)then return;end;
    			p.SprawdzCzyJestDostepnySpisTresci(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
                p.ObiektyNaStronieGlownejKsiazki(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,uchwyt_obiektu,nazwa_obiektu);
    		else
    			p.PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
    		end;
    	else
    		p.PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
    	end;
    else
        if(tabela_listy_danych_analizy_ksiazki.nieprawidlowe_nazwy_korzystanych_stron==nil)then
        	if((tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki==nazwa_ksiazki)and(tabela_listy_danych_analizy_ksiazki.nazwa_artykulu==nazwa_artykulu))then 
  		    	tabela_listy_danych_analizy_ksiazki.nieprawidlowe_nazwy_korzystanych_stron=0;
  	    	else
  		        tabela_listy_danych_analizy_ksiazki.nieprawidlowe_nazwy_stron_doloczanych_do_stron=0;
        	end;
        end;
    end;
end;
function p.ZbieranieInformacjiTOC(tabela_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki)
   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ępyFun"](nazwa_artykulu,"tak") or nil;
   pelna_nazwa_ksiazki=(pelna_nazwa_ksiazki)and parametry_modul["OdstępyFun"](pelna_nazwa_ksiazki,"tak") or nil;
   pelna_nazwa_ksiazki=parametry_modul["PełnaNazwaStronicowejKsiążkiFun"](pelna_nazwa_ksiazki);
   pelna_nazwa_ksiazki=parametry_modul["OdstępyFun"](pelna_nazwa_ksiazki,"tak");
   
   local nazwy_modul=require("Module:Nazwy");
   pelna_nazwa_ksiazki=parametry_modul["PełnaNazwaStronicowejKsiążkiFun"](pelna_nazwa_ksiazki);
   local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENIKSIĄŻKIFUN"](pelna_nazwa_ksiazki);
   local nazwa_ksiazki=parametry_modul["NazwaKsiążkiFun"](pelna_nazwa_ksiazki);
   local nazwa_artykulu=nazwa_artykulu or (pelna_nazwa_ksiazki and (((tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki==nazwa_ksiazki))and parametry_modul["NazwaArtykułuKsiążkiFun"]() or "") or parametry_modul["NazwaArtykułuKsiążkiFun"]());
   local tabela_listy_danych_analizy_ksiazki=p.ZbieranieInformacji(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, false);
end;
function p.LinkowanieOgolnie(tabela_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki, 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ępyFun"](nazwa_artykulu,"tak") or nil;
   pelna_nazwa_ksiazki=(pelna_nazwa_ksiazki)and parametry_modul["OdstępyFun"](pelna_nazwa_ksiazki,"tak") or nil;
   uchwyt_obiektu=(uchwyt_obiektu)and parametry_modul["OdstępyFun"](uchwyt_obiektu) or nil;
   local nazwy_modul=require("Module:Nazwy");
   if(nazwa_artykulu)then 
   	    nazwa_artykulu=parametry_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](nazwa_artykulu);
   	    nazwa_artykulu=require("Module:Parametry")["OdstępyFun"](nazwa_artykulu,"tak");
   end;
   local nazwa_ksiazki;local nazwa_przestrzeni;
   
   if(pelna_nazwa_ksiazki)then 
   	   pelna_nazwa_ksiazki=parametry_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](pelna_nazwa_ksiazki);
   	   pelna_nazwa_ksiazki=parametry_modul["PełnaNazwaStronicowejKsiążkiFun"](pelna_nazwa_ksiazki);
   	   pelna_nazwa_ksiazki=parametry_modul["OdstępyFun"](pelna_nazwa_ksiazki,"tak");
   	   nazwa_ksiazki=nazwy_modul["NAZWASTRONYFUN"](pelna_nazwa_ksiazki);
   	   nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENIFUN"](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=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
        			nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
        		elseif(nazwa_ksiazki=="")then
        		   PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,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
        		  PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
        		  return;
        	else
        		nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
        		nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
        	end;
        	if((nazwa_przestrzeni~=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)or(nazwa_ksiazki~=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki)or(nazwa_artykulu~=tabela_listy_danych_analizy_ksiazki.nazwa_artykulu))then
        		p.LinkowanieNastepne(tabela_listy_danych_analizy_ksiazki, nazwa_obiektu, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
        	else	
        		p.LinkowanieDalszePrace(uchwyt_obiektu, tabela_listy_danych_analizy_ksiazki, tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni,tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki,tabela_listy_danych_analizy_ksiazki.nazwa_artykulu, nazwa_obiektu, linkobiekt);
        	end;
    	else 
    		p.LinkowanieDalszePrace(uchwyt_obiektu, tabela_listy_danych_analizy_ksiazki, tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni, tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki,tabela_listy_danych_analizy_ksiazki.nazwa_artykulu, nazwa_obiektu, linkobiekt) 
    	end;
   elseif((uchwyt_obiektu)and(uchwyt_obiektu==""))then
   	   	  p.PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
   elseif(not tabela_listy_danych_analizy_ksiazki.brak_uchwytu[nazwa_obiektu])then
   	  p.PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu);
   	  tabela_listy_danych_analizy_ksiazki.brak_uchwytu[nazwa_obiektu]=0;
   end;
end;
function p.LinkowanieDalszePrace(uchwyt_obiektu,tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, linkobiekt)
	linkobiekttab=linkobiekt[nazwa_obiektu];
	if(#linkobiekttab==0)then 
		local parametry_modul=require("Module:Parametry");
		if(not((parametry_modul.CzyJestTakiKluczTabeli(tabela_listy_danych_analizy_ksiazki.strony_poza_zakresem_obslugiwanym,nazwa_przestrzeni))and(parametry_modul.CzyJestTakiKluczTabeli(tabela_listy_danych_analizy_ksiazki.strony_poza_zakresem_obslugiwanym[nazwa_przestrzeni],nazwa_ksiazki))))then 
			p.SprawdzCzyJestDostepnySpisTresci(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu);
		end;
	end;
    table.insert(linkobiekttab,uchwyt_obiektu);
    if((not nazwa_artykulu)or(not nazwa_ksiazki)or(not uchwyt_obiektu)or((uchwyt_obiektu)and(uchwyt_obiektu==""))or((nazwa_ksiazki)and(nazwa_ksiazki==""))
    	    or(((not uchwyt_obiektu)or(uchwyt_obiektu==""))and((nazwa_artykulu)and(nazwa_artykulu~="")and(nazwa_ksiazki)and(nazwa_ksiazki~="")))
    	    or((nazwa_artykulu)and(nazwa_ksiazki)and(nazwa_ksiazki==""))
    )then
    	p.PusteParametryLinkow(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); 
    end;
end;
function p.LadujZawartoscStrony(nazwa_strony,tabela_listy_danych_analizy_ksiazki,czy_noinclude,szablony_magiczne,dokumentacja)
   local czy_nazwa_strony_z_tylko_odstepami_lub_pusta=mw.ustring.match(nazwa_strony,"^%s*$");
   local uchwyt_strony;
   if(not czy_nazwa_strony_z_tylko_odstepami_lub_pusta)then
   	  local nazwa_strony2=require("Module:Parametry").TransformacjaFun(nazwa_strony);
      uchwyt_strony = mw.title.makeTitle('', nazwa_strony2);
      if((uchwyt_strony==nil)or(not uchwyt_strony.exists))then 
      	if(tabela_listy_danych_analizy_ksiazki)then
        	if(tabela_listy_danych_analizy_ksiazki.strona_nie_istnieje==nil)then
         		tabela_listy_danych_analizy_ksiazki.strona_nie_istnieje=0
        	end;
        end;
        return nil;
      end;
    else
      return nil;
    end;
    local tekst_artykulu = uchwyt_strony:getContent();
    if(czy_noinclude)then
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->(.-)<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->","%1");
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->.-<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->","");
    else
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->.-<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->","");
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->(.-)<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->","%1");
    end;
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->.-<%s-/%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->","");
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Pp][Rr][Ee]%s->.-<%s-/%s-[Pp][Rr][Ee]%s->","");
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(<%s-[mM][aA][tT][hH]%s->.-<%s-/%s-[mM][aA][tT][hH]%s->)",""); 	
    if((not dokumentacja) and (szablony_magiczne))then
    	szablony_magiczne["{{ROOTPAGENAME}}"]=uchwyt_strony.rootText;
    	szablony_magiczne["{{NAMESPACE}}"]=mw.ustring.gsub(uchwyt_strony.nsText,"_+"," ");
    	szablony_magiczne["{{PAGENAME}}"]=uchwyt_strony.text;
    	szablony_magiczne["{{FULLPAGENAME}}"]=uchwyt_strony.fullText;
    end;
    if(szablony_magiczne)then tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"{{[^{}]+}}",szablony_magiczne);end;
    while mw.ustring.match(tekst_artykulu,"{{[^{}|]-|.-{{[^{}]-}}[^{}]-}}") do
        tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"({{[^{}|]-|.-)({{[^{}]-}})([^{}]-}})","%1%3%2");
    end;
    return tekst_artykulu;
end;
function p.DodawanieElementowDoTablicy(tabela_listy_danych_analizy_ksiazki,element_tablicy,nazwa_przestrzeni,nazwa_ksiazki)
	if(not tabela_listy_danych_analizy_ksiazki[element_tablicy])then 
		  tabela_listy_danych_analizy_ksiazki[element_tablicy]={};
    end;
	if(not tabela_listy_danych_analizy_ksiazki[element_tablicy][nazwa_przestrzeni])then 
		tabela_listy_danych_analizy_ksiazki[element_tablicy][nazwa_przestrzeni]={};
	end;
	tabela_listy_danych_analizy_ksiazki[element_tablicy][nazwa_przestrzeni][nazwa_ksiazki]=true;
end;
function p.ZbieranieInformacji(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, czy_artukul_korzystany,tabela_listy_danych_analizy_ksiazki2,linkobiekt)
   if(not czy_artukul_korzystany)then
   	 if(tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni and tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki and tabela_listy_danych_analizy_ksiazki.nazwa_artykulu)then
   	   if((tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)and(tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki==nazwa_ksiazki)and(tabela_listy_danych_analizy_ksiazki.nazwa_artykulu==nazwa_artykulu))then
   	        return tabela_listy_danych_analizy_ksiazki; 
   	  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(tabela_listy_danych_analizy_ksiazki,"strony_poza_zakresem_obslugiwanym",nazwa_przestrzeni,nazwa_ksiazki)
   end;
   local parametry_modul=require("Module:Parametry");
   if(tabela_listy_danych_analizy_ksiazki)then
      if(tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu)then
      	local tabela_przestrzeni=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 tabela_artykul=tabela_ksiazka[nazwa_artykulu];
         		if(tabela_artykul)then
         			local uchwyty_i_numeracje=tabela_artykul.uchwyty_i_numeracje;
         			if(uchwyty_i_numeracje)then
         	    		return tabela_listy_danych_analizy_ksiazki;
         	    	end;
         		end;
        	end;
        end;
      else	
        return nil; 
      end;
    else 
       return nil; 
   end;
    if(czy_artukul_korzystany)then 
   	  if((not tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(not tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki)and(not tabela_listy_danych_analizy_ksiazki.nazwa_artykulu))then
   	  	tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni=nazwa_przestrzeni;
   	    tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki=nazwa_ksiazki;
   	    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=require("Module:StronicowyParser").SpreparowanyWikikodStrony(nazwa_modolu,tabela_listy_danych_analizy_ksiazki);
 	if(not tekst_rozwiniety_calego_artykulu)then return 0;end;
    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=mw.ustring.gsub(element_w_tablicy_obiekt[1],"%d+$","");
    	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 toc=p.SpisTresciWstep(tekst_rozwiniety_calego_artykulu,strona,tabela_listy_danych_analizy_ksiazki2["Nagłówek"]);
    if(not((parametry_modul.CzyJestTakiKluczTabeli(tabela_listy_danych_analizy_ksiazki.strony_poza_zakresem_obslugiwanym,nazwa_przestrzeni))and(parametry_modul.CzyJestTakiKluczTabeli(tabela_listy_danych_analizy_ksiazki.strony_poza_zakresem_obslugiwanym[nazwa_przestrzeni],nazwa_ksiazki))))then
    	if((nazwa_przestrzeni)and(nazwa_ksiazki))then
    		local czy_ksiazka_istnieje_w_tablicy=false;
        	if(tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni])then
        		for nazwa_ksiazki_i,value in pairs(tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni]) do
                	if(nazwa_ksiazki_i==nazwa_ksiazki)then
                    	 czy_ksiazka_istnieje_w_tablicy=true;
                    	break;
            		end;
            	end;
        	end;
        	if(not czy_ksiazka_istnieje_w_tablicy)then
     			local tabela_wstepnych_informacji=p.ZbierajJakieSaArtykulyIInformacjeOLicencji(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,czy_artukul_korzystany);
     			if(tabela_wstepnych_informacji==0)then 
     				if(czy_artukul_korzystany)then
	     				tabela_listy_danych_analizy_ksiazki.korzystane_strona_glowna_nie_istnieje=0;
    	 			else
     					p.DodawanieElementowDoTablicy(tabela_listy_danych_analizy_ksiazki,"doloczone_strony_glowne_nie_istnieja",nazwa_przestrzeni,nazwa_ksiazki);
     				end;
     			else
     				if(tabela_wstepnych_informacji)then 
     					if(czy_artukul_korzystany)then
     						if(not tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni])then tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni]={};end;
	     	 					  tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni][nazwa_ksiazki]=tabela_wstepnych_informacji[1];
     	 						  tabela_listy_danych_analizy_ksiazki.licencja=tabela_wstepnych_informacji[2];
     	 					if(not tabela_wstepnych_informacji[1])then
     	 						if(not tabela_listy_danych_analizy_ksiazki.do_korzystanych_stron_brak_spisow_tresci)then 
     	 					    	if(((tabela_listy_danych_analizy_ksiazki.nazwa_artykulu=="")and(nazwa_artykulu~=""))or(tabela_listy_danych_analizy_ksiazki.nazwa_artykulu~=""))then
	     	 		   					tabela_listy_danych_analizy_ksiazki.do_korzystanych_stron_brak_spisow_tresci=0;
    	 	 		   				end;
     		 					end;
     	 					end;
      					else 
     						if(not tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni])then tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni]={};end;
     	 					tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni][nazwa_ksiazki]=tabela_wstepnych_informacji;
    					end;
    				else
    					if(czy_artukul_korzystany)then
    						if(not tabela_listy_danych_analizy_ksiazki.blad_wewnetrzny_modulu_lua_stronicowego_parsera)then
    							tabela_listy_danych_analizy_ksiazki.blad_wewnetrzny_modulu_lua_stronicowego_parsera=0;
    						end;
    					else
                			p.DodawanieElementowDoTablicy(tabela_listy_danych_analizy_ksiazki,"brak_spisow_tresci_do_doloczonych_ksiazek_na_ich_stronach_glownych",nazwa_przestrzeni,nazwa_ksiazki);
    					end;
     				end;
				end;
    		end;
    	end;
    end;
    local uzyskano_w_wyniku_parsowania_wywolanie_szablonu;
    for uzyskano_w_wyniku_parsowania_wywolanie_szablonu in iterator do
    	uzyskano_w_wyniku_parsowania_wywolanie_szablonu=mw.ustring.gsub(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,"\n+","");	
    	local tabela_parametrow_szablonu=require("Module:Parametry")["ParsujWywołanieSzablonu"](uzyskano_w_wyniku_parsowania_wywolanie_szablonu);
    	if((tabela_listy_danych_analizy_ksiazki.formatowanie==nil)and(czy_artukul_korzystany))then
    		if(tabela_parametrow_szablonu)then
    			if(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ss]tronaStart$")~=nil)then
        			tabela_listy_danych_analizy_ksiazki.formatowanie=tabela_parametrow_szablonu["formatowanie"];
    			elseif((mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ss]komplikowanaStronaStart$")~=nil)
    				or(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ss]tronaStart2$")~=nil)
    				or(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Ss]tandardowaStronaStart$")~=nil)
    				or(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Pp]odstawowaStronaStart$")~=nil)    		
    				or(mw.ustring.match(tabela_parametrow_szablonu[0],"^[Pp]rostaStronaStart$")~=nil)    		
    				)
    	    	then
    				tabela_listy_danych_analizy_ksiazki.formatowanie="tak";
    			end;
    		end;
    	end;
    	local znak;
    	local kod;
    	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,_=mw.ustring.gsub(elementy_w_tablicy_obiekty[1],"%d+$","");
              			if((not link)and (not obiekty_modul.nienumerowane[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, tabela_listy_danych_analizy_ksiazki, 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 tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              						      	  local uchwyt_obiektu= tabela_parametrow_szablonu["numeracja"] or tabela_parametrow_szablonu[elementy_w_tablicy_obiekty[5]];
              						      	  if(uchwyt_obiektu and not mw.ustring.match(uchwyt_obiektu,"^%s*$"))then
              						      	  	   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;
              			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[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_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki, wartosc_elementu, linkobiekt);
              							if(not tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              								local uchwyt_obiektu=tabela_parametrow_szablonu["uchwyt"] or tabela_parametrow_szablonu[1];
              								tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie=((alias)and szablon or "LinkObiekt")..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
              							end;
          				    		    czy_obsluzone=false;
              							break;
              						end;
              					else
              						local alias,szablon=funkcja_aliasow_2("Nagłówek");
              						if(alias)then
              							p.LinkowanieOgolnie(tabela_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki, "Nagłówek", linkobiekt);
              							czy_obsluzone=false;
              							if(not 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[1]];
              								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, tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,"Obiekt", czy_artukul_korzystany,obiekty_modul.obiekty[5]);
		               		if(czy_artukul_korzystany)then
              					if(not tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then 
              				    	 local uchwyt_obiektu=tabela_parametrow_szablonu["numeracja"] or tabela_parametrow_szablonu[obiekty_modul.obiekty[4]];
              				    	  tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="Wypowiedzenie"..":"..((uchwyt_obiektu)and uchwyt_obiektu or "");
              					end;			
          			    	end;
               			elseif(czy_artukul_korzystany)then
               				if(linkobiekt2)then
               					p.LinkowanieOgolnie(tabela_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki, "Obiekt", linkobiekt);
               					if(not 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"];
              			    		 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)do
              						local wzor_TOC=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_TOC.."$"))then
              							p.ZbieranieInformacjiTOC(tabela_parametrow_szablonu,tabela_listy_danych_analizy_ksiazki);
              							if(not 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];
              								local artykul=tabela_parametrow_szablonu["nazwa artykułu"] or tabela_parametrow_szablonu[1];
              								tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie="TOC:"..nazwa_ksiazki..((artykul)and ("/"..artykul) or "")
              							end;
              			    		end;
                				end;
                			end;
                		end;
                	end;
            	end;
        	end;
        end; 
   end;
   if(not tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni])then tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni]={};end;
   if(not tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki])then tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki]={};end;
   if(not tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki][nazwa_artykulu])then tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki][nazwa_artykulu]={};end;
   tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki][nazwa_artykulu].uchwyty_i_numeracje=tabela_listy_danych_analizy_ksiazki2;
   tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki][nazwa_artykulu].TOC=toc;
   return tabela_listy_danych_analizy_ksiazki;
end;
function p.SprawdzLinki(tabela_listy_danych_analizy_ksiazki,tabela_listy_danych_analizy_ksiazki2,link_obiekt_lub_wypowiedzenie, nazwa_obiektu1, nazwa_obiektu2, nazwa_przestrzeni, nazwa_ksiazki,nazwa_artykulu)
    if((not tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron[nazwa_obiektu2])or(nazwa_artykulu==""))then
    	for _, elementy_w_tablicy_obiekt_lub_wypowiedzenie in ipairs(link_obiekt_lub_wypowiedzenie) do
    		if(nazwa_artykulu=="")then 
       	    	p.ObiektyNaStronieGlownejKsiazki(tabela_listy_danych_analizy_ksiazki,nazwa_przestrzeni,nazwa_ksiazki,elementy_w_tablicy_obiekt_lub_wypowiedzenie,nazwa_obiektu1);
       		elseif(not tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron[nazwa_obiektu2])then
    			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 tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu1][1]) then
                			tabela_listy_danych_analizy_ksiazki.puste_parametry_szablonow_stronicowych_linkujacych[nazwa_obiektu1][1]=0;
                		end;
                		return;
            		elseif(tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron[nazwa_obiektu2]==nil)then
            			tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron[nazwa_obiektu2]=0;
                    	return;
            		end;
        		end;
    		end;
    	end;
    end;
end;
function p.PrzetworzMozliweWszystkieRodzajeObiektow(tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,numer_artykulu_w_ksiazce,obiekty_modul)
   for _,element_w_podtablicy_kategorii_bledow in pairs(obiekty_modul.tablica_obiektow)do
   	    local element_obiekty,_=mw.ustring.gsub(element_w_podtablicy_kategorii_bledow[1],"%d*$","");
		tabela_listy_danych_analizy_ksiazki=p.Sprawdzanie_i_numerowanie(tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,element_obiekty,numer_artykulu_w_ksiazce,obiekty_modul);
   end;
end;
function p.PrzetworzZebraneInformacje(tabela_listy_danych_analizy_ksiazki,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,value0 in pairs(tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu)do
		for nazwa_ksiazki,value in pairs(value0)do
	 		local nazwa_przestrzeni_nazw_strony=require("Module:Nazwy")["NAZWAPRZESTRZENIFUN"](nazwa_ksiazki);
        	--[[if(not ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)
        	       or(nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)
        	            or((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User)and(mw.ustring.match(nazwa_ksiazki,"^[^/]+/(.*)$")))
        	                  or((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks)and(mw.ustring.match(nazwa_ksiazki,"^%s*[Bb]rudnopis/(.*)$")))
        	))then
    			return tabela_listy_danych_analizy_ksiazki;
    		end;]]
    		for nazwa_artykulu, val in pairs(value) do
    			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
        				if(tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych)then 
     						if(tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni] and tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni][nazwa_ksiazki])then
     	   						for _, nazwa_artykulu1 in ipairs(tabela_listy_danych_analizy_ksiazki.lista_artykulow_w_ksiazkach_w_przestrzeniach_ksiazkowych[nazwa_przestrzeni][nazwa_ksiazki]) do
     								if(nazwa_artykulu1~=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;
 	    				end;
 	    			end;
     				if(czy_da_sie_numerowac_obiekty_ze_spisem_tresci)then
     					p.PrzetworzMozliweWszystkieRodzajeObiektow(tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,numer_obiektu_w_ksiazce,obiekty_modul);
    				elseif(not czy_da_sie_numerowac_obiekty_ze_spisem_tresci)then
            			p.PrzetworzMozliweWszystkieRodzajeObiektow(tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,0,obiekty_modul);
     	    		end;
    			else
            		   p.PrzetworzMozliweWszystkieRodzajeObiektow(tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu,0,obiekty_modul);
    			end;
			end;
		end;
	end;
    for _,obiekt in pairs(obiekty_modul.tablica_obiektow)do
     	local obiekt2,_=mw.ustring.gsub(obiekt[1],"%d+$","");
        p.SprawdzLinki(tabela_listy_danych_analizy_ksiazki,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(tabela_listy_danych_analizy_ksiazki, nazwa_przestrzeni,nazwa_ksiazki,nazwa_artykulu, nazwa_obiektu, numer_artykulu_w_ksiazce,obiekty_modul)
	local parametry_modul=require("Module:Parametry");
	local tabela_obiektu=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni][nazwa_ksiazki][nazwa_artykulu].uchwyty_i_numeracje[nazwa_obiektu];
	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((tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)
            				and(tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki==nazwa_ksiazki)
            					and(tabela_listy_danych_analizy_ksiazki.nazwa_artykulu==nazwa_artykulu)
            			    		and(not tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron[nazwa_obiektu])
            	)then
                	tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_korzystanych_stron[nazwa_obiektu]=0;
                	element_obiektu[2]=nil;
            	elseif((tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni~=nazwa_przestrzeni)
            			or(tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki~=nazwa_ksiazki)
            					or(tabela_listy_danych_analizy_ksiazki.nazwa_artykulu~=nazwa_artykulu))then
					p.DodawanieElementowDoTablicy(tabela_listy_danych_analizy_ksiazki.bledy_uchwytow_doloczonych_stron,nazwa_obiektu,nazwa_przestrzeni,nazwa_ksiazki);
            	end;
            	if(not obiekty_modul.nienumerowane[nazwa_obiektu])then
	            	tabela_obiektu[licznik2][2]=nil;
	            end;
            	czy_numerowac=false;
        	end;
		end;
    	if(czy_numerowac)then
    		if(not obiekty_modul.nienumerowane[nazwa_obiektu])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(tablist.blad_wewnetrzny_modulu_lua_stronicowego_parsera==nil)then
            		tabela_listy_danych_analizy_ksiazki.blad_wewnetrzny_modulu_lua_stronicowego_parsera=0
      			end;	
    		end;
    	end;
	end;
   return tabela_listy_danych_analizy_ksiazki;
end;
function p.NumerObiektu(frame, nazwa_obiektu)
  local pf=frame:getParent();
  local parametry_modul=require("Module:Parametry");
  local uchwyt_obiektu=(frame.args[2])and parametry_modul["OdstępyFun"](frame.args[2]) or nil;
  nazwa_strony=parametry_modul["OdstępyFun"](frame.args[1],"tak");
  nazwa_strony=require("Module:Parametry")["TransformacjaKoduZnakuDoZnakuŁancucha"](nazwa_strony);
  local parametry_modul=require("Module:Parametry");
  local nazwy_modul=require("Module:Nazwy");
  local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENIFUN"](nazwa_strony)
  local nazwa_ksiazki=parametry_modul["NazwaKsiążkiFun"](nazwa_strony);
  local nazwa_artykulu=parametry_modul["NazwaArtykułuKsiążkiFun"](nazwa_strony);
  local tabela_listy_danych_analizy_ksiazki=mw.loadData("Moduł:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;
  local link = function(adres_linku,nazwa_linku,klasa,styl)
       local czy_klasa=parametry_modul.CzyTak(klasa);
       local czy_styl=parametry_modul.CzyTak(styl);
       if(czy_klasa or czy_styl)then
       		spanramka=mw.html.create('span');
       		if(czy_klasa)then spanramka:attr("class",klasa);end;
       		if(czy_styl)then spanramka:attr('style',styl);end;
       		spanramka:wikitext(nazwa_linku);
       		local kod_html=spanramka:allDone();
       		return "[["..adres_linku.."|"..tostring(kod_html).."]]";
       else
       		return "[["..adres_linku.."|"..nazwa_linku.."]]";
       end;
  end;
  local wzor = function(uchwyt,numeracja,styl_main,styl_odstepu,pole_odstepu,styl_wzoru,klasa_wzoru,wzor,opis,opis2,klasa_opisu,styl_opisu,styl_opisu_2,wzor_opisu,wzor_opisu_2,styl_alternatywy_opisu,styl_alternatywy_opisu_2,pozycja_numeracji,klasa_numeracji,styl_numeracji,bez_automatu)
  	   divramka=mw.html.create('div');
  	   local parametry_modul=require("Module:Parametry");
  	   local czy_pozycja_numeracji_prawa=parametry_modul.CzyTak(pozycja_numeracji);
  	   if(parametry_modul.CzyTak(uchwyt))then
  	   		if(parametry_modul.CzyTak(bez_automatu))then
  	   			divramka:attr('id',"wzór_"..uchwyt);
  	   		else
  	   			if(numeracja)then
  	   				divramka:attr('id',"wzór_"..numeracja);
  	   			else
  	   				divramka:attr('id',"wzór_"..uchwyt);
  	   			end;
  	   		end;
  	   end;
  	   if(parametry_modul.CzyTak(styl_main))then
  	   		divramka:attr('style',styl_main);
  	   end;
  	   local uchwyt_fun=function()
  			if(parametry_modul.CzyTak(uchwyt))then
  				local divuchwytramka=mw.html.create('div');
  				divuchwytramka:attr('class',klasa_numeracji);
  				divuchwytramka:attr('style',styl_numeracji);
  				if(parametry_modul.CzyTak(bez_automatu))then
  	   				divuchwytramka:wikitext('(',uchwyt..")");
  	   			else
  	   				if(numeracja)then
  	   					divuchwytramka:wikitext('('..numeracja..")");
  	   				else
  	   					divuchwytramka:wikitext("(Niedopasowany uchwyt: "..uchwyt..")");
  	   				end;
  				end;
     			divramka:node(divuchwytramka);
  			end;
  	   end;
  	   local pole_odstepu_fun=function()
  			divramka:addClass("wzory");
  			local divramka2=mw.html.create('div');
  			divramka2:attr('style',styl_odstepu);
  			divramka2:wikitext(pole_odstepu);
  			divramka:node(divramka2);
  	   end;
  	   local opis_fun=function(opis,styl_opisu,wzor_opisu,styl_alternatywy_opisu)
  	        if(parametry_modul.CzyTak(opis))then
  	   			local divramka5=mw.html.create('div')
  	   			divramka5:attr('class',klasa_opisu)
  	   			divramka5:attr('style',styl_opisu)
  	   			divramka5:wikitext(wzor_opisu)
  	   			divramka:node(divramka5)
  			else
  	   			local divramka5=mw.html.create('div');
  	   			divramka5:attr('style',styl_alternatywy_opisu);
  	   			divramka:node(divramka5)
  	        end;
  	   end;
  	   if(not czy_pozycja_numeracji_prawa)then
  	   	   uchwyt_fun();
  	   else
  	   	   pole_odstepu_fun();
  	   end;
  	   opis_fun(opis2,styl_opisu_2,wzor_opisu_2,styl_alternatywy_opisu_2);
  	   local divramka4=mw.html.create('div');
  	   divramka4:attr('class',klasa_wzoru);
  	   divramka4:attr('style',styl_wzoru);
  	   divramka4:wikitext(wzor);
  	   divramka:node(divramka4);
       opis_fun(opis,styl_opisu,wzor_opisu,styl_alternatywy_opisu);
  	   if(czy_pozycja_numeracji_prawa)then
  	   	    uchwyt_fun();
  	   else
  	   	    pole_odstepu_fun();
  	   end;
  	   return tostring(divramka:allDone());
  end;
  local rysunek=function(uchwyt,numeracja,opis, rysunek, pozycja,rozmiar,klasa,styl,bez_automatu)
  	local divramka=mw.html.create('div');
  	divramka:attr('class',klasa);
  	divramka:attr('style',styl);
  	local czy_uchwyt=parametry_modul.CzyTak(uchwyt);
  	if(czy_uchwyt)then
  		if(numeracja)then
  			if(parametry_modul.CzyTak(bez_automatu))then
  				divramka:attr('id',"rysunek_"..uchwyt);
  			else
  				divramka:attr('id',"rysunek_"..numeracja);
  			end;
  		else
  			divramka:attr('id',"rysunek_"..uchwyt);
  		end;
  	end;
  	local czy_opis=parametry_modul.CzyTak(opis);
  	local wywolanie_rysunku="[[File:"..((rysunek)and rysunek or "Przykładowy rysunek.svg").."|thumb|"..(pozycja or "right").."|"..(rozmiar or "200px")..((czy_uchwyt or czy_opis)and ("|"..((parametry_modul.CzyTak(uchwyt))and "(Rys. "..((numeracja)and (parametry_modul.CzyTak(bez_automatu) and uchwyt or numeracja) or "Niedopasowany uchwyt: "..uchwyt)..")" or "").." "..opis) or "").."]]";
  	divramka:wikitext(wywolanie_rysunku);
  	return tostring(divramka:allDone());
  end;
  local wypowiedzenie = function(uchwyt,przedrostek,numeracja,klasa,styl,przedrostek2,rodzaj,kogo,czego,jakie,styl_naglowka,styl_tekstu,tekst,bez_automatu)
  	local divramka=mw.html.create('div');
  	if(parametry_modul.CzyTak(uchwyt))then
  		if(parametry_modul.CzyTak(bez_automatu))then
  			divramka:attr('id',przedrostek.."_"..uchwyt);
  		else
  			divramka:attr('id',przedrostek.."_"..numeracja);
  		end;
  	end;
  	divramka:attr('class',klasa);
  	divramka:attr('style',styl);
  	local wikitext="";
  	if(parametry_modul.CzyTak(uchwyt))then
  		if(parametry_modul.CzyTak(bez_automatu))then
  			wikitext="("..przedrostek2.." "..uchwyt..")";
  		else
  			if(numeracja)then
  				wikitext="("..przedrostek2.." "..numeracja..")";
  			else
  				wikitext="("..przedrostek2.." Niedopawany uchwyt: "..uchwyt..")";
  			end;
  		end;
  	end;
  	if(parametry_modul.CzyTak(styl_naglowka))then
  		local spanramka=mw.html.create('span');
  		spanramka:attr('style',styl_naglowka);
  		spanramka:wikitext(rodzaj.." "..kogo.." "..czego.." "..jakie.." "..wikitext);
  		divramka:node(spanramka);
  	else
  		divramka:wikitext(rodzaj.." "..kogo.." "..czego.." "..jakie.." "..wikitext);
  	end;
  	divramka:wikitext('<BR>');
  	if(parametry_modul.CzyTak(styl_tekstu))then
  		local spanramka=mw.html.create('span');
  		spanramka:attr('style',styl_tekstu);
  		spanramka:wikitext(tekst);
  		divramka:node(spanramka);
  	else
  		divramka:wikitext(tekst);
  	end;
  	  	return tostring(divramka:allDone());
  end;
  local punkty = function(uchwyt,numeracja,przedrostek_id,klasa,styl,prefiks,bez_automatu)
  	local spanramka=mw.html.create('sup');
  	spanramka:attr('style',klasa);
  	if(parametry_modul.CzyTak(uchwyt))then
  		if(parametry_modul.CzyTak(bez_automatu))then
  			spanramka:attr('id',przsdrostek_id.."_"..uchwyt);
  		else
  			if(parametry_modul.CzyTak(numeracja))then
  				spanramka:attr('id',przedrostek_id.."_"..numeracja);
  			else
  				spanramka:attr('id',przedrostek_id.."_"..uchwyt);
  			end;
  		end;
  	end;
  	spanramka:attr('style',styl);
  	local smallramka=mw.html.create('small');
  	if(parametry_modul.CzyTak(uchwyt))then
  		if(parametry_modul.CzyTak(bez_automatu))then
  			smallramka:wikitext(prefiks..": "..uchwyt);
  		else
  			if(parametry_modul.CzyTak(numeracja))then
  				smallramka:wikitext('['..prefiks..": "..numeracja..']');
  			else
  				smallramka:wikitext('['..prefiks..": Niedopsowany uchwyt: "..uchwyt..']');
  			end;
  		end;
  	else
  		smallramka:wikitext('['..prefiks..": Niedopasowany uchwyt: brak uchwytu]");
  	end;
  	spanramka:node(smallramka);
  	return tostring(spanramka:allDone());
  end;
  local nazwa_strony_fun=function(nazwa_strony)
  	  if((tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)
         and(tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki==nazwa_ksiazki)
      		and (tabela_listy_danych_analizy_ksiazki.nazwa_artykulu==nazwa_artykulu))then
      		  return "";
      end;
      return  nazwa_strony;
  end;
  if(parametry_modul.CzyTak(frame.args["bez automatu"]))then
  	  if(frame.args["obiekt"])then
  		if(frame.args["obiekt"]=="link")then
  			local nazwa_strony=nazwa_strony_fun(nazwa_strony);
  			if(uchwyt_obiektu)then
      	    	return "("..link(nazwa_strony.."#"..frame.args["id"].."_"..uchwyt_obiektu,frame.args["przedrostek"]..uchwyt_obiektu,frame.args["klasa"],frame.args["styl"])..")";
      	    else
	            return "("..link(nazwa_strony.."#"..frame.args["id"].."_".."Nieznany uchwyt",frame.args["przedrostek"].."Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu"),frame.args["klasa"],frame.args["styl"])..")";
  			end;
  		elseif(frame.args["obiekt"]=="wzór")then
      	    return wzor(frame.args[2],frame.args[2],frame.args["styl główny"],frame.args["styl odstępu"],frame.args["pole odstępu"],frame.args["styl wzoru"],frame.args["klasa wzoru"],frame.args["wzór"],frame.args["opis"],frame.args["opis 2"],frame.args["klasa opisu"],frame.args["styl opisu"],frame.args["styl opisu 2"],frame.args["wzór opisu"],frame.args["wzór opisu 2"],frame.args["styl alternatywy opisu"],frame.args["styl alternatywy opisu 2"],frame.args["pozycja numeracji"],frame.args["klasa numeracji"],frame.args["styl numeracji"],frame.args["bez automatu"]);
  		elseif(frame.args["obiekt"]=="rysunek")then
    		return rysunek(frame.args[2],frame.args[2],frame.args["opis"],frame.args["rysunek"],frame.args["pozycja"],frame.args["rozmiar"],frame.args["klasa"],frame.args["styl"],frame.args["bez automatu"]);
  		elseif(frame.args["obiekt"]=="wypowiedzenie")then
			return wypowiedzenie(frame.args[2],frame.args["przedrostek id"],frame.args[2],frame.args["klasa"],frame.args["styl"],frame.args["przedrostek numeracji"],frame.args["rodzaj"],frame.args["kogo"],frame.args["czego"],frame.args["jakie"],frame.args["styl nagłówka"],frame.args["styl tekstu"],frame.args["tekst"],frame.args["bez automatu"]);
  		elseif(frame.args["obiekt"]=="punkt")then
		  return punkty(frame.args[2],frame.args[2],frame.args["przedrostek_id"],frame.args["klasa"],frame.args["styl"],frame.args["prefiks"],frame.args["bez automatu"]);
        else
        	return uchwyt_obiektu;
  		end;
    else
    	return uchwyt_obiektu;
    end;
  end;
  local tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazkach_w_danej_przestrzeni=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni];
  if(tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazkach_w_danej_przestrzeni)then
		local tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazce=tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazkach_w_danej_przestrzeni[nazwa_ksiazki];
		if(tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazce)then
			local tabela_listy_analizy_na_stronie=tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazce[nazwa_artykulu]
			if(tabela_listy_analizy_na_stronie)then
				local tabela_listy_uchwytow_i_numeracji_na_stronie=tabela_listy_analizy_na_stronie.uchwyty_i_numeracje;
				if(tabela_listy_uchwytow_i_numeracji_na_stronie)then
  					local spis_uchwytow=tabela_listy_uchwytow_i_numeracji_na_stronie[nazwa_obiektu];
  					if(spis_uchwytow)then
  						if((uchwyt_obiektu)and(uchwyt_obiektu~=""))then
    						for _, dany_artykul in ipairs(spis_uchwytow)do
      							if(dany_artykul[1]==uchwyt_obiektu)then
      								if(nazwa_obiektu~="Nagłówek")then
      									if(frame.args["obiekt"])then
      										if(frame.args["obiekt"]=="link")then
      											local nazwa_strony=nazwa_strony_fun(nazwa_strony);
  					        					if(not dany_artykul[2])then 
  					        						return "("..link(nazwa_strony.."#"..frame.args["id"].."_"..uchwyt_obiektu,frame.args["przedrostek"].."Niedopasowany uchwyt: "..uchwyt_obiektu,frame.args["klasa"],frame.args["styl"])..")";
  					        					end;
      					    					return "("..link(nazwa_strony.."#"..frame.args["id"].."_"..dany_artykul[2],frame.args["przedrostek"]..dany_artykul[2],frame.args["klasa"],frame.args["styl"])..")";
      										elseif(frame.args["obiekt"]=="wzór")then
  					    				    	return wzor(frame.args[2],dany_artykul[2],frame.args["styl główny"],frame.args["styl odstępu"],frame.args["pole odstępu"],frame.args["styl wzoru"],frame.args["klasa wzoru"],frame.args["wzór"],frame.args["opis"],frame.args["opis 2"],frame.args["klasa opisu"],frame.args["styl opisu"],frame.args["styl opisu 2"],frame.args["wzór opisu"],frame.args["wzór opisu 2"],frame.args["styl alternatywy opisu"],frame.args["styl alternatywy opisu 2"],frame.args["pozycja numeracji"],frame.args["klasa numeracji"],frame.args["styl numeracji"],frame.args["bez automatu"]);
  					    					elseif(frame.args["obiekt"]=="rysunek")then
  					    						return rysunek(frame.args[2],dany_artykul[2],frame.args["opis"],frame.args["rysunek"],frame.args["pozycja"],frame.args["rozmiar"],frame.args["klasa"],frame.args["styl"],frame.args["bez automatu"]);
  					    					 elseif(frame.args["obiekt"]=="wypowiedzenie")then
												return wypowiedzenie(frame.args[2],frame.args["przedrostek id"],dany_artykul[2],frame.args["klasa"],frame.args["styl"],frame.args["przedrostek numeracji"],frame.args["rodzaj"],frame.args["kogo"],frame.args["czego"],frame.args["jakie"],frame.args["styl nagłówka"],frame.args["styl tekstu"],frame.args["tekst"],frame.args["bez automatu"]);	
										    elseif(frame.args["obiekt"]=="punkt")then
												return punkty(frame.args[2],dany_artykul[2],frame.args["przedrostek_id"],frame.args["klasa"],frame.args["styl"],frame.args["prefiks"],frame.args["bez automatu"]);
            								else
            									return ((dany_artykul[2])and dany_artykul[2] or "Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu"));
      										end;
			            				else
			            					   return ((dany_artykul[2])and dany_artykul[2] or "Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu"));
			            				end;
            						else
            							if(dany_artykul[2])then
            								local tytul_szablonu=frame.args["nazwa szablonu"] or parametry_modul.NazwaSzablonu(frame:getParent():getTitle());
            								if(tytul_szablonu=="LinkNagłówek")then
            									return link(dany_artykul[2][1],dany_artykul[2][2],frame.args["klasa"],frame.args["styl"])
            								elseif(tytul_szablonu=="LinkNagłówekTutaj")then
                        	    				return link(dany_artykul[2][1],"tutaj",frame.args["klasa"],frame.args["styl"])
            								end;
            							end;
        					      end;
            				end;	
        				end;
    				end;   
    			end;
			end;
		end;
	end;
  end;
  if(frame.args["obiekt"])then
	if(frame.args["obiekt"]=="link")then
		local nazwa_strony=nazwa_strony_fun(nazwa_strony);
		return "("..link(nazwa_strony.."#"..frame.args["id"].."_"..uchwyt_obiektu,frame.args["przedrostek"].."Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu"),frame.args["klasa"],frame.args["styl"])..")";
	elseif(frame.args["obiekt"]=="wzór")then
  	     return wzor(frame.args[2],nil,frame.args["styl główny"],frame.args["styl odstępu"],frame.args["pole odstępu"],frame.args["styl wzoru"],frame.args["klasa wzoru"],frame.args["wzór"],frame.args["opis"],frame.args["opis 2"],frame.args["klasa opisu"],frame.args["styl opisu"],frame.args["styl opisu 2"],frame.args["wzór opisu"],frame.args["wzór opisu 2"],frame.args["styl alternatywy opisu"],frame.args["styl alternatywy opisu 2"],frame.args["pozycja numeracji"],frame.args["klasa numeracji"],frame.args["styl numeracji"],frame.args["bez automatu"]);
	elseif(frame.args["obiekt"]=="rysunek")then
  		return rysunek(frame.args[2],nil,frame.args["opis"],frame.args["rysunek"],frame.args["pozycja"],frame.args["rozmiar"],frame.args["klasa"],frame.args["styl"],frame.args["bez automatu"]);
    elseif(frame.args["obiekt"]=="wypowiedzenie")then
			return wypowiedzenie(frame.args[2],frame.args["przedrostek id"],nil,frame.args["klasa"],frame.args["styl"],frame.args["przedrostek numeracji"],frame.args["rodzaj"],frame.args["kogo"],frame.args["czego"],frame.args["jakie"],frame.args["styl nagłówka"],frame.args["styl tekstu"],frame.args["tekst"],frame.args["bez automatu"]);
	elseif(frame.args["obiekt"]=="punkt")then
		  return punkty(frame.args[2],nil,frame.args["przedrostek_id"],frame.args["klasa"],frame.args["styl"],frame.args["prefiks"],frame.args["bez automatu"]);
  	else
  		 return "Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu");
  	end;
 else 					    				    
 	return "Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu");
 end;
end;
return p;