Moduł:StronicowyParser/Rozdziały

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [stwórz] [odśwież]
local p={}
function p.PodajNapisPoziomuWprowadzeniaTekstu(linia)
	if(mw.ustring.match(linia,"^%s*=*%s*$"))then
		return nil,0;
	end;
    local rowna_lewy=mw.ustring.match(linia,"^(=+)");
    local rowna_prawy=mw.ustring.match(linia,"(=+)%s*$");
    if((rowna_lewy)and(rowna_prawy))then
    	local min_rowna=math.min(#rowna_lewy,#rowna_prawy);
    	local str_min_rowna=mw.ustring.rep("=",min_rowna);
    	local naglowek=mw.ustring.match(linia,"^%s*"..str_min_rowna.."([^\n]+)"..str_min_rowna.."%s*$");
    	if(not naglowek)then
    		return nil,0;
    	end;
    	local naglowek=mw.text.trim(naglowek);
    	return naglowek,min_rowna;
    else
        return nil,0;
    end;
end;
function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(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.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(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.CzyJestJakikolwiekLinkArtykularnyTekstu(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
	-----
	local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
	
    local linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.linki_szablony_elementy_spisu_rzeczy;
    local inne_linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy;
	-----
	local szablonowe_modul=require("Module:Szablonowe");
	local techniczne_modul=require("Module:Techniczne");
	local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
	-----
	local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
	for szablon,obiekt,kod in iter do
		if(obiekt=="SZABLON")then 
			local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
				if((linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod)))then
					return true;
				end;
			end);
			if(wynik)then return wynik;end;
		elseif(obiekt=="LINKW")then
			return true;
		elseif((obiekt=="MATH")or(obiekt=="ŹRÓDŁO"))then
			return true;
		end;
	end;
	return false;
end;
function p.CzyJestInnySpecjalnyTekstowyObiekt(tekst,tablica_analizy_obiektow_strony_dany_modul)
	local szablonowe_modul=require("Module:Szablonowe");
	-----
	local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul);
	for szablon,obiekt,kod in iter do
		if((obiekt=="INNEPRE")or(obiekt=="PRE")or(obiekt=="ŹRÓDŁO")or(obiekt=="MATH")or(obiekt=="GALERIA")or(obiekt=="MAPAOBRAZU"))then
			return true;
		end;
	end;
	return false;
end;
function p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja)
	local czy=mw.ustring.match(rozdzial_z_numeracja,"^[%d%.]+%s+") or mw.ustring.match(rozdzial_z_numeracja,"^[%d%.]+%s*$");
	if(czy)then
		local num=mw.ustring.match(rozdzial_z_numeracja,"^([%d%.]+)");
		local tab=mw.text.split(num,"%.",false);
		if(#tab==1)then
			if(mw.ustring.match(num,"^%d+$"))then
				return rozdzial_z_numeracja,"";
			end;
		else
			if(tab[#tab]=="")then tab[#tab]=nil;end;
		end;
		local tak=true;
		for i=1,#tab,1 do
			tak=tak and mw.ustring.match(tab[i],"^%d+$");
			if(not tak)then break;end;
		end;
		if(tak)then
			local numeracja=mw.ustring.match(rozdzial_z_numeracja,"^([%d%.]+)%s*");
			local rozdzial_bez_numeracji=mw.ustring.gsub(rozdzial_z_numeracja,"^[%d%.]+%s*","");
			return rozdzial_bez_numeracji,numeracja;
		end;
	end;
	return rozdzial_z_numeracja,"";
end;
function p.__FUNKCJA_KOMPLETOWANIA(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,tablica_danych_parametrow_szablonu_strony,kod)
	 local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
   	 local tab_kom=stronicowyparser_obiekty_modul.szablony_kompletowania_stron_woluminu;
   	 return tab_kom[nazwa_szablonu];
end;
function p.UruchamianieAnalizatoraSpisuRzeczyStrony()
	return true;
end;
function p.CzyZerowyNapisWprowadzeniuaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
	local rozdzial=mw.ustring.match(linia,"^('+..-:[%s_]*'*)[%s_]*$") or ((not mw.ustring.match(linia,"^%s+"))and(mw.ustring.match(linia,"^(..-:[%s_]*'*)[%s_]*$")));
	if(rozdzial)then
		return rozdzial;
	else
		local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
		local spis_tresci=stronicowyparser_analizaspisurzeczy_modul.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true);
		if(spis_tresci)then
			return linia,linia,0,nil,nil;
		else
			local rozdzial,main=nil,nil;
			if(not mw.ustring.match(linia,"^'+.-[^'%s].-'+.-[^'%s]%s*$"))then
				rozdzial,main=mw.ustring.match(linia,"^('+[%s_]*(..-)[%s_]*'*)[%s_]*$");
			end;
			if(rozdzial)then
				local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
				local rozdzial_main=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
				if(not mw.ustring.match(rozdzial_main,"^.*![%s_]*'*[%s_]*$"))then 
					if(mw.ustring.match(rozdzial_main,"^[^']-$"))then
						if((not mw.ustring.match(rozdzial_main,"^%u[%s_]"))and(not mw.ustring.match(rozdzial_main,"[%s_]%u$")))then
							return rozdzial;
						end;
					end;	
				end;
			end;
			return nil;
		end;
	end;
end;
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni_nazw,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)
	local zacznij;local wprowadzenie;local zawsze=false;local ostatnie=false;local bez_kropki=nil;local spac=nil;local nie_rozdzial=nil;local nie_numerowany=nil;
	local stronicowyparser_obiekty_modul=mw.loadData('Module:StronicowyParser/obiekty');
	local parametry_modul=require("Module:Parametry");
	local szablonowe_modul=require("Module:Szablonowe");
	local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
	local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści");
	local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
	local techniczne_modul=require("Module:Techniczne");
	local specjalne_modul=require("Module:Specjalne");
	local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=stronicowyparser_obiekty_modul.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
	local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy;
	
    local linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.linki_szablony_elementy_spisu_rzeczy;
    local inne_linki_szablony_elementy_spisu_rzeczy=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy;
	
	return function(linia,tak_ce_spis_tresci)
		----
		local rozdzial=nil;local numeracja=nil;
		local poczatek,rozdzial_z_numeracja=mw.ustring.match(linia,"^([#:%*;]+)%s*('*%s*[%d%.]*%s*.-%s*'*)%s*$");
		-----
		----
		if(not poczatek and not rozdzial_z_numeracja)then
			rozdzial_z_numeracja=mw.ustring.match(linia,"^([%d%.]+%s*.-)%s*$") or mw.ustring.match(linia,"^('+%s*[%d%.]+%s*.-)%s*'*%s*$")
			if(rozdzial_z_numeracja)then 
				poczatek="";
				rozdzial_z_numeracja=specjalne_modul["UsuńZnakiSpecjalne"](rozdzial_z_numeracja);
				rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"^(%s+)","");
				rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"(%s+)$","");
				rozdzial,numeracja=p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
			else
				local function LiniaCydzyslow(linia)
					local linia_wew_cudz=mw.ustring.match(linia,"^'+%s*(.-[^']+.-)%s*'+%s*$")
					if(not linia_wew_cudz)then return false;end;
					return not (mw.ustring.match(linia_wew_cudz,'^%u[%u%s]*$')
						         and((mw.ustring.match(linia_wew_cudz,"%s%u%s"))or(mw.ustring.match(linia_wew_cudz,"^%u%s"))or(mw.ustring.match(linia_wew_cudz,"%s%u$"))))
				end;
				if(LiniaCydzyslow(linia))then
					rozdzial=linia;
					poczatek="";
					numeracja="";
				else
					local html_modul=require("Module:Html");
					local url_iter=mw.ustring.gmatch(linia,"(%S+)");
					local czy_rozdzial=false;
					for url in url_iter do
						czy_rozdzial=czy_rozdzial or html_modul["SprawdźURL"](url);
						if(czy_rozdzial)then
							break;
						end;
					end;
					if(czy_rozdzial)then
						poczatek="";
						numeracja="";
						rozdzial=linia;
					end;
				end;
			end;
		else
			rozdzial_z_numeracja=specjalne_modul["UsuńZnakiSpecjalne"](rozdzial_z_numeracja);
			rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"^(%s+)","");
			rozdzial_z_numeracja=mw.ustring.gsub(rozdzial_z_numeracja,"(%s+)$","");
			rozdzial,numeracja=p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu(rozdzial_z_numeracja);
		end;
		local ze_specialnymi_obiektami=((rozdzial) and true or false);local czy_centrowanie=false;local tekst;
		if(rozdzial)then tekst=rozdzial;else tekst=linia;end;
		----
		local function WykluczenieNieodpowiednichNormSzablonowych(rozdzial)
			local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(rozdzial,nil,tablica_analizy_obiektow_strony_dany_modul);
      		for szablon,obiekt,kod in iterator do
      			if((obiekt=="GALERIA")or(obiekt=="ŹRÓDŁO")or(obiekt=="PRE")or(obiekt=="INNEPRE")or(obiekt=="WIKITABELA")or(obiekt=="MAPAOBRAZU"))then
      				return nil;
      			elseif(obiekt=="SZABLON")then
      				local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
      					if(stronicowyparser_obiekty_modul.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego[nazwa_szablonu])then
      						return true;
      					end;
      				end);
      				if(wynik)then return nil;end;
      			end;
      		end;
  			return true;
		end;
		local ZamienianieZnacznikoweNowejLinii=function(rozdzial)
			 rozdzial=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(rozdzial,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
			 	if(obiekt=="SZABLON")then
			 		local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   						if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then
   							return "\n \n";
   						end;
			 		end);
  					if(wynik)then return wynik;end;
			 	elseif(obiekt=="ZNACZNIK")then
      				local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_danych_parametrow_szablonu_strony,kod);
      				if((nazwa=="br")or(nazwa=="hr"))then
      					return "\n \n";
      				end;
			 	end;
  				return nil,true;
			 end);
  			 return rozdzial;
		end;
		local function SzablonoweCentrowanie(szablon,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
			local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
   	   		if(czy_ce)then
	   	   		local wartosc=tabela_parametrow_szablonu[czy_ce];
   		   		if(wartosc)then
   	   				if(mw.ustring.match(wartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return nil;end;
   	   				if(mw.ustring.match(wartosc,"!%s*'*%s*$"))then return nil;end;
   	   				numeracja,rozdzial=mw.ustring.match(wartosc,"^%s*([%d%.]*)%s*(.-)%s*$");
   	   				if(rozdzial)then
						local wynik=WykluczenieNieodpowiednichNormSzablonowych(rozdzial);
						if(not wynik)then
							numeracja=nil;rozdzial=nil;
							return nil;
						else
							rozdzial=ZamienianieZnacznikoweNowejLinii(rozdzial);
						end;
					end;
   	   			end;
   	   			return nil;
   	   		end;
		end;
      		
      	local function ZnacznikoweCentrowanie(szablon,nazwa,zawartosc,atrybuty)
      		if(zawartosc)then
      			if(nazwa=="center")then
      				if(mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return nil;end;
      				if(mw.ustring.match(zawartosc,"!%s*'*%s*$"))then return nil;end;
      				numeracja,rozdzial=mw.ustring.match(zawartosc,"^%s*([%d%.]*)%s*(.-)%s*$");
      				if(rozdzial)then
						local wynik=WykluczenieNieodpowiednichNormSzablonowych(rozdzial);
						if(not wynik)then
							numeracja=nil;rozdzial=nil;
							return nil;
						else
							rozdzial=ZamienianieZnacznikoweNowejLinii(rozdzial);
						end;
					end;
      			end;
      		end;
      		return nil;
      	end;
      	----
		local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
			if(obiekt=="SZABLON")then 
				local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   				---
					local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
					if(czy_ce)then
						ze_specialnymi_obiektami=true;
						czy_centrowanie=true;
						SzablonoweCentrowanie(szablon,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow);
						--if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
						return true;
					elseif((linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu])or(stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod)))then
						ze_specialnymi_obiektami=true;
						if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
						return true;
					end;
				end);
				if(wynik)then return;end;
			elseif(obiekt=="LINKW")then
				if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
				ze_specialnymi_obiektami=true;
				return nil;
			elseif((obiekt=="PRE")or(obiekt=="MATH")or(obiekt=="ŹRÓDŁO")or(obiekt=="INNEPRE"))then
				if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
				ze_specialnymi_obiektami=true;
				return nil;
			elseif(obiekt=="ZNACZNIK")then
				local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_danych_parametrow_szablonu_strony,kod);
      			if(zawartosc)then
      				if(nazwa=="center")then
      					ze_specialnymi_obiektami=true;
      					czy_centrowanie=true;
      					ZnacznikoweCentrowanie(szablon,nazwa,zawartosc,atrybuty);
      					--if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
      					return nil;
      				end;
      			end;
			end;
			return szablon;
		end);
		for szablon,obiekt,kod in iter do end;
		if(not ze_specialnymi_obiektami)then
			local rozdzial=p.CzyZerowyNapisWprowadzeniuaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
			if(rozdzial)then
				return linia,rozdzial,0,nil,nil;
			else
				return nil;
			end;
		elseif(czy_centrowanie)then
			if(tak_ce_spis_tresci)then
				if((rozdzial)and(numeracja))then
					if((not parametry_modul["CzyTakCiąg"](numeracja))and(not parametry_modul["CzyTakCiąg"](rozdzial)))then
						return nil,nil,nil,nil;
					end;
					return linia,rozdzial,2,nil,numeracja,true;
				end;
			end;
			return nil;
		elseif(rozdzial)then
			if((not parametry_modul["CzyTakCiąg"](numeracja))and(not parametry_modul["CzyTakCiąg"](rozdzial)))then
				return nil;
			end;
			return linia,rozdzial,(#poczatek*(-1)),poczatek,numeracja;
		else
			return nil;
		end;
		return nil;
	end;
end;
function p.TekstPoNapisieWprowadzeniaTekstuStrony(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.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2);
end;
function p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(tekst)
	tekst,_=mw.ustring.gsub(tekst,"^[%s_]+","");	 		
	tekst,_=mw.ustring.gsub(tekst,"[%s_]+$","");	 		 	
	tekst,_=mw.ustring.gsub(tekst,"[%s_]+","_");
	return tekst;
end;
function p.ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony(frame)
	local strona=frame.args[1];
	local id_rozdzialu=frame.args[2] or "";
	
	local specjalne_modul=require("Module:Specjalne");
	id_rozdzialu=specjalne_modul["UsuńKomentarze"](id_rozdzialu);
	id_rozdzialu=specjalne_modul["UsuńSzablonyStylów"](id_rozdzialu);
	id_rozdzialu=specjalne_modul["UsuńZnaczniki"](id_rozdzialu);
    id_rozdzialu=specjalne_modul["UsuńKategorie"](id_rozdzialu);
    id_rozdzialu=specjalne_modul["UsuńWywołaniaPlików"](id_rozdzialu);
    id_rozdzialu=specjalne_modul["UsuńInterwiki"](id_rozdzialu);
    id_rozdzialu=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](id_rozdzialu);
	id_rozdzialu=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](id_rozdzialu);
	id_rozdzialu=specjalne_modul["UsuńZnakiSpecjalne"](id_rozdzialu);
	id_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu);
	
	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 specjalne_modul=require("Module:Specjalne");
	for wiersz in iter do
	 	local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz);
	 	if(czy_naglowek)then
	 		 local nazwa_rozdzialu,poziom_rozdzialu;
	 		 if(czy_naglowek_wiki)then
	 			nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(wiersz);
	 		 else
	 		 	nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz);
	 		 end;
	 		 nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu);
	 		 local nazwa_rozdzialu_aktualna=nazwa_rozdzialu;
	 		 nazwa_rozdzialu=specjalne_modul["UsuńKomentarze"](nazwa_rozdzialu);
	 		 nazwa_rozdzialu=specjalne_modul["UsuńSzablonyStylów"](nazwa_rozdzialu);
	 		 nazwa_rozdzialu=specjalne_modul["UsuńZnaczniki"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["UsuńKategorie"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["UsuńWywołaniaPlików"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["UsuńInterwiki"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](nazwa_rozdzialu);
			 nazwa_rozdzialu=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](nazwa_rozdzialu);
			 nazwa_rozdzialu=specjalne_modul["UsuńZnakiSpecjalne"](nazwa_rozdzialu);
			 nazwa_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(nazwa_rozdzialu);
			 
	 	     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.NumerSekcjiStrony(frame)
	local strona=frame.args[1];
	local id_rozdzialu=frame.args[2] or "";
	
	local specjalne_modul=require("Module:Specjalne");
	id_rozdzialu=specjalne_modul["UsuńKomentarze"](id_rozdzialu);
	id_rozdzialu=specjalne_modul["UsuńSzablonyStylów"](id_rozdzialu);
	id_rozdzialu=specjalne_modul["UsuńZnaczniki"](id_rozdzialu);
    id_rozdzialu=specjalne_modul["UsuńKategorie"](id_rozdzialu);
    id_rozdzialu=specjalne_modul["UsuńWywołaniaPlików"](id_rozdzialu);
    id_rozdzialu=specjalne_modul["UsuńInterwiki"](id_rozdzialu);
	id_rozdzialu=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](id_rozdzialu);
	id_rozdzialu=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](id_rozdzialu);
	id_rozdzialu=specjalne_modul["UsuńZnakiSpecjalne"](id_rozdzialu);
	id_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu);
	
	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;
	
	for wiersz in iter do
	 	local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz);
	 	if(czy_naglowek)then
	 		 local nazwa_rozdzialu,poziom_rozdzialu;
	 		 if(czy_naglowek_wiki)then
	 			nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(wiersz);
	 		 else
	 		 	nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz);
	 		 end;
	 		 nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu);
	 		 nazwa_rozdzialu=specjalne_modul["UsuńKomentarze"](nazwa_rozdzialu);
	 		 nazwa_rozdzialu=specjalne_modul["UsuńSzablonyStylów"](nazwa_rozdzialu);
	 		 nazwa_rozdzialu=specjalne_modul["UsuńZnaczniki"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["UsuńKategorie"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["UsuńWywołaniaPlików"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["UsuńInterwiki"](nazwa_rozdzialu);
	 		 nazwa_rozdzialu=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](nazwa_rozdzialu);
			 nazwa_rozdzialu=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](nazwa_rozdzialu);
			 nazwa_rozdzialu=specjalne_modul["UsuńZnakiSpecjalne"](nazwa_rozdzialu);
			 nazwa_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(nazwa_rozdzialu);
			 
	 	     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.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2)
	 local specjalne_modul=require("Module:Specjalne");
	
	 id_rozdzialu1=specjalne_modul["UsuńKomentarze"](id_rozdzialu1);
	 id_rozdzialu1=specjalne_modul["UsuńSzablonyStylów"](id_rozdzialu1);
	 id_rozdzialu1=specjalne_modul["UsuńZnaczniki"](id_rozdzialu1);
     id_rozdzialu1=specjalne_modul["UsuńKategorie"](id_rozdzialu1);
     id_rozdzialu1=specjalne_modul["UsuńWywołaniaPlików"](id_rozdzialu1);
     id_rozdzialu1=specjalne_modul["UsuńInterwiki"](id_rozdzialu1);
     id_rozdzialu1=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](id_rozdzialu1);
     id_rozdzialu1=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](id_rozdzialu1);
     id_rozdzialu1=specjalne_modul["UsuńZnakiSpecjalne"](id_rozdzialu1);	
     id_rozdzialu1=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu1);
	 
	 id_rozdzialu2=specjalne_modul["UsuńKomentarze"](id_rozdzialu2);
	 id_rozdzialu2=specjalne_modul["UsuńSzablonyStylów"](id_rozdzialu2);
	 id_rozdzialu2=specjalne_modul["UsuńZnaczniki"](id_rozdzialu2);
     id_rozdzialu2=specjalne_modul["UsuńKategorie"](id_rozdzialu2);
     id_rozdzialu2=specjalne_modul["UsuńWywołaniaPlików"](id_rozdzialu2);
     id_rozdzialu2=specjalne_modul["UsuńInterwiki"](id_rozdzialu2);
     id_rozdzialu2=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](id_rozdzialu2);
	 id_rozdzialu2=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](id_rozdzialu2); 
	 id_rozdzialu2=specjalne_modul["UsuńZnakiSpecjalne"](id_rozdzialu2); 
	 id_rozdzialu2=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(id_rozdzialu2);
	 
	 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.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz);
	 	if(czy_naglowek)then
	 		 local nazwa_rozdzialu,poziom_rozdzialu;
	 		 if(czy_naglowek_wiki)then
	 			nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(wiersz);
	 		 else
	 		 	nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz);
	 		 end;
	 		 nazwa_rozdzialu=mw.getCurrentFrame():preprocess(nazwa_rozdzialu);
	 		 nazwa_rozdzialu=specjalne_modul["UsuńKomentarze"](nazwa_rozdzialu);
	 		 nazwa_rozdzialu=specjalne_modul["UsuńSzablonyStylów"](nazwa_rozdzialu);
	 		 nazwa_rozdzialu=specjalne_modul["UsuńZnaczniki"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["UsuńKategorie"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["UsuńWywołaniaPlików"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["UsuńInterwiki"](nazwa_rozdzialu);
             nazwa_rozdzialu=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](nazwa_rozdzialu);
			 nazwa_rozdzialu=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](nazwa_rozdzialu);
			 nazwa_rozdzialu=specjalne_modul["UsuńZnakiSpecjalne"](nazwa_rozdzialu);
			 nazwa_rozdzialu=p.UsuwanieSpacjiZnakoweNapisuWprowadzeniaTekstu(nazwa_rozdzialu);
	 		 
	 		 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;
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)
	local szablonowe_modul=require("Module:Szablonowe");
   	----
   	local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
		local ktore=szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu[nazwa_szablonu];
		if(not ktore)then return;end;
    	local tab=mw.text.split(tostring(ktore),"%s*;%s*",false);
    	local wynik="";
    	for _,num in pairs(tab)do
    		local numer_parametru=tonumber(num) or num;
    		for parametr,wartosc in pairs(tabela_parametrow_szablonu)do
    			if(parametr==numer_parametru)then
    				wynik=wynik..wartosc;
    			end;
    		end;
    	end;
    	return wynik;
    end);
    return wynik;
end;
function p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu(szablon,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod)
	local szablonowe_modul=require("Module:Szablonowe");
   	local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   		local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
   		local szablony_z_dodatkiem_obiektowym=stronicowyparser_obiekty_modul.szablony_z_dodatkiem_obiektowym;
   		local dodatek=szablony_z_dodatkiem_obiektowym[nazwa_szablonu];
   		if(dodatek)then
   			for name,value in pairs(tabela_parametrow_szablonu)do
   				local name=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](name);
   				local value=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](value);
   				dodatek=mw.ustring.gsub(dodatek,"%$%("..name.."%)",value);
   			end;
   			return dodatek;
   		end;
	end);
   return wynik;
end;
function p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony)
	local szablonowe_modul=require("Module:Szablonowe");
	local techniczne_modul=require("Module:Techniczne");
	tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst,nazwa_modulu,tablica_obiektow_strony_dany_modul_uzyskany,function(szablon,obiekt,kod,poziom_iteracji)
		if(not mw.ustring.match(tekst,"^"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)))then
			return "\n \n ";
		else
			return "\n \n";
		end;
	end,nil,nil,
	function(szablon,obiekt,kod,poziom_iteracji)
		if(poziom_iteracji==0)then
			if(obiekt=="ZNACZNIK")then
				local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_danych_parametrow_szablonu_strony,kod);
				if((nazwa=="br")or(nazwa=="hr"))then
					return true;
				end;
			elseif(obiekt=="SZABLON")then
				local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   					----
					if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then
						return true;
					end;
				end);
				if(wynik)then return wynik;end;
			end;
		end;
		return nil;
	end);
	return tekst;
end;
function p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst,nazwa_modulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony)
	local CzySpecjalnaLinia=function(linia)
		local czy_specjalna_linia=mw.ustring.match(linia,"^[%*,;:#]+") or mw.ustring.match(linia,"^%s*$") or mw.ustring.match(linia,"^%-%-%-%-");
		if(not czy_specjalna_linia)then
			if(mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))then
				return true;
			end;
		end;
		return czy_specjalna_linia;
	end;
	----
	local szablonowe_modul=require("Module:Szablonowe");
	local techniczne_modul=require("Module:Techniczne");
	local CzyLiniaZeSpecjalnymiSzablonami=function(linia)
		local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
		local szablony_w_nie_w_tej_samej_linii=stronicowyparser_obiekty_modul.szablony_w_nie_w_tej_samej_linii;
		local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nazwa_modulu,tablica_obiektow_strony_dany_modul_uzyskany);
		for szablon,obiekt,kod in iterator do
			if(obiekt=="SZABLON")then
				local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
					if(szablony_w_nie_w_tej_samej_linii[nazwa_szablonu])then
						return true;
					end;
				end);
				if(wynik)then return wynik;end;
			end;
		end;
		return nil;
	end;
	----
	--tekst=p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony);
	----
	local tab_linie_tekstu=mw.text.split(tekst,"\n");
	if(#tab_linie_tekstu==0)then return "";end;
	local tekst_nowy=tab_linie_tekstu[1];
	local czy_linia_poprz=CzySpecjalnaLinia(tekst_nowy) or CzyLiniaZeSpecjalnymiSzablonami(tekst_nowy);
	if(not czy_linia_poprz)then
		tekst_nowy=p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(tekst_nowy,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony);
	end;
	for i=2,#tab_linie_tekstu,1 do
		local linia=tab_linie_tekstu[i];
		local aktualna_specjalna_linia=CzySpecjalnaLinia(linia) or CzyLiniaZeSpecjalnymiSzablonami(linia);
		if(not aktualna_specjalna_linia)then
			linia=p.UsuwanieZnacznikoweOrazSzablonoweElementuNowejLinii(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_obiektow_strony_dany_modul_uzyskany,tablica_danych_parametrow_szablonu_strony);
		end;
		if((not czy_linia_poprz)and(not aktualna_specjalna_linia))then
			--local czy_wprowadzenie=mw.ustring.match(linia,"^>")
			local tekst_nowy2=mw.ustring.match(tekst_nowy,"^(.*\n)[^%S\n]*\n[^%S\n]*$");
			tekst_nowy=(tekst_nowy2 or tekst_nowy)..((tekst_nowy2) and "" or " ")..linia;
		else
			tekst_nowy=tekst_nowy.."\n"..linia;
		end;
		czy_linia_poprz=aktualna_specjalna_linia;
	end;
	return tekst_nowy;
end;
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_dalej_rozwazac_zakodowane,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISU)
   	local nazwy_modul=require("Module:Nazwy");
   	
    tablica_analizy_obiektow_strony_dany_modul=tablica_analizy_obiektow_strony_dany_modul or {};
    tablica_danych_parametrow_szablonu_strony=tablica_danych_parametrow_szablonu_strony or {};
    
    local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
    local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
    local stronicowyparser_analizaaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy");
    local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy;
    local szablonowe_modul=require("Module:Szablonowe");
    local parametry_modul=require("Module:Parametry");
    local techniczne_modul=require("Module:Techniczne");
    local html_modul=require("Module:Html");
    
    local szablony_do_usuwania_z_tekstu=stronicowyparser_obiekty_modul.szablony_do_usuwania_z_tekstu;
    
    local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
    local pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej=(nazwa_przestrzeni and nazwa_przestrzeni_ksiazki and nazwa_ksiazki and nazwa_spisu_tresci) 
                                             and nazwy_modul["NazwaModułu"](((nazwy_np_modul.Template~=nazwa_przestrzeni) and (nazwa_przestrzeni) or ""),nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci) 
                                                   or nil;
                                                   
	local pelna_nazwa_spisu_tresci_szablonowa=((pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej)and(((nazwa_przestrzeni=="") and ":" or "")..pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej) or nil);
	if(czy_dalej_rozwazac_zakodowane)then
		----
		local szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu=stronicowyparser_obiekty_modul.szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu;
		local tab_szablony_bez_generowania_napisowego=stronicowyparser_obiekty_modul.szablony_bez_generowania_napisowego;
		local szablony_nie_typowo_linkowe=stronicowyparser_obiekty_modul.szablony_nie_typowo_linkowe;
		local znaczniki_szablonowe=stronicowyparser_obiekty_modul.znaczniki_szablonowe;
		----
		local function UsuwanieNowychLiniiZnacznikowe(szablon)
			local tak=nil;
   			szablon=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji)
 				if(obiekt=="SZABLON")then
					local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
 						-----
 						if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then
 							if(poziom_iteracji==0)then tak=true;end;
 							return " ";
 						end;
					end);
 					if(wynik)then return wynik;end;
 				elseif(obiekt=="ZNACZNIK")then
 					local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_danych_parametrow_szablonu_strony,kod);
 					if((nazwa=="br")or(nazwa=="hr"))then
 						if(poziom_iteracji==0)then tak=true;end;
 						return " ";
 					end;
 				end;
 				return nil,true;
   			end);
 			return szablon,tak;
   		end;
		local function UsuwanieZnacznikowe(szablon,obiekt,kod,parametr1,parametr2,parametr3)
			if(obiekt=="SZABLON")then
				local tabela_parametrow_szablonu=parametr1;
				local nazwa_szablonu=parametr2;
				local tabela_modyfikatorow=parametr3;
 				if(szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu])then
 					local tak;
 					szablon,tak=UsuwanieNowychLiniiZnacznikowe(szablon);
 					local wynik,ile=mw.ustring.gsub(szablon,"\n"," ");
 					if((not tak)and(ile==0))then return nil,true;end;
 					return wynik,true;
 				end;
			elseif(obiekt=="ZNACZNIK")then
 				local nazwa=parametr1;
 				local zawartosc=parametr2;
 				local tab_atrybuty=parametr3;
   				if(nazwa=="center")then
   					local tak;
   					szablon,tak=UsuwanieNowychLiniiZnacznikowe(szablon);
   					local wynik,ile=mw.ustring.gsub(szablon,"\n"," ");
   					if((not tak)and(ile==0))then return nil,true;end;
 					return wynik,true;
   				end;
			end;
		end;
		----
		local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
   		---
   		local tab_nazwa_spisow_przekierowaniowych={};
   		---
   		local PrzetwarzanieZnacznikowe=function(komorka,trimowanie)
   			local spacja=" ";
   			local tab_spacja={
   				["nbsp"]=spacja,
   				["#32"]=spacja,
   			};
   			komorka=mw.ustring.gsub(komorka,"&([^&;]+);",tab_spacja);
   			local komorka_stara=komorka;
   			if(not trimowanie)then
   				komorka=mw.text.trim(komorka);
   			end;
   			if(mw.ustring.match(komorka_stara,"^%s*[#%*:;>]"))then komorka=" "..komorka;end;
   			return ((not trimowanie)and ("\n\n"..komorka.."\n") or komorka);
   		end;
   		----
   		local function ZamienNaKody(zawartosc,czy_szablon)
   			local function Linie(wzor)
   				zawartosc=mw.ustring.gsub(zawartosc,wzor,function(a,b)
   					return "&#"..mw.ustring.byte(a)..";"..(b or "");
   				end);
   			end;
   			Linie("^([=%*#:;])");
   			Linie("([=])([^%S\n]*)$");
   			return zawartosc;
   		end;
   		local tab_analiza=szablonowe_modul.LiczbyParametroweInformacjiBazyKodowaniaWikikodu();
   		tekst_rozwiniety_calego_artykulu=szablonowe_modul:KodowanieNiezakodowanychNormKodowychReferencjiTekstu(tekst_rozwiniety_calego_artykulu,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false,function(szablon,obiekt,kod,parametr1,parametr2,parametr3)
   			   	if(obiekt=="SZABLON")then
 					local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   						-----
   						-----
 						local function AnalizaSzablonu(szablon)
							local wynik=p.ObiektySzablonoweFormatowaniaTekstu(szablon,szablony_dozwolone_z_elementami_spisu_rzeczy_stron_woluminu,pelna_nazwa_spisu_tresci_szablonowa,tablica_danych_parametrow_szablonu_strony,kod);
							if(wynik)then return wynik;end;
							if(szablony_do_usuwania_z_tekstu[nazwa_szablonu])then return "";end;
							local czy_szablony_bez_generowania_napisowego=tab_szablony_bez_generowania_napisowego[nazwa_szablonu];
							if(czy_szablony_bez_generowania_napisowego)then return "";end;
							if(szablony_nie_typowo_linkowe[nazwa_szablonu])then return "";end;
 						end;
 						local szablon2=AnalizaSzablonu(szablon);
 						if(szablon2)then return szablon2;end;
 						local czy_center;
 						szablon,czy_center=UsuwanieZnacznikowe(szablon2 or szablon,obiekt,kod,tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) or szablon2;
 						if(szablon)then 
 							tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
 							local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[1];
 							if(tablica_danych_parametrow_szablonu_strony_numer)then
 								local tablica_danych_parametrow_szablonu_strony_numer_kod=tablica_danych_parametrow_szablonu_strony_numer[kod];
 								if(tablica_danych_parametrow_szablonu_strony_numer_kod)then
 									tablica_danych_parametrow_szablonu_strony_numer_kod.parametry=nil;
 								end;
 							end;
 							return nil;
 						elseif(czy_center)then
 							return nil;
 						end;
 						local znacznik_numer=znaczniki_szablonowe[nazwa_szablonu];
 						if(znacznik_numer)then
 							local parametr=tabela_parametrow_szablonu[znacznik_numer];
 							if(parametr)then
 								return ZamienNaKody(parametr,true);
 							end;
 						end;
 					end);
   					if(wynik)then return wynik;end;
   					return nil,true;
   				elseif(obiekt=="ZNACZNIK")then
   					local nazwa,zawartosc,atrybuty=parametr1,parametr2,parametr3;
   					if(nazwa~="center")then
   						if((nazwa~="ref")and(nazwa~="br")and(nazwa~="hr"))then
   							local fun=function()
   								if(nazwa~="div")then
   									return zawartosc and ZamienNaKody(PrzetwarzanieZnacznikowe(zawartosc,true),false) or "";
   								elseif((zawartosc)and(zawartosc~=""))then
   									local ile1;local ile2;
   									zawartosc,ile1=mw.ustring.gsub(zawartosc,"^([^\n]+\n)",function(s)
   										if(not mw.ustring.match(s,"^%s*$"))then return PrzetwarzanieZnacznikowe(s,true).."\n\n";end;
   										return "\n";
   									end);
   									zawartosc,ile2=mw.ustring.gsub(zawartosc,"([^\n]+)$",function(s)
   										if(not mw.ustring.match(s,"^%s*$"))then return "\n\n"..s;end;
   										return "";
   									end);
   									
   									return ZamienNaKody(zawartosc,false);
   								else
	   								return "";
   								end;
   							end;
   							return fun,nil,true;
   						end;
   					else
   						local szablon,czy_center=UsuwanieZnacznikowe(szablon,obiekt,kod,nazwa,zawartosc,atrybuty);
 						if(szablon)then 
 							tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
 							local tablica_danych_parametrow_szablonu_strony_numer=tablica_danych_parametrow_szablonu_strony[1];
 							if(tablica_danych_parametrow_szablonu_strony_numer)then
 								tablica_danych_parametrow_szablonu_strony_numer[kod]=nil;
 							end;
 						end;
   					end;
   					return nil,true;
   				elseif(obiekt=="INNEPRE")then
   					if(mw.ustring.match(szablon,"^%s*$"))then
   						return "";
   					end;
   					return nil,true;
   				elseif(obiekt=="LINKW")then
   					local tak=false;
   					szablon=szablonowe_modul:KodowanieNiezakodowanychNormKodowychReferencjiTekstu(szablon,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,function(szablon,obiekt,kod,parametr1,parametr2,parametr3)
   						if(obiekt=="ZNACZNIK")then
   							 tak=true;
   							 local nazwa,zawartosc,atrybuty=parametr1,parametr2,parametr3;
   							 return zawartosc or "";
   						end;
   						return nil,true;
   					end);
   					if(tak)then
   						tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]=szablon;
   					end;
   					local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=stronicowyparser_analizaaspisurzeczy_modul.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,true);
					if(not czy_element_spisu)then return "";end;
   				elseif(obiekt=="WIKITABELA")then
					szablon=mw.ustring.match(szablon,"^{|(.-)|}$");
					szablon=mw.ustring.gsub(szablon,"^[^\n]+","");
   					--szablon=mw.ustring.gsub(szablon,"[|!][|!]","\n\n");
   					szablon=mw.ustring.gsub(szablon,"\n|[%-%+]?[^%S\n]+[^|\n]*|([^|\n]+)",function(komorka)
   						return PrzetwarzanieZnacznikowe(komorka);
   					end);
   					szablon=mw.ustring.gsub(szablon,"\n|%-([^|\n]+)",function(komorka)
   						return PrzetwarzanieZnacznikowe(komorka);
   					end);
   					szablon=mw.ustring.gsub(szablon,"\n|%-[^%S\n|]*","\n\n");
   					szablon=mw.ustring.gsub(szablon,"||([^|\n]+)",function(komorka)
   						return PrzetwarzanieZnacznikowe(komorka);
   					end)
   					szablon=mw.ustring.gsub(szablon,"\n|%+ ([^\n]+)",function(komorka)
   						return PrzetwarzanieZnacznikowe(komorka);
   					end);
   					szablon=mw.ustring.gsub(szablon,"\n|([^\n|]+)",function(komorka)
   						return PrzetwarzanieZnacznikowe(komorka);
   					end);
   					return szablon;
    			end;
    			return nil,true;
   		end,nil,function(szablon,obiekt,kod,poziom_iteracji)
   			for name,tab_obiekt in pairs(tab_analiza)do
   				if(name==obiekt)then
					for _,wartosc in pairs(tab_obiekt)do
						local element_wartosc=tablica_danych_parametrow_szablonu_strony[wartosc];
						if(element_wartosc)then
							element_wartosc[kod]=nil;
						end;
					end;
				end;
			end;
   		end);
   		
   		local function LiniaRozdzialyDodatnieOrazUjemne(wzor,bool_naglowek1,bool_naglowek2,czy_dodatni_rozdzial)
   			tekst_rozwiniety_calego_artykulu=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,wzor,function(linia)
   				local tak=nil;
   				local tekst=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
   					if(obiekt=="SZABLON")then
   						local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   							if((nazwa_szablonu=="Br")or(nazwa_szablonu=="Hr"))then 
   								tak=true;
   								return " ";
   							end;
   							local szablon_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
   							if(szablon_ce)then
   								local tekst=tabela_parametrow_szablonu[szablon_ce];
   								if(tekst)then 
   									tak=true;
   									return tekst;
   								end;
   							end;
   						end);
   						if(wynik)then return wynik;end;
   					elseif(obiekt=="ZNACZNIK")then
   						local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_danych_parametrow_szablonu_strony,kod);
						if((nazwa=="br")or(nazwa=="hr"))then 
					 		tak=true;
					 		return " ";
						elseif(nazwa=="center")then
							tak=true;
				 			return zawartosc or "";
						end;
   					elseif(obiekt=="PRE")then
						local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguPre(szablon,tablica_danych_parametrow_szablonu_strony,kod);
						if(zawartosc)then
							zawartosc=html_modul.ZnakiSpecjalneTaguNowiki(zawartosc);
							if(czy_dodatni_rozdzial)then
								local zawartosc=mw.ustring.gsub(zawartosc,"\n"," ");
								tak=true;
								return zawartosc;
							else
								tak=true;
								return zawartosc;
							end;
						else
							tak=true;
							return "";
						end;
   					elseif(obiekt=="ŹRÓDŁO")then
						local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguSyntaxHighLight(szablon,tablica_danych_parametrow_szablonu_strony,kod);
						if(zawartosc)then
							zawartosc=html_modul.ZnakiSpecjalneTaguNowiki(zawartosc);
							if(czy_dodatni_rozdzial)then
								local zawartosc=mw.ustring.gsub(zawartosc,"\n"," ");
								tak=true;
								return zawartosc;
							else
								tak=true;
								return zawartosc;
							end;
						else
							tak=true;
							return "";
						end;
   					elseif(obiekt=="NOWIKI")then
						local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeTaguNowiki(szablon,tablica_danych_parametrow_szablonu_strony,kod);
						if(zawartosc)then
							zawartosc=html_modul.ZnakiSpecjalneTaguNowiki(zawartosc);
							local zawartosc=mw.ustring.gsub(zawartosc,"\n"," ");
							tak=true;
							return zawartosc;
						else
							tak=true;
							return "";
						end;
   					end;
   					return nil,true;
   				end);
   				if(tak)then return (bool_naglowek1 and "\n" or "")..tekst..(bool_naglowek2 and "\n" or "");end;
   				return;
   			end);
   		end;
   		-----
   		LiniaRozdzialyDodatnieOrazUjemne("^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*\n",false,true,true);
   		LiniaRozdzialyDodatnieOrazUjemne("\n(=[^\n]*[^%s=][^\n]*=)[^%S\n]*\n",true,true,true);
   		LiniaRozdzialyDodatnieOrazUjemne("\n(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$",true,false,true);
   		LiniaRozdzialyDodatnieOrazUjemne("^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$",false,false,true);
   		LiniaRozdzialyDodatnieOrazUjemne("^([%*#;:]+[^\n]*)\n",false,true,false);
   		LiniaRozdzialyDodatnieOrazUjemne("\n([%*#;:]+[^\n]*)\n",true,true,false);
   		LiniaRozdzialyDodatnieOrazUjemne("\n([%*#;:]+[^\n]*)$",true,false,false);
   		LiniaRozdzialyDodatnieOrazUjemne("^([%*#;:]+[^\n]*)$",false,false,false);
   		tekst_rozwiniety_calego_artykulu=szablonowe_modul:ModyfikowanieKodowoSzablonoweZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nil,tablica_analizy_obiektow_strony_dany_modul,
   			function(szablon,obiekt,kod,poziom_iteracji,szablon_rodzica,obiekt_rodzica,kod_rodzica,poziom_iteracji_rodzica)
   				if(obiekt=="SZABLON")then
					local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   						if(szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu])then
   							return "\n \n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n \n ";
   						end;
					end);
 					if(wynik)then return wynik;end;
   				elseif(obiekt=="ZNACZNIK")then
   					local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_danych_parametrow_szablonu_strony,kod);
   					if(nazwa=="center")then
   						 return "\n \n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n \n ";
   					end;
   				elseif(obiekt=="INNEPRE")then
   					return " \n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n ";
   				elseif((obiekt=="PRE")or(obiekt=="ŹRÓDŁO")or(obiekt=="GALERIA")or(obiekt=="MAPAOBRAZU")or(obiekt=="PUDEŁKOWEJŚCIA"))then
   					return "\n \n"..szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod).."\n \n ";
   				end;
   			end);
   		-----
   	end;
   	tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"<!%-%-.-%-%->","");
   	
   	local tab_magiczne_derektywy=stronicowyparser_obiekty_modul.magiczne_derektywy;
   	
   	tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"__(%u+)__",function(derektywy)
   		return tab_magiczne_derektywy[derektywy] and "" or nil;
   	end);
   	tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"^(%-%-%-%-+)[^%S\n]*([^\n]+)","%1\n %2");
   	tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"\n(%-%-%-%-+)[^%S\n]*([^\n]+)","\n%1\n %2");
   	
   	tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"\n\n","\n \n");
   	if(czy_dalej_rozwazac_zakodowane)then
   		----
   		tekst_rozwiniety_calego_artykulu=p.IntegrowanieLiniiTekstuWRamachJegoNapisuWprowadzenia(tekst_rozwiniety_calego_artykulu,nil,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
   		tekst_rozwiniety_calego_artykulu=__FUNKCJA_ANALIZA_SPISU and __FUNKCJA_ANALIZA_SPISU(tekst_rozwiniety_calego_artykulu,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or tekst_rozwiniety_calego_artykulu;
   	end;
   	local iter_main=mw.ustring.gmatch(tekst_rozwiniety_calego_artykulu,"([^\n]+)");
   	local naglowek_aktualnego_rozdzialu;
   	local linia_naglowka_aktualnego_rozdzialu;
   	local poziom_aktualnego_rozdzialu;
   	local poczatek_aktualnego_rozdzialu;
   	local numeracja_aktualnego_rozdzialu;
   	local czy_rozdzial_aktualny_centrowany;
   	local czy_koniec=false;
   	----
   	local odczyt_jakie_spisy_tresci=stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu;
	local jakie_spisy_tresci=parametry_modul["KopiujTabelęElementów"](odczyt_jakie_spisy_tresci);
	setmetatable(jakie_spisy_tresci,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
	local czy_ce_spis_tresci=nil;
	----
   	local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
   	local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
   	local parser=p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony);
   	-----
   	local tak_ce_spis_tresci=nil;
   	local czy_znaleziono_okladka=false;
   	local m=0;
   	return function()
   	   	local tab_str={};
   	   	local linia;
   	   	local function IterMain()
        	for linia in iter_main do
   	   			local nazwa_rozdzialu;local poziom_rozdzialu;local poczatek_rozdzialu;local numeracja_rozdzialu;local czy_rozdzial_centrowany;
   	   			local function Wystepowanie(linia)
   	   				local function RozwazajLinie(szablon,obiekt,kod)
	   	   				if(szablon)then
   		   					local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,p.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych);
	   	   					if(not kom)then
	   	   						local tab=((tab_2 and tab_2[1]) and tab_2 or nil);
   		   						if(tab)then
   		   							local artykul=stronicowyparser_potrzebne_modul.UzykanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false);
   		   							local czy_okladka=mw.ustring.match(artykul,stronicowyparser_obiekty_modul.artykularne_niespisowe[1]);
   		   							if((artykul~="")and((numer_rodzaju_artykulu~=1)or(not czy_okladka)))then
			   	   						return 1;
			   	   					elseif(czy_okladka)then
			   	   						czy_znaleziono_okladka=true;
			   	   					end;
   			   					end;
   	   						else
   	   							return 0;
   	   						end;
	   	   				end;
   		   			end;
   		   			local function RozwazajLinieZnacznikowe(zawartosc)
   		   				 local wartosc;
   		   				 local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst)
      						   local function CenterZnacznikLinia(szablon,obiekt,kod)
      						    	wartosc=RozwazajLinie(szablon,obiekt,kod);
      						    	if(not wartosc)then return;end;
      						    	if(wartosc==1)then return nil;end;
      							    return szablon,tekst;
      							end;
      						    if(obiekt=="SZABLON")then
      						    	local szablon,tekst=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   	   				    				local szablon,tekst=CenterZnacznikLinia(szablon,obiekt,kod);
   	   				    				return szablon,tekst;
      						    	end);
      				    			return szablon,tekst;
      						    elseif(obiekt=="LINKW")then
      						    	local szablon,tekst=CenterZnacznikLinia(szablon,obiekt,kod);
      						    	return szablon,tekst;
      						    end;
   		   				 end);
   	   					 for szablon,obiekt,kod in iter do end;
  						 return wartosc;
   		   			end;
   	   				local szablon_spis_tresci;
	   	   			local function spis_tresci(wystepowanie_linkow)
   		   				local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_obiektow_strony_dany_modul);
   	   					for szablon,obiekt,kod in iter do
   	   						 local function Spis(szablon,obiekt,kod)
   	   							local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,p.__FUNKCJA_KOMPLETOWANIA,nil,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych);
	   	   						if(not kom)then
	   	   							local tab=((tab_2 and tab_2[1]) and tab_2 or nil);
   		   							if((tab)and(numer_rodzaju_artykulu==1)and(stronicowyparser_analizaaspisurzeczy_modul.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(stronicowyparser_potrzebne_modul.UzykanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false))))then
   	   									tak_ce_spis_tresci=true;
   	   									szablon_spis_tresci=wystepowanie_linkow;
   	   									return 1;
   	   								end;
   	   							else
   	   								return 0;
   	   							end;
	   	   					end;
   	   						if(obiekt=="SZABLON")then
   	   						     local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   	   								local wynik=Spis(szablon,obiekt,kod);
   	   								if(wynik)then return wynik;end;
   	   						     end);
      							if(wynik)then return wynik;end;
   	   						elseif(obiekt=="LINKW")then
   	   							local wynik=Spis(szablon,obiekt,kod);
   	   							if(wynik)then return wynik;end;
   	   						end;
   	   					end;
   	   					wystepowanie_linkow=czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_obiektow_strony_dany_modul) or wystepowanie_linkow;
   	   					wystepowanie_linkow=mw.text.trim(wystepowanie_linkow);
   	   					local czy_ce=jakie_spisy_tresci[wystepowanie_linkow];
   	   					if(czy_ce)then 
   	   						tak_ce_spis_tresci=true;
   	   						szablon_spis_tresci=wystepowanie_linkow;
   	   						return 1;
   	   					end;
   	   				end;
	   	   			local wystepowanie_linkow=mw.ustring.match(linia,"^[#:%*;%d%.>]+%s*(.+)$") or mw.ustring.match(linia,"^(%S+%s*.+)$");
   		   			local tak=nil;
   	   				if(czy_dalej_rozwazac_zakodowane)then
   	   					if(wystepowanie_linkow)then
   	   						local czy_rozdzial=nil;local wartosc=nil;
   	   						local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst)
   	   								local czy_linkw=(obiekt=="LINKW");local czy_szablon=(obiekt=="SZABLON");local czy_znacznik=(obiekt=="ZNACZNIK");
   	   								if(czy_linkw or czy_szablon or czy_znacznik)then
   	   				    				local podrecznik=nil;
   	   				    				if(czy_szablon)then
   	   				    					local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachOrazZnacznikachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow)
   												-----
   	   											local czy_ce=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
   	   											if(czy_ce)then
   	   						    					local szablon_spis_tresci_zawartosc=tabela_parametrow_szablonu[czy_ce];
   	   						    					if(szablon_spis_tresci_zawartosc)then
   	   						    						szablon_spis_tresci_zawartosc=mw.ustring.match(szablon_spis_tresci_zawartosc,"^'*%s*(.-)%s*'*$");
   	   						    						wartosc=spis_tresci(szablon_spis_tresci_zawartosc);
   	   						    					else
   	   						    						wartosc=RozwazajLinie(szablon,obiekt,kod);
   	   						    					end;
   	   						    				else
   	   						    					wartosc=RozwazajLinie(szablon,obiekt,kod);
   	   						    					if(wartosc)then podrecznik=true;else podrecznik=false;end;
   	   											end;
      						    			end);
   	   									elseif(czy_znacznik)then
      						    			local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_danych_parametrow_szablonu_strony,kod);
      						    			if(zawartosc)then
      						    				if(nazwa=="center")then
      						    					szablon_spis_tresci=mw.ustring.match(zawartosc,"^'*%s*(.-)%s*'*$");
      						    					wartosc=spis_tresci(szablon_spis_tresci);
      						    				else
      						    					wartosc=RozwazajLinieZnacznikowe(zawartosc);
      						    				end;
      						    			end;
   	   					    			else
   	   						    			wartosc=RozwazajLinie(szablon,obiekt,kod);
   	   						    			if(wartosc)then podrecznik=true;else podrecznik=false;end;
   	   									end;
   	   									if(podrecznik==true)then
   	   										if(not czy_rozdzial)then
   	   											if(wartosc==1)then
   	   				    							local wystepowanie_linku_lub_szablonu=(mw.ustring.match(tekst,"^'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)))
   	   				    						                 and(not mw.ustring.match(tekst,"^'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."%s*>"))
   	   				    																and (mw.ustring.match(tekst,"^[^%.]*%s*$"));
   	   						    					if(not wystepowanie_linku_lub_szablonu)then return nil;end;
   	   						    					czy_rozdzial=true;
   	   											elseif(wartosc==0)then
   	   												tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),"");
   	   												return "", ((ile>0) and tekst or nil);
   	   											end;
   	   										end;
      									elseif(podrecznik==false)then
   	   										if((not wartosc)and(czy_znaleziono_okladka))then
   	   											local nie_okladka=mw.ustring.match(tekst,"^<[%s<]-%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod));
   	   											if(not nie_okladka)then
   	   												czy_znaleziono_okladka=false;
   	   											end;
      						    			end;
   	   				    				end;
   	   									if(not wartosc)then return;end;
   	   									tak=tak or (wartosc==1);
   	   									if(tak)then return nil; end;
   	   									return szablon,tekst;
   	   				    			else
      									local tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),"");
   	   									return "", ((ile>0) and tekst or nil);
   	   								end;
		   	   				end);
   	   						for szablon,obiekt,kod in iter do end;
   	   					end;
   	   				end;
   	   				if(tak)then
   	   					if(not tak_ce_spis_tresci)then
   	   						nazwa_rozdzialu="Spis treści";
   	   						poziom_rozdzialu=nil;
   	   						table.insert(tab_str,linia);
   	   					else
   	   						nazwa_rozdzialu=szablon_spis_tresci or "Spis treści";
   	   						poziom_rozdzialu=1;
   	   						czy_rozdzial_centrowany=true;
   	   						poczatek_rozdzialu=nil;
   	   						numeracja_rozdzialu=nil;
   	   						str="";
   	   					end;
   	   					czy_w_spisie_tresci=true;
   	   				else
   	   					nazwa_rozdzialu=nil;
   	   				end;
   	   			end;
   				---------------------------------------
   	   			if(czy_rozdzialy_analizowac)then
   	   				if(not czy_w_spisie_tresci)then
      					Wystepowanie(linia);
   	   				end;
   	   				if(not nazwa_rozdzialu)then
   	   					local linia_temp;
   	   					linia_temp,nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,true);
   	   				end;
   	   			else
   	   				nazwa_rozdzialu=nil;
   	   			end;
      			if(not nazwa_rozdzialu)then
   	   	   	    	nazwa_rozdzialu=mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$");
      				if(not nazwa_rozdzialu) then
   	   				else
   	   					nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomuWprowadzeniaTekstu(nazwa_rozdzialu);
   	   					czy_w_spisie_tresci=true;
   	   					tak_ce_spis_tresci=true;
      				end;
      			else
   	   				czy_w_spisie_tresci=true;
   	   				tak_ce_spis_tresci=true;
      			end;
   	   			if(nazwa_rozdzialu)then
   	   	   			if(not naglowek_aktualnego_rozdzialu)then
   	   	   	  			naglowek_aktualnego_rozdzialu=nazwa_rozdzialu;
   	   	   	  			linia_naglowka_aktualnego_rozdzialu=linia;
   	   	   	  			poziom_aktualnego_rozdzialu=poziom_rozdzialu;
   	   	   	  			poczatek_aktualnego_rozdzialu=poczatek_rozdzialu;
   	   	   	  			numeracja_aktualnego_rozdzialu=numeracja_rozdzialu;
   	   	   	  			czy_rozdzial_aktualny_centrowany=czy_rozdzial_centrowany;
   	   	   			else
   	   	   				----------------------------------------------
   	   	   				local naglowek_posredni_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu;
   	   	   				local linia_naglowka_posredni_aktualnego_rozdzialu=linia_naglowka_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;
   	   	   				local czy_rozdzial_posredni_centrowany=czy_rozdzial_aktualny_centrowany;
   	   	   				----------------------------------------------
   	   	   	  			naglowek_aktualnego_rozdzialu=nazwa_rozdzialu;
   	   	   	  			linia_naglowka_aktualnego_rozdzialu=linia;
   	   	   	  			poziom_aktualnego_rozdzialu=poziom_rozdzialu;
   	   	   	  			poczatek_aktualnego_rozdzialu=poczatek_rozdzialu;
   	   	   	  			numeracja_aktualnego_rozdzialu=numeracja_rozdzialu;
   	   	   	  			czy_rozdzial_aktualny_centrowany=czy_rozdzial_centrowany;
   	   	   	  			
   	   	   	  			local str=table.concat(tab_str,"\n");
   	   	   	  			if(not __FUNKCJA2)then
   	   						naglowek_posredni_aktualnego_rozdzialu=naglowek_posredni_aktualnego_rozdzialu 
   	   		                                      and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(naglowek_posredni_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul)
   	   		                                      	                   or naglowek_posredni_aktualnego_rozdzialu
   	   		                                      	   )
   	   		                                         or nil;
   	   	   					str=str and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(str,nil,tablica_analizy_obiektow_strony_dany_modul) or str) or nil;
   	   	   				elseif(czy_dalej_rozwazac_zakodowane)then
   	   	   					naglowek_posredni_aktualnego_rozdzialu=naglowek_posredni_aktualnego_rozdzialu and __FUNKCJA2(naglowek_posredni_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul,true) or nil;
   	   	   					str=str and __FUNKCJA2(str,nil,tablica_analizy_obiektow_strony_dany_modul,false) or nil;
   	   	   				end;
   	   	   				linia_poprz=nil;
   	   	   				m=m+1;
   	   	   	  			return {naglowek_posredni_aktualnego_rozdzialu,linia_naglowka_posredni_aktualnego_rozdzialu,},str,poziom_posredni_aktualnego_rozdzialu,poczatek_posredni_aktualnego_rozdzialu,numeracja_posredni_aktualnego_rozdzialu,czy_rozdzial_posredni_centrowany;
   	   	   			end;
   	   			else
   	   	   			if(naglowek_aktualnego_rozdzialu)then
   	   	   	  			table.insert(tab_str,linia);
   	   	   			end;
   	   	   			linia_poprz=linia;
   	   			end;
   	   		end;
   	   		if(czy_koniec)then return nil;end;
   	   		czy_koniec=true;
   	   		---
   	   		local str=table.concat(tab_str,"\n");
   	   		--
   	   		if(not __FUNKCJA2)then
   	   			naglowek_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu 
   	   		                                      and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(naglowek_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul)
   	   		                                      	                   or naglowek_aktualnego_rozdzialu
   	   		                                      	   )
   	   		                                         or nil;
   	   	   		str=str and (czy_dalej_rozwazac_zakodowane and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(str,nil,tablica_analizy_obiektow_strony_dany_modul) or str) or nil;
   	   		elseif(czy_dalej_rozwazac_zakodowane)then
   	   			naglowek_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu and __FUNKCJA2(naglowek_aktualnego_rozdzialu,nil,tablica_analizy_obiektow_strony_dany_modul,true) or nil;
   	   	   		str=str and __FUNKCJA2(str,nil,tablica_analizy_obiektow_strony_dany_modul,false) or nil;
   	   		end;
   	   		linia_nast=nil;linia_poprz=nil;
   	   		m=m+1;
   	   		return (naglowek_aktualnego_rozdzialu and {naglowek_aktualnego_rozdzialu,linia_naglowka_aktualnego_rozdzialu,} or nil),str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
   		end;
	    ----
	    local naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany=IterMain();
	    return naglowek_tab_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
   	 end,tekst_rozwiniety_calego_artykulu;
end;
return p;