Przejdź do zawartości

Moduł:Szablonowe/Potrzebne

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [stwórz] [odśwież]
local p={};
function p.TranslatorProstyTekstDoEncodeWikiTekst(tekst)
	local szablonowe_modul=require("Module:Szablonowe");
	tekst=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(),function(obiekt,kod)
		return szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu(obiekt,kod);
	end);
	return tekst;
end;
function p.TranslatorOdwrotnyEncodeWikiTekstDoTekst(tekst)
	local szablonowe_modul=require("Module:Szablonowe");
	tekst=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),function(obiekt,kod)
		return szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod);
	end);
	return tekst;
end;
function p.AtrybutyZnacznika(atrybuty,tab_element)
	local szablonowe_modul=require("Module:Szablonowe");
	local techniczne_modul=require("Module:Techniczne");
	local html_modul=require("Module:Html");
	
	local tab_specjalne;
	if(tab_element)then
		atrybuty=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(atrybuty,nil,tab_element,function(szablon,obiekt,kod)
			if(obiekt=="UCIECZKI")then
				return szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu(obiekt,kod);
			end;
			return szablon;
		end);
	else
		tab_specjalne={};local ile=1;
		atrybuty=mw.ustring.gsub(atrybuty,"(\\[\"'])",function(wyraz_specjalny)
			local wyraz=szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu("UCIECZKI",ile);
			tab_specjalne[wyraz]=wyraz_specjalny;
			ile=ile+1;
			return wyraz;
		end);
	end;
	
	atrybuty=" "..atrybuty.." ";
	
	local tab_atrybuty={};
	while(true)do
		local szablon,name,_,value,_=mw.ustring.match(atrybuty,"(%s+(%a+)%s*=%s*([\"'])(.-)(%3)%s+)");
		if((not szablon)or(not name)or(not value))then break;end;
		tab_atrybuty[name]=szablonowe_modul.ZnacznikoweTrueFalseSzeregZnakowy(html_modul.TekstoweKodyHtmlZnacznikoweTypowoTagoweParametroweZamienianiaNaZnak(value));
		szablon=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](szablon);
		atrybuty=mw.ustring.gsub(atrybuty,szablon," ");
	end;
	while(true)do
		local szablon,name,value=mw.ustring.match(atrybuty,"(%s+(%a+)%s*=%s*([%a%d]+)%s+)");
		if((not szablon)or(not name)or(not value))then break;end;
		tab_atrybuty[name]=szablonowe_modul.ZnacznikoweTrueFalseSzeregZnakowy(value);
		szablon=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](szablon);
		atrybuty=mw.ustring.gsub(atrybuty,szablon," ");
	end;
	while(true)do
		local szablon,name=mw.ustring.match(atrybuty,"(%s+(%a+)%s+)");
		if(not name)then break;end;
		tab_atrybuty[name]=true;
		name=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](szablon);
		atrybuty=mw.ustring.gsub(atrybuty,name," ");
	end;
	local parametry_modul=require("Module:Parametry");
	for name,value in pairs(tab_atrybuty) do
		if(not parametry_modul.TypeBoolean(value))then
			local value;local ile;
			if(tab_element)then
				value,ile=mw.ustring.gsub(atrybuty,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu("UCIECZKI"),function(obiekt,kod)
					local szablon=(tab_element[obiekt] or {})[kod];
					return szablon;
				end);
			else
				value,ile=mw.ustring.gsub(value,"("..szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu("UCIECZKI")..")",function(wyraz)
					local wynik=tab_specjalne[wyraz];
					return wynik;
				end);
			end;

			if(ile>0)then
				tab_atrybuty[name]=value;
			end;
		end;
	end;
	return tab_atrybuty;
end;
function p.KodowanieAtrybutoweZnacznikowe(tekst_artykulu,tab_element)
	local szablonowe_modul=require("Module:Szablonowe");
	local function ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon,nazwa,czy_tak)
		nazwa=nazwa or "ATRYBUTY";
    	if(not tab_element[nazwa])then tab_element[nazwa]={};end;
    	tab_element[nazwa][#tab_element[nazwa]+1]=szablon;
    	local ile=#tab_element[nazwa];
    	if(not czy_tak)then
    		local szablon_kod=szablonowe_modul.NormaKoduKodowaniaTekstu(nazwa,ile);
    		return szablon_kod; 
    	else
    		local szablon_kod=szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu(nazwa,ile);
    		return szablon_kod; 
    	end;
    end;
	local function ZNAKI_UCIECZKI(tekst_artykulu)
		tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(([\\]*)(\\[\"']))",function(szablon,przed,po)
			 local ile=#przed;
			 if(math.mod(ile,2)==0)then
				szablon=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon,"UCIECZKI",true);
				return szablon;
			 end;
			return nil;
		end);
		return tekst_artykulu;
	end;
    local function ATRYBUTY(szablon1,szablon2,szablon3,cudzyslow)
    	local _, ile=mw.ustring.gsub(szablon2,"("..cudzyslow..")",function(s)return nil;end);
    	if(math.mod(ile,2)==0)then
    		szablon2=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon2,nil,true);
    		return szablon1..szablon2..szablon3,true;
    	else
    		szablon2=mw.ustring.gsub(szablon2,"("..cudzyslow..".*"..cudzyslow..")(.-"..cudzyslow.."[^"..cudzyslow.."]*)$",function(__szablon1,__szablon2)
    			 __szablon1=ROZWAZANIA_SZABLONOWE_ATRYBUTY(__szablon1,nil,true);
    			 return __szablon1..__szablon2;
    		end);
    		szablon3=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon3,"KOŃCOWE",true);
    		return szablon1..szablon2..szablon3,false;
    	end;
    end;
    tekst_artykulu=ZNAKI_UCIECZKI(tekst_artykulu);
    local KodowaniaZnakoweAtrybutoweNieucieczkowe=function(tekst_artykulu,wzor)
    	repeat
    		local ile_naprawy_znacznikow=nil;
    		local ile_naprawy_znacznikow_odejmnoc=0;
    		tekst_artykulu,ile_naprawy_znacznikow=mw.ustring.gsub(tekst_artykulu,wzor,function(szablon1,szablon2,cudzyslow,szablon3)
    			local szablon,tak=ATRYBUTY(szablon1,szablon2,szablon3,cudzyslow);
    			if(tak)then ile_naprawy_znacznikow_odejmnoc=ile_naprawy_znacznikow_odejmnoc+1;end;
    			return szablon;
    		end);
	    	ile_naprawy_znacznikow=ile_naprawy_znacznikow-ile_naprawy_znacznikow_odejmnoc;
    	until(ile_naprawy_znacznikow==0);
    	return tekst_artykulu;
    end;
    
    tekst_artykulu=KodowaniaZnakoweAtrybutoweNieucieczkowe(tekst_artykulu,"(</?[%a%d]+%s+)([^<>]-([\"']).-%3[^<>]-)(/?>)");
    
    local PodmienianieSzablonoweEncodeWikiTestuNaTekstu=function(obiekt,kod,ile)
    	kod=tonumber(kod);
   		local szablon=(tab_element[obiekt] or {})[kod];
   		if(not szablon)then return nil;end;
   		local szablon_kodowy=szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod);
   		ile=ile+1;
   		return szablon_kodowy,ile;
    end;
    
    tekst_artykulu=mw.ustring.gsub(tekst_artykulu,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),function(obiekt,kod)
    	if(obiekt~="UCIECZKI")then
    		local szablon_kodowy,ile=PodmienianieSzablonoweEncodeWikiTestuNaTekstu(obiekt,kod,0);
    		if(not szablon_kodowy)then return nil;end;
    		return szablon_kodowy;
    	end;
    	return nil;
    end);
    tekst_artykulu=szablonowe_modul:ModyfikowanieKodowoSzablonoweZakodowanegoTekstu(tekst_artykulu,nil,tab_element,
   		function(szablon,obiekt,kod,poziom_iteracji,szablon_rodzica,obiekt_rodzica,kod_rodzica,poziom_iteracji_rodzica)
   			local ile=0;
   			local szablon=mw.ustring.gsub(szablon,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),function(obiekt,kod)
   				if(obiekt~="UCIECZKI")then
   					local szablon_kodowy;
   					szablon_kodowy,ile=PodmienianieSzablonoweEncodeWikiTestuNaTekstu(obiekt,kod,ile);
   					if(not szablon_kodowy)then return nil;end;
   					return szablon_kodowy;
   				end;
   				return nil;
   			end);
   			if(ile==0)then return nil;end;
   			return true,szablon,obiekt,kod;
   	end);

    tekst_artykulu=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu,nil,tab_element,function(szablon,obiekt,kod)
    	if(obiekt=="KOŃCOWE")then
    		return szablon;
    	end;
    	return nil,true;
    end);
    return tekst_artykulu,tab_element;
end;
function p.MetaTabelkaSzablonowe(__metatablica)
	local tablica={};local __FUNKCJA;
    __metatablica.UstawTablica=function(tablica_inna)
    	return function()
    		return tablica_inna or tablica;
    	end;
    end;
    __metatablica.UstawFunkcjaDaneParametry=function(__FUNKCJA_start,obiekt)
    	__FUNKCJA=__FUNKCJA_start(obiekt);
    end;
    local fun_tablica=__metatablica.UstawTablica(tablica);
    __metatablica.tablica=function()
    	return fun_tablica();
    end;
    __metatablica.__len=function(t)
    	return #fun_tablica();
    end;
    __metatablica.__index=function(t,klucz)
    	local tab=fun_tablica()[klucz];
    	if(tab==nil)then return nil;end;
    	return tab[1];
    end;
    __metatablica.__newindex=function(t,klucz,wartosc)
    	if(wartosc~=nil)then
    		fun_tablica()[klucz]={wartosc,true,};
    	else
    		fun_tablica()[klucz]={nil,true,};
    	end;
    	if(__FUNKCJA)then
			local tab_wartosc=fun_tablica()[klucz];
			if(tab_wartosc[2])then
    			local czy_tak_analiza_kodowa=__FUNKCJA(t,klucz,wartosc);
    			if(czy_tak_analiza_kodowa)then
    				if(not tab_wartosc[1])then
    					fun_tablica()[klucz]=nil;
    				else
    					tab_wartosc[2]=false;
    				end;
    			end;
    		end;
    	end;
    end;
    __metatablica.__pairs=function(t)
    	return next,fun_tablica(),nil;
    end;
    local function iter(a,i)
    	i=i+1;
    	local v = a[i];
    	if v then
        	return i, v;
    	end
    end
    __metatablica.__ipairs=function(t)
    	return iter,fun_tablica(),0;
    end;
end;
function p.KodowanieSzablonowegoTekstuZObiektamiWikikodu(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA_poczatek,__FUNKCJA_koniec,__FUNCTION_niedokonczone,__FUNCTION_INCLUDE,__FUNKCJA_PARAMETRY)
	local numer_szablonu;
	local strony_modul=require("Module:Strony");
	local szablonowe_dane_modul=mw.loadData("Module:Szablonowe/dane");
	local szablonowe_modul=require("Module:Szablonowe");
	local specjalne_modul=require("Module:Specjalne");
	local tab_wiki_znacznik=szablonowe_dane_modul.tablica_wiki_znaczniki;
	local tablica_znacznikowa_preprocesora_szablonowego=szablonowe_dane_modul.tablica_znacznikowa_preprocesora_szablonowego;
	local function InicjujNumeryPoczatkoweObiektowSzablonow()
		if(not __FUNKCJA3)then
			numer_szablonu={};
			for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_szablonowe_mediawiki)do
				numer_szablonu[obiekt]=1;
			end;
			for obiekt,_ in pairs(szablonowe_dane_modul.tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki)do
				numer_szablonu[obiekt]=1;
			end;
		else
			numer_szablonu=__FUNKCJA3(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul);
		end;
	end;
	local PREWSTAWIAJACA=nil;local NiedokonczoneElementyWikikodu=nil;local czy_wynik=true;
	local function ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,co)
		if(__FUNKCJA2)then 
			local wynik=__FUNKCJA2(szablon,co,numer_szablonu[co or  "SZABLON"],tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul,numer_szablonu);
			if(wynik)then
				numer_szablonu[co or  "SZABLON"]=numer_szablonu[co or  "SZABLON"]+1;
				wynik=(czy_wynik and PREWSTAWIAJACA) and PREWSTAWIAJACA(wynik) or wynik;
				return wynik,false;
			end;
		end;
		if(__FUNKCJA)then szablon=__FUNKCJA(szablon,co,numer_szablonu[co or  "SZABLON"]) or szablon; end;

		local kod=szablonowe_modul.NormaKoduKodowaniaTekstu(co,numer_szablonu[co or  "SZABLON"]);
		
		---
    	local tab_co=tablica_analizy_obiektow_strony_dany_modul[co or  "SZABLON"];
    	local __metatablica=getmetatable(tab_co);
    	local czy_ustawiona_metatabelka=__metatablica and true or false;
    	if(not __metatablica)then
    		__metatablica={};
    		p.MetaTabelkaSzablonowe(__metatablica);
    		setmetatable(tab_co,__metatablica);
    	end;
    	local tablica_co=__metatablica.tablica();
    	local obiekt=co or  "SZABLON";
    	if((__FUNKCJA_PARAMETRY)and(not czy_ustawiona_metatabelka))then
    		__metatablica.UstawFunkcjaDaneParametry(__FUNKCJA_PARAMETRY,obiekt);
    	end;
    	tablica_co[numer_szablonu[obiekt]]={szablon,false,};
    	---
    	numer_szablonu[obiekt]=numer_szablonu[obiekt]+1;
    	return kod,true;
	end;
	local function AnalizaObiektowSzablonowegoTekstu(tekst_artykulu)
    	
    	local ile_znacznik_niedomykajacy_0;local ile_znacznik_niedomykajacy_1;local ile_znacznik_niedomykajacy_2;
    	
    	local techniczne_modul=require("Module:Techniczne");
    	local tab_licznik_poczatek={};
    	local tab_licznik_koniec={};
    	local tab_element={};
    	local ObiektFun=function(nazwa)
			return szablonowe_dane_modul.tablica_znaczniki_typowo_mechanizmu_mediawiki[nazwa] 
				or (__FUNCTION_INCLUDE and __FUNCTION_INCLUDE(nazwa) and tablica_znacznikowa_preprocesora_szablonowego[nazwa] and "INCLUDE" or  nil)
				  or (tab_wiki_znacznik[nazwa] and "ZNACZNIK" or  nil);
    	end;
    	local INCLUDE=function(tekst_artykulu)
    		tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<[^<>]")
    	end;
    	local INNEPRE=function(tekst_artykulu,czy_poczt,czy_szablon)
    		local function INNEPREROZ(poczatek,koniec)
    			repeat
    				local ile;local ile2=0;
    		    	tekst_artykulu,ile=mw.ustring.gsub(tekst_artykulu,(poczatek and "\n" or "^").."([^%S\n]+)([^\n]*)"..(koniec and "\n" or "$"),function(spacje,kod)
    					if((not czy_szablon)or((czy_szablon)and((not mw.ustring.match(kod,"[|=]"))and((koniec)and true or (not mw.ustring.match(kod,"^[^%S\n]*$"))))))then
        					kod=NiedokonczoneElementyWikikodu(kod);
        					local szablon=spacje..kod;
        					return (poczatek and "\n" or "")..ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"INNEPRE")..(koniec and "\n" or "");
        				else
        					ile2=ile2+1;
        				end;
        			end);
        			ile=ile-ile2;
        		until (ile==0);
    		end;
    		if(not czy_poczt)then
    			INNEPREROZ(false,true);
    			INNEPREROZ(false,false);
    		end;
    		INNEPREROZ(true,true);
    		INNEPREROZ(true,false);
        	return tekst_artykulu;
        end;
        local tab_znaczniki={};
    	local tab_numerki={};
    	local function PreprocesorSzablonow(tekst_artykulu)
    		tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul=p.KodowanieAtrybutoweZnacznikowe(tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul);
    		--tekst_artykulu,ile_naprawy_znacznikow_4=mw.ustring.gsub(tekst_artykulu,"(</?)(%a+)(%s*[^<>]-%s*/?%s*>)",function(szablon1,szablon2,szablon3)
    		--	szablon2=mw.ustring.lower(szablon2);
    		--	return szablon1..szablon2..szablon3;
    		--end);
    		tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(<(/?)([^<>]*)>)",function(szablon,koniec,tekst)
    			if((not mw.ustring.match(tekst,"^[%a%d]+%s*/?$"))and(not mw.ustring.match(tekst,"^[%a%d]+%s+.*$")))then
    				if(not tab_element)then tab_element={};end;
    				if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    				table.insert(tab_element["INNE"],"<"..koniec);
    				local ile1=#tab_element["INNE"];
    				table.insert(tab_element["INNE"],">");
    				local ile2=#tab_element["INNE"];
    				return szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile1)..tekst..szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile2);
    			end;
    		end);
    		local function ZnacznikiWiki(tekst_artykulu,czy_zawsze,czy_inne)
    			tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<(/?)([%a%d]+)([^<>]-%s*)>",function(koniec,nazwa,tekst)
    				-----
    				if(koniec=="")then
    					local nazwa=mw.ustring.lower(nazwa);
    					table.insert(tab_znaczniki,nazwa);
    					local koniec_samozamykajacy=mw.ustring.match(tekst,"^(.-)%s*(/?)%s*$");
    					if(koniec_samozamykajacy=="/")then
    						tab_licznik_koniec[nazwa]=(tab_licznik_koniec[nazwa] or 0)+1;
    					end;
	    				tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1;
    					if(not tab_numerki[nazwa])then tab_numerki[nazwa]={};end;
    					table.insert(tab_numerki[nazwa],tab_licznik_poczatek[nazwa]);
    					local licznik=tab_licznik_poczatek[nazwa];
    					local szablon=nazwa..tekst;
    					if(not tab_element)then tab_element={};end;
    					local typ=ObiektFun(nazwa);
    					if(not typ)then return;end;
    					---
    					local czy_znacznik=(typ=="ZNACZNIK");
    					local czy_include=(typ=="INCLUDE");
    					local jak=(((czy_zawsze)or(czy_inne))and(not czy_znacznik))and ((not czy_include)and "innebegin" or "incbegin") or (((czy_zawsze)or(not czy_inne))and(czy_znacznik)and "begin" or nil);
    					if(not jak)then return;end;
    					----
    					if(not tab_element[nazwa..jak])then tab_element[nazwa..jak]={};end;
    					tab_element[nazwa..jak][licznik]=szablon;
    					return "<"..szablonowe_modul.NormaKoduKodowaniaTekstu(nazwa..jak,licznik)..">";
    				else
    					local nazwa=mw.ustring.lower(nazwa);
    					tab_licznik_koniec[nazwa]=(tab_licznik_koniec[nazwa] or 0)+1;
    					local licznik;
    					if(#tab_znaczniki>0)then
    						if(tab_znaczniki[#tab_znaczniki]~=nazwa)then
    							local koniec=0;
    							for i=#tab_znaczniki-1,1,-1 do
    								if(tab_znaczniki[i]==nazwa)then
    									koniec=i;
    									break;
    								end;
    							end;
								if(koniec>0)then
    								licznik=tab_numerki[nazwa][#tab_numerki[nazwa]];
    								for i=koniec+1,#tab_znaczniki,1 do
    									tab_licznik_koniec[tab_znaczniki[i]]=(tab_licznik_koniec[tab_znaczniki[i]] or 0)+1;
    								end;
    								for i=koniec,#tab_znaczniki,1 do
    									table.remove(tab_numerki[tab_znaczniki[i]]);
    								end;
    								for i=#tab_znaczniki,koniec,-1 do
    									table.remove(tab_znaczniki);
    								end;
    							else
    								tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1;
    								licznik=tab_licznik_poczatek[nazwa];
    							end;
    						else
    							licznik=tab_numerki[nazwa][#tab_numerki[nazwa]];
    							table.remove(tab_numerki[nazwa]);
    							table.remove(tab_znaczniki);
    						end;
    					else
    						tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1;
    						licznik=tab_licznik_koniec[nazwa];
    					end;
    					local szablon=nazwa..tekst;
    					if(not tab_element)then tab_element={};end;
    					local typ=ObiektFun(nazwa);
    					---
    					local czy_znacznik=(typ=="ZNACZNIK");
    					local czy_include=(typ=="INCLUDE");
    					
    					local jak=(((czy_zawsze)or(czy_inne))and(not czy_znacznik))and ((not czy_include)and "inneend" or "incend") or (((czy_zawsze)or(not czy_inne))and(czy_znacznik)and "end" or nil);
    					if(not jak)then return;end;
    					---
    					if(not tab_element[nazwa..jak])then tab_element[nazwa..jak]={};end;
    					tab_element[nazwa..jak][licznik]=szablon;
    					return "</"..szablonowe_modul.NormaKoduKodowaniaTekstu(nazwa..jak,licznik)..">";
    				end;
    			end);
    			return tekst_artykulu;
    		end;
    		tekst_artykulu=ZnacznikiWiki(tekst_artykulu,false,true);
    		local function ZnacznikiWikiLinia(tekst_artykulu,wzor,left,right)
    			tekst_artykulu=mw.ustring.gsub(tekst_artykulu,wzor,function(a,b)
    				if(b)then
    					b=ZnacznikiWiki(b,false,false);
    					return left..a..b..right;	
    				else
    					a=ZnacznikiWiki(a,false,false);
    					return left..a..right;	
    				end;
    			end);
    			return tekst_artykulu;
    		end;
    		----
    		tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$","","");
    		tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"\n(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$","\n","");
    		tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*\n","","\n");
    		tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"\n(=[^\n]*[^%s=][^\n]*=)[^%S\n]*\n","\n","\n");
    		----
    		tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"^([%*#;:]+)([^\n]+)$","","");
    		tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"\n([%*#;:]+)([^\n]+)$","\n","");
    		tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"^([%*#;:]+)([^\n]+)\n","","\n");
    		tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"\n([%*#;:]+)([^\n]+)\n","\n","\n");
    		tekst_artykulu=ZnacznikiWiki(tekst_artykulu,false,false);
    		----
    		local function AnalizujDomykajace(tekst_artykulu,jak,co)
    			local tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<(/?)("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak..co,"(%d+)")..")>",function(poczatek,nazwa_przed_nieodkodowane,obiekt,kod) 
        			local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element);
        			local nazwa,odstepy,atrybuty,koniec=mw.ustring.match(nazwa_przed,"^([%a%d]+)(%s*)(.-)%s*(/?)%s*$");
        			nazwa=mw.ustring.lower(nazwa);
    				if((koniec=="/")or(nazwa=="br")or(nazwa=="hr")or(nazwa=="templatestyles"))then
    					local szablon="<"..poczatek..nazwa_przed..">";
    					return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,ObiektFun(nazwa));
    				end;
    				return nil;
    			end);
    			return tekst_artykulu;
    		end;
    		tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"inne","begin");
    		tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"","begin");
    		tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"inne","end");
    		tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"","end");
			----    			
    		return tekst_artykulu;
    	end;
    	tekst_artykulu=PreprocesorSzablonow(tekst_artykulu);
    	
        local function Kompilacja(tekst_artykulu)
    		----
    		local ZamianaLINKWNaLINKZ=function(zawartosc,dalej)
    			 local czy_url=strony_modul.SprawdzanieURL(zawartosc);
    			 if(czy_url)then
    			    local szablon="["..zawartosc.."]";
    			    return "["..ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKZ").."]"
    			 else
    			 	local szablon;
    			 	if((dalej)and(dalej~=""))then
    			 		local czy_interwiki_link="[["..zawartosc.."]]";
    			 		if(not specjalne_modul.CzyInterwiki(czy_interwiki_link))then
    			 			if(mw.ustring.match(zawartosc,"|"))then
    			 				szablon="[["..zawartosc..dalej.."]]";
    			 			else
    			 				local nazwa=mw.ustring.gsub(zawartosc,"^[%s_]*:[%s_]*","");
    			 				szablon="[["..zawartosc.."|"..nazwa..dalej.."]]";
    			 			end;
    			 		else
    			 			szablon=czy_interwiki_link;
    			 		end;
    			 	 else
    			 	 	szablon="[["..zawartosc.."]]";
    			 	 end;
    			     return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKW")
    			 end;
    		end;
    		local function InneElementyWikikodu(tekst_artykulu)
    			local ile_linkw;local ile_linkz;local ile_var;local ile_template;local ile_wikitabela;
    			local function Szablon(szablon,obiekt,czy_linkw,dalej)
    			    szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element);
    			    if(czy_linkw)then
    			    	local zawartosc=mw.ustring.match(szablon,"^%[%[(.+)%]%]$");
    			    	return ZamianaLINKWNaLINKZ(zawartosc,dalej);
    			    else
    					return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,obiekt)
    				end;
    			end;
    			repeat
    				tekst_artykulu,ile_linkw=mw.ustring.gsub(tekst_artykulu,"(%[%[[^%[%]{}<>]-%]%])(%a*)",function(szablon,dalej) return Szablon(szablon,"LINKW",true,dalej);end);
    				tekst_artykulu,ile_linkz=mw.ustring.gsub(tekst_artykulu,"(%[[^%[%]{}<>]-%])",function(szablon) return Szablon(szablon,"LINKZ");end);
    				repeat
        				tekst_artykulu,ile_var=mw.ustring.gsub(tekst_artykulu,"({{{[^%[%]{}<>]-}}})",function(szablon) return Szablon(szablon,"ZMIENNA");end);
        			until (ile_var==0);
        			tekst_artykulu,ile_template=mw.ustring.gsub(tekst_artykulu,"({{[^%[%]{}<>]-}})",function(szablon) return Szablon(szablon,"SZABLON");end);
        			tekst_artykulu,ile_wikitabela=mw.ustring.gsub(tekst_artykulu,"({|[^%[%]{}<>]-|})",function(szablon) return Szablon(szablon,"WIKITABELA");end);
        		until ((ile_linkw==0)and(ile_linkz==0)and(ile_template==0)and(ile_wikitabela==0));
        		return tekst_artykulu;
    		end;
    		NiedokonczoneElementyWikikodu=function(tekst_artykulu)    			
    			local function DomykajaceIOdtwierajace(tekst_artykulu,jak,tablica_znacznikow)
    				repeat
    					local ile_znacznik_niedomykajacy;
    					local ile_znacznik_niedomykajacy_ujemny=0;
    					tekst_artykulu,ile_znacznik_niedomykajacy=mw.ustring.gsub(tekst_artykulu,"<("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak.."begin","(%d+)")..")>(.*)$",function(nazwa_przed_nieodkodowane,obiekt,kod,zawartosc) 
        					local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element);
        					if(tablica_znacznikow)then
        						if(not tablica_znacznikow[nazwa_przed])then
        							ile_znacznik_niedomykajacy_ujemny=ile_znacznik_niedomykajacy_ujemny+1;
        							return nil;
        						end;
        					end;
        					zawartosc=INNEPRE(zawartosc,true);
        					zawartosc=NiedokonczoneElementyWikikodu(zawartosc);
        					zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element);
        					local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_przed,"^([%a%d]+)(%s*)(.-)%s*$");
        					local szablon="<"..nazwa_przed..">"..zawartosc..((mw.ustring.match(zawartosc,"\n=[^\n]*[^%s=][^\n]*=[^%S\n]*$")
        						                                                     or mw.ustring.match(zawartosc,"\n[%*#:;][^\n]*$")
        						                                             ) and "\n" or "").."</"..nazwa..">";
        					return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"ZNACZNIK");
    					end);
    					ile_znacznik_niedomykajacy=ile_znacznik_niedomykajacy-ile_znacznik_niedomykajacy_ujemny;
    				until (ile_znacznik_niedomykajacy==0);
    				repeat
    					local ile_znacznik_nieotwierajacy;
    					local ile_znacznik_nieotwierajacy_ujemny=0;
    					tekst_artykulu,ile_znacznik_nieotwierajacy=mw.ustring.gsub(tekst_artykulu,"^(.*)</("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak.."end","(%d+)")..")>",function(zawartosc,nazwa_po_nieodkodowane,obiekt,kod) 
	        				local nazwa_po=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_po_nieodkodowane,nil,tab_element);
	        				if(tablica_znacznikow)then
        						if(not tablica_znacznikow[nazwa_po])then
        							ile_znacznik_nieotwierajacy_ujemny=ile_znacznik_nieotwierajacy_ujemny+1;
        							return nil;
        						end;
        					end;
	    	    			zawartosc=INNEPRE(zawartosc);
	    	    			zawartosc=NiedokonczoneElementyWikikodu(zawartosc);
    		    			zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element);
	        				local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_po,"^([%a%d]+)(%s*)(.-)%s*$");
        					local szablon="<"..nazwa..">"..((mw.ustring.match(zawartosc,"^=[^\n]*[^%s=][^\n]*=[^%S\n]*\n")
        						                                                     or mw.ustring.match(zawartosc,"^[%*#:;][^\n]*\n")
        						                                             ) and "\n" or "")..zawartosc.."</"..nazwa_po..">";
        					return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"ZNACZNIK");
    					end);
    					ile_znacznik_nieotwierajacy=ile_znacznik_nieotwierajacy-ile_znacznik_nieotwierajacy_ujemny;
    				until (ile_znacznik_nieotwierajacy==0);
    				return tekst_artykulu;
    			end;
    			if(__FUNCTION_niedokonczone)then
    				local wynik,gdy_nie,tablica_znacznikow,czy_koniec,__FUNCTION=__FUNCTION_niedokonczone(tekst_artykulu,tab_element);
    				if(gdy_nie)then
    					if(czy_koniec)then return wynik or tekst_artykulu;end;
    					tekst_artykulu=wynik or tekst_artykulu;
    					tekst_artykulu=__FUNCTION and __FUNCTION(tekst_artykulu) or tekst_artykulu;
    					tekst_artykulu=tablica_znacznikow and DomykajaceIOdtwierajace(tekst_artykulu,"",tablica_znacznikow) or tekst_artykulu;
    					return tekst_artykulu;
    				else
    					tekst_artykulu=wynik or tekst_artykulu;
    				end;
    			end;
    			local function DomykajaceIOdtwierajaceWikiTabelka(tekst_artykulu)
    				repeat
    					local ile_wikitabela_1;
        				tekst_artykulu,ile_wikitabela_1=mw.ustring.gsub(tekst_artykulu,"({|)(.-)$",function(poczatek,szablon) 
        					szablon=INNEPRE(szablon,true);
        					szablon=NiedokonczoneElementyWikikodu(szablon);
        					szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element);
        					return ZamienObiektSzablonuKodem(self,poczatek..szablon..((mw.ustring.match(szablon,"\n=[^\n]*[^%s=][^\n]*=[^%S\n]*$") 
        						                                                             or mw.ustring.match(szablon,"\n[%*#:;][^\n]*$")
        						                                                          )and "\n" or "").."|}",tablica_analizy_obiektow_strony_dany_modul,"WIKITABELA");
        				end);
    				until (ile_wikitabela_1==0);
    				repeat
    					local ile_wikitabela_2;
        				tekst_artykulu,ile_wikitabela_2=mw.ustring.gsub(tekst_artykulu,"^(.-)(|})",function(szablon,koniec) 
        					szablon=INNEPRE(szablon);
        					szablon=NiedokonczoneElementyWikikodu(szablon);
        					szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element);
        					return ZamienObiektSzablonuKodem(self,"{|"..((mw.ustring.match(szablon,"^=[^\n]*[^%s=][^\n]*=[^%S\n]*\n") 
        						                                                             or mw.ustring.match(szablon,"^[%*#:;][^\n]*\n")
        						                                         )and "\n" or "")..szablon..koniec,tablica_analizy_obiektow_strony_dany_modul,"WIKITABELA");
        				end);
    				until (ile_wikitabela_2==0);
    				return tekst_artykulu;
    			end;
    			local function DomykajaceIOdtwierajaceLinia(tekst_artykulu,wzor,left,right)
    				tekst_artykulu=mw.ustring.gsub(tekst_artykulu,wzor,function(a,b)
    					if(b)then
    						b=DomykajaceIOdtwierajaceWikiTabelka(b);
    						b=DomykajaceIOdtwierajace(b,"");
    						return left..a..b..right;
    					else
    						a=DomykajaceIOdtwierajaceWikiTabelka(a);
    						a=DomykajaceIOdtwierajace(a,"");
    						return left..a..right;
    					end;
    				end);
    				return tekst_artykulu;
    			end;
    			---
    			tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"inne");
    			-----
    			tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$","","");
    			tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,"\n(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$","\n","");
    			tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*\n","","\n");
    			tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,"\n(=[^\n]*[^%s=][^\n]*=)[^%S\n]*\n","\n","\n");
    			----
    			tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,"^([%*#;:]+)([^\n]+)$","","");
    			tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,"\n([%*#;:]+)([^\n]+)$","\n","");
    			tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,"^([%*#;:]+)([^\n]+)\n","","\n");
    			tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,"\n([%*#;:]+)([^\n]+)\n","\n","\n");
    			-----
    			---
    			--tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"inne");
    			tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"");
    			tekst_artykulu=DomykajaceIOdtwierajaceWikiTabelka(tekst_artykulu);
        		return tekst_artykulu;
    		end;
    		local function ZnieklasyfikowaneZnaki(tekst_artykulu)
    		   local ile_naprawy_znacznikow_1;local ile_naprawy_znacznikow_2;local ile_naprawy_znacznikow_3;local ile_naprawy_znacznikow_4;local ile_naprawy_znacznikow_5;local ile_naprawy_znacznikow_6;local ile_naprawy_znacznikow_7;local ile_naprawy_znacznikow_8;local ile_naprawy_znacznikow_9;local ile_naprawy_znacznikow_10;local ile_naprawy_znacznikow_11,ile_naprawy_znacznikow_12,ile_naprawy_znacznikow_13;
    		   repeat
    		   	    tekst_artykulu,ile_naprawy_znacznikow_1=mw.ustring.gsub(tekst_artykulu,"^(%[+%]+)",function(tekst)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst);
    					local ile=#tab_element["INNE"];
    					return szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile);
    				end);
    		       	tekst_artykulu,ile_naprawy_znacznikow_2=mw.ustring.gsub(tekst_artykulu,"(<)([^>]*<)",function(tekst1,tekst2) 
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
	    				table.insert(tab_element["INNE"],tekst1);
    					local ile=#tab_element["INNE"];
    					return szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile)..tekst2;
    				end);
					tekst_artykulu,ile_naprawy_znacznikow_3=mw.ustring.gsub(tekst_artykulu,"(>[^<]*)(>)",function(tekst1,tekst2) 
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
	    				table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile);
					end);
		    		tekst_artykulu,ile_naprawy_znacznikow_4=mw.ustring.gsub(tekst_artykulu,"(<)([^>]*)$",function(tekst1,tekst2) 
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
	    				table.insert(tab_element["INNE"],tekst1);
    					local ile=#tab_element["INNE"];
    					return szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile)..tekst2;
    				end);
					tekst_artykulu,ile_naprawy_znacznikow_5=mw.ustring.gsub(tekst_artykulu,"^([^<]*)(>)",function(tekst1,tekst2) 
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
	    				table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile);
					end);
    				tekst_artykulu,ile_naprawy_znacznikow_6=mw.ustring.gsub(tekst_artykulu,"([^{])({)([^|{])",function(tekst1,tekst2,tekst3)
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile)..tekst3;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_7=mw.ustring.gsub(tekst_artykulu,"([^|}])(})([^}])",function(tekst1,tekst2,tekst3)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile)..tekst3;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_8=mw.ustring.gsub(tekst_artykulu,"^({)([^|{])",function(tekst1,tekst2)
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst1);
    					local ile=#tab_element["INNE"];
    					return szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile)..tekst2;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_9=mw.ustring.gsub(tekst_artykulu,"([^|}])(})$",function(tekst1,tekst2)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile);
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_10=mw.ustring.gsub(tekst_artykulu,"(%[)([^%]]*)$",function(tekst1,tekst2)
    					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst1);
    					local ile=#tab_element["INNE"];
    					return szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile)..tekst2;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_11=mw.ustring.gsub(tekst_artykulu,"^([^%[]*)(%])",function(tekst1,tekst2)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile);
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_12=mw.ustring.gsub(tekst_artykulu,"^([^%[%]]*)(%[+)([^%[%]]+%[)",function(tekst1,tekst2,tekst3)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile)..tekst3;
    				end);
    				tekst_artykulu,ile_naprawy_znacznikow_13=mw.ustring.gsub(tekst_artykulu,"(%][^%[%]]+)(%]+)([^%[%]]*)$",function(tekst1,tekst2,tekst3)
       					if(not tab_element)then tab_element={};end;
    					if(not tab_element["INNE"])then tab_element["INNE"]={};end;
    					table.insert(tab_element["INNE"],tekst2);
    					local ile=#tab_element["INNE"];
    					return tekst1..szablonowe_modul.NormaKoduKodowaniaTekstu("INNE",ile)..tekst3;
    				end);
    			until ((ile_naprawy_znacznikow_1==0)and(ile_naprawy_znacznikow_2==0)and(ile_naprawy_znacznikow_3==0)and(ile_naprawy_znacznikow_4==0)and(ile_naprawy_znacznikow_5==0)and(ile_naprawy_znacznikow_6==0)and(ile_naprawy_znacznikow_7==0)and(ile_naprawy_znacznikow_8==0)and(ile_naprawy_znacznikow_9==0)and(ile_naprawy_znacznikow_10==0)and(ile_naprawy_znacznikow_11==0)and(ile_naprawy_znacznikow_12==0)and(ile_naprawy_znacznikow_13==0));
    			return tekst_artykulu;
    		end;
    		local function ZNACZNIKI(tekst_artykulu,jak)
    			local ile_odjac_znacznik_niedomykajacy=0;
        		local tekst_artykulu,ile_znacznik_niedomykajacy=mw.ustring.gsub(tekst_artykulu,"<("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak.."begin","(%d+)")..")>(.-)</("..szablonowe_modul.NormaWzoruKodowaniaTekstu("(%2)"..jak.."end","(%3)")..")>",function(nazwa_przed_nieodkodowane,obiekt,kod,zawartosc,nazwa_po_nieodkodowane,obiekt2,kod2)
        			local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element);
        			local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_przed,"^([%a%d]+)(%s*)(.-)%s*$");
        			nazwa=mw.ustring.lower(nazwa);
        			local function TenZnacznik()
        				  local nazwa_po=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_po_nieodkodowane,nil,tab_element);
        				  zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element);
        				  if(jak=="")then
        				  		zawartosc=INNEPRE(zawartosc,true);
        				  end;
        				  local szablon="<"..nazwa_przed..">"..zawartosc.."</"..nazwa_po..">";
        				  return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,ObiektFun(nazwa));
        			end;
        			if(not mw.ustring.match(atrybuty,"^%s*$"))then
        				if(odstepy~="")then
        					if(((jak~="")and(jak~="inc"))or(not mw.ustring.match(zawartosc,"[<>{}]")))then
        						return TenZnacznik();
        					end;
        				end;
        			else
        				if(((jak~="")and(jak~="inc"))or(not mw.ustring.match(zawartosc,"[<>{}]")))then
        					return TenZnacznik();
        				end;
        			end;
        			----
        			local ile_zastapione;local ile_pominiete;
        			zawartosc,ile_zastapione,ile_pominiete=ZNACZNIKI(zawartosc,jak);
        			zawartosc=ZnieklasyfikowaneZnaki(zawartosc);
        			zawartosc=InneElementyWikikodu(zawartosc);
        			zawartosc=INNEPRE(zawartosc,true);
        			zawartosc=NiedokonczoneElementyWikikodu(zawartosc);
        			
        			if(not mw.ustring.match(zawartosc,"[<>{}]"))then
        				return TenZnacznik();
        			else
        				ile_odjac_znacznik_niedomykajacy=ile_odjac_znacznik_niedomykajacy+1;
        				local szablon="<"..nazwa_przed_nieodkodowane..">"..zawartosc.."</"..nazwa_po_nieodkodowane..">";
        				return szablon;
        			end;
        		end);
        		return tekst_artykulu,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy;
    		end;
    		----
    		local function PracePrzygotowywujace(tekst_artykulu)
    			local ile_linkw;local ile_linkz;local ile_var;local ile_template;local ile_wikitabela;
    			local function Szablon(zawartosc,przed,po,obiekt,czy_linkw,dalej)
    				  zawartosc=ZnieklasyfikowaneZnaki(zawartosc);
        			  local ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy;
        			  zawartosc,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy=ZNACZNIKI(zawartosc,"");
        			  zawartosc=InneElementyWikikodu(zawartosc);
        			  zawartosc=INNEPRE(zawartosc,true,(obiekt=="SZABLON"));
        			  zawartosc=NiedokonczoneElementyWikikodu(zawartosc);
        			  zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element);
        			  if(czy_linkw)then
        			  		return ZamianaLINKWNaLINKZ(zawartosc,dalej);
        			  else
        					local szablon=przed..zawartosc..po;
    						return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,obiekt);
    				  end;
    			end;
    			repeat
    				tekst_artykulu,ile_linkw=mw.ustring.gsub(tekst_artykulu,"%[%[(.-%[?)%]%](%]?)(%a*)",function(szablon,dodatkowe,dalej) 
						if(dodatkowe~="")then
							local czy_linkz=mw.ustring.match(szablon,"%[[^%[%]]*$");
							if(czy_linkz)then
								szablon=szablon..dodatkowe;
								return Szablon(szablon,"[[","]]","LINKW",true,dalej);
							else
								return Szablon(szablon,"[[","]]","LINKW",true,"")..dodatkowe..dalej;
							end;
						else
		    				return Szablon(szablon,"[[","]]","LINKW",true,dalej);
						end;
    				end);
    				tekst_artykulu,ile_linkz=mw.ustring.gsub(tekst_artykulu,"%[([^%[%]]-)%]",function(szablon) 
    					return Szablon(szablon,"[","]","LINKZ");
    				end);
    				repeat
        				tekst_artykulu,ile_var=mw.ustring.gsub(tekst_artykulu,"{{{([^{}]-)}}}",function(szablon) 
        					return Szablon(szablon,"{{{","}}}","ZMIENNA");
        				end);
        			until (ile_var==0);
        			tekst_artykulu,ile_template=mw.ustring.gsub(tekst_artykulu,"{{([^{}]-)}}",function(szablon) 
        				return Szablon(szablon,"{{","}}","SZABLON");
        			end);
        			tekst_artykulu,ile_wikitabela=mw.ustring.gsub(tekst_artykulu,"{|([^{}]-)|}",function(szablon) 
        				return Szablon(szablon,"{|","|}","WIKITABELA");
        			end);
    			until ((ile_linkw==0)and(ile_linkz==0)and(ile_var==0)and(ile_template==0)and(ile_wikitabela==0));
    			return tekst_artykulu;
    		end;
    		----
    		tekst_artykulu=ZnieklasyfikowaneZnaki(tekst_artykulu);
    		----
    		local ile_odjac_znacznik_niedomykajacy_0;
    		if(__FUNCTION_INCLUDE)then
    			tekst_artykulu,ile_znacznik_niedomykajacy_0,ile_odjac_znacznik_niedomykajacy_0=ZNACZNIKI(tekst_artykulu,"inc");
    			ile_znacznik_niedomykajacy_0=ile_znacznik_niedomykajacy_0-ile_odjac_znacznik_niedomykajacy_0;
    			----
				tekst_artykulu=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul)
					if(obiekt=="INCLUDE")then
						local nazwa,zawartosc,tab=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul);
						if(__FUNCTION_INCLUDE(nazwa))then
							local function inc(zawartosc)
								return (mw.ustring.match(tekst_artykulu,"{{{[^{}|]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."%s*}}}")
									     or mw.ustring.match(tekst_artykulu,"{{.-|.-"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)..".-}}")
									)and true or false;
							end;
							if(nazwa=="noinclude")then
								if(poziom_iteracji==0)then
									return (not inc(zawartosc)) and "" or zawartosc;
    							else
    								return zawartosc;
								end;
							elseif(nazwa=="includeonly")then
								if(poziom_iteracji==0)then
									return (not inc(zawartosc)) and zawartosc or "";
								else
									return "";
								end;	
							end;
						end;
					end;
					return nil,true;
				end);  	
			end;
    		----
    		local ile_odjac_znacznik_niedomykajacy_1;
    		tekst_artykulu,ile_znacznik_niedomykajacy_1,ile_odjac_znacznik_niedomykajacy_1=ZNACZNIKI(tekst_artykulu,"inne");
    		ile_znacznik_niedomykajacy_1=ile_znacznik_niedomykajacy_1-ile_odjac_znacznik_niedomykajacy_1;
    		----
    		tekst_artykulu=PracePrzygotowywujace(tekst_artykulu);
        	----
        	local ile_odjac_znacznik_niedomykajacy_2;
        	tekst_artykulu,ile_znacznik_niedomykajacy_2,ile_odjac_znacznik_niedomykajacy_2=ZNACZNIKI(tekst_artykulu,"");
        	return tekst_artykulu;
        end;
        PREWSTAWIAJACA=function(tekst_artykulu)
        	czy_wynik=nil;
        	tekst_artykulu=PreprocesorSzablonow(tekst_artykulu);
        	tekst_artykulu=Kompilacja(tekst_artykulu);
        	czy_wynik=true;
        	return tekst_artykulu;
        end;
        tekst_artykulu=Kompilacja(tekst_artykulu)
        local function PoczatekKoniecTekst(tekst_artykulu)
        	local tekst_poczatek=(__FUNKCJA_poczatek and __FUNKCJA_poczatek(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul) or nil);
        	local tekst_koniec=(__FUNKCJA_koniec and __FUNKCJA_koniec(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul) or nil);
        	if(((tekst_poczatek)and(not mw.ustring.match(tekst_poczatek,"^%s*$")))or((tekst_koniec)and(not mw.ustring.match(tekst_koniec,"^%s*$"))))then
        		tekst_poczatek=tekst_poczatek and PREWSTAWIAJACA(tekst_poczatek) or tekst_poczatek;
        		tekst_koniec=tekst_koniec and PREWSTAWIAJACA(tekst_koniec) or tekst_koniec;
        		tekst_artykulu=(tekst_poczatek or "")..tekst_artykulu..(tekst_koniec or "");
        	end;
        	return tekst_artykulu;
        end;
        tekst_artykulu=PoczatekKoniecTekst(tekst_artykulu);
        local function PraceKoncowe(tekst_artykulu)
    		tekst_artykulu=NiedokonczoneElementyWikikodu(tekst_artykulu);
    		return tekst_artykulu;
        end;
	    tekst_artykulu=PraceKoncowe(tekst_artykulu);
	    tekst_artykulu=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_artykulu,nil,tab_element);
	    tekst_artykulu=INNEPRE(tekst_artykulu);
	    tekst_artykulu=szablonowe_modul.OdkodowanieZakodowanychNormKodowychNieschematycznychRzeczy(self,tekst_artykulu,nil,tablica_analizy_obiektow_strony_dany_modul);
    	return tekst_artykulu;
	end;
	local function InicjujTabela()
		 if(not __FUNKCJA3)then
		 	if(not __FUNKCJA4)then
    			for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_szablonowe_mediawiki)do
    				tablica_analizy_obiektow_strony_dany_modul[obiekt]={};
    			end;
    			for obiekt,_ in pairs(szablonowe_dane_modul.tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki)do
    				tablica_analizy_obiektow_strony_dany_modul[obiekt]={};
    			end;
    		else
    			tablica_analizy_obiektow_strony_dany_modul=__FUNKCJA4(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul);
		 	end;
		else
			if(__FUNKCJA4)then
				tablica_analizy_obiektow_strony_dany_modul=__FUNKCJA4(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul);
			end;
    	end;
	end;
	local function UstawieniaPoczatkoweObiektowSzablonow()
		if(not tablica_analizy_obiektow_strony_dany_modul)then
			  if((self.tablica_analizy_obiektow_strony_dany_modul)
			  	    and(self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu])
	    	  )then
	    			tablica_analizy_obiektow_strony_dany_modul=self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu];
	    			numer_szablonu=self.numer_szablonu;
	    	  else
    				if(not self.tablica_analizy_obiektow_strony_dany_modul)then self.tablica_analizy_obiektow_strony_dany_modul={};end;
    				if(not self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu])then self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu]={};end;
		    		---
		    		tablica_analizy_obiektow_strony_dany_modul=self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu];
		    		---
    				InicjujNumeryPoczatkoweObiektowSzablonow();
    				self.numer_szablonu=numer_szablonu;
    				InicjujTabela();
    		  end;
    	else
    		InicjujNumeryPoczatkoweObiektowSzablonow();
    		InicjujTabela();
		end;
	end;
	----
	UstawieniaPoczatkoweObiektowSzablonow();
    ---
    local PreProcesorSTARE=function(tekst_artykulu,wzor_kodu,czy_tak)
    	tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"("..wzor_kodu..")",function(szablon,obiekt,kod)
    		if(czy_tak)then
    			local tablica_szablon_obiekt=tablica_analizy_obiektow_strony_dany_modul and tablica_analizy_obiektow_strony_dany_modul[obiekt] or nil;
    			local kod=tablica_szablon_obiekt and tonumber(kod) or  nil;
    			if(kod)then
    				local szablon_wynik=tablica_szablon_obiekt and tablica_szablon_obiekt[kod] or nil;
    				if(not szablon_wynik)then
						return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"STARE");
					else
						local wynik=__FUNKCJA2(szablon_wynik,obiekt,kod,tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul,numer_szablonu);
						return wynik;
    				end;
    			else
    				return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"STARE");
				end;
			else
				return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"STARE");
			end;
    	end);
    	return tekst_artykulu;
    end;
    
    tekst_artykulu=PreProcesorSTARE(tekst_artykulu,szablonowe_modul.NormaWzoruKodowaniaTekstu(),true);
    tekst_artykulu=PreProcesorSTARE(tekst_artykulu,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),false);
    
    tekst_artykulu=AnalizaObiektowSzablonowegoTekstu(tekst_artykulu);
    return tekst_artykulu;
end;
return p;