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 i=0;
	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={};
	return function(linia,nazwa_przestrzeni_nazw,nazwa_ksiazki,okladka)
		if(not zacznij)then
			if(mw.ustring.match(linia,"^[^#:%*;%d%.].*[%.,:]%s*$"))then
				wprowadzenie=true;
			elseif((not wprowadzenie)and(mw.ustring.match(linia,"^[#:%*;%d%.]")))then
				wprowadzenie=false;
			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;
		local szablon=mw.ustring.match(linia,"^.*{{([^|{}]+)|[^{}]*$");
		if(szablon)then
			szablon=parametry_modul["Odstępy"](szablon,"tak");
			szablon=mw.getContentLanguage():ucfirst(szablon);
			if(not tab_dozwolonych_szablonow_z_elementami_spisu_artykulow[szablon])then
				table.insert(szablony,szablon);
			end;
		end;
		if((szablon)and(#szablony>0)and(not tab_dozwolonych_szablonow_z_elementami_spisu_artykulow[szablony[#szablony]]))then
			i=i+1;
		end;
		if((not wprowadzenie)and(i<=0))then
			local poczatek, rozdzial=mw.ustring.match(linia,"^%s*([#:%*;%d%.]+[#:%*;%d%.%s]-)%s*([^{}%[%]]-)%s*$");
			if(not poczatek or not rozdzial)then
				if(not mw.ustring.match(linia,"^.*[,%.]%s*$"))then
					rozdzial=mw.ustring.match(linia,"^%s*'+%s*([^{}%[%]']*[^:{}%[%]'])%s*'+%s*$");
					if(rozdzial)then
						return rozdzial,0,nil,true;
					end;
				end;
			else
				if(not mw.ustring.match(linia,"^.*[,%.]%s*$"))then
					return rozdzial,(#poczatek*(-1)),poczatek,true;
				end;
			end;
		end;
		if((#szablony>0)and(not tab_dozwolonych_szablonow_z_elementami_spisu_artykulow[szablony[#szablony]])and(mw.ustring.match(linia,"^[^{}]*}}.*$")))then 
			i=i-1;
			if(i<0)then i=0;end;
			table.remove(szablony,#szablony);
		end;
		return nil,nil,nil,((i<=0) and true or false);
	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.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_ksiazki, czy_rozdzialy_analizowac)
   	local tekst=tekst_rozwiniety_calego_artykulu;
   	tekst,_=mw.ustring.gsub(tekst,"\n\n","\n \n");
   	local iter=mw.ustring.gmatch(tekst,"([^\n]+)");
   	local naglowek_aktualnego_rozdzialu;
   	local poziom_aktualnego_rozdzialu;
   	local poczatek_aktualnego_rozdzialu;
   	local czy_koniec=false;
   	local zaczynaj=nil;
   	local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały");
   	local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne")
   	return function()
   	   	local str="";
   	   	local linia;
   	   	local czy_dalej=true;
   	   	local parser=p.ParserPodajRozdzialTekstowy();
        for linia in iter do
   	   	   local nazwa_rozdzialu;local poziom_rozdzialu;local poczatek_rozdzialu;
   	   	   if(czy_rozdzialy_analizowac)then
   	   			nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,czy_dalej=parser(linia,nazwa_przestrzeni,nazwa_ksiazki);
   	   		else
   	   			nazwa_rozdzialu=nil;
   	   	   end;
      	   if((not nazwa_rozdzialu)and(czy_dalej))then
   	   	   	    nazwa_rozdzialu=mw.ustring.match(linia,"^(=[^\n]+=)%s*$");
      			if(not nazwa_rozdzialu)then
   	   				if(not zaczynaj)then
   	   				    function Wystepowanie(linia)
   	   							function RozwazajLinie(wystepowanie_linkow)
   	   								if(wystepowanie_linkow)then
   	   									local stronicowyparser_dalszefunkcje_modul=require("Module:StronicowyParser/DalszeFunkcje");
   	   									function __FUNKCJA(parametry)
   	   										local nazwa_szablonu=parametry[0];
   	   										local tab_kom=p.kompletnosc;
   	   										return tab_kom[nazwa_szablonu];
   	   									end;
   	   									local artykul,nazwa,link_szablon,id,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(wystepowanie_linkow,nazwa_przestrzeni,nazwa_ksiazki,__FUNKCJA);
   	   									if(not kom)then
   	   										if((artykul)and(not mw.ustring.match(artykul,"[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=RozwazajObiekty(wystepowanie_linkow,pozostale);
   	   				    		if(tak)then
   	   				    			nazwa_rozdzialu="Spis treści";
   	   								poziom_rozdzialu=0;
   	   								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;
   	   	   		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;
   	   	   			----------------------------------------------
   	   	   	  		naglowek_aktualnego_rozdzialu=nazwa_rozdzialu;
   	   	   	  		poziom_aktualnego_rozdzialu=poziom_rozdzialu;
   	   	   	  		poczatek_aktualnego_rozdzialu=poczatek_rozdzialu;
   	   	   	  		
   	   	   	  		return naglowek_posredni_aktualnego_rozdzialu,str,poziom_posredni_aktualnego_rozdzialu,poczatek_posredni_aktualnego_rozdzialu;
   	   	   		end;
   	   	   else
   	   	   		if(naglowek_aktualnego_rozdzialu)then
   	   	   	  		str=((str~="")and (str.."\n"..linia) or linia);
   	   	   		end;
   	   	   end;
   	   	end;
   	   	if(czy_koniec)then return nil;end;
   	   	czy_koniec=true;
   	   	return naglowek_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu;
   	 end;
end;
return p;