Moduł:Szablonowe/Potrzebne
Zobacz podstrony tego modułu.
|
local p={};
function p.KodowanieSzablonowegoTekstuZObiektamiWikikodu(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA_poczatek,__FUNKCJA_koniec)
local numer_szablonu;
local html_modul=require("Module:Html");
local szablonowe_dane_modul=mw.loadData("Module:Szablonowe/dane");
local szablonowe_modul=require("Module:Szablonowe");
local tab_wiki_znacznik=szablonowe_dane_modul.tablica_wiki_znaczniki;
local function InicjujNumeryPoczatkoweObiektowSzablonow()
if(not __FUNKCJA3)then
numer_szablonu={};
--numer_szablonu["ŹRÓDŁO"]=1;
--numer_szablonu["GALERIA"]=1;
--numer_szablonu["MAPAOBRAZU"]=1;
numer_szablonu["SZABLON"]=1;
numer_szablonu["LINKW"]=1;
numer_szablonu["LINKZ"]=1;
numer_szablonu["ZMIENNA"]=1;
--numer_szablonu["NOWIKI"]=1;
--numer_szablonu["MATH"]=1;
--numer_szablonu["PRE"]=1;
numer_szablonu["INNEPRE"]=1;
numer_szablonu["ZNACZNIK"]=1;
numer_szablonu["WIKITABELA"]=1;
numer_szablonu["STARE"]=1;
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);
if(not __metatablica)then
__metatablica={};
local tablica={};
__metatablica.tablica=function()
return tablica;
end;
__metatablica.__len=function(t)
return #tablica;
end;
__metatablica.__index=function(t,klucz)
local tab=tablica[klucz];
if(tab==nil)then return nil;end;
return tab[1];
end;
__metatablica.__newindex=function(t,klucz,wartosc)
if(wartosc~=nil)then
tablica[klucz]={wartosc,true,};
else
tablica[klucz]=nil;
end;
end;
__metatablica.__pairs=function(t)
return next,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,tablica,0;
end;
setmetatable(tab_co,__metatablica);
end;
local tablica_co=__metatablica.tablica();
tablica_co[numer_szablonu[co or "SZABLON"]]={szablon,false,};
---
numer_szablonu[co or "SZABLON"]=numer_szablonu[co or "SZABLON"]+1;
return kod,true;
end;
local function AnalizaObiektowSzablonowegoTekstu(tekst_artykulu)
local ile_znacznik_niedomykajacy_1;local ile_znacznik_niedomykajacy_2;
local czy_pierwszy_raz=nil;
local html_modul=require("Module:Html");
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 "ZNACZNIK";
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)
local function ATRYBUTY(szablon1,szablon2,szablon3,cudzyslow)
local _, ile=mw.ustring.gsub(szablon2,"("..cudzyslow..")",function(s)return nil;end);
local function ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon)
if(not tab_element["ATRYBUTY"])then tab_element["ATRYBUTY"]={};end;
tab_element["ATRYBUTY"][#tab_element["ATRYBUTY"]+1]=szablon;
local ile=#tab_element["ATRYBUTY"];
local szablon_kod=szablonowe_modul.NormaKoduKodowaniaTekstu("ATRYBUTY",ile);
return szablon_kod;
end;
if(math.mod(ile,2)==0)then
szablon2=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon2);
return szablon1..szablon2..szablon3,true;
else
szablon3=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon3);
return szablon1..szablon2..szablon3,false;
end;
end;
repeat
local ile_naprawy_znacznikow_1=nil;
local ile_naprawy_znacznikow_odejmnoc_1=0;
tekst_artykulu,ile_naprawy_znacznikow_1=mw.ustring.gsub(tekst_artykulu,"(</?%a+%s+)([^<>\"]-\".-\"[^<>\"]-)(/?>)",function(szablon1,szablon2,szablon3)
local szablon,tak=ATRYBUTY(szablon1,szablon2,szablon3,"\"");
if(tak)then ile_naprawy_znacznikow_odejmnoc_1=ile_naprawy_znacznikow_odejmnoc_1+1;end;
return szablon;
end);
ile_naprawy_znacznikow_1=ile_naprawy_znacznikow_1-ile_naprawy_znacznikow_odejmnoc_1;
until(ile_naprawy_znacznikow_1==0);
repeat
local ile_naprawy_znacznikow_2=nil;
local ile_naprawy_znacznikow_odejmnoc_2=0;
tekst_artykulu,ile_naprawy_znacznikow_2=mw.ustring.gsub(tekst_artykulu,"(</?%a+%s+)([^<>']-'.-'[^<>']-)(/?>)",function(szablon1,szablon2,szablon3)
local szablon,tak=ATRYBUTY(szablon1,szablon2,szablon3,"'");
if(tak)then ile_naprawy_znacznikow_odejmnoc_2=ile_naprawy_znacznikow_odejmnoc_2+1;end;
return szablon;
end);
ile_naprawy_znacznikow_2=ile_naprawy_znacznikow_2-ile_naprawy_znacznikow_odejmnoc_2;
until (ile_naprawy_znacznikow_2==0);
--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,ile_naprawy_znacznikow_1=mw.ustring.gsub(tekst_artykulu,"(<(/?)([^<>]*)>)",function(szablon,koniec,tekst)
if((not mw.ustring.match(tekst,"^%a+%s*/?$"))and(not mw.ustring.match(tekst,"^%a+%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,ile_naprawy_znacznikow_2=mw.ustring.gsub(tekst_artykulu,"<(/?)(%a+)([^<>]-%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);
---
local czy_znacznik=(typ=="ZNACZNIK");
local jak=(((czy_zawsze)or(czy_inne))and(not czy_znacznik))and "innebegin" or (((czy_zawsze)or(not czy_inne))and(czy_znacznik)and(tab_wiki_znacznik[nazwa]) 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 jak=(((czy_zawsze)or(czy_inne))and(not czy_znacznik))and "inneend" or (((czy_zawsze)or(not czy_inne))and(czy_znacznik)and(tab_wiki_znacznik[nazwa]) 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);
----
function AnalizujDomykajace(tekst_artykulu,jak,co)
local tekst_artykulu,ile_znacznik_domykajacy=mw.ustring.gsub(tekst_artykulu,"<(/?)("..szablonowe_modul.NormaWzoruKodowaniaTekstu("(%a+)"..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+)(%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)
local czy_url=html_modul["SprawdźURL"](zawartosc);
if(czy_url)then
local szablon="["..zawartosc.."]";
return "["..ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKZ").."]"
else
local szablon="[["..zawartosc.."]]";
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)
szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element);
if(czy_linkw)then
local zawartosc=mw.ustring.match(szablon,"^%[%[(.+)%]%]$");
return ZamianaLINKWNaLINKZ(zawartosc);
else
return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,obiekt)
end;
end;
repeat
tekst_artykulu,ile_linkw=mw.ustring.gsub(tekst_artykulu,"(%[%[[^%[%]{}<>]+%]%])",function(szablon) return Szablon(szablon,"LINKW",true);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)
repeat
local ile_znacznik_niedomykajacy;
tekst_artykulu,ile_znacznik_niedomykajacy=mw.ustring.gsub(tekst_artykulu,"<("..szablonowe_modul.NormaWzoruKodowaniaTekstu("(%a+)"..jak.."begin","(%d+)")..")>(.*)$",function(nazwa_przed_nieodkodowane,obiekt,kod,zawartosc)
local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element);
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+)(%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);
until (ile_znacznik_niedomykajacy==0);
repeat
local ile_znacznik_nieotwierajacy;
tekst_artykulu,ile_znacznik_nieotwierajacy=mw.ustring.gsub(tekst_artykulu,"^(.*)</("..szablonowe_modul.NormaWzoruKodowaniaTekstu("(%a+)"..jak.."end","(%d+)")..")>",function(zawartosc,nazwa_po_nieodkodowane,obiekt,kod)
local nazwa_po=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_po_nieodkodowane,nil,tab_element);
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+)(%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);
until (ile_znacznik_nieotwierajacy==0);
return tekst_artykulu;
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;
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+)"..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+)(%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~="")or(not mw.ustring.match(zawartosc,"[<>{}]")))then
return TenZnacznik();
end;
end;
else
if((jak~="")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)
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);
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,"%[%[([^%[%]]+)%]%]",function(szablon)
return Szablon(szablon,"[[","]]","LINKW",true);
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_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;
function InicjujTabela()
if(not __FUNKCJA3)then
if(not __FUNKCJA4)then
--tablica_analizy_obiektow_strony_dany_modul["ŹRÓDŁO"]={};
--tablica_analizy_obiektow_strony_dany_modul["GALERIA"]={};
--tablica_analizy_obiektow_strony_dany_modul["MAPAOBRAZU"]={};
tablica_analizy_obiektow_strony_dany_modul["SZABLON"]={};
tablica_analizy_obiektow_strony_dany_modul["LINKW"]={};
tablica_analizy_obiektow_strony_dany_modul["LINKZ"]={};
tablica_analizy_obiektow_strony_dany_modul["ZMIENNA"]={};
tablica_analizy_obiektow_strony_dany_modul["WIKITABELA"]={};
--tablica_analizy_obiektow_strony_dany_modul["NOWIKI"]={};
--tablica_analizy_obiektow_strony_dany_modul["MATH"]={};
--tablica_analizy_obiektow_strony_dany_modul["PRE"]={};
tablica_analizy_obiektow_strony_dany_modul["INNEPRE"]={};
tablica_analizy_obiektow_strony_dany_modul["ZNACZNIK"]={};
tablica_analizy_obiektow_strony_dany_modul["STARE"]={};
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;
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();
---
tekst_artykulu,_=mw.ustring.gsub(tekst_artykulu,"("..szablonowe_modul.NormaWzoruKodowaniaTekstu()..")",function(szablon,obiekt,kod)
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;
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;
end);
tekst_artykulu=AnalizaObiektowSzablonowegoTekstu(tekst_artykulu);
return tekst_artykulu;
end;
return p;