Moduł:StronicowyParser/Rozdziały

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.PodajRozdzial(linia)
	local liczba_rowna_sie=1;
    local naglowek="";
    while true do
        local przetwarzany_naglowek=mw.ustring.match(linia,"^\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
        	local parametry_modul=require("Module:Parametry");
            naglowek=parametry_modul["Odstępy"]{[1]=przetwarzany_naglowek,[2]="tak",};
            return naglowek,liczba_rowna_sie;
        end;
     end;
end;
function p.PodajRozdzialHNumer(linia)
	local liczba1,zawrtosc,liczba2=mw.ustring.match(linia,"<[Hh](%d+)[^<>]*>(.*)</[Hh](%d+)>");
	if(liczba1==liczba2)then
		return zawartosc,liczba1;
	end;
	return nil;
end;
function p.SprawdzCzyNaglowek(wiersz)
	local czy_naglowek=mw.ustring.match(wiersz,"^(=+[^=]*=+)%s*$");
	if(czy_naglowek)then return true,true;end;
	czy_naglowek=mw.ustring.match(wiersz,"<[Hh]%d+[^<>]*>(.+)</[Hh]%d+>");
	return czy_naglowek,false;
end;
function p.WierszHNumer(tekst)
	local iter_h=mw.ustring.gmatch(tekst,"(<[Hh]%d+[^<>]*>.*</[Hh]%d+>)");
	local techniczne_modul=require("Module:techniczne");
	for wiersz_h in iter_h do
	 	local wiersz_h_start=wiersz_h;
	 	wiersz_h,_=mw.ustring.gsub(wiersz_h,"\n"," ");
	 	wiersz_h="\n"..wiersz_h.."\n";
	 	wiersz_h_start=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](wiersz_h_start);
	 	wiersz_h=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](wiersz_h);
	 	tekst,_=mw.ustring.gsub(tekst,wiersz_h_start,wiersz_h);
	end;
    return tekst;
end;
function p.ParserPodajRozdzialTekstowy()
	local zacznij;local wprowadzenie;
	local zawsze=false;
	local stronicowyparser_obiekty_modul=mw.loadData('Module:StronicowyParser/obiekty');
	local parametry_modul=require("Module:Parametry");
	local tab_dozwolonych_szablonow_z_elementami_spisu_artykulow=stronicowyparser_obiekty_modul.tab_dozwolonych_szablonow_z_elementami_spisu_artykulow;
	local szablony={};
	local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne")
	return function(linia,nazwa_przestrzeni_nazw,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,okladka)
		if(not zawsze)then
			function __FUNKCJA(parametry)
   	   			local nazwa_szablonu=parametry[0];
   	   			local tab_kom=p.kompletnosc;
   	   			return tab_kom[nazwa_szablonu];
			 end;
      		local iter=mw.ustring.gmatch(linia,"([{%[][{%[].+[}%]][}%]])");
      		for wywolanie in iter do
   	   			local tab_2,tab_3,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(wywolanie,nazwa_przestrzeni_nazw,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,__FUNKCJA);
   	   			if(not kom)then
   	   				if((tab_2)and(tab_2[1])and(mw.ustring.match(tab_2[1],"^[Oo]kładka$")))then
   	   					zawsze=true;
   	   					return nil,nil,nil,nil;
   	   				end;
   	   			end;
   	   		end;
			if(not zacznij)then
				if(mw.ustring.match(linia,"^[^#:%*;%d%.].*[%.,:]%s*$"))then
					wprowadzenie=true;
				elseif((wprowadzenie)and(mw.ustring.match(linia,"^%s*$")))then
					zacznij=true;
					wprowadzenie=false;
				end
			elseif(mw.ustring.match(linia,"[^#:%*;%d%.].*[%.,:]%s*$"))then
				zacznij=false;
				wprowadzenie=true;
			end;
		end;
		if((not wprowadzenie) or zawsze)then
			local poczatek,numeracja, rozdzial=mw.ustring.match(linia,"^%s*([#:%*;]+)%s*([%d%.]-)%s*(.-)%s*$");
			if(not poczatek and not numeracja and not rozdzial)then
				numeracja, rozdzial=mw.ustring.match(linia,"^%s*([%d%.]+)%s*(.-)%s*$");
				if(numeracja and rozdzial)then poczatek="";end;
			end;
			if(rozdzial)then
				local czy_nieprawidlowe=mw.ustring.match(rozdzial,"{{.-}}");
				if(not czy_nieprawidlowe)then
					czy_nieprawidlowe=mw.ustring.match(rozdzial,"%[%[[^%[%]]-%]%]");
					if(czy_nieprawidlowe)then
						poczatek=nil;rozdzial=nil;numeracja=nil;
					end;
				else
					poczatek=nil;rozdzial=nil;numeracja=nil;
				end;
			else
				poczatek=nil;rozdzial=nil;numeracja=nil;
			end;
			if(not poczatek or not rozdzial)then
					linia=mw.ustring.gsub(linia,"<[^<>]+>","");
					rozdzial=mw.ustring.match(linia,"^%s*'+%s*([^{}%[%]']-[^:{}%[%]'])%s*'+%s*$");
					if(rozdzial)then
						if(not mw.ustring.match(rozdzial,"^.*!$"))then 
							return rozdzial,0,nil,nil;
						end;
					else
						rozdzial=mw.ustring.match(linia,"^%s*(%a[%a%s,:%.]-:)%s*$");
						if(rozdzial)then
							return rozdzial,0,nil,nil;
						end;
					end;
			else
				return rozdzial,(#poczatek*(-1)),poczatek,numeracja;
			end;
		end;
		return nil,nil,nil,nil;
	end;
end;
function p.TekstRozdzialuStrony(frame)
	local strona=frame.args[1];
	local id_rozdzialu1=frame.args[2] or "";
	local id_rozdzialu2=frame.args[3] or "";
	local title=mw.title.makeTitle('',strona);
	if((not title)or(not title.exists))then
		return nil;
	end;
	local tekst=title:getContent();
	return p.TekstRozdzialu(tekst,id_rozdzialu1,id_rozdzialu2);
end;
function p.ZwrocSekcjeNaglowkaStrony(frame)
	local strona=frame.args[1];
	local id_rozdzialu=frame.args[2] or "";
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"<[^<>]+>","");	 		
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"'+","");
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"^[%s_]+","");	 		
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"[%s_]+$","");	 		 	
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"[%s_]+","_");
	local title=mw.title.makeTitle('',strona);
	if((not title)or(not title.exists))then
		return nil;
	end;
	local tekst=title:getContent();
    tekst,_=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
	tekst,_=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
	
	tekst,_=mw.ustring.gsub(tekst,"\n\n","\n \n");
    tekst=p.WierszHNumer(tekst);
	
	local iter=mw.ustring.gmatch(tekst,"([^\n]+)");
	local tab_rozdzialy={};
	local linki=require("Module:Linki");
	for wiersz in iter do
	 	local czy_naglowek,czy_naglowek_wiki=p.SprawdzCzyNaglowek(wiersz);
	 	if(czy_naglowek)then
	 		 local nazwa_rozdzialu,poziom_rozdzialu;
	 		 if(czy_naglowek_wiki)then
	 			nazwa_rozdzialu,poziom_rozdzialu=p.PodajRozdzial(wiersz);
	 		 else
	 		 	nazwa_rozdzialu,poziom_rozdzialu=p.PodajRozdzialHNumer(wiersz);
	 		 end;
	 		 nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu);
	 		 local nazwa_rozdzialu_aktualna=nazwa_rozdzialu;
             nazwa_rozdzialu=linki["UsuńKategorie"](nazwa_rozdzialu);
             nazwa_rozdzialu=linki["UsuńZnaczniki"](nazwa_rozdzialu);
             nazwa_rozdzialu=linki["UsuńSzablonStylów"](nazwa_rozdzialu);
             nazwa_rozdzialu=linki["UsuńWywołaniaPlików"](nazwa_rozdzialu);
             nazwa_rozdzialu=linki["UsuńInterwiki"](nazwa_rozdzialu);
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"<[^<>]+>","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"'+","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"^[%s_]+","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"[%s_]+$","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"[%s_]+","_");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"%[%[:?([^%[%]|]+)%]%]","%1");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"%[%[:?([^%[%]|]+)|([^%[%]|]*)(.*)%]%]","%2");
	 	     local c=1;
	 		 for i=1,#tab_rozdzialy,1 do
	 		 	if(tab_rozdzialy[i]==nazwa_rozdzialu)then
	 		 		c=c+1;
	 		 	end;
	 		 end;
	 		 if(c>1)then
	 		 	nazwa_rozdzialu=nazwa_rozdzialu.."_"..c;
	 		 end;
	 		 if(id_rozdzialu==nazwa_rozdzialu)then
	 		 	return frame:preprocess(nazwa_rozdzialu_aktualna);
	 		 end;
	 	end;
	end;
	return nil;
end;
function p.KtoraSekcjaStrony(frame)
	local strona=frame.args[1];
	local id_rozdzialu=frame.args[2] or "";
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"<[^<>]+>","");	 		
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"'+","");
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"^[%s_]+","");	 		
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"[%s_]+$","");	 		 	
	id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"[%s_]+","_");
	local title=mw.title.makeTitle('',strona);
	if((not title)or(not title.exists))then
		return nil;
	end;
	local tekst=title:getContent();
    tekst,_=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
	tekst,_=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
	
	 tekst,_=mw.ustring.gsub(tekst,"\n\n","\n \n");
     tekst=p.WierszHNumer(tekst);
	
	local iter=mw.ustring.gmatch(tekst,"([^\n]+)");
	local tab_rozdzialy={};
	local ile=1;
	local linki=require("Module:Linki");
	for wiersz in iter do
	 	local czy_naglowek,czy_naglowek_wiki=p.SprawdzCzyNaglowek(wiersz);
	 	if(czy_naglowek)then
	 		 local nazwa_rozdzialu,poziom_rozdzialu;
	 		 if(czy_naglowek_wiki)then
	 			nazwa_rozdzialu,poziom_rozdzialu=p.PodajRozdzial(wiersz);
	 		 else
	 		 	nazwa_rozdzialu,poziom_rozdzialu=p.PodajRozdzialHNumer(wiersz);
	 		 end;
	 		 nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu);
	 		 nazwa_rozdzialu=linki["UsuńKategorie"](nazwa_rozdzialu);
             nazwa_rozdzialu=linki["UsuńZnaczniki"](nazwa_rozdzialu);
             nazwa_rozdzialu=linki["UsuńSzablonStylów"](nazwa_rozdzialu);
             nazwa_rozdzialu=linki["UsuńWywołaniaPlików"](nazwa_rozdzialu);
             nazwa_rozdzialu=linki["UsuńInterwiki"](nazwa_rozdzialu);
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"<[^<>]+>","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"'+","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"^[%s_]+","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"[%s_]+$","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"[%s_]+","_");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"%[%[:?([^%[%]|]+)%]%]","%1");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"%[%[:?([^%[%]|]+)|([^%[%]|]*)(.*)%]%]","%2");
	 	     local c=1;
	 		 for i=1,#tab_rozdzialy,1 do
	 		 	if(tab_rozdzialy[i]==nazwa_rozdzialu)then
	 		 		c=c+1;
	 		 	end;
	 		 end;
	 		 if(c>1)then
	 		 	nazwa_rozdzialu=nazwa_rozdzialu.."_"..c;
	 		 end;
	 		 table.insert(tab_rozdzialy,nazwa_rozdzialu);
	 		 if(id_rozdzialu==nazwa_rozdzialu)then
	 		 	return ile;
	 		 end;
	 		 ile=ile+1;
	 	end
	end;
    return nil;
end;
function p.TekstRozdzialu(tekst,id_rozdzialu1,id_rozdzialu2)
     id_rozdzialu1,_=mw.ustring.gsub(id_rozdzialu1,"<[^<>]+>","");	 		
	 id_rozdzialu1,_=mw.ustring.gsub(id_rozdzialu1,"'+","");
	 id_rozdzialu1,_=mw.ustring.gsub(id_rozdzialu1,"^[%s_]+","");	 		
	 id_rozdzialu1,_=mw.ustring.gsub(id_rozdzialu1,"[%s_]+$","");	 		 	
	 id_rozdzialu1,_=mw.ustring.gsub(id_rozdzialu1,"[%s_]+","_");	 		 
	 
	 id_rozdzialu2,_=mw.ustring.gsub(id_rozdzialu2,"<[^<>]+>","");	 		
	 id_rozdzialu2,_=mw.ustring.gsub(id_rozdzialu2,"'+","");
	 id_rozdzialu2,_=mw.ustring.gsub(id_rozdzialu2,"^[%s_]+","");	 		
	 id_rozdzialu2,_=mw.ustring.gsub(id_rozdzialu2,"[%s_]+$","");	 		 	
	 id_rozdzialu2,_=mw.ustring.gsub(id_rozdzialu2,"[%s_]+","_");	 
	 
	 tekst,_=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
	 tekst,_=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
	 
	 tekst,_=mw.ustring.gsub(tekst,"\n\n","\n \n");
     tekst=p.WierszHNumer(tekst);
	 
	 local iter=mw.ustring.gmatch(tekst,"([^\n]+)");
	 local tab_rozdzialy={};
	 local str=""
	 local nazwa_rozdzialu_aktualna;
	 local poziom_rozdzialu_aktualny;
	 for wiersz in iter do
	 	local czy_naglowek,czy_naglowek_wiki=p.SprawdzCzyNaglowek(wiersz);
	 	if(czy_naglowek)then
	 		 local nazwa_rozdzialu,poziom_rozdzialu;
	 		 if(czy_naglowek_wiki)then
	 			nazwa_rozdzialu,poziom_rozdzialu=p.PodajRozdzial(wiersz);
	 		 else
	 		 	nazwa_rozdzialu,poziom_rozdzialu=p.PodajRozdzialHNumer(wiersz);
	 		 end;
	 		 nazwa_rozdzialu=mw.getCurrentFrame():preprocess(nazwa_rozdzialu);
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"<[^<>]+>","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"'+","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"^[%s_]+","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"[%s_]+$","");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"[%s_]+","_");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"%[%[:?([^%[%]|]+)%]%]","%1");
	 		 nazwa_rozdzialu,_=mw.ustring.gsub(nazwa_rozdzialu,"%[%[:?([^%[%]|]+)|([^%[%]|]*)(.*)%]%]","%2");
	 		 
	 		 local c=1;
	 		 for i=1,#tab_rozdzialy,1 do
	 		 	if(tab_rozdzialy[i]==nazwa_rozdzialu)then
	 		 		c=c+1;
	 		 	end;
	 		 end;
	 		 if(c>1)then
	 		 	nazwa_rozdzialu=nazwa_rozdzialu.."_"..c;
	 		 end;
	 		 table.insert(tab_rozdzialy,nazwa_rozdzialu);
	 		 if(((nazwa_rozdzialu_aktualna)and(nazwa_rozdzialu_aktualna==id_rozdzialu1))
	 		 	       and((((id_rozdzialu2=="")or(not id_rozdzialu2))and(poziom_rozdzialu<=poziom_rozdzialu_aktualny))or(nazwa_rozdzialu==id_rozdzialu2)))then
	 		 	return str;
	 		 end;
	 		 if((id_rozdzialu1~="")and(nazwa_rozdzialu==id_rozdzialu1))then
	 		 	nazwa_rozdzialu_aktualna=nazwa_rozdzialu;
	 		 	poziom_rozdzialu_aktualny=poziom_rozdzialu;
	 		 	str="";
	 		 elseif(id_rozdzialu1=="")then
	 		 	nazwa_rozdzialu_aktualna="";
	 		 	poziom_rozdzialu_aktualny=0;
	 		 	if(id_rozdzialu2=="")then
	 		 		return str;
	 		 	elseif(nazwa_rozdzialu==id_rozdzialu2)then
	 		 		return str;
	 		 	else
	 		 		str=(str~="")and (str.."\n"..wiersz) or wiersz;
	 		 	end;
	 		 else
	 			str=(str~="")and (str.."\n"..wiersz) or wiersz;
	 		 end;
	    else
	    	str=(str~="")and (str.."\n"..wiersz) or wiersz;
	 	end;
	 end;
	 if((id_rozdzialu1)and(id_rozdzialu1==""))then
	 		return str;
	 elseif((nazwa_rozdzialu_aktualna)and(nazwa_rozdzialu_aktualna==id_rozdzialu1))then
	 		return str;
	 end;
	 return "";
end;
p.kompletnosc={
   ["Kompletność"]=true,
   ["Kompletność junior"]=true,
   ["Kompletność krótka"]=true,
   ["Książka"]=true,
}
function p.ZawartoscSzablonowFormatowaniaTresci(szablon,nazwa_szablonu)
	local stronicowyparser_obiekty_modul=require("Module:StronicowyParser/obiekty");
	local tab_dozwolonych_szablonow_z_elementami_spisu_artykulow=stronicowyparser_obiekty_modul.tab_dozwolonych_szablonow_z_elementami_spisu_artykulow;
	local techniczne_modul=require("Module:Techniczne");
	local nazwa_szablonu=nazwa_szablonu or techniczne_modul["NazwaSzablonuWywołania"](szablon);
    for name,ktore in pairs(tab_dozwolonych_szablonow_z_elementami_spisu_artykulow)do			
    	if(name==nazwa_szablonu)then
    		local tabela_parametrow_szablonu=techniczne_modul["ParsujWywołanieSzablonu"](szablon,true);
    		local tab=mw.text.split(tostring(ktore),"%s*;%s*",false);
    		local wynik="";
    		for _,num in pairs(tab)do
    			for parametr,wartosc in pairs(tabela_parametrow_szablonu)do
    				if(mw.ustring.match(parametr,"^"..tostring(num).."$"))then
    					wynik=wynik..wartosc;
    				end;
    			end;
    		end;
    		return wynik;
    	end;
    end;
end;
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_zakodowac,tablica_analizy_dany_modul)
   	local tekst=tekst_rozwiniety_calego_artykulu;
   	local nazwy_modul=require("Module:Nazwy");
   	local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
    
    local czy_tabela_kodowania=(tablica_analizy_dany_modul~=nil);
    local tablica_analizy_dany_modul=tablica_analizy_dany_modul or {};
    
    local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
    local parametry_modul=require("Module:Parametry");
    
   	tekst=(czy_zakodowac and (not czy_tabela_kodowania))and stronicowyparser_potrzebne_modul:KodujStroneObiektowa(tekst,nil,tablica_analizy_dany_modul,nil,function(szablon,obiekt,kod)
   		if(obiekt=="TEMPLATE")then
			return p.ZawartoscSzablonowFormatowaniaTresci(szablon);
    	end;
   	end) or tekst;
   	
   	tekst,_=mw.ustring.gsub(tekst,"\n\n","\n \n");
   	tekst,_=mw.ustring.gsub(tekst,"<!%-%-.-%-%->","");
   	local iter=mw.ustring.gmatch(tekst,"([^\n]+)");
   	local naglowek_aktualnego_rozdzialu;
   	local poziom_aktualnego_rozdzialu;
   	local poczatek_aktualnego_rozdzialu;
   	local numeracja_aktualnego_rozdzialu;
   	local czy_koniec=false;
   	local zaczynaj=((not czy_rozdzialy_analizowac)and true or nil);
   	local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
   	local techniczne_modul=require("Module:Techniczne");
   	local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
   	local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
    local techniczne_modul=require("Module:Techniczne");
    local elementy_spisu_tresci=stronicowyparser_obiekty_modul.elementy_spisu_tresci;
   	local parser=p.ParserPodajRozdzialTekstowy();
   	local iter2=nil;
   	local czy_tak=nil;
   	return function()
   	   	local str="";
   	   	local linia;
   	   	local function IterMain()
        	for linia in iter do
   	   			local nazwa_rozdzialu;local poziom_rozdzialu;local poczatek_rozdzialu;local numeracja_rozdzialu;
   	   			if(czy_rozdzialy_analizowac)then
   	   				local linia=stronicowyparser_potrzebne_modul:SkladajSzablonoweWywolanie(linia,nil,tablica_analizy_dany_modul);
   	   				nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu=parser(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci);
   	   			else
   	   				nazwa_rozdzialu=nil;
   	   			end;
      			if(not nazwa_rozdzialu)then
   	   	   	    	nazwa_rozdzialu=mw.ustring.match(linia,"^(=[^\n]+=)%s*$");
      				if(not nazwa_rozdzialu) then
   	   					if(not zaczynaj)then
   	   				    	local function Wystepowanie(linia)
   	   								local function RozwazajLinie(wystepowanie_linkow)
   	   									if(wystepowanie_linkow)then
   	   										local function __FUNKCJA(parametry)
   	   											local nazwa_szablonu=parametry[0];
   	   											local tab_kom=p.kompletnosc;
   	   											return tab_kom[nazwa_szablonu];
   	   										end;
   	   										local tab_2,tab_3,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(wystepowanie_linkow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,__FUNKCJA);
   	   										if(not kom)then
   	   											if((tab_2)and(tab_2[1])and(not mw.ustring.match(tab_2[1],"^[Oo]kładka$")))then
   	   												return 1;
   	   											end;
   	   										else
   	   											return 0;
   	   										end;
   	   									end;
   	   								end;
   	   						    	local function RozwazajObiekty(wystepowanie_linkow)
   	   						    		if(wystepowanie_linkow)then
   	   						    			local wystepowanie_linku_lub_szablonu=mw.ustring.match(wystepowanie_linkow,"^%s*(%[%[[^%[%]]+%]%])") or mw.ustring.match(wystepowanie_linkow,"^%s*{{[^{}]+}}")
   	   						    			if(not wystepowanie_linku_lub_szablonu)then return;end;
   	   						    			local tak=nil;
   	   						    			local iter=mw.ustring.gmatch(wystepowanie_linkow,"(%[%[([^%[%]]+)%]%])");
   	   						    			for poz in iter do
   	   						    				local wartosc=RozwazajLinie(poz);
   	   						    				if(not wartosc)then return;end;
   	   						    				tak=tak or (wartosc==1);
   	   						    			end;
   	   						    
   	   						    			local iter=mw.ustring.gmatch(wystepowanie_linkow,"({{[^{}]+}})")
   	   						    			for poz in iter do
   	   						    				local wartosc=RozwazajLinie(poz);
   	   						    				if(not wartosc)then return;end;
   	   						    				tak=tak or (wartosc==1);
   	   						    			end;
   	   						    			return tak;
   	   						    		end;
   	   				    			end;
   	   				    			local wystepowanie_linkow=mw.ustring.match(linia,"^[#:%*;%d%.]*%s*'*%s*(.+)$");
   	   				    			local tak=nil;
   	   				    			if(czy_zakodowac)then
   	   				    				wystepowanie_linkow=wystepowanie_linkow and stronicowyparser_potrzebne_modul:SkladajSzablonoweWywolanie(wystepowanie_linkow,nil,tablica_analizy_dany_modul,function(szablon,kod,obiekt)
   	   				    					   	   		if((obiekt=="LINKW")or(obiekt=="TEMPLATE"))then
    														return szablon;
   	   													end;
   	   													return "";
   	   				    							end,
      				    							function(szablon,kod,obiekt,tekst)
   	   				    								if(not tak)then
   	   				    									tak=tak or RozwazajObiekty(tekst);
   	   				    								end;
   	   				    							end) or nil;
   	   				    			else
   	   				    				tak=RozwazajObiekty(wystepowanie_linkow);
   	   				    			end;
   	   				    			if(tak)then
   	   				    				nazwa_rozdzialu="Spis treści";
   	   									poziom_rozdzialu=nil;
   	   									str=((str~="")and (str.."\n"..linia) or linia);
   	   									zaczynaj=true;
   	   								else
   	   									nazwa_rozdzialu=nil;
   	   				    			end;
   	   				    	end;
      						Wystepowanie(linia);
   	   					end;
   	   				else
   	   					nazwa_rozdzialu,poziom_rozdzialu=p.PodajRozdzial(nazwa_rozdzialu);
   	   					zaczynaj=true;
      				end;
      			else
   	   				zaczynaj=true;      			
      			end;
   	   			if(nazwa_rozdzialu)then
   	   	   			if(not naglowek_aktualnego_rozdzialu)then
   	   	   	  			naglowek_aktualnego_rozdzialu=nazwa_rozdzialu;
   	   	   	  			poziom_aktualnego_rozdzialu=poziom_rozdzialu;
   	   	   	  			poczatek_aktualnego_rozdzialu=poczatek_rozdzialu;
   	   	   	  			numeracja_aktualnego_rozdzialu=numeracja_rozdzialu;
   	   	   			else
   	   	   				----------------------------------------------
   	   	   				local naglowek_posredni_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu;
   	   	   				local poziom_posredni_aktualnego_rozdzialu=poziom_aktualnego_rozdzialu;
   	   	   				local poczatek_posredni_aktualnego_rozdzialu=poczatek_aktualnego_rozdzialu;
   	   	   				local numeracja_posredni_aktualnego_rozdzialu=numeracja_aktualnego_rozdzialu;
   	   	   				----------------------------------------------
   	   	   	  			naglowek_aktualnego_rozdzialu=nazwa_rozdzialu;
   	   	   	  			poziom_aktualnego_rozdzialu=poziom_rozdzialu;
   	   	   	  			poczatek_aktualnego_rozdzialu=poczatek_rozdzialu;
   	   	   	  			
   	   					naglowek_posredni_aktualnego_rozdzialu=naglowek_posredni_aktualnego_rozdzialu 
   	   		                                      and (czy_zakodowac and stronicowyparser_potrzebne_modul:SkladajSzablonoweWywolanie(naglowek_posredni_aktualnego_rozdzialu,nil,tablica_analizy_dany_modul)
   	   		                                      	                   or naglowek_posredni_aktualnego_rozdzialu
   	   		                                      	   )
   	   		                                         or nil;
   	   	   				str=czy_zakodowac and stronicowyparser_potrzebne_modul:SkladajSzablonoweWywolanie(str,nil,tablica_analizy_dany_modul) or str;
   	   	   	  			return naglowek_posredni_aktualnego_rozdzialu,str,poziom_posredni_aktualnego_rozdzialu,poczatek_posredni_aktualnego_rozdzialu,numeracja_posredni_aktualnego_rozdzialu,true;
   	   	   			end;
   	   			else
   	   	   			if(naglowek_aktualnego_rozdzialu)then
   	   	   	  			str=((not czy_tak) and ((str~="")and (str.."\n"..linia) or linia) or str);
   	   	   			end;
   	   			end;
   	   		end;
   	   		if(czy_koniec)then return nil;end;
   	   		czy_koniec=true;
   	   		naglowek_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu 
   	   		                                      and (czy_zakodowac and stronicowyparser_potrzebne_modul:SkladajSzablonoweWywolanie(naglowek_aktualnego_rozdzialu,nil,tablica_analizy_dany_modul)
   	   		                                      	                   or naglowek_aktualnego_rozdzialu
   	   		                                      	   )
   	   		                                         or nil;
   	   	   	str=czy_zakodowac and stronicowyparser_potrzebne_modul:SkladajSzablonoweWywolanie(str,nil,tablica_analizy_dany_modul) or str;
   	   		return naglowek_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,true;
   		end;
	    ----
	    local naglowek_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_nie_nil=IterMain();
	    return naglowek_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_nie_nil;
   	 end;
end;
return p;