Moduł:StronicowyParser/Rozdziały
Przejdź do nawigacji
Przejdź do wyszukiwania
Zobacz podstrony tego modułu.
|
local p={}
function p.PodajNapisPoziomWprowadzeniaTekstu(linia)
if(mw.ustring.match(linia,"^%s*=*%s*$"))then
return nil,0;
end;
local rowna_lewy=mw.ustring.match(linia,"^%s*(=+)");
local rowna_prawy=mw.ustring.match(linia,"(=+)%s*$");
if((rowna_lewy)and(rowna_prawy))then
local min_rowna=math.min(#rowna_lewy,#rowna_prawy);
local str_min_rowna=mw.ustring.rep("=",min_rowna);
local naglowek=mw.ustring.match(linia,"^%s*"..str_min_rowna.."([^\n]+)"..str_min_rowna.."%s*$");
if(not naglowek)then
return nil,0;
end;
local naglowek=mw.text.trim(naglowek);
return naglowek,min_rowna;
else
return nil,0;
end;
end;
function p.PodajTekstHNumerNapisuWprowadzeniaTekstu(linia)
local liczba1,zawrtosc,liczba2=mw.ustring.match(linia,"<[Hh](%d+)[^<>]*>(.*)</[Hh](%d+)>");
if(liczba1==liczba2)then
return zawartosc,liczba1;
end;
return nil;
end;
function p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz)
local czy_naglowek=mw.ustring.match(wiersz,"^(=+[^=]*=+)%s*$");
if(czy_naglowek)then return true,true;end;
czy_naglowek=mw.ustring.match(wiersz,"<[Hh]%d+[^<>]*>(.+)</[Hh]%d+>");
return czy_naglowek,false;
end;
function p.WierszHNumer(tekst)
local iter_h=mw.ustring.gmatch(tekst,"(<[Hh]%d+[^<>]*>.*</[Hh]%d+>)");
local techniczne_modul=require("Module:techniczne");
for wiersz_h in iter_h do
local wiersz_h_start=wiersz_h;
wiersz_h,_=mw.ustring.gsub(wiersz_h,"\n"," ");
wiersz_h="\n"..wiersz_h.."\n";
wiersz_h_start=techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](wiersz_h_start);
wiersz_h=techniczne_modul["TekstBezOdwołańDoParametrówWeWzorze"](wiersz_h);
tekst,_=mw.ustring.gsub(tekst,wiersz_h_start,wiersz_h);
end;
return tekst;
end;
function p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni_nazw,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,tablica_analizy_dany_modul,tablica_parametrow_szablonu_strony)
local zacznij;local wprowadzenie;local zawsze=false;local ostatnie=false;
local stronicowyparser_obiekty_modul=mw.loadData('Module:StronicowyParser/obiekty');
local parametry_modul=require("Module:Parametry");
local szablonowe_modul=require("Module:Szablonowe");
local tab_dozwolone_szablonowe_z_elementami_spisu_rzeczy_stron_woluminu=stronicowyparser_obiekty_modul.tab_dozwolone_szablonowe_z_elementami_spisu_rzeczy_stron_woluminu;
local szablony={};
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne")
local stronicowyparser_obiekty_modul=require("Module:StronicowyParser/obiekty");
return function(linia,czy_w_spise_tresci,czy_nie_poczatek,tak_ce_spis_tresci)
----
if((czy_w_spise_tresci)and(not zawsze))then zawsze=true;end;
----
if(not zawsze)then
function __FUNKCJA(parametry,nazwa_szablonu)
local tab_kom=stronicowyparser_obiekty_modul.szablony_kompletowania_stron_woluminu;
return tab_kom[nazwa_szablonu];
end;
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_dany_modul);
for wywolanie,obiekt,kod in iter do
if((not tablica_analizy_dany_modul) or ((obiekt=="SZABLON")or(obiekt=="LINKW")))then
local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(wywolanie,nazwa_przestrzeni_nazw,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,__FUNKCJA,nil,tablica_analizy_dany_modul,tablica_parametrow_szablonu_strony,kod);
if(not kom)then
local tab=((tab_2 and tab_2[1]) and tab_2 or nil);
if((tab)and(mw.ustring.match(stronicowyparser_potrzebne_modul.UzykanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false),"^[Oo]kładka$")))then
zawsze=true;
return nil,nil,nil,nil;
end;
end;
end;
end;
if(czy_nie_poczatek)then
if(not zacznij)then
if(mw.ustring.match(linia,"^[^#:%*;%d%.].*[%.,:]%s*$"))then
ostatnie=mw.ustring.match(linia,"%.%s*$")and(not mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu("LINKW")));
wprowadzenie=true;
elseif((wprowadzenie)and(mw.ustring.match(linia,"^%s*$")))then
zacznij=true;
wprowadzenie=false;
end
elseif(mw.ustring.match(linia,"^[^#:%*;%d%.].*[%.,:]%s*$"))then
local roz=mw.ustring.match(linia,":%s*$");
if((ostatnie)and(roz))then
wprowadzenie=false;
zawsze=true;
else
ostatnie=mw.ustring.match(linia,"%.%s*$")and(not mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu("LINKW")));
zacznij=false;
wprowadzenie=true;
end;
end;
elseif((mw.ustring.match(linia,"^%s*(%a[%a%s,:%.]-:)%s*$"))or(mw.ustring.match(linia,"^%s*([#:%*;]+)%s*([%d%.]-)%s*(.-)%s*$")))then
wprowadzenie=false;
else
--wprowadzenie=true;
end;
end;
if((not wprowadzenie) or zawsze)then
local poczatek,numeracja, rozdzial=mw.ustring.match(linia,"^%s*([#:%*;]+)%s*([%d%.]-)%s*(.-)%s*$");
if(not poczatek and not numeracja and not rozdzial)then
numeracja, rozdzial=mw.ustring.match(linia,"^%s*([%d%.]+)%s*(.-)%s*$");
if(numeracja and rozdzial)then poczatek="";end;
end;
local ze_specialnymi_obiektami=false;local czy_centrowanie=false;local tekst;
if(rozdzial)then tekst=rozdzial;else tekst=linia;poczatek=nil;rozdzial=nil;numeracja=nil;end;
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst,nil,tablica_analizy_dany_modul,function(szablon,obiekt,kod)
if(obiekt=="SZABLON")then
local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["ParsowanieWywołaniaSzablonu"](szablon,nil,nil,nil,tablica_parametrow_szablonu_strony,kod);
local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(czy_ce)then
ze_specialnymi_obiektami=true;
czy_centrowanie=true;
if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
return nil;
elseif(((mw.ustring.match(nazwa_szablonu,"^Link"))and(nazwa_szablonu~="LinkURL"))or(nazwa_szablonu=="Link wewnętrzny")or(nazwa_szablonu=="Sekcja referencyjna"))then
ze_specialnymi_obiektami=true;
if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
return nil;
end;
elseif(obiekt=="LINKW")then
if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
ze_specialnymi_obiektami=true;
return nil;
elseif((obiekt=="PRE")or(obiekt=="MATH")or(obiekt=="ŹRÓDŁO")or(obiekt=="INNEPRE"))then
if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
ze_specialnymi_obiektami=true;
return nil;
elseif(obiekt=="ZNACZNIK")then
local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyIOpcjiAtrybutowychZeZnacznika(szablon);
if(zawartosc)then
if(nazwa=="center")then
ze_specialnymi_obiektami=true;
czy_centrowanie=true;
if(rozdzial)then poczatek=nil;rozdzial=nil;numeracja=nil;end;
return nil;
end;
end;
end;
return szablon;
end);
for szablon,obiekt,kod in iter do end;
if(not poczatek or not rozdzial)then
if(not ze_specialnymi_obiektami)then
linia=mw.ustring.gsub(linia,"<[^<>]+>","");
rozdzial=mw.ustring.match(linia,"^%s*('*['%w%p%s]-:%s*'*)%s*$");
if(rozdzial)then
return rozdzial,0,nil,nil;
else
rozdzial=mw.ustring.match(linia,"^%s*('+%s*[%w%p]['%w%p%s]-%s*'*)%s*$");
if(rozdzial)then
if(not mw.ustring.match(rozdzial,"^.*!%s*'*%s*$"))then
return rozdzial,0,nil,nil;
end;
end;
end;
elseif(czy_centrowanie)then
local rozdzial=nil;local numeracja=nil;
if(tak_ce_spis_tresci)then
local function WykluczenieNieodpowiednichNormSzablonowych(rozdzial)
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(rozdzial,nil,tablica_analizy_dany_modul);
for szablon,obiekt,kod in iterator do
if(obiekt=="SZABLON")then
local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["ParsowanieWywołaniaSzablonu"](szablon,nil,nil,nil,tablica_parametrow_szablonu_strony,kod);
if(stronicowyparser_obiekty_modul.szablony_nieodpowiednie_napisu_wprowadzenia_tekstu_centrowanego[nazwa_szablonu])then
return nil;
end;
end;
end;
return true;
end;
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_dany_modul,function(szablon,obiekt,kod)
local czy_szablon=(obiekt=="SZABLON");local czy_znacznik=(obiekt=="ZNACZNIK");
if(czy_szablon)then
local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["ParsowanieWywołaniaSzablonu"](szablon,nil,nil,nil,tablica_parametrow_szablonu_strony,kod);
local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(czy_ce)then
local wartosc=tabela_parametrow_szablonu[czy_ce];
if(wartosc)then
if(mw.ustring.match(wartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return nil;end;
numeracja,rozdzial=mw.ustring.match(wartosc,"^%s*([%d%.]*)%s*(.-)%s*$");
if(rozdzial)then
local wynik=WykluczenieNieodpowiednichNormSzablonowych(rozdzial);
if(not wynik)then
numeracja=nil;rozdzial=nil;
return nil;
end;
end;
end;
return nil;
end;
elseif(czy_znacznik)then
local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyIOpcjiAtrybutowychZeZnacznika(szablon);
if(zawartosc)then
if(nazwa=="center")then
if(mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return nil;end;
numeracja,rozdzial=mw.ustring.match(zawartosc,"^%s*([%d%.]*)%s*(.-)%s*$");
if(rozdzial)then
local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_dany_modul);
for szablon,obiekt,kod in iterator do
if(obiekt=="GALERIA")then
numeracja=nil;rozdzial=nil;
return nil;
end;
end;
local wynik=WykluczenieNieodpowiednichNormSzablonowych(rozdzial);
if(not wynik)then
numeracja=nil;rozdzial=nil;
return nil;
end;
end;
end;
end;
return nil;
end;
end);
for szablon,obiekt,kod in iter do end;
if((rozdzial)and(numeracja))then
if((not parametry_modul["CzyTakCiąg"](numeracja))and(not parametry_modul["CzyTakCiąg"](rozdzial)))then
return nil,nil,nil,nil;
end;
return rozdzial,2,nil,numeracja,true;
end;
end;
end;
else
if((not parametry_modul["CzyTakCiąg"](numeracja))and(not parametry_modul["CzyTakCiąg"](rozdzial)))then
return nil,nil,nil,nil;
end;
return rozdzial,(#poczatek*(-1)),poczatek,numeracja;
end;
end;
return nil,nil,nil,nil;
end,
function()
return ((not wprowadzenie) or zawsze);
end;
end;
function p.TekstPoNapisieWprowadzeniaTekstuStrony(frame)
local strona=frame.args[1];
local id_rozdzialu1=frame.args[2] or "";
local id_rozdzialu2=frame.args[3] or "";
local title=mw.title.makeTitle('',strona);
if((not title)or(not title.exists))then
return nil;
end;
local tekst=title:getContent();
return p.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2);
end;
function p.ZwracanieSekcjiNapisuWprowadzeniaTekstuStrony(frame)
local strona=frame.args[1];
local id_rozdzialu=frame.args[2] or "";
id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"<[^<>]+>","");
id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"'+","");
id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"^[%s_]+","");
id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"[%s_]+$","");
id_rozdzialu,_=mw.ustring.gsub(id_rozdzialu,"[%s_]+","_");
local title=mw.title.makeTitle('',strona);
if((not title)or(not title.exists))then
return nil;
end;
local tekst=title:getContent();
tekst,_=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
tekst,_=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
tekst,_=mw.ustring.gsub(tekst,"\n\n","\n \n");
tekst=p.WierszHNumer(tekst);
local iter=mw.ustring.gmatch(tekst,"([^\n]+)");
local tab_rozdzialy={};
local specjalne_modul=require("Module:Specjalne");
for wiersz in iter do
local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz);
if(czy_naglowek)then
local nazwa_rozdzialu,poziom_rozdzialu;
if(czy_naglowek_wiki)then
nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomWprowadzeniaTekstu(wiersz);
else
nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz);
end;
nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu);
local nazwa_rozdzialu_aktualna=nazwa_rozdzialu;
nazwa_rozdzialu=specjalne_modul["UsuńKomentarze"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńSzablonyStylów"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńZnaczniki"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńKategorie"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńWywołaniaPlików"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńInterwiki"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](nazwa_rozdzialu);
local c=1;
for i=1,#tab_rozdzialy,1 do
if(tab_rozdzialy[i]==nazwa_rozdzialu)then
c=c+1;
end;
end;
if(c>1)then
nazwa_rozdzialu=nazwa_rozdzialu.."_"..c;
end;
if(id_rozdzialu==nazwa_rozdzialu)then
return frame:preprocess(nazwa_rozdzialu_aktualna);
end;
end;
end;
return nil;
end;
function p.NumerSekcjiStrony(frame)
local strona=frame.args[1];
local id_rozdzialu=frame.args[2] or "";
local specjalne_modul=require("Module:Specjalne");
id_rozdzialu=specjalne_modul["UsuńKomentarze"](id_rozdzialu);
id_rozdzialu=specjalne_modul["UsuńSzablonyStylów"](id_rozdzialu);
id_rozdzialu=specjalne_modul["UsuńZnaczniki"](id_rozdzialu);
id_rozdzialu=specjalne_modul["UsuńKategorie"](id_rozdzialu);
id_rozdzialu=specjalne_modul["UsuńWywołaniaPlików"](id_rozdzialu);
id_rozdzialu=specjalne_modul["UsuńInterwiki"](id_rozdzialu);
id_rozdzialu=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](id_rozdzialu);
id_rozdzialu=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](id_rozdzialu);
local title=mw.title.makeTitle('',strona);
if((not title)or(not title.exists))then
return nil;
end;
local tekst=title:getContent();
tekst,_=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
tekst,_=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
tekst,_=mw.ustring.gsub(tekst,"\n\n","\n \n");
tekst=p.WierszHNumer(tekst);
local iter=mw.ustring.gmatch(tekst,"([^\n]+)");
local tab_rozdzialy={};
local ile=1;
for wiersz in iter do
local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz);
if(czy_naglowek)then
local nazwa_rozdzialu,poziom_rozdzialu;
if(czy_naglowek_wiki)then
nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomWprowadzeniaTekstu(wiersz);
else
nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz);
end;
nazwa_rozdzialu=frame:preprocess(nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńKomentarze"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńSzablonyStylów"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńZnaczniki"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńKategorie"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńWywołaniaPlików"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńInterwiki"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](nazwa_rozdzialu);
local c=1;
for i=1,#tab_rozdzialy,1 do
if(tab_rozdzialy[i]==nazwa_rozdzialu)then
c=c+1;
end;
end;
if(c>1)then
nazwa_rozdzialu=nazwa_rozdzialu.."_"..c;
end;
table.insert(tab_rozdzialy,nazwa_rozdzialu);
if(id_rozdzialu==nazwa_rozdzialu)then
return ile;
end;
ile=ile+1;
end
end;
return nil;
end;
function p.TekstWprowadzeniaTekstu(tekst,id_rozdzialu1,id_rozdzialu2)
local specjalne_modul=require("Module:Specjalne");
id_rozdzialu1=specjalne_modul["UsuńKomentarze"](id_rozdzialu1);
id_rozdzialu1=specjalne_modul["UsuńSzablonyStylów"](id_rozdzialu1);
id_rozdzialu1=specjalne_modul["UsuńZnaczniki"](id_rozdzialu1);
id_rozdzialu1=specjalne_modul["UsuńKategorie"](id_rozdzialu1);
id_rozdzialu1=specjalne_modul["UsuńWywołaniaPlików"](id_rozdzialu1);
id_rozdzialu1=specjalne_modul["UsuńInterwiki"](id_rozdzialu1);
id_rozdzialu1=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](id_rozdzialu1);
id_rozdzialu1=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](id_rozdzialu1);
id_rozdzialu2=specjalne_modul["UsuńKomentarze"](id_rozdzialu2);
id_rozdzialu2=specjalne_modul["UsuńSzablonyStylów"](id_rozdzialu2);
id_rozdzialu2=specjalne_modul["UsuńZnaczniki"](id_rozdzialu2);
id_rozdzialu2=specjalne_modul["UsuńKategorie"](id_rozdzialu2);
id_rozdzialu2=specjalne_modul["UsuńWywołaniaPlików"](id_rozdzialu2);
id_rozdzialu2=specjalne_modul["UsuńInterwiki"](id_rozdzialu2);
id_rozdzialu2=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](id_rozdzialu2);
id_rozdzialu2=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](id_rozdzialu2);
tekst,_=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
tekst,_=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
tekst,_=mw.ustring.gsub(tekst,"\n\n","\n \n");
tekst=p.WierszHNumer(tekst);
local iter=mw.ustring.gmatch(tekst,"([^\n]+)");
local tab_rozdzialy={};
local str=""
local nazwa_rozdzialu_aktualna;
local poziom_rozdzialu_aktualny;
for wiersz in iter do
local czy_naglowek,czy_naglowek_wiki=p.SprawdzanieCzyToJestNapisWprowadzeniaTekstu(wiersz);
if(czy_naglowek)then
local nazwa_rozdzialu,poziom_rozdzialu;
if(czy_naglowek_wiki)then
nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomWprowadzeniaTekstu(wiersz);
else
nazwa_rozdzialu,poziom_rozdzialu=p.PodajTekstHNumerNapisuWprowadzeniaTekstu(wiersz);
end;
nazwa_rozdzialu=mw.getCurrentFrame():preprocess(nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńKomentarze"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńSzablonyStylów"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńZnaczniki"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńKategorie"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńWywołaniaPlików"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["UsuńInterwiki"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["ZamieńLinkiWewnętrzneNaTekst"](nazwa_rozdzialu);
nazwa_rozdzialu=specjalne_modul["ZamieńLinkiZewnętrzneNaTekst"](nazwa_rozdzialu);
local c=1;
for i=1,#tab_rozdzialy,1 do
if(tab_rozdzialy[i]==nazwa_rozdzialu)then
c=c+1;
end;
end;
if(c>1)then
nazwa_rozdzialu=nazwa_rozdzialu.."_"..c;
end;
table.insert(tab_rozdzialy,nazwa_rozdzialu);
if(((nazwa_rozdzialu_aktualna)and(nazwa_rozdzialu_aktualna==id_rozdzialu1))
and((((id_rozdzialu2=="")or(not id_rozdzialu2))and(poziom_rozdzialu<=poziom_rozdzialu_aktualny))or(nazwa_rozdzialu==id_rozdzialu2)))then
return str;
end;
if((id_rozdzialu1~="")and(nazwa_rozdzialu==id_rozdzialu1))then
nazwa_rozdzialu_aktualna=nazwa_rozdzialu;
poziom_rozdzialu_aktualny=poziom_rozdzialu;
str="";
elseif(id_rozdzialu1=="")then
nazwa_rozdzialu_aktualna="";
poziom_rozdzialu_aktualny=0;
if(id_rozdzialu2=="")then
return str;
elseif(nazwa_rozdzialu==id_rozdzialu2)then
return str;
else
str=(str~="")and (str.."\n"..wiersz) or wiersz;
end;
else
str=(str~="")and (str.."\n"..wiersz) or wiersz;
end;
else
str=(str~="")and (str.."\n"..wiersz) or wiersz;
end;
end;
if((id_rozdzialu1)and(id_rozdzialu1==""))then
return str;
elseif((nazwa_rozdzialu_aktualna)and(nazwa_rozdzialu_aktualna==id_rozdzialu1))then
return str;
end;
return "";
end;
function p.ObiektySzablonoweFormatowaniaTekstu(szablon,nazwa_szablonu,tablica_parametrow_szablonu_strony,kod)
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local tab_dozwolone_szablonowe_z_elementami_spisu_rzeczy_stron_woluminu=stronicowyparser_obiekty_modul.tab_dozwolone_szablonowe_z_elementami_spisu_rzeczy_stron_woluminu;
local szablonowe_modul=require("Module:Szablonowe");
local nazwa_szablonu=nazwa_szablonu or szablonowe_modul["NazwaSzablonuWywołania"](szablon);
for name,ktore in pairs(tab_dozwolone_szablonowe_z_elementami_spisu_rzeczy_stron_woluminu)do
if(name==nazwa_szablonu)then
local tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania=szablonowe_modul["ParsowanieWywołaniaSzablonu"](szablon,true,nil,nil,tablica_parametrow_szablonu_strony,kod);
local tab=mw.text.split(tostring(ktore),"%s*;%s*",false);
local wynik="";
for _,num in pairs(tab)do
local numer_parametru=tonumber(num) or num;
for parametr,wartosc in pairs(tabela_parametrow_szablonu)do
if(parametr==numer_parametru)then
wynik=wynik..wartosc;
end;
end;
end;
return wynik;
end;
end;
end;
function p.IntegrowanieLiniiTekstu(tekst)
local tab_linie_tekstu=mw.text.split(tekst,"\n");
--repeat
local CzySpecjalnaLinia=function(linia)
local czy_specjalne_linie=p.PodajNapisPoziomWprowadzeniaTekstu(linia) or mw.ustring.match(linia,"^[%*,;:#]+");
return czy_specjalne_linie;
end;
local czy_linia_poprz=nil;
for i=#tab_linie_tekstu-1,1,-1 do
local linia1=tab_linie_tekstu[i];
local linia2=tab_linie_tekstu[i+1];
local czy_sp_1=CzySpecjalnaLinia(linia1);
local czy_sp_2=czy_linia_poprz or CzySpecjalnaLinia(linia2);
czy_linia_poprz=czy_sp_1;
if((not czy_sp_1)and(not czy_sp_2))then
local czy_kropka=mw.ustring.match(linia1,"[%w,:%(%)][^%S\n]$"); --or mw.ustring.match(linia1,"[^<>{}][^%S\n]$");
if(czy_kropka)then
local linia=linia1..linia2;
tab_linie_tekstu[i]=linia;
table.remove(tab_linie_tekstu,i+1);
end;
end;
end;
tekst=table.concat(tab_linie_tekstu,"\n")
return tekst;
end;
function p.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_rozdzialy_analizowac,czy_zakodowac,tablica_analizy_dany_modul,tablica_parametrow_szablonu_strony,__FUNKCJA,__FUNKCJA2)
local tekst=tekst_rozwiniety_calego_artykulu;
local nazwy_modul=require("Module:Nazwy");
local tablica_analizy_dany_modul=tablica_analizy_dany_modul or {};
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local szablonowe_modul=require("Module:Szablonowe");
local parametry_modul=require("Module:Parametry");
local techniczne_modul=require("Module:Techniczne");
local html_modul=require("Module:Html");
local szablony_do_usuwania_z_tekstu=stronicowyparser_obiekty_modul.szablony_do_usuwania_z_tekstu;
local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
local pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej=(nazwa_przestrzeni and nazwa_przestrzeni_ksiazki and nazwa_ksiazki and nazwa_spisu_tresci)
and nazwy_modul["NazwaModułu"](((nazwy_np_modul.Template~=nazwa_przestrzeni) and (nazwa_przestrzeni) or ""),nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci)
or nil;
local dwukropek=(nazwa_przestrzeni=="");
if(czy_zakodowac)then
----
tablica_parametrow_szablonu_strony=tablica_parametrow_szablonu_strony or {};
----
tekst=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst,nil,tablica_analizy_dany_modul,nil,function(szablon,obiekt,kod)
if(obiekt=="SZABLON")then
local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["ParsowanieWywołaniaSzablonu"](szablon,nil,nil,nil,tablica_parametrow_szablonu_strony,kod);
if(szablonowe_modul.CzyModyfikatoryZElementamiSzablonowymiNormalnymiSzablonowe(tabela_modyfikatorow,nazwa_szablonu,tabela_parametrow_szablonu))then
nazwa_szablonu=pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej and techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=nazwa_szablonu,[2]=(dwukropek and ":" or "")..pelna_nazwa_spisu_tresci_bez_nazwy_przestrzeni_szablonowej,} or nazwa_szablonu;
local wynik=p.ObiektySzablonoweFormatowaniaTekstu(szablon,nazwa_szablonu,tablica_parametrow_szablonu_strony,kod);
if(wynik)then return wynik;end;
if(szablony_do_usuwania_z_tekstu[nazwa_szablonu])then return "";end;
if(__FUNKCJA)then
local pelna_nazwa_szablonu=szablonowe_modul["PełnaNazwaStronyNazwySzablonu"](nazwa_szablonu);
local wynik=__FUNKCJA(pelna_nazwa_szablonu,tabela_modyfikatorow);
if(wynik)then return wynik;end;
end;
end;
elseif(obiekt=="ZNACZNIK")then
local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyIOpcjiAtrybutowychZeZnacznika(szablon);
if((nazwa~="center")and(nazwa~="ref"))then
return zawartosc or "";
end;
end;
end);
tekst=szablonowe_modul:KodowanieNiezakodowanychNormKodowychReferencjiTekstu(tekst,nil,tablica_analizy_dany_modul,tablica_parametrow_szablonu_strony);
-----
tekst=p.IntegrowanieLiniiTekstu(tekst);
-----
end;
tekst,_=mw.ustring.gsub(tekst,"\n\n","\n \n");
tekst,_=mw.ustring.gsub(tekst,"<!%-%-.-%-%->","");
local iter=mw.ustring.gmatch(tekst,"([^\n]+)");
local naglowek_aktualnego_rozdzialu;
local poziom_aktualnego_rozdzialu;
local poczatek_aktualnego_rozdzialu;
local numeracja_aktualnego_rozdzialu;
local czy_rozdzial_aktualny_centrowany;
local czy_koniec=false;
----
local odczyt_jakie_spisy_tresci=stronicowyparser_obiekty_modul.tab_nazw_generalnego_spisu_rzeczy_woluminu;
local jakie_spisy_tresci=parametry_modul["KopiujTabelęElementów"](odczyt_jakie_spisy_tresci);
setmetatable(jakie_spisy_tresci,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
local czy_ce_spis_tresci=nil;
----
local czy_w_spisie_tresci=((not czy_rozdzialy_analizowac)and true or nil);
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local parser,zmienne_spisu=p.ParserPodawaniaNapisuWprowadzeniaTekstu(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,tablica_analizy_dany_modul,tablica_parametrow_szablonu_strony);
local iter2=nil;
local czy_tak=nil;
local czy_nie_poczatek=nil;
local tak_ce_spis_tresci=nil;
return function()
local str="";
local linia;
local function IterMain()
for linia in iter do
local nazwa_rozdzialu;local poziom_rozdzialu;local poczatek_rozdzialu;local numeracja_rozdzialu;local czy_rozdzial_centrowany;
local function Wystepowanie(linia)
local function __FUNKCJA(parametry,nazwa_szablonu)
local tab_kom=stronicowyparser_obiekty_modul.szablony_kompletowania_stron_woluminu;
return tab_kom[nazwa_szablonu];
end;
local function RozwazajLinie(wystepowanie_linkow)
if(wystepowanie_linkow)then
local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(wystepowanie_linkow,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,__FUNKCJA,nil,tablica_analizy_dany_modul);
if(not kom)then
local tab=((tab_2 and tab_2[1]) and tab_2 or nil);
if((tab)and(not mw.ustring.match(stronicowyparser_potrzebne_modul.UzykanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false),"^[Oo]kładka$")))then
return 1;
end;
else
return 0;
end;
end;
end;
local szablon_spis_tresci;
local function spis_tresci(wystepowanie_linkow)
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_dany_modul);
for szablon,obiekt,kod in iter do
if((obiekt=="SZABLON")or(obiekt=="LINKW"))then
local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,__FUNKCJA,nil,tablica_analizy_dany_modul,tablica_parametrow_szablonu_strony,kod);
if(not kom)then
local tab=((tab_2 and tab_2[1]) and tab_2 or nil)
if((tab)and(mw.ustring.match(stronicowyparser_potrzebne_modul.UzykanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false),"^Spis treści$")))then
tak_ce_spis_tresci=true;
szablon_spis_tresci=wystepowanie_linkow;
return 1;
end;
else
return 0;
end;
end;
end;
wystepowanie_linkow=czy_zakodowac and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_dany_modul) or wystepowanie_linkow;
wystepowanie_linkow=mw.text.trim(wystepowanie_linkow);
local czy_ce=jakie_spisy_tresci[wystepowanie_linkow];
if(czy_ce)then
tak_ce_spis_tresci=true;
szablon_spis_tresci=wystepowanie_linkow;
return 1;
end;
end;
local wystepowanie_linkow=mw.ustring.match(linia,"^[#:%*;%d%.]*%s*(.+)$");
local tak=nil;
if(czy_zakodowac)then
if(wystepowanie_linkow)then
local czy_rozdzial=nil;local wartosc=nil;
local iter=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(wystepowanie_linkow,nil,tablica_analizy_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst)
local czy_linkw=(obiekt=="LINKW");local czy_szablon=(obiekt=="SZABLON");local czy_znacznik=(obiekt=="ZNACZNIK");
if(czy_linkw or czy_szablon or czy_znacznik)then
if(not czy_rozdzial)then
local wystepowanie_linku_lub_szablonu=mw.ustring.match(tekst,"^'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod));
if(not wystepowanie_linku_lub_szablonu)then return nil;end;
czy_rozdzial=true;
end;
if(czy_szablon)then
local tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["ParsowanieWywołaniaSzablonu"](szablon,nil,nil,nil,tablica_parametrow_szablonu_strony,kod);
local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu];
if(czy_ce)then
local szablon_spis_tresci_zawartosc=tabela_parametrow_szablonu[czy_ce];
if(szablon_spis_tresci_zawartosc)then
szablon_spis_tresci_zawartosc=mw.ustring.match(szablon_spis_tresci_zawartosc,"^'*%s*(.-)%s*'*$");
wartosc=spis_tresci(szablon_spis_tresci_zawartosc);
else
wartosc=RozwazajLinie(szablon);
end;
else
wartosc=RozwazajLinie(szablon);
end;
elseif(czy_znacznik)then
local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyIOpcjiAtrybutowychZeZnacznika(szablon);
if(zawartosc)then
if(nazwa=="center")then
szablon_spis_tresci=mw.ustring.match(zawartosc,"^'*%s*(.-)%s*'*$");
wartosc=spis_tresci(szablon_spis_tresci);
else
wartosc=RozwazajLinie(zawartosc);
end;
end;
else
wartosc=RozwazajLinie(szablon);
end;
if(not wartosc)then return;end;
tak=tak or (wartosc==1);
if(tak)then return nil; end;
return szablon,tekst;
else
local tekst,ile=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod),"");
return "", ((ile>0) and tekst or nil);
end;
end);
for szablon,obiekt,kod in iter do end;
end;
end;
if(tak)then
if(not tak_ce_spis_tresci)then
nazwa_rozdzialu="Spis treści";
poziom_rozdzialu=nil;
str=((str~="")and (str.."\n"..linia) or linia);
else
nazwa_rozdzialu=szablon_spis_tresci or "Spis treści";
poziom_rozdzialu=1;
czy_rozdzial_centrowany=true;
poczatek_rozdzialu=nil;
numeracja_rozdzialu=nil;
str="";
end;
czy_w_spisie_tresci=true;
else
nazwa_rozdzialu=nil;
end;
end;
---------------------------------------
if(czy_rozdzialy_analizowac)then
local function CzyNiePoczatek()
local function WhiteSpace(linia)
linia=mw.ustring.gsub(linia," ","");
linia=mw.ustring.gsub(linia," ","");
return mw.ustring.match(linia,"^%s*$");
end;
czy_nie_poczatek=czy_nie_poczatek or ((not czy_w_spisie_tresci)and (not WhiteSpace(linia)) or nil);
end;
if((not czy_w_spisie_tresci)and(zmienne_spisu()))then
Wystepowanie(linia);
end;
if(not nazwa_rozdzialu)then
nazwa_rozdzialu,poziom_rozdzialu,poczatek_rozdzialu,numeracja_rozdzialu,czy_rozdzial_centrowany=parser(linia,czy_w_spisie_tresci,czy_nie_poczatek,tak_ce_spis_tresci);
end;
CzyNiePoczatek();
else
nazwa_rozdzialu=nil;
end;
if(not nazwa_rozdzialu)then
nazwa_rozdzialu=mw.ustring.match(linia,"^(=[^\n]+=)%s*$");
if(not nazwa_rozdzialu) then
--if(not czy_w_spisie_tresci)then
-- Wystepowanie(linia);
--end;
else
nazwa_rozdzialu,poziom_rozdzialu=p.PodajNapisPoziomWprowadzeniaTekstu(nazwa_rozdzialu);
--nazwa_rozdzialu=mw.ustring.match(nazwa_rozdzialu,"^'*(.-)'*$") or nazwa_rozdzialu;
czy_w_spisie_tresci=true;
czy_nie_poczatek=true;
tak_ce_spis_tresci=true;
end;
else
czy_w_spisie_tresci=true;
czy_nie_poczatek=true;
tak_ce_spis_tresci=true;
end;
if(nazwa_rozdzialu)then
if(not naglowek_aktualnego_rozdzialu)then
naglowek_aktualnego_rozdzialu=nazwa_rozdzialu;
poziom_aktualnego_rozdzialu=poziom_rozdzialu;
poczatek_aktualnego_rozdzialu=poczatek_rozdzialu;
numeracja_aktualnego_rozdzialu=numeracja_rozdzialu;
czy_rozdzial_aktualny_centrowany=czy_rozdzial_centrowany;
else
----------------------------------------------
local naglowek_posredni_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu;
local poziom_posredni_aktualnego_rozdzialu=poziom_aktualnego_rozdzialu;
local poczatek_posredni_aktualnego_rozdzialu=poczatek_aktualnego_rozdzialu;
local numeracja_posredni_aktualnego_rozdzialu=numeracja_aktualnego_rozdzialu;
local czy_rozdzial_posredni_centrowany=czy_rozdzial_aktualny_centrowany;
----------------------------------------------
naglowek_aktualnego_rozdzialu=nazwa_rozdzialu;
poziom_aktualnego_rozdzialu=poziom_rozdzialu;
poczatek_aktualnego_rozdzialu=poczatek_rozdzialu;
if(not __FUNKCJA2)then
naglowek_posredni_aktualnego_rozdzialu=naglowek_posredni_aktualnego_rozdzialu
and (czy_zakodowac and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(naglowek_posredni_aktualnego_rozdzialu,nil,tablica_analizy_dany_modul)
or naglowek_posredni_aktualnego_rozdzialu
)
or nil;
str=str and (czy_zakodowac and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(str,nil,tablica_analizy_dany_modul) or str) or nil;
elseif(czy_zakodowac)then
naglowek_posredni_aktualnego_rozdzialu=naglowek_posredni_aktualnego_rozdzialu and __FUNKCJA2(naglowek_posredni_aktualnego_rozdzialu,nil,tablica_analizy_dany_modul,true) or nil;
str=str and __FUNKCJA2(str,nil,tablica_analizy_dany_modul,false) or nil;
end;
return naglowek_posredni_aktualnego_rozdzialu,str,poziom_posredni_aktualnego_rozdzialu,poczatek_posredni_aktualnego_rozdzialu,numeracja_posredni_aktualnego_rozdzialu,czy_rozdzial_posredni_centrowany;
end;
else
if(naglowek_aktualnego_rozdzialu)then
str=((not czy_tak) and ((str~="")and (str.."\n"..linia) or linia) or str);
end;
end;
end;
if(czy_koniec)then return nil;end;
czy_koniec=true;
if(not __FUNKCJA2)then
naglowek_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu
and (czy_zakodowac and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(naglowek_aktualnego_rozdzialu,nil,tablica_analizy_dany_modul)
or naglowek_aktualnego_rozdzialu
)
or nil;
str=str and (czy_zakodowac and szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(str,nil,tablica_analizy_dany_modul) or str) or nil;
elseif(czy_zakodowac)then
naglowek_aktualnego_rozdzialu=naglowek_aktualnego_rozdzialu and __FUNKCJA2(naglowek_aktualnego_rozdzialu,nil,tablica_analizy_dany_modul,true) or nil;
str=str and __FUNKCJA2(str,nil,tablica_analizy_dany_modul,false) or nil;
end;
return naglowek_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
----
local naglowek_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany=IterMain();
return naglowek_aktualnego_rozdzialu,str,poziom_aktualnego_rozdzialu,poczatek_aktualnego_rozdzialu,numeracja_aktualnego_rozdzialu,czy_rozdzial_aktualny_centrowany;
end;
end;
return p;