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
    		local wartosc_tablicy=fun_tablica()[klucz];
    		if(wartosc_tablicy~=nil)then
    			wartosc_tablicy[1]=wartosc;
    			wartosc_tablicy[2]=false;
    			if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end;
    		else
    			local tab={wartosc,true,};
    			fun_tablica()[klucz]=tab;
    			if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end;
    		end;
    	else
    		fun_tablica()[klucz]=nil;
    	end;
    end;
	local function iter_pairs(tablica,klucz)
    	klucz=next(tablica,klucz);
    	local tab = tablica[klucz];
    	if tab then
        	return klucz, tab[1];
    	end
    end;
    __metatablica.__pairs=function(t)
    	return iter_pairs,fun_tablica(),nil;
    end;
    local function iter_ipairs(a,i)
    	i=i+1;
    	local v = a[i];
    	if v then
        	return i, v;
    	end
    end;
    __metatablica.__ipairs=function(t)
    	return iter_ipairs,fun_tablica(),0;
    end;
	__metatablica.KopiujMetaTabela=function(value,funkcja,funkcja2)
		local tabelka_metatable=__metatablica.tablica();
    	local __metatablica2={};
		p.MetaTabelkaSzablonowe(__metatablica2);
		local value2={};
		local iteratorFun=function(value)
			local klucz=nil;
			return function()
				klucz=next(value,klucz);
				return klucz;
			end;
		end;
		local iterator=iteratorFun(value);
		for klucz in iterator do
			rawset(value2,klucz,rawget(value,klucz));
		end;
    	setmetatable(value2,__metatablica2);
    	local tabelka_metatable2=__metatablica2.tablica();
    	funkcja2(tabelka_metatable,tabelka_metatable2);
    	funkcja(value2,false);
	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 szeregi_modul=require("Module:Szeregi");
	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);
    		
    		local function ZnacznikiWiki(tekst_artykulu,czy_zawsze,czy_inne)
    			tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<(/?)([%a%d]+)(%s*)([^<>]-)(%s*)>",function(koniec,nazwa,odstepy_przed,tekst,odstepy_po)
    				-----
    				if((odstepy_przed=="")and((tekst~="")and(tekst~="/")))then return;end;
    				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..odstepy_przed..tekst..odstepy_po;
    					if(not tab_element)then tab_element={};end;
    					local typ=ObiektFun(nazwa);
						
    					if(not typ)then 
							return "&lt;"..koniec..nazwa..odstepy_przed..tekst..odstepy_po.."&gt;";
						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..odstepy_przed..tekst..odstepy_po;
    					if(not tab_element)then tab_element={};end;
    					local typ=ObiektFun(nazwa);
						if(not typ)then
							return "&lt;"..koniec..nazwa..odstepy_przed..tekst..odstepy_po.."&gt;";
						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 "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,wzor1,wzor2)
    			tekst_artykulu=szeregi_modul.ZamianaZnakowaLinii(tekst_artykulu,
    				function(linia)
    					local a;local b;
    					a=mw.ustring.match(linia,wzor1);
    					if(not a)then 
    						a,b=mw.ustring.match(linia,wzor2);
    						if(not a)then return nil;end;
    					end;
    					if(b)then
    						b=ZnacznikiWiki(b,false,false);
    						return a..b;	
    					else
    						a=ZnacznikiWiki(a,false,false);
    						return a;	
    					end;
    			end);
    			return tekst_artykulu;
    		end;
    		----
    		tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"^(=[^\n]*[^%s=][^\n]*=)[^%S\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").."]"..dalej;
    			 else
    			 	if((dalej)and(dalej~=""))then
    			 		if(specjalne_modul["CzyAdresLinkuWewnętrznego"]{adres=zawartosc,})then
    			 				local szablon;
    			 				if(mw.ustring.match(zawartosc,"|"))then
    			 					szablon="[["..zawartosc..dalej.."]]";
    			 				else
    			 					local nazwa=mw.ustring.gsub(zawartosc,"^[%s_]*:[%s_]*","");
    			 					szablon="[["..zawartosc.."|"..nazwa..dalej.."]]";
    			 				end;
    			 				return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKW");
    			 		end;
    			 	 end;
			 		 local szablon="[["..zawartosc.."]]";
    			     return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKW")..dalej;
    			 end;
    		end;
    		local PracePrzygotowywujace;
    		NiedokonczoneElementyWikikodu=function(tekst_artykulu,czy_main)    			
    			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=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"({|)(.-)$",
        				function(szereg,numer,licznik_wzor,numer_a,numer_b,poczatek,szablon)
        					return mw.ustring.match(szablon,"\n%{%|"),((licznik_wzor==1)and 2 or 3);
        				end,
        				function(licznik_wzor,poczatek,szablon) 
        					szablon=INNEPRE(szablon,true);
        					szablon=NiedokonczoneElementyWikikodu(szablon);
        					szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element);
        					return (((czy_main)and(licznik_wzor==1)) and "" or "\n")..ZamienObiektSzablonuKodem(self,poczatek..szablon.."\n|}",tablica_analizy_obiektow_strony_dany_modul,"WIKITABELA");
        				end,
        				function(wzor,licznik_wzor,czy)
        					if(czy_main)then
        						if(licznik_wzor==1)then return "^"..wzor,true;end;
        						return "\n"..wzor,false;
        					else
        						return "\n"..wzor,false;
        					end;
        				end);
    				until (ile_wikitabela_1==0);
    				repeat
    					local ile_wikitabela_2;
        				tekst_artykulu,ile_wikitabela_2=mw.ustring.gsub(tekst_artykulu,"^(.-)(\n|})",function(szablon,koniec) 
        					szablon=INNEPRE(szablon);
        					szablon=NiedokonczoneElementyWikikodu(szablon);
        					szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element);
        					return ZamienObiektSzablonuKodem(self,"\n{|\n"..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_dodatnie,wzor_ujemne)
    				tekst_artykulu=szeregi_modul.ZamianaZnakowaLinii(tekst_artykulu,function(linia)
    					local dodatnie=nil;
    					local a,b,c=mw.ustring.match(linia,wzor_dodatnie);
    					if((not a)or(not b)or(not c))then 
    						a,b=mw.ustring.match(linia,wzor_ujemne);
    						if((not a)or(not b))then return nil;end;
    						c=nil;
    					else
    						dodatnie=true;
    					end;
    					if(dodatnie)then
    						b=DomykajaceIOdtwierajace(b,"");
    						return a..b..c;
    					else
    						b=DomykajaceIOdtwierajace(b,"");
    						return a..b;
    					end;
    				end);
    				return tekst_artykulu;
    			end;
    			---
    			tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"inne");
    			-----
    			local wzor_dodatnie="^(=+[^%S\n]*)([^\n]-[^%s=][^\n]-)([^%S\n]*=+[^%S\n]*)$";
    			local wzor_ujemne="^([%*#;:]+[^%S\n]*)([^\n]+)$";
    			tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,wzor_dodatnie,wzor_ujemne);
    			-----
    			---
    			--tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"inne");
    			tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"");
    			tekst_artykulu=DomykajaceIOdtwierajaceWikiTabelka(tekst_artykulu);
        		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;
        			local function InneZnacznik()
        			    ile_odjac_znacznik_niedomykajacy=ile_odjac_znacznik_niedomykajacy+1;
        				local szablon="<"..nazwa_przed_nieodkodowane..">"..zawartosc.."</"..nazwa_po_nieodkodowane..">";
        				return szablon;
        			end;
        			if(not mw.ustring.match(atrybuty,"^%s*$"))then
        				if(odstepy~="")then
        					if((jak~="")and(jak~="inc"))then
        						return TenZnacznik();
        					end;
        				else
        					return InneZnacznik();
        				end;
        			else
        				if((jak~="")and(jak~="inc"))then
        					return TenZnacznik();
        				end;
        			end;
        			----
        			local ile_zastapione;local ile_pominiete;
        			zawartosc,ile_zastapione,ile_pominiete=ZNACZNIKI(zawartosc,jak);
        			zawartosc=PracePrzygotowywujace(zawartosc);
        			zawartosc=INNEPRE(zawartosc,true);
        			zawartosc=NiedokonczoneElementyWikikodu(zawartosc);
        			
        			return TenZnacznik();
        		end);
        		return tekst_artykulu,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy;
    		end;
    		----
    		PracePrzygotowywujace=function(tekst_artykulu,czy_main)
    			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)
        			  local ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy;
        			  zawartosc,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy=ZNACZNIKI(zawartosc,"");
        			  zawartosc=PracePrzygotowywujace(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
    				repeat 
    					tekst_artykulu,ile_linkw=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"%[%[(.-%[?)%]%](%]?)(%l*)",
    						function(szereg,numer,numer_a,numer_b,szablon,dodatkowe,dalej)
    							return mw.ustring.match(szablon,"%[%["),2;
    						end,
    						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);
    				until (ile_linkw==0);
    				
    				tekst_artykulu,ile_linkz=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"%[(.-)%]",
    				function(szereg,numer,numer_a,numer_b,szablon)
    					return mw.ustring.match(szablon,"%["),1;
    				end,
    				function(szablon) 
    					return Szablon(szablon,"[","]","LINKZ");
    				end);
    				
    				repeat
        				tekst_artykulu,ile_var=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"{{{(.-)}}}",
        				function(szereg,numer,numer_a,numer_b,szablon)
        					return mw.ustring.match(szablon,"%{%{%{"),3;
        				end,
        				function(szablon) 
        					return Szablon(szablon,"{{{","}}}","ZMIENNA");
        				end);
        			until (ile_var==0);
        			
        			tekst_artykulu,ile_template=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"{{(.-)}}",
        			function(szereg,numer,numer_a,numer_b,szablon)
        				return mw.ustring.match(szablon,"%{%{"),2;
        			end,
        			function(szablon) 
        				return Szablon(szablon,"{{","}}","SZABLON");
        			end);
        			
        			tekst_artykulu,ile_wikitabela=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"{|(.-)\n|}",
        			function(szereg,numer,licznik_wzor,numer_a,numer_b,szablon)
        				return mw.ustring.match(szablon,"\n%{%|"),(czy_main and ((licznik_wzor==1) and 2 or 3) or 3);
        			end,
        			function(licznik_wzor,szablon)
        				if((czy_main)and(licznik_wzor==1))then
        					return Szablon(szablon,"{|","\n|}","WIKITABELA");
        				else
        					return "\n"..Szablon(szablon,"{|","\n|}","WIKITABELA");
        				end;
        			end,
        			function(wzor,numer_begin,czy)
        				if(czy_main)then
        					if(numer_begin==1)then return "^"..wzor,true;end;
	        				return "\n"..wzor,false;
	        			else
	        				return "\n"..wzor,false;
	        			end;
        			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;
    		----
    		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,true);
        	----
        	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,true);
    		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;