Moduł:StronicowyParser/NumerLubNazwaArtykułówKsiążek
Przejdź do nawigacji
Przejdź do wyszukiwania
Zobacz podstrony tego modułu.
|
local p={};
local function PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,typ)
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
stronicowyparser_potrzebne_modul:ParametryKonteneraWoluminu(frame);
local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyStronWoluminu(frame);
if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
local args=stronicowyparser_potrzebne_modul:Args(frame);
local parametry_modul=require("Module:Parametry");
local poziomowo=parametry_modul.CzyTak(args["poziomowo"]);
local ktory=(tonumber(args["który"]) or 1);
local parametr_pierwszy_szablonu=typ and ((not poziomowo) and (tonumber(args[1]) or 1) or args[1]) or args[1];
if(not typ)then
parametr_pierwszy_szablonu,_=mw.ustring.gsub(parametr_pierwszy_szablonu,"^[%s_]+","");
parametr_pierwszy_szablonu,_=mw.ustring.gsub(parametr_pierwszy_szablonu,"[%s_]+$","");
parametr_pierwszy_szablonu,_=mw.ustring.gsub(parametr_pierwszy_szablonu,"[%s_]+"," ");
end;
local HNumer=stronicowyparser_potrzebne_modul.LiczonyHNumer();
local HNumer_2=nil;
local tab_numer_2=nil;
local tab_numer={};
local i=(not poziomowo) and 0 or nil;
local i_2=nil;
local juz_nie_rozwazaj_spisu_tresci=nil;
local juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local odczyt_tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=stronicowyparser_obiekty_modul.tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu;
local tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu);
local odczyt_tab_nazw_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tab_nazw_generalnego_spisu_rzeczy_woluminu;
local tab_nazw_generalnego_spisu_rzeczy_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tab_nazw_generalnego_spisu_rzeczy_woluminu);
setmetatable(tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
setmetatable(tab_nazw_generalnego_spisu_rzeczy_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
local poziom_spisu_tresci=nil;
local pierwszy_dodatni_spis_tresci=nil;
for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
local rozdzial=tab_lista[1][1];
local poziom_rozdzialu=tab_lista[1][2][1] or 0;
if(poziom_rozdzialu>0)then
local czy_nie_ten_rozdzial=nil;
local czy_jest_teraz_spis_tresci=tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial];local czy_nie_ten_rozdzial;
if((not juz_nie_rozwazaj_spisu_tresci)and(not juz_nie_rozwazaj_rozdzialu_spisu_tresci)and(czy_jest_teraz_spis_tresci))then
poziom_spisu_tresci=poziom_rozdzialu;
juz_nie_rozwazaj_rozdzialu_spisu_tresci=true;
czy_nie_ten_rozdzial=tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
elseif((not juz_nie_rozwazaj_spisu_tresci)and(juz_nie_rozwazaj_rozdzialu_spisu_tresci))then
if((poziom_spisu_tresci<poziom_rozdzialu))then
czy_nie_ten_rozdzial=false;
else
juz_nie_rozwazaj_spisu_tresci=true;
czy_nie_ten_rozdzial=tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
end;
else
local juz_nie_rozwazaj_spisu_tresci=nil;
local juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
czy_nie_ten_rozdzial=tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
end;
if(not czy_nie_ten_rozdzial)then
if(poziomowo)then
local hnumer=HNumer(poziom_rozdzialu);
if(#tab_numer<hnumer)then
for i=#tab_numer+1,hnumer,1 do
table.insert(tab_numer,1);
end;
elseif(#tab_numer>hnumer)then
for i=#tab_numer, hnumer+1,-1 do
table.remove(tab_numer,i);
end;
tab_numer[#tab_numer]=tab_numer[#tab_numer]+1;
else
tab_numer[#tab_numer]=tab_numer[#tab_numer]+1;
end;
----
local wartosc=__FUNKCJA(poziomowo,i,tab_numer,ktory,parametr_pierwszy_szablonu,rozdzial);
----
if(wartosc)then return wartosc;end;
----
if((czy_jest_teraz_spis_tresci)and(not pierwszy_dodatni_spis_tresci))then
HNumer_2=HNumer;
HNumer=stronicowyparser_potrzebne_modul.LiczonyHNumer();
tab_numer_2=tab_numer;
tab_numer={};
pierwszy_dodatni_spis_tresci=true;
elseif((pierwszy_dodatni_spis_tresci)and(poziom_spisu_tresci>=poziom_rozdzialu))then
HNumer=HNumer_2;
HNumer_2=nil;
tab_numer=tab_numer_2;
tab_numer_2=nil;
pierwszy_dodatni_spis_tresci=false;
end;
else
i=i+1;
----
local wartosc=__FUNKCJA(poziomowo,i,tab_numer,ktory,parametr_pierwszy_szablonu,rozdzial);
---
if(wartosc)then return wartosc;end;
---
if((czy_jest_teraz_spis_tresci)and(not pierwszy_dodatni_spis_tresci))then
i_2=i;
i=0;
pierwszy_dodatni_spis_tresci=true;
elseif((pierwszy_dodatni_spis_tresci)and(poziom_spisu_tresci>=poziom_rozdzialu))then
i=i_2;
i_2=nil;
pierwszy_dodatni_spis_tresci=false;
end;
end;
end;
end;
end;
end;
p["PobierzNumerNagłówka"]=function(frame)
local s=1;
local function __FUNKCJA(poziomowo,i,tab_numer,ktory,naglowek,rozdzial)
if(naglowek==rozdzial)then
if(s==ktory)then
if(poziomowo)then
if(#tab_numer==0)then return;end;
return table.concat(tab_numer,".");
else
return i;
end;
end;
s=s+1;
end;
end;
return PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,false);
end;
p["PobierzNazwęNagłówka"]=function(frame)
local s=1;
local function __FUNKCJA(poziomowo,i,tab_numer,ktory,numer,rozdzial)
if(poziomowo)then
if(#tab_numer==0)then return;end;
if(numer==table.concat(tab_numer,"."))then
if(s==ktory)then
return rozdzial;
else
s=s+1;
end;
end;
elseif(numer==i)then
if(s==ktory)then
return rozdzial;
else
s=s+1;
end;
end
end;
return PobiezNumerLubNazweNaglowka(frame,__FUNKCJA,true);
end;
local function PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,typ,zbieraj_dane)
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
stronicowyparser_potrzebne_modul:AnalizujArgumentySzablonu(frame);
stronicowyparser_potrzebne_modul:ParametryKonteneraWoluminu(frame,tabela_listy_danych_analizy_ksiazki);
local tab_lista_artykulow_w_ksiazce=stronicowyparser_potrzebne_modul:TabelaListyStronWoluminu(frame,tabela_listy_danych_analizy_ksiazki);
if(not tab_lista_artykulow_w_ksiazce)then return "(błąd)";end;
local args=stronicowyparser_potrzebne_modul:Args(frame);
local parametry_modul=require("Module:Parametry");
local szablonowe_modul=require("Module:Szablonowe");
local naglowek=parametry_modul.CzyTak(args["nagłówek"]);
local artykul_spisu=args["spis"];
artykul_spisu=artykul_spisu and parametry_modul["Odstępy"]{[1]=artykul_spisu,[2]="tak",} or nil;
local tab_artykul=(not naglowek)and {} or nil;
local poziomowo=parametry_modul.CzyTak(args["poziomowo"]);
local tab_poziomowo={};
local tab_poziomowo_1={};
local tab_poziomowo_2={};
local html_modul=require("Module:Html");
----
local function ParametrySzablonuPobierania()
if(not zbieraj_dane)then
local pierwszy_parametr_szablonu=nil;local czy_nazwa=nil;
if(not typ)then
pierwszy_parametr_szablonu=args[1] and ((not naglowek) and mw.ustring.gsub(html_modul["PoprawAdresNagłówkaOrazParametrówStronyAdresu"](html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](args[1]),true),"^([^#]*)#(.*)$","%1") or html_modul["PoprawAdresNagłówkaOrazParametrówStronyAdresu"](html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](args[1]),true)) or "Przykładowy artykuł";
else
pierwszy_parametr_szablonu=args[1] and ((not poziomowo) and (tonumber(args[1]) or 1) or args[1]) or ((not poziomowo) and 1 or "1");
czy_nazwa=parametry_modul.CzyTak(args["nazwa"]);
end;
return function()
return pierwszy_parametr_szablonu,czy_nazwa;
end;
end;
end;
local pierwszy_parametr_szablonu=ParametrySzablonuPobierania();
----
local ktory=(tonumber(args["który"]) or 1);
local i=(not poziomowo) and 1 or nil;
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local odczyt_tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=stronicowyparser_obiekty_modul.tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu;
local tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu);
local odczyt_tab_nazw_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tab_nazw_generalnego_spisu_rzeczy_woluminu;
local tab_nazw_generalnego_spisu_rzeczy_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tab_nazw_generalnego_spisu_rzeczy_woluminu);
setmetatable(tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
setmetatable(tab_nazw_generalnego_spisu_rzeczy_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
--local HNumer=poziomowo and stronicowyparser_potrzebne_modul.LiczonyHNumer() or nil;
local HNumerPoziomow_4=nil--poziomowo and stronicowyparser_potrzebne_modul.LiczonyHNumer() or nil;
local HNumerPoziomow_3=nil
local HNumerPoziomow_2=nil;
local HNumerPoziomow_1=nil;
local HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
local HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
local HNumerPoziomowNaglowkow_1=nil;
local HNumerPoziomowNaglowkow_2=nil;
--local HNumerPoziomowInnychNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
local tab_numer=poziomowo and {} or nil;
tab_numer_1=nil;
tab_numer_3=nil
tab_numer_4=nil;--poziomowo and {} or nil;
local spis=false;
local pierwszy_dodatni_naglowek=nil;
local pierwszy_ujemny_naglowek=nil;
local juz_nie_rozwazaj_spisu_tresci=nil;
local juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
local poprzedni_poziom_znakowy_rozdzialu=nil;
local poprzedni_tab_poziomowo=nil;
local poziom_pierwszego_dodatniego_naglowka=0;
local poziom_pierwszego_ujemnego_naglowka=0;
local poziom_zerowego_naglowka=0;
local poziom_srednikowego_naglowka=0;
local poziom_spisu_tresci_naglowka=0;
local ostatni_rozdzial_dodatni=nil;
local ostatni_rozdzial_centrowany=nil;
local pierwszy_rozdzial_dodatni=nil;
local glowny_dodatni_rozdzial=nil;
local glowny_ujemny_rozdzial=nil;
local spis_tresci=nil;
local poziom_pierwszego_ujemnego_spisu_tresci=nil;
local ostatni_poczatek_artykulu=nil;
local pierwszy_rowny_rozdzial=nil;
local rozdzial;
local czy_pierwszy_nilowy=nil;
local czy_nienilowy_rozdzial=nil;
local pierwszy_dodatni_spis_tresci=nil;
local pierwszy_ujemny_spis_tresci=nil;
local czy_poziom_dodatni_spisu_tresci=nil;
local czy_poziom_ujemny_spisu_tresci=nil;
local poziom_spisu_tresci=nil;
local spis_tresci_ksiazki=nil;
local glowny_spis_tresci_ksiazki=nil;
local poprz_poziom_rozdzialu_lub_artykulu=nil;
local poprz_numer_rozdzialu_lub_artykulu=nil;
local poprz_czysty_poziom_rozdzialu_lub_artykulu=nil;
local staly_dodatek_rozdzialu=0;
local tab_lista_artykulow_w_ksiazce2=tab_lista_artykulow_w_ksiazce;
tab_lista_artykulow_w_ksiazce={};
function TabLista(tab_lista)
local max_ile=0;
for name,value in pairs(tab_lista)do
max_ile=math.max(max_ile,name);
end;
function Iterator(tab_lista)
local p2=0;
local s=0;
local pp=0;
local function InneTablica(numer)
local p1=0;
return function()
if((tab_lista[numer])and(tab_lista[numer][p1+1])and(tab_lista[numer][p1+1][5]==pp))then
p1=p1+1;
pp=pp+1;
return s,tab_lista[numer][p1];
end;
end;
end;
local function WszystkieInneTablica()
local tab={};
for i=1,max_ile-2,1 do
tab[i]=InneTablica(i+2);
end;
return function()
for i=1,max_ile-2,1 do
local wartosc,tab_artykul=tab[i]();
if((wartosc)and(tab_artykul))then
return wartosc,tab_artykul;
end;
end;
end;
end;
--local p1=0;
--local p2=0;
--local s=0;
local iter_inne_tablice=WszystkieInneTablica();
return function()
s=s+1;
local wartosc,tab_artykul=iter_inne_tablice();
if((wartosc)and(tab_artykul))then
return wartosc,tab_artykul;
elseif((tab_lista[2])and(tab_lista[2][p2+1]))then
p2=p2+1;
pp=pp+1;
return s,tab_lista[2][p2];
else
return nil;
end;
end;
end;
local tab={};
local iter=Iterator(tab_lista);
for s,artykul_w_bazie in iter do
tab[s]=artykul_w_bazie;
end;
return tab;
end;
for s,tab_lista in ipairs( tab_lista_artykulow_w_ksiazce2)do
if(not tab_lista_artykulow_w_ksiazce[s])then tab_lista_artykulow_w_ksiazce[s]={};end;
tab_lista_artykulow_w_ksiazce[s][1]=tab_lista[1];
tab_lista_artykulow_w_ksiazce[s][2]=TabLista(tab_lista);
end;
----
local function ToNumberPoziomArtykulu(poziom_artykulu)
local numer_artykulu=tonumber(poziom_artykulu);
local numer_dodatkowy=((numer_artykulu)and(numer_artykulu>0)) and 0 or 1;
return (numer_artykulu or 0),numer_dodatkowy;
end;
local function OdejmnijOdDwukropka(poziom_artykulu,poziom_poczatku_artykulu,numer_poprz,czy_w_trakcie_dwukropkowania,odejmnij_od_dwukropka)
if((not czy_w_trakcie_dwukropkowania)and(mw.ustring.match(poziom_poczatku_artykulu,"^:")))then
odejmnij_od_dwukropka=math.max((#poziom_poczatku_artykulu-(numer_poprz or 0)-1),0);
czy_w_trakcie_dwukropkowania=true;
elseif((czy_w_trakcie_dwukropkowania)and(not mw.ustring.match(poziom_poczatku_artykulu,"^:")))then
odejmnij_od_dwukropka=0;
czy_w_trakcie_dwukropkowania=nil;
end;
if(odejmnij_od_dwukropka>0)then
poziom_artykulu=poziom_artykulu-odejmnij_od_dwukropka;
if(poziom_artykulu<1)then
poziom_artykulu=1;
end;
end;
return poziom_artykulu,odejmnij_od_dwukropka,czy_w_trakcie_dwukropkowania;
end;
local function PoziomNumeracji(numeracja_artykulu)
if(numeracja_artykulu)then
numeracja_artykulu=mw.ustring.gsub(numeracja_artykulu,"^%s*%.*(.-)%.*%s*$","%1");
numeracja_artykulu=mw.ustring.gsub(numeracja_artykulu,"%s+","");
numeracja_artykulu=mw.ustring.gsub(numeracja_artykulu,"%.+",".");
local tab_numeracja_artykulu=numeracja_artykulu and mw.text.split(numeracja_artykulu,"%s*%.%s*",false);
poziom_numeracji_artykulu=((numeracja_artykulu~="") and (#tab_numeracja_artykulu) or 0);
return poziom_numeracji_artykulu;
end;
return 0;
end;
-----
local function UzyskajArtykul(artykul,pomin_link)
local artykul=(not naglowek)and stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul,pomin_link)
or stronicowyparser_potrzebne_modul.UzykanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(artykul,true,pomin_link);
return artykul;
end;
----
local nazwa_spisu=nil;local numer_spisu=nil;
for m,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
local poziom_rozdzialu;
local poziom_poczatku_rozdzialu=nil;
local poziom_znakowy_rozdzialu=nil;
local prawdziwy_poziom_rozdzialu=nil;
local poziom_naglowka=nil;
local poziom_naglowka_bez_poprawki=nil;
local numer_rozdzialu=nil;
local tab_numer_zapasowe=nil;
local poziom_numeracji_rozdzialu=nil;
-----
function PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu)
local poziom_naglowka_z_numeracja=poziom_naglowka+poziom_numeracji_rozdzialu;
if((m>1)and((poprz_numer_rozdzialu_lub_artykulu>0)
or(poziom_numeracji_rozdzialu>0)
))then
local numer_poprz=poprz_czysty_poziom_rozdzialu_lub_artykulu;
local numer=poziom_naglowka;
if(numer_poprz<numer)then
local roznica_rozdzialu=poziom_naglowka_z_numeracja-poprz_poziom_rozdzialu_lub_artykulu;
if(roznica_rozdzialu<=0)then
staly_dodatek_rozdzialu=math.abs(roznica_rozdzialu)+1
poziom_naglowka_z_numeracja=poziom_naglowka_z_numeracja+staly_dodatek_rozdzialu;
end;
elseif(numer_poprz>numer)then
local roznica_rozdzialu=poziom_naglowka_z_numeracja-poprz_poziom_rozdzialu_lub_artykulu;
if(roznica_rozdzialu>=0)then
staly_dodatek_rozdzialu=-roznica_rozdzialu-1;
poziom_naglowka_z_numeracja=poziom_naglowka_z_numeracja+staly_dodatek_rozdzialu;
end;
else
if(poprz_numer_rozdzialu_lub_artykulu==poziom_numeracji_rozdzialu)then staly_dodatek_rozdzialu=0;end;
poziom_naglowka_z_numeracja=poziom_naglowka_z_numeracja+staly_dodatek_rozdzialu;
end;
if(numer>poziom_naglowka_z_numeracja)then
poziom_naglowka_z_numeracja=numer;
staly_dodatek_rozdzialu=0;
end;
else
poziom_naglowka_z_numeracja=poziom_naglowka_z_numeracja+staly_dodatek_rozdzialu;
end;
return poziom_naglowka_z_numeracja,staly_dodatek_rozdzialu;
end;
local function PlusIlesDoPoziomuArtykulu(poziom_artykulu,poziom_poczatku_artykulu,poziom_rozdzialu,poziom_poczatku_rozdzialu,staly_poziom_rozdzialu_z_artykulami)
local function JedenDwa(poziom_poczatku_rozdzialu,poziom_poczatku_artykulu)
return ((poziom_poczatku_artykulu)and(poziom_poczatku_rozdzialu)
and(((mw.ustring.match(poziom_poczatku_rozdzialu,"^*"))
and((mw.ustring.match(poziom_poczatku_artykulu,"^:"))
or(mw.ustring.match(poziom_poczatku_artykulu,"^#"))
)
)or((mw.ustring.match(poziom_poczatku_rozdzialu,"^#"))and(mw.ustring.match(poziom_poczatku_artykulu,"^:")))));
end;
if(JedenDwa(poziom_poczatku_rozdzialu,poziom_poczatku_artykulu))then
local roznica=poziom_rozdzialu-poziom_artykulu;
if(roznica>=0)then
staly_poziom_rozdzialu_z_artykulami=roznica+1;
else
staly_poziom_rozdzialu_z_artykulami=0;
end;
return (poziom_artykulu+staly_poziom_rozdzialu_z_artykulami),staly_poziom_rozdzialu_z_artykulami;
elseif(JedenDwa(poziom_poczatku_artykulu,poziom_poczatku_rozdzialu))then
staly_poziom_rozdzialu_z_artykulami=0;
elseif(#poziom_poczatku_artykulu==0)then
staly_poziom_rozdzialu_z_artykulami=0;
end;
return (poziom_artykulu+(staly_poziom_rozdzialu_z_artykulami or 0)),staly_poziom_rozdzialu_z_artykulami;
end;
local function CzyWliczacBezPoziomowo(p,i)
if(naglowek)then return true;end;
local tab=tab_lista[2];
if(not tab)then return false;end;
if(p==i)then return true;end;
local tab_artykul2={};
for k=p+1,i,1 do
-----
local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab[k][1]);
local artykul=czy_table_baza_artykulu and tab[k][1][1] or tab[k][1];
artykul=UzyskajArtykul(artykul);
-----
if(k==i)then
if((tab_artykul[artykul])or(tab_artykul2[artykul]))then
return false;
else
return true;
end;
else
tab_artykul2[artykul]=true;
end;
end;
return false;
end;
local function IleNajblizejDalejBezPoziomowo(p)
if(naglowek)then return (p+1);end;
local tab=tab_lista[2];
if(not tab)then return (p+1);end;
local tab_artykul2={};
local i=p+1;
while(true)do
if(not tab[i])then return i;end;
-----
local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab[i][1]);
local artykul=czy_table_baza_artykulu and tab[i][1][1] or tab[i][1];
artykul=UzyskajArtykul(artykul);
-----
if((not tab_artykul[artykul])and(not tab_artykul2[artykul]))then
return i;
end;
tab_artykul2[artykul]=true;
i=i+1;
end;
return i;
end;
----
function AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulowa,czy_rozdzial,__FUNKCJA)
local poziom_zerowego_naglowka=poziom_zerowego_naglowka or 0;
local poziom_srednikowego_naglowka=poziom_srednikowego_naglowka or 0;
local staly_dodatek_artykulu=0;
local poprz_poziom_rozdzialu_lub_artykulu=poziom_naglowka;
local poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_naglowka_bez_poprawki;
local staly_dodatek_rozdzialu=staly_dodatek_rozdzialu or 0;
local poczatek_poprz=nil;
local ostatni_rozdzial_dodatni=ostatni_rozdzial_dodatni;
local ostatni_rozdzial_centrowany=ostatni_rozdzial_centrowany;
local poziom_zerowego_artykulu=0;
local staly_poziom_rozdzialu_z_artykulami=0;
for p,artykul_w_bazie in ipairs(tab_lista_artykulowa)do
if((czy_rozdzial and (p>m)) or (not czy_rozdzial))then
if((not czy_rozdzial) and (CzyWliczacBezPoziomowo(1,p)) or czy_rozdzial)then
if(czy_rozdzial)then
artykul_w_bazie=artykul_w_bazie[1];
end;
local poziom_artykulu=artykul_w_bazie[2][1];
local poziom_znakowy_artykulu=poziom_artykulu;
poziom_artykulu=math.abs(poziom_artykulu);
local poziom_poczatku_artykulu=artykul_w_bazie[2][2];
local w_rozdziale=artykul_w_bazie[2][4];
if(not czy_rozdzial)then
local __poziom_poczatku_rozdzialu=(not czy_poczatek_rozdzialu) and poziom_poczatku_rozdzialu or poczatek_poprz;
local __poziom_rozdzialu=(not czy_poczatek_rozdzialu) and poziom_rozdzialu or poziom_artykulu;
poziom_artykulu,staly_poziom_rozdzialu_z_artykulami=PlusIlesDoPoziomuArtykulu(poziom_artykulu,poziom_poczatku_artykulu,__poziom_rozdzialu,__poziom_poczatku_rozdzialu,staly_poziom_rozdzialu_z_artykulami);
end;
if(czy_rozdzial)then
if(poziom_znakowy_artykulu)then
if(poziom_znakowy_artykulu==0)then
poziom_zerowego_naglowka=1;
elseif(poziom_znakowy_artykulu>0)then
poziom_zerowego_naglowka=0;
poziom_srednikowego_naglowka=0;
end;
end;
end;
local czy_sredniki=poziom_poczatku_artykulu and mw.ustring.match(poziom_poczatku_artykulu,"^;+") or nil;
if(czy_sredniki)then poziom_srednikowego_naglowka=0;end;
if((czy_rozdzial)and(poziom_znakowy_artykulu>0))then
ostatni_rozdzial_dodatni=0;
ostatni_rozdzial_centrowany=w_rozdziale and 0 or ostatni_rozdzial_centrowany;
end;
local id=(not czy_rozdzial)and artykul_w_bazie[4] or nil;
if(not czy_rozdzial)then
local poziom_zerowego_artykulu_poprz=poziom_zerowego_artykulu;
poziom_artykulu,poziom_zerowego_artykulu=ToNumberPoziomArtykulu(poziom_artykulu);
if(poziom_zerowego_artykulu==0)then poziom_zerowego_artykulu=poziom_zerowego_artykulu_poprz;end;
poziom_artykulu=poziom_artykulu+poziom_zerowego_artykulu;
end;
poziom_artykulu=(((czy_rozdzial)and(poziom_znakowy_artykulu<=0)or(not czy_rozdzial))and ((ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)) or 0)+poziom_artykulu+poziom_zerowego_naglowka+poziom_srednikowego_naglowka+staly_dodatek_rozdzialu+(id and 1 or 0);
if((czy_rozdzial)and(poziom_znakowy_artykulu>0))then
if(w_rozdziale)then
ostatni_rozdzial_dodatni=nil;
ostatni_rozdzial_centrowany=poziom_znakowy_artykulu;
else
ostatni_rozdzial_dodatni=poziom_znakowy_artykulu;
end;
end;
local czy_sredniki=poziom_poczatku_artykulu and mw.ustring.match(poziom_poczatku_artykulu,"^;+") or nil;
if(czy_sredniki)then poziom_srednikowego_naglowka=#poziom_poczatku_artykulu;end;
poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_artykulu;
local numeracja_artykulu=artykul_w_bazie[2][3];
local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
poziom_artykulu,staly_dodatek_artykulu=PoziomNumerNaglowka(poziom_artykulu,poziom_numeracji_artykulu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_artykulu);
poprz_poziom_rozdzialu_lub_artykulu=poziom_artykulu;
poczatek_poprz=poziom_poczatku_artykulu;
local wynik=__FUNKCJA(poziom_artykulu,poziom_naglowka,poziom_znakowy_artykulu,w_rozdziale,czy_sredniki);
if(not parametry_modul.TypeNil(wynik))then return wynik;end;
end;
end;
end;
end;
local function IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista_artykulowa,bez_sprawdzania)
local ile_w_rozdziale=0;
for s=1,#tab_lista_artykulowa[2],1 do
if(bez_sprawdzania or CzyWliczacBezPoziomowo(1,s))then
local w_rozdziale=tab_lista_artykulowa[2][s][2][4];
if(w_rozdziale)then
ile_w_rozdziale=ile_w_rozdziale+1;
if(ile_w_rozdziale>1)then break;end;
end;
end;
end;
return ile_w_rozdziale
end;
----
-----
if(poziomowo)then
czy_nienilowy_rozdzial=tab_lista[1][2][1];
czy_pierwszy_nilowy=(m==1)and (czy_nienilowy_rozdzial==nil) or czy_pierwszy_nilowy;
poziom_rozdzialu=czy_nienilowy_rozdzial or 0;
prawdziwy_poziom_rozdzialu=poziom_rozdzialu;
poziom_poczatku_rozdzialu=tab_lista[1][2][2];
local numeracja_rozdzialu=tab_lista[1][2][3];
poziom_numeracji_rozdzialu=PoziomNumeracji(numeracja_rozdzialu);
local czy_rozdzial_centrowany=tab_lista[1][2][4];
----
local czy_sredniki;
----
rozdzial=tab_lista[1][1];
----
if((m==1)and(not numer_spisu)and(not nazwa_spisu))then
if(poziom_rozdzialu==1)then
local spis=tab_lista[1]["spis"];
if(spis)then
nazwa_spisu=spis[1];
numer_spisu=spis[2];
end;
end;
elseif((m>2)and(numer_spisu)and(nazwa_spisu))then
if(poziom_rozdzialu==1)then
local spis=tab_lista[1]["spis"];
if(spis)then
nazwa_spisu=spis[1];
numer_spisu=spis[2];
end;
end;
end;
--poziom_rozdzialu=poziom_rozdzialu+((poziom_rozdzialu>0)and (poziom_numeracji_rozdzialu or 0) or (-(poziom_numeracji_rozdzialu or 0)));
tab_poziomowo={};
--[[local czy_jest_teraz_spis_tresci=((m>1)and(not spis_tresci_zerowy or not poziom_zerowy)or((m==1)and(spis_tresci_zerowy)))
and ((m==1) and true or tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial])]]
local czy_jest_teraz_spis_tresci=(not juz_nie_rozwazaj_rozdzialu_spisu_tresci)
and((m==1)and (czy_nienilowy_rozdzial and tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial] or ((not czy_nienilowy_rozdzial)and true or false))
or ((m>1)and tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial]
or false));
if((m>1)and(czy_pierwszy_nilowy))then
czy_jest_teraz_spis_tresci=tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial];
if(czy_jest_teraz_spis_tresci)then
juz_nie_rozwazaj_rozdzialu_spisu_tresci=nil;
juz_nie_rozwazaj_spisu_tresci=nil;
czy_pierwszy_nilowy=nil;
pierwszy_ujemny_spis_tresci=nil;
end;
end;
local czy_nie_ten_rozdzial;
if((not juz_nie_rozwazaj_spisu_tresci)and(not juz_nie_rozwazaj_rozdzialu_spisu_tresci)and(czy_jest_teraz_spis_tresci))then
poziom_spisu_tresci=poziom_rozdzialu;
juz_nie_rozwazaj_rozdzialu_spisu_tresci=true;
czy_nie_ten_rozdzial=tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
glowny_spis_tresci_ksiazki=true;
elseif((not juz_nie_rozwazaj_spisu_tresci)and(juz_nie_rozwazaj_rozdzialu_spisu_tresci))then
if((poziom_spisu_tresci<poziom_rozdzialu))then
czy_nie_ten_rozdzial=false;
else
glowny_spis_tresci_ksiazki=false;
juz_nie_rozwazaj_spisu_tresci=true;
czy_nie_ten_rozdzial=tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
end;
else
czy_nie_ten_rozdzial=tab_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial];
end;
--if(not czy_nie_ten_rozdzial)then
poprzedni_poziom_znakowy_rozdzialu=poziom_znakowy_rozdzialu;
poziom_znakowy_rozdzialu=poziom_rozdzialu;
poziom_rozdzialu=math.abs(poziom_rozdzialu);
if(poziom_znakowy_rozdzialu>0)then
poziom_naglowka_bez_poprawki=poziom_rozdzialu;
poziom_naglowka=poziom_rozdzialu+(czy_rozdzial_centrowany and 0 or (ostatni_rozdzial_centrowany or 0));
poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
poziom_pierwszego_ujemnego_spisu_tresci=nil;
----
ostatni_poczatek_artykulu=nil;
pierwszy_rowny_rozdzial=nil;
----
if((m>2)or(not czy_pierwszy_nilowy))then
poprzedni_tab_poziomowo=nil;
end;
poziom_zerowego_naglowka=0;
poziom_srednikowego_naglowka=0;
if(glowny_ujemny_rozdzial)then
HNumerPoziomow=HNumerPoziomow_4;
HNumerPoziomow_4=nil;
tab_numer=tab_numer_4;
poziom_pierwszego_ujemnego_naglowka=nil;
glowny_ujemny_rozdzial=nil;
----
pierwszy_ujemny_spis_tresci=nil;
czy_poziom_ujemny_spisu_tresci=nil;
elseif(pierwszy_ujemny_spis_tresci)then
HNumerPoziomow=HNumerPoziomow_2;
HNumerPoziomow_2=nil;
tab_numer=tab_numer_2;
tab_numer_2=nil;
pierwszy_ujemny_spis_tresci=nil;
czy_poziom_ujemny_spisu_tresci=nil;
end;
if(not glowny_dodatni_rozdzial)then
if((juz_nie_rozwazaj_rozdzialu_spisu_tresci)and(not juz_nie_rozwazaj_spisu_tresci)and(not czy_jest_teraz_spis_tresci)and(not spis_tresci))then
numer_rozdzialu=HNumerPoziomow(poziom_naglowka,1);
spis_tresci=true;
else
if(not pierwszy_rozdzial_dodatni)then
pierwszy_rozdzial_dodatni=1;
numer_rozdzialu=HNumerPoziomow(poziom_naglowka,1);
else
numer_rozdzialu=HNumerPoziomow(poziom_naglowka);
end;
end;
else
numer_rozdzialu=HNumerPoziomow(poziom_naglowka,1);
glowny_dodatni_rozdzial=false;
end;
if(czy_rozdzial_centrowany)then
ostatni_rozdzial_dodatni=nil;
ostatni_rozdzial_centrowany=poziom_rozdzialu;
else
ostatni_rozdzial_dodatni=poziom_rozdzialu;
end;
elseif(poziom_znakowy_rozdzialu<0)then
czy_sredniki=mw.ustring.match(poziom_poczatku_rozdzialu,"^(;+)");
if(czy_sredniki)then
poziom_zerowego_naglowka=0;
----
ostatni_poczatek_artykulu=nil;
pierwszy_rowny_rozdzial=nil;
----
if((m>1)and((not mw.ustring.match(tab_lista_artykulow_w_ksiazce[m-1][1][2][2] or "","^;+.*$"))
or(#(tab_lista_artykulow_w_ksiazce[m-1][1][2][2] or "")==#(tab_lista_artykulow_w_ksiazce[m][1][2][2] or ""))))then
if(glowny_ujemny_rozdzial)then
HNumerPoziomow=HNumerPoziomow_4;
HNumerPoziomow_4=nil;
tab_numer=tab_numer_4;
poziom_pierwszego_ujemnego_naglowka=nil;
glowny_ujemny_rozdzial=nil;
----
pierwszy_ujemny_spis_tresci=nil;
czy_poziom_ujemny_spisu_tresci=nil;
elseif(pierwszy_ujemny_spis_tresci)then
HNumerPoziomow=HNumerPoziomow_2;
HNumerPoziomow_2=nil;
tab_numer=tab_numer_2;
tab_numer_2=nil;
pierwszy_ujemny_spis_tresci=nil;
czy_poziom_ujemny_spisu_tresci=nil;
end;
end;
----
poziom_srednikowego_naglowka=#czy_sredniki;
poziom_naglowka=(ostatni_rozdzial_centrowany or 0) + (ostatni_rozdzial_dodatni or 0) + poziom_zerowego_naglowka + poziom_srednikowego_naglowka;
poziom_naglowka_bez_poprawki=poziom_naglowka;
poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
numer_rozdzialu=HNumerPoziomow(poziom_naglowka);
poziom_znakowy_rozdzialu=-poziom_srednikowego_naglowka;
poziom_rozdzialu=poziom_srednikowego_naglowka;
else
if(not pierwszy_rowny_rozdzial)then
if((ostatni_poczatek_artykulu)
and(#ostatni_poczatek_artykulu==#poziom_poczatku_rozdzialu)
and(mw.ustring.match(ostatni_poczatek_artykulu,"^*"))
and(mw.ustring.match(poziom_poczatku_rozdzialu,"^:"))
)then
poziom_rozdzialu=poziom_rozdzialu+1;
poziom_znakowy_rozdzialu=-poziom_rozdzialu;
pierwszy_rowny_rozdzial=1;
poziom_naglowka=poziom_rozdzialu+(ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka+poziom_srednikowego_naglowka;
poziom_naglowka_bez_poprawki=poziom_naglowka;
poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
else
poziom_naglowka=poziom_rozdzialu+(ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka+poziom_srednikowego_naglowka;
poziom_naglowka_bez_poprawki=poziom_naglowka;
poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
end;
else
if((not ostatni_poczatek_artykulu)or((#ostatni_poczatek_artykulu==#poziom_poczatku_rozdzialu)and(mw.ustring.match(poziom_poczatku_rozdzialu,"^*"))))then
pierwszy_rowny_rozdzial=0;
elseif((#ostatni_poczatek_artykulu==#poziom_poczatku_rozdzialu)and(mw.ustring.match(poziom_poczatku_rozdzialu,"^:")))then
pierwszy_rowny_rozdzial=1;
elseif((#ostatni_poczatek_artykulu==#poziom_poczatku_rozdzialu)and(mw.ustring.match(poziom_poczatku_rozdzialu,"^#")))then
pierwszy_rowny_rozdzial=nil;
end;
poziom_rozdzialu=poziom_rozdzialu+(pierwszy_rowny_rozdzial or 0);
poziom_znakowy_rozdzialu=-poziom_rozdzialu;
poziom_naglowka=poziom_rozdzialu+(ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka+poziom_srednikowego_naglowka;
poziom_naglowka_bez_poprawki=poziom_naglowka;
poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
end;
if(not glowny_ujemny_rozdzial)then
--if((juz_nie_rozwazaj_rozdzialu_spisu_tresci)and(not juz_nie_rozwazaj_spisu_tresci)and(not spis_tresci))then
-- numer_rozdzialu=HNumerPoziomow(poziom_rozdzialu,1);
-- spis_tresci=true;
--else
numer_rozdzialu=HNumerPoziomow(poziom_naglowka);
--end;
local numer_rozdzialu_dodatniego=HNumerPoziomowNaglowkow(0) or 0;
if(numer_rozdzialu_dodatniego>=numer_rozdzialu)then
numer_rozdzialu=HNumerPoziomow(poziom_naglowka,numer_rozdzialu_dodatniego+1);
end;
else
numer_rozdzialu=HNumerPoziomow(poziom_naglowka,(HNumerPoziomowNaglowkow(0) or 0)+1);
glowny_ujemny_rozdzial=false;
end;
end;
else
if((m>1)or((m==1)and(not czy_pierwszy_nilowy)))then
poziom_zerowego_naglowka=1;
poziom_naglowka= 1 + (ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0) + 0+poziom_srednikowego_naglowka;
poziom_naglowka_bez_poprawki=poziom_naglowka;
poziom_naglowka,staly_dodatek_rozdzialu=PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu);
numer_rozdzialu=HNumerPoziomow(poziom_naglowka);
poziom_znakowy_rozdzialu=-1;
poziom_rozdzialu=1;
else
poziom_zerowego_naglowka=0;
numer_rozdzialu=0;
poziom_naglowka=(ostatni_rozdzial_centrowany or 0);
poziom_naglowka_bez_poprawki=poziom_naglowka;
staly_dodatek_rozdzialu=0;
end;
end;
if(poziom_znakowy_rozdzialu>0)then
local numer=HNumerPoziomowNaglowkow(poziom_znakowy_rozdzialu);
--HNumerPoziomowInnychNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
elseif(poziom_znakowy_rozdzialu<0)then
--local numer=HNumerPoziomowInnychNaglowkow(-poziom_znakowy_rozdzialu);
end;
--if(m>1)then
-- if((tab_lista_artykulow_w_ksiazce[m-1])
-- and(tab_lista_artykulow_w_ksiazce[m-1][2])
-- and(#tab_lista_artykulow_w_ksiazce[m-1][2]>0)
-- and(tab_lista_artykulow_w_ksiazce[m-1][2][#tab_lista_artykulow_w_ksiazce[m-1][2]][2][1]==0)
-- )then
-- local lens_tab_numer=#tab_numer;
-- local roznica=math.min(#(poprzedni_tab_poziomowo or {})+#tab_numer,numer_rozdzialu)-#tab_numer;
-- roznica=((roznica>0) and roznica or 0);
-- for i=1,roznica,1 do
-- tab_numer[i+lens_tab_numer]=poprzedni_tab_poziomowo[i];
-- end;
-- end;
--end;
if((czy_jest_teraz_spis_tresci)and(juz_nie_rozwazaj_rozdzialu_spisu_tresci))then
if(poziom_znakowy_rozdzialu>0)then
poziom_spisu_tresci_naglowka=poziom_rozdzialu;
else
poziom_pierwszego_ujemnego_spisu_tresci=poziom_rozdzialu;
end;
end;
if(poziom_rozdzialu>0)then
if((((czy_poziom_dodatni_spisu_tresci)and(poziom_znakowy_rozdzialu>0))or((czy_poziom_ujemny_spisu_tresci)and(poziom_znakowy_rozdzialu<0)))
and(poziom_spisu_tresci)and(poziom_spisu_tresci>=poziom_rozdzialu)
)then
if(poziom_znakowy_rozdzialu>0)then
tab_numer=tab_numer_1;
tab_poziomowo={};
poziom_spisu_tresci=nil;
HNumerPoziomow=HNumerPoziomow_1;
HNumerPoziomowNaglowkow=HNumerPoziomowNaglowkow_1;
czy_poziom_dodatni_spisu_tresci=false;
----
pierwszy_ujemny_spis_tresci=nil;
czy_poziom_ujemny_spisu_tresci=nil;
elseif(poziom_znakowy_rozdzialu<0)then
tab_numer=tab_numer_2;
tab_poziomowo={};
poziom_spisu_tresci=nil;
HNumerPoziomow=HNumerPoziomow_2;
czy_poziom_ujemny_spisu_tresci=false;
pierwszy_ujemny_spis_tresci=nil;
end;
end;
local hnumer=numer_rozdzialu;
if(poprzedni_tab_poziomowo)then
local lens=math.min(#poprzedni_tab_poziomowo,hnumer-#tab_numer);
local len_tab_numer=#tab_numer;
local min_lens=math.min(#poprzedni_tab_poziomowo,lens);
for i=1,min_lens,1 do
tab_numer[len_tab_numer+i]=poprzedni_tab_poziomowo[i];
end;
for i=min_lens+1,#tab_numer do
tab_numer[len_tab_numer+i]=nil;
end;
end;
if(#tab_numer<hnumer)then
for i=#tab_numer+1,hnumer,1 do
table.insert(tab_numer,1);
end;
elseif(#tab_numer>hnumer)then
for i=#tab_numer, hnumer+1,-1 do
table.remove(tab_numer,i);
end;
tab_numer[#tab_numer]=(tab_numer[#tab_numer] or 0) + 1;
else
tab_numer[#tab_numer]=(tab_numer[#tab_numer] or 0) + 1;
end;
end;
local function CzyJestONumerzeMniejszymLubRownymPoziomieNizAktualnyRozdzial()
if(poziom_rozdzialu==0)then return true;end;
if(poziom_znakowy_rozdzialu>0)then
local ile_w_rozdziale_w_naglowku_artykulow=IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista,true);
return AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_aktualnego_naglowka,poziom_naglowka,poziom_znakowy_naglowka)
if(ile_w_rozdziale_w_naglowku_artykulow>0)then return true;end;
if(poziom_znakowy_naglowka>0)then
if(poziom_aktualnego_naglowka<=poziom_naglowka)then
return true;
end;
end;
end);
elseif(((m==1)
or((tab_lista_artykulow_w_ksiazce[m-1])
and((tab_lista_artykulow_w_ksiazce[m-1][1][2][1] or 0)>0)and(tab_lista_artykulow_w_ksiazce[m-1][2])and(#tab_lista_artykulow_w_ksiazce[m-1][2]==IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista_artykulow_w_ksiazce[m-1],true))))
and(poziom_znakowy_rozdzialu<0)
)then
if(tab_lista[2])then
local wynik=AnalizaArtykulowaLubRozdzialowa(tab_lista[2],nil,function(poziom_artykulu,poziom_naglowka,_,w_rozdziale)
if(not w_rozdziale)then
if(poziom_artykulu<=poziom_naglowka)then
return true;
end;
end;
end);
if(wynik)then return true;end;
end;
return AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_aktualnego_naglowka,poziom_naglowka,poziom_znakowy_naglowka)
if(poziom_znakowy_naglowka<=0)then
if(poziom_aktualnego_naglowka<=poziom_naglowka)then
return true;
end;
end;
end);
else
return true;
end;
end;
-- if(not czy_nie_ten_rozdzial)then
--[[if((tab_lista[2])
and(tab_lista[2][1])
and(tab_lista[2][1][2][1]==0)
and(not tab_lista[2][1][4])
and(tab_lista_artykulow_w_ksiazce[m+1])
and(((poziom_znakowy_rozdzialu>0)
and((tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)>0)
and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)>poziom_rozdzialu)
)or(
((poziom_znakowy_rozdzialu<0)
and((tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)<0)
and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)+poziom_zerowego_naglowka>poziom_rozdzialu)
)
)or(
(poziom_znakowy_rozdzialu==0)and((tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)~=0)
))
)then
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
if(m==1)then
tab_numer={0,}
else
table.insert(tab_numer,0);
end;
else]]--[[if((m==1)and(not tab_lista_artykulow_w_ksiazce[m+1]))then
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
tab_numer={};
else]]
local function DodajNaSamPoczatek()
if((tab_lista_artykulow_w_ksiazce[m+1])
and((
(poziom_znakowy_rozdzialu>0)
--[[and((tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)>0)
and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)>poziom_rozdzialu)]]
and AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu)
if(poziom_znakowy_rozdzialu>0)then
if(poziom_artykulu>poziom_naglowka)then
return true;
end;
end;
return false;
end)
)or(
(poziom_znakowy_rozdzialu<0)
--[[and((tab_lista_artykulow_w_ksiazce[m+1][1][2][2])
and(poziom_poczatku_rozdzialu)
and(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)<0)
and (mw.ustring.match(poziom_poczatku_rozdzialu,"^;+"))
and (mw.ustring.match(tab_lista_artykulow_w_ksiazce[m+1][1][2][2],"^;+"))
and(math.abs(tab_lista_artykulow_w_ksiazce[m+1][1][2][1] or 0)>poziom_rozdzialu)]]
and AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,_,czy_sredniki_aktualnego_rozdzialu)
if((czy_sredniki)and(czy_sredniki_aktualnego_rozdzialu))then
if(poziom_znakowy_rozdzialu<0)then
if(poziom_artykulu>poziom_naglowka)then
return true;
end;
end;
end;
return false;
end)
))
)then
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
table.insert(tab_numer,0);
return true;
else
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
return false;
end;
end;
if((m==1)and(czy_pierwszy_nilowy)and(poziom_znakowy_rozdzialu==0))then
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
tab_numer={};
elseif((czy_jest_teraz_spis_tresci)and(((not pierwszy_dodatni_spis_tresci)and(poziom_znakowy_rozdzialu>0))or((not pierwszy_ujemny_spis_tresci)and(poziom_znakowy_rozdzialu<0))))then
function Poziom_dodatni_lub_ujemny()
return AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu)
if(poziom_artykulu>poziom_naglowka)then
return true;
end;
return false;
end);
end;
local function czy_inaczej_numeruj_rozdzial_dodatni()
return AnalizaArtykulowaLubRozdzialowa(tab_lista[2],false,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,w_rozdziale,id)
if(not w_rozdziale)then
if(poziom_artykulu>poziom_naglowka)then
return true;
end;
return false;
end;
end);
end;
local function czy_inaczej_numeruj_rozdzial_ujemny()
return AnalizaArtykulowaLubRozdzialowa(tab_lista[2],nil,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu)
if(poziom_artykulu>poziom_naglowka)then
return true;
end;
end);
end;
if((poziom_znakowy_rozdzialu>0)and((czy_inaczej_numeruj_rozdzial_dodatni())or(Poziom_dodatni_lub_ujemny())))then
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
----
tab_poziomowo_1=tab_poziomowo;
tab_poziomowo={};
czy_poziom_dodatni_spisu_tresci=true;
HNumerPoziomow_1=HNumerPoziomow;
HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
HNumerPoziomowNaglowkow_1=HNumerPoziomowNaglowkow;
HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
tab_numer_zapasowe=tab_numer;
tab_numer_1=tab_numer;
tab_numer={};
pierwszy_dodatni_spis_tresci=true;
elseif((poziom_znakowy_rozdzialu<0)and((czy_inaczej_numeruj_rozdzial_ujemny())or(Poziom_dodatni_lub_ujemny())))then
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
----
tab_poziomowo_2=tab_poziomowo;
tab_poziomowo={};
czy_poziom_ujemny_spisu_tresci=true;
HNumerPoziomow_2=HNumerPoziomow;
HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
tab_numer_zapasowe=tab_numer;
tab_numer_2=tab_numer;
tab_numer={};
pierwszy_ujemny_spis_tresci=true;
end;
DodajNaSamPoczatek();
elseif(((not czy_jest_teraz_spis_tresci)and(((not pierwszy_dodatni_naglowek)and(poziom_znakowy_rozdzialu>0))
or((not pierwszy_ujemny_naglowek)and(poziom_znakowy_rozdzialu<0))))
and(not CzyJestONumerzeMniejszymLubRownymPoziomieNizAktualnyRozdzial()))then
if(poziom_rozdzialu>0)then
if(poziom_znakowy_rozdzialu>0)then
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
----
HNumerPoziomowNaglowkow_2=HNumerPoziomowNaglowkow;
HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
tab_numer_zapasowe=tab_numer;
tab_numer_3=tab_numer;
tab_numer={};
HNumerPoziomow_3=HNumerPoziomow;
HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
pierwszy_dodatni_naglowek=true;
poziom_pierwszego_dodatniego_naglowka=poziom_rozdzialu;
glowny_dodatni_rozdzial=true;
else
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
----
tab_numer_zapasowe=tab_numer;
tab_numer_4=tab_numer;
tab_numer=parametry_modul["KopiujTabelęElementów"](tab_numer);
tab_numer[#tab_numer]=nil;
HNumerPoziomow_4=HNumerPoziomow;
HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
if(poprz_poziom_rozdzialu_lub_artykulu)then
numer_rozdzialu=HNumerPoziomow(poprz_poziom_rozdzialu_lub_artykulu,#tab_numer);
end;
pierwszy_ujemny_naglowek=true;
poziom_pierwszego_ujemnego_naglowka=poziom_rozdzialu;
glowny_ujemny_rozdzial=true;
end;
--else
-- if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
--if(poziom_znakowy_rozdzialu>0)then pierwszy_dodatni_naglowek=true;else pierwszy_ujemny_naglowek=true;end;
--end;
else
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
end;
DodajNaSamPoczatek();
elseif(DodajNaSamPoczatek())then
else
if(zbieraj_dane)then local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki); zbieraj_dane=false;end;
end;
-- end;
zbieraj_dane=true;
poprz_numer_rozdzialu_lub_artykulu=poziom_numeracji_rozdzialu;
poprz_poziom_rozdzialu_lub_artykulu=poziom_naglowka;
poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_naglowka_bez_poprawki;
if(prawdziwy_poziom_rozdzialu>0)then
pierwszy_dodatni_naglowek=true;
else
pierwszy_ujemny_naglowek=true;
pierwszy_dodatni_naglowek=true;
end;
else
local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,"",tab_numer,{},czy_nienilowy_rozdzial,nil,nil,nil,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki);
end;
if((tab_lista[2])and(parametry_modul["CzySąElementyNumerowaneTablicy"](tab_lista[2])))then
local HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
local HNumerPoziomu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
local czy_dwukropek_artykulu=nil;
local stare_HNumerArtykulu=nil;
local stare_HNumerPoziomu=nil;
local czy_tytul_rozdzial=nil;
local czy_ma_elementy=nil;
ostatni_poczatek_artykulu=nil;
local czy_zera=nil;
local ile_w_rozdziale=nil;
local poprz_poziom_artykulu_bez_b=nil;
local czy_poziomowo_z_innego=nil;
local czy_poziomowo_z_tego_samego=nil;
local b_poprzednie=nil;
local staly_dodatek=0;
local k=1;
-----
local czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
local artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
local czy_sa_artykuly_w_rozdziale_wewnatrz_naglowka=nil;
-----
local numer_poprz=nil;
local poczatek_poprz=nil;
local id_poprz=nil;
local tab_poprzedni_artykul_w_bazie=nil;
local odejmnij_od_dwukropka=0;
-----
local czy_w_trakcie_dwukropkowania=nil;
-----
local poziom_zerowego_artykulu=0;
local staly_poziom_rozdzialu_z_artykulami=0;
local nilowanie_poprzedniego_rejestru_tab_poziomowo=nil;
local czy_poza_podrecznikiem_poprz=nil;
-----
for p,artykul_w_bazie in ipairs(tab_lista[2])do
local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie[1]);
local artykul=czy_table_baza_artykulu and artykul_w_bazie[1][1] or artykul_w_bazie[1];
local nazwa=czy_table_baza_artykulu and artykul_w_bazie[1][2] or nil;
local Przekierowanie=function(przekierowanie)
return (((parametry_modul.TypeString(przekierowanie))and(przekierowanie))or(parametry_modul.TypeTable(przekierowanie)and(((przekierowanie[1])and((przekierowanie[2])or(przekierowanie[3])))or(przekierowanie[1]))and(przekierowanie[1]..(przekierowanie[2] and ("?"..(przekierowanie[2] or "")) or "")..(przekierowanie[3] and ("#"..(przekierowanie[3] or "")) or ""))));
end;
local czy_poza_podrecznikiem=artykul_w_bazie[5];
local przekierowanie=(not czy_poza_podrecznikiem) and (czy_table_baza_artykulu and ((not artykul_w_bazie[1][4]) and Przekierowanie(artykul_w_bazie[1][3]) or {Przekierowanie(artykul_w_bazie[1][3]),artykul_w_bazie[1][4],nil,nil,}) or nil) or (((czy_poza_podrecznikiem)and(czy_table_baza_artykulu)and(artykul_w_bazie[1][5])or(artykul_w_bazie[1][6])) and {nil,nil,artykul_w_bazie[1][5],artykul_w_bazie[1][6],} or nil);
---
local czy_dodane=czy_table_baza_artykulu and artykul_w_bazie[1][7] or nil;
----
artykul=UzyskajArtykul(artykul);
----
if(naglowek or not tab_artykul[artykul])then
pierwszy_rowny_rozdzial=nil;
czy_ma_elementy=true;
if(not naglowek)then
tab_artykul[artykul]=true;
end;
local tab_artykul_w_bazie;
if(poziomowo)then
local poziom_artykulu=artykul_w_bazie[2][1];
local poziom_poczatku_artykulu=artykul_w_bazie[2][2];
----
local czy_poczatek_rozdzialu=(IleNajblizejDalejBezPoziomowo(p-1)>IleNajblizejDalejBezPoziomowo(0));
poziom_artykulu,odejmnij_od_dwukropka,czy_w_trakcie_dwukropkowania=OdejmnijOdDwukropka(poziom_artykulu,poziom_poczatku_artykulu,(czy_poczatek_rozdzialu and numer_poprz or 0),czy_w_trakcie_dwukropkowania,odejmnij_od_dwukropka);
----
local numeracja_artykulu=artykul_w_bazie[2][3];
local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
local w_rozdziale=artykul_w_bazie[2][4];
if(w_rozdziale)then
function CzyRozdzialMaArtykulyNieWewnetrzNaglowka()
for s,artykul_w_bazie in ipairs(tab_lista[2])do
if(s>p)then
if((tab_lista[2][s])and(not tab_lista[2][s][2][4]))then
return true;
end;
end;
end;
return false;
end;
function CzyRozdzialMaRozdzialyNieWewnetrzNaglowka()
for s,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
if(s>m)then
local poziom_rozdzialu=tab_lista[1][2][1] or 0;
if(poziom_rozdzialu<0)then
return true;
end;
end;
end;
return false;
end;
if(not ile_w_rozdziale)then
ile_w_rozdziale=IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista,false);
end;
if(ile_w_rozdziale==1)then
local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer_zapasowe or tab_numer,{},nil,tab_lista[2][p][5],przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki,czy_dodane);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
czy_w_rozdziale_rejestrowane_osobno_artykuly=true;
elseif(not artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)then
if(parametry_modul.TypeNil(czy_sa_artykuly_w_rozdziale_wewnatrz_naglowka))then
czy_sa_artykuly_w_rozdziale_wewnatrz_naglowka=((CzyRozdzialMaArtykulyNieWewnetrzNaglowka())or(CzyRozdzialMaRozdzialyNieWewnetrzNaglowka()));
end;
if(czy_sa_artykuly_w_rozdziale_wewnatrz_naglowka)then
if(not artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)then
tab_numer[#tab_numer+1]=0;
artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=true;
end;
else
local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer_zapasowe or tab_numer,{},nil,tab_lista[2][p][5],przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki,czy_dodane);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
czy_w_rozdziale_rejestrowane_osobno_artykuly=true;
end;
end;
elseif((artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)or(czy_w_rozdziale_rejestrowane_osobno_artykuly))then
if(artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)then
czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
table.remove(tab_numer,#tab_numer);
tab_poziomowo={};
HNumerPoziomu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
end;
artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
----
k=1;
b_poprzednie=nil;
tab_poprzedni_artykul_w_bazie=nil;
----
end;
local czy_rozdzial_z_poczatkiem_jedynki=nil;
if(not czy_zera)then
if(not w_rozdziale)then
if((((not czy_nienilowy_rozdzial)and(m==1))or((czy_nienilowy_rozdzial)and(m>=1)))and(k==1))then
local numer=tab_lista[2][p][2][1];
local poczatek=tab_lista[2][p][2][2];
if(((not czy_nienilowy_rozdzial)and(mw.ustring.match(poczatek,"^:")))or(numer+poziom_numeracji_artykulu==0))then
for s=p+1,#tab_lista[2],1 do
if(CzyWliczacBezPoziomowo(p,s))then
local numer=tab_lista[2][s][2][1];
local poczatek=tab_lista[2][s][2][2];
local numeracja_artykulu=tab_lista[2][s][2][3];
local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
if((mw.ustring.match(poczatek,"^#"))or(numer+poziom_numeracji_artykulu>0))then
if(((#tab_numer>0)and(tab_numer[#tab_numer]~=0))or(#tab_numer==0))then
table.insert(tab_numer,0);
end;
tab_poziomowo={};
czy_zera=true;
break;
elseif((not mw.ustring.match(poczatek,"^:"))and(not(#poczatek==0)))then
break;
end;
end;
end;
end;
end;
end;
else
--local numer_poprz=tonumber(tab_lista[2][p-1][2][1]);
--local poczatek_poprz=tab_lista[2][p-1][2][2];
--local id_poprz=tab_lista[2][p-1][4];
local numer=tonumber(tab_lista[2][p][2][1]);
local poczatek=tab_lista[2][p][2][2];
local id=tab_lista[2][p][4];
local function DodajUsunNumerek(jedno,drugie,trzecie)
if((not jedno)and(not drugie)and(not trzecie))then return;end;
if((#tab_numer>(HNumerPoziomowNaglowkow(0) or 0)+poziom_zerowego_naglowka+poziom_srednikowego_naglowka))then
czy_zera=false;
tab_poziomowo={};
table.remove(tab_numer,#tab_numer);
if(#tab_numer>0)then
tab_numer[#tab_numer]=(tab_numer[#tab_numer] or 0)+1;
end;
czy_rozdzial_z_poczatkiem_jedynki=true;
end;
end;
local wartosc,glowny_spis_tresci_ksiazki=DodajUsunNumerek(((mw.ustring.match(poczatek_poprz,"^:"))and(mw.ustring.match(poczatek,"^#"))),((#poczatek_poprz==0)and(not id_poprz)and(#poczatek>0)and(not id)),((#poczatek_poprz+poprz_numer_rozdzialu_lub_artykulu==0)and(numer+poziom_numeracji_artykulu>0)));
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
end;
if((not czy_zera)
and((k==1)and(not w_rozdziale)and(tab_lista_artykulow_w_ksiazce[m+1])
and(((m==1)and(not czy_nienilowy_rozdzial)and(((artykul_w_bazie[2][1]+poziom_numeracji_artykulu)==0)or(tab_lista_artykulow_w_ksiazce[m+1][1][2][1]>0)))
or((m>1)and(czy_nienilowy_rozdzial)and((artykul_w_bazie[2][1]+poziom_numeracji_artykulu)==0)))
))then
local czy_puste=false;local czy_jeden=true;local ile=0;
local poziom_zerowy=artykul_w_bazie[2][1]+poziom_numeracji_artykulu;
if(poziom_zerowy)then
for h,artykul_w_bazie in ipairs(tab_lista[2])do
if(h>p)then
czy_jeden=false;
local poziom_artykulu=artykul_w_bazie[2][1];
local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
if(poziom_artykulu+poziom_numeracji_artykulu>0)then
czy_puste=true;
break;
end;
end;
end;
for h,artykul_w_bazie in ipairs(tab_lista[2])do
if(h>=p)then
ile=ile+1;
end;
end;
end;
if(((poziom_zerowy==0)and(((czy_puste)and(not czy_jeden))or(czy_jeden)))or(poziom_zerowy>0))then
if(ile<=5)then
table.insert(tab_numer,0);
else
nilowanie_poprzedniego_rejestru_tab_poziomowo=true;
end
end;
end;
ostatni_poczatek_artykulu=poziom_poczatku_artykulu;
-----
local poziom_zerowego_artykulu_poprz=poziom_zerowego_artykulu;
poziom_artykulu,poziom_zerowego_artykulu=ToNumberPoziomArtykulu(poziom_artykulu);
if(poziom_zerowego_artykulu==0)then
poziom_zerowego_artykulu=poziom_zerowego_artykulu_poprz;
end;
----
local czy_sredniki=mw.ustring.match(poziom_poczatku_artykulu,"^(;+)");
if(czy_sredniki)then
poziom_zerowego_naglowka=0;
if(glowny_ujemny_rozdzial)then
HNumerPoziomow=HNumerPoziomow_4;
HNumerPoziomow_4=nil;
tab_numer=tab_numer_4;
poziom_pierwszego_ujemnego_naglowka=nil;
glowny_ujemny_rozdzial=nil;
----
pierwszy_ujemny_spis_tresci=nil;
czy_poziom_ujemny_spisu_tresci=nil;
elseif(pierwszy_ujemny_spis_tresci)then
HNumerPoziomow=HNumerPoziomow_2;
HNumerPoziomow_2=nil;
tab_numer=tab_numer_2;
tab_numer_2=nil;
pierwszy_ujemny_spis_tresci=nil;
czy_poziom_ujemny_spisu_tresci=nil;
end;
end;
----
local poziom_czysty_artykulu=poziom_artykulu;
----
local __poziom_poczatku_rozdzialu= (not czy_poczatek_rozdzialu) and poziom_poczatku_rozdzialu or poczatek_poprz;
local __poziom_rozdzialu=(not czy_poczatek_rozdzialu) and poziom_rozdzialu or poziom_artykulu;
poziom_artykulu,staly_poziom_rozdzialu_z_artykulami=PlusIlesDoPoziomuArtykulu(poziom_artykulu,poziom_poczatku_artykulu,__poziom_rozdzialu,__poziom_poczatku_rozdzialu,staly_poziom_rozdzialu_z_artykulami);
----
poziom_zerowego_naglowka=czy_sredniki and 0 or poziom_zerowego_naglowka;
poziom_zerowego_artykulu=czy_sredniki and 0 or poziom_zerowego_artykulu;
----
poziom_srednikowego_naglowka=czy_sredniki and 0 or poziom_srednikowego_naglowka;
poziom_artykulu=poziom_artykulu+poziom_zerowego_artykulu+(ostatni_rozdzial_centrowany or 0)+(ostatni_rozdzial_dodatni or 0)+poziom_zerowego_naglowka+((not czy_sredniki)and poziom_srednikowego_naglowka or 0)+staly_dodatek_rozdzialu;
----
local poziom_podany_artykulu_bez_numeracji=poziom_artykulu;
poziom_artykulu=poziom_artykulu+(poziom_numeracji_artykulu or 0);
----
local __poprz_poziom_rozdzialu_lub_artykulu=((poziom_znakowy_rozdzialu>0) and poprz_poziom_rozdzialu_lub_artykulu or poziom_naglowka);
local __poprz_czysty_poziom_rozdzialu_lub_artykulu=(poziom_znakowy_rozdzialu>0) and poprz_czysty_poziom_rozdzialu_lub_artykulu or poziom_numeracji_rozdzialu;
poziom_artykulu,staly_dodatek=PoziomNumerNaglowka(poziom_podany_artykulu_bez_numeracji,poziom_numeracji_artykulu,__poprz_poziom_rozdzialu_lub_artykulu,__poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek);
----
local numer_poziomu=HNumerPoziomow(poziom_artykulu);
local prefix_poziom_artykulu=poziom_artykulu;
local function WielopoziomowyAdres(artykul,tab_poprzedni_artykul_w_bazie,poprz_poziom_artykulu_bez_b,b_poprzednie,czy_poziomowo_z_tego_samego,czy_poziomowo_z_innego)
local b=0;
local tab_artykul_w_bazie=mw.text.split(artykul,"/");
if((tab_poprzedni_artykul_w_bazie)and((not czy_poza_podrecznikiem_poprz)and(not czy_poza_podrecznikiem)))then
if((#tab_artykul_w_bazie~=1)or(#tab_poprzedni_artykul_w_bazie~=1))then
for c=1,#tab_artykul_w_bazie,1 do
local podstrona_artykul=tab_artykul_w_bazie[c];
local podstrona_poprzedni_artykul=tab_poprzedni_artykul_w_bazie[c];
if(podstrona_artykul==podstrona_poprzedni_artykul)then
b=b+1;
else
break;
end;
end;
end;
if((poprz_poziom_artykulu_bez_b<poziom_artykulu)and(b>0)and(#tab_poprzedni_artykul_w_bazie==b))then
czy_poziomowo_z_innego=true;
b=b_poprzednie;
czy_poziomowo_z_tego_samego=nil;
elseif(poprz_poziom_artykulu_bez_b==poziom_artykulu)then
if(czy_poziomowo_z_innego)then
if(b>0)then
b=b_poprzednie;
end;
czy_poziomowo_z_tego_samego=nil;
elseif((#tab_poprzedni_artykul_w_bazie~=b)and(b_poprzednie<b))then
b=b_poprzednie;
czy_poziomowo_z_tego_samego=true;
else
if(czy_poziomowo_z_tego_samego)then
b=b_poprzednie;
else
czy_poziomowo_z_innego=nil;
end;
end;
else
b=b_poprzednie;
czy_poziomowo_z_innego=nil;
czy_poziomowo_z_tego_samego=nil;
end;
end;
return tab_artykul_w_bazie,b,b_poprzednie,czy_poziomowo_z_tego_samego,czy_poziomowo_z_innego;
end;
-----
tab_artykul_w_bazie,b,b_poprzednie,czy_poziomowo_z_tego_samego,czy_poziomowo_z_innego=WielopoziomowyAdres(artykul,tab_poprzedni_artykul_w_bazie,poprz_poziom_artykulu_bez_b,b_poprzednie,czy_poziomowo_z_tego_samego,czy_poziomowo_z_innego);
-----
if(poziom_znakowy_rozdzialu<0)then
if(#tab_numer~=0)then
if(poziom_artykulu<=(poziom_pierwszego_ujemnego_naglowka or 0))then
tab_poziomowo=tab_numer_4;
tab_numer={};
HNumerArtykulu=HNumerPoziomow_4;
elseif((numer_rozdzialu>=numer_poziomu)and(#tab_numer>=numer_poziomu))then
local tab_numer2={};
for i=1,numer_poziomu-1,1 do
tab_numer2[i]=tab_numer[i];
end;
local tab_poziomowo2={};
for i=numer_poziomu,numer_rozdzialu,1 do
tab_poziomowo2[i-numer_poziomu+1]=tab_numer[i];
end;
tab_numer=tab_numer2;
tab_poziomowo=tab_poziomowo2;
HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
end;
end;
end;
local czy_z_rozdzialem=((not czy_poza_podrecznikiem)and(tab_artykul_w_bazie[1]==rozdzial));
if((p==1)and(czy_z_rozdzialem))then b=1;end;
czy_tytul_rozdzial=((p==1)and true or czy_tytul_rozdzial) and (czy_z_rozdzialem);
local dodatek=b-((czy_tytul_rozdzial)and 1 or 0);
b_poprzednie=b or 0;
dodatek=((dodatek>0)and dodatek or 0);
poprz_poziom_artykulu_bez_b=poziom_artykulu;
if(not czy_w_rozdziale_rejestrowane_osobno_artykuly)then
if((poziomowo)and(poziom_znakowy_rozdzialu<0))then
if((numer_rozdzialu>=numer_poziomu)and(numer_poziomu>=1))then
HNumerPoziomu(poziom_artykulu,1);
end;
end;
local stala=poziom_artykulu;
if((not czy_dwukropek_artykulu)
and(poziom_poczatku_rozdzialu)
and(poziom_poczatku_artykulu)
and(mw.ustring.match(poziom_poczatku_rozdzialu,"^[#:]"))
and(mw.ustring.match(poziom_poczatku_artykulu,"^:")))then
stare_HNumerPoziomu=HNumerPoziomu;
stare_HNumerArtykulu=HNumerArtykulu;
HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
HNumerPoziomu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
local ustalona_wartosc=numer_poziomu-numer_rozdzialu;
ustalona_wartosc=((ustalona_wartosc>0)and ustalona_wartosc or 1);
HNumerArtykulu(stala,ustalona_wartosc);
HNumerPoziomu(stala,ustalona_wartosc);
czy_dwukropek_artykulu=true;
elseif((czy_dwukropek_artykulu)and(not mw.ustring.match(poziom_poczatku_artykulu,"^:")))then
HNumerPoziomu=stare_HNumerPoziomu;
HNumerArtykulu=stare_HNumerArtykulu;
stare_HNumerPoziomu=nil;
stare_HNumerArtykulu=nil;
czy_dwukropek_artykulu=nil;
end;
if(czy_rozdzial_z_poczatkiem_jedynki)then
HNumerPoziomu(stala,1);
HNumerArtykulu(poziom_artykulu,1);
end;
local numer_poziomu=HNumerPoziomu(stala);
poziom_artykulu=stala+dodatek;
local numer=HNumerArtykulu(poziom_artykulu);
local roznica=numer_poziomu-numer;
if(roznica>0)then
numer=HNumerArtykulu(poziom_artykulu,numer_poziomu);
end;
if(#tab_poziomowo<numer)then
for i=#tab_poziomowo+1,numer,1 do
table.insert(tab_poziomowo,1);
end;
else
if(#tab_poziomowo>numer)then
for i=#tab_poziomowo,numer+1,-1 do
table.remove(tab_poziomowo,i);
end;
end;
tab_poziomowo[#tab_poziomowo]=(tab_poziomowo[#tab_poziomowo] or 0)+1;
end;
end;
tab_poprzedni_artykul_w_bazie=tab_artykul_w_bazie;
poprz_numer_rozdzialu_lub_artykulu=poziom_numeracji_artykulu;
poprz_poziom_rozdzialu_lub_artykulu=poziom_artykulu;
poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_podany_artykulu_bez_numeracji;
poziom_srednikowego_naglowka=czy_sredniki and poziom_czysty_artykulu or poziom_srednikowego_naglowka;
numer_poprz=tonumber(tab_lista[2][p][2][1]);
poczatek_poprz=tab_lista[2][p][2][2];
id_poprz=tab_lista[2][p][4];
czy_poza_podrecznikiem_poprz=czy_poza_podrecznikiem;
if(not nilowanie_poprzedniego_rejestru_tab_poziomowo)then
poprzedni_tab_poziomowo=tab_poziomowo;
else
poprzedni_tab_poziomowo={1,};
end;
end;
local wartosc;
if(not czy_w_rozdziale_rejestrowane_osobno_artykuly)then
wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,nil,tab_lista[2][p][5],przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki,czy_dodane);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
end;
if(not poziomowo)then
i=i+1;
end;
k=k+1;
end;
end;
if(not czy_ma_elementy)then
poprzedni_tab_poziomowo=nil;
end;
else
poprzedni_tab_poziomowo=nil;
end;
end;
return;
end;
function ZamienNumerArtykuluNaTabele(numer_artykulu)
local tab_numer_artykulu=mw.text.split(numer_artykulu,".",true);
return tab_numer_artykulu;
end;
function UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu)
if(#tab_numer_artykulu<=1)then return tab_numer_artykulu;end;
local stronicowyparser_modul=require("Module:StronicowyParser");
local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
local parametry_modul=require("Module:Parametry");
local nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly=stronicowyparser_modul["DaneUkładuAutonawigacji"](frame,tabela_listy_danych_analizy_ksiazki);
if((not tab_inne_spisy)or(not parametry_modul["CzySąElementyNumerowaneTablicy"](tab_inne_spisy)))then return tab_numer_artykulu;end;
local tab_w_spis={};
for m,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
local poziom_rozdzialu=tab_lista[1][2][1];
if(tab_lista[2])then
for p,artykul_w_bazie in ipairs(tab_lista[2])do
if((m>1)and(poziom_rozdzialu==1))then break;end;
local czy_table_baza_artykulu=parametry_modul.TypeTable(artykul_w_bazie[1]);
local artykul=czy_table_baza_artykulu and artykul_w_bazie[1][1] or artykul_w_bazie[1];
local przekierowanie=czy_table_baza_artykulu and artykul_w_bazie[1][3] or nil;
local czy_artykul=nil;
for _,tab_lub_str in ipairs(tab_inne_spisy)do
local czy_tab_lub_str=parametry_modul.TypeTable(tab_lub_str);
if(czy_tab_lub_str)then
if(czy_tab_lub_str[1]==artykul)then
czy_artykul=true;
end;
else
if(tab_lub_str==artykul)then
czy_artykul=true;
end;
end;
end;
--czy_artykul=parametry_modul.CzyJestTakiElementNumerowanyTabeli(tab_inne_spisy,artykul);
--local czy_przekierowanie=(przekierowanie) and parametry_modul.CzyJestTakiElementNumerowanyTabeli(tab_inne_spisy,przekierowanie) or nil;
if(czy_artykul--[[ or czy_przekierowanie]])then
tab_w_spis[--[[czy_artykul and]] artykul --[[or przekierowanie]]]=true;
end;
end;
end;
end;
local czy_w_spis=true;
for _,name in ipairs(tab_inne_spisy)do
local czy_table_name=parametry_modul.TypeTable(name);
czy_w_spis=czy_w_spis and tab_w_spis[czy_table_name and name[1] or name];
if(not czy_w_spis)then break;end;
end;
if(not czy_w_spis)then
return tab_numer_artykulu;
end;
if((tab_numer_artykulu)and(#tab_numer_artykulu>1)and(tab_numer_artykulu[1])and(tab_numer_artykulu[1]=='1'))then
table.remove(tab_numer_artykulu,1);
end;
if((tab_numer_artykulu)and(#tab_numer_artykulu>1)and(tab_numer_artykulu[1])and(tab_numer_artykulu[1]=='1'))then
local nazwa_spisu,numer_spisu;
local czy_jedno=true;local pierwszy_rozdzial;
for m,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
local poziom_rozdzialu=tab_lista[1][2][1];
if(m>1)then
if(poziom_rozdzialu==1)then
break;
elseif(m==2)then
pierwszy_rozdzial=poziom_rozdzialu;
elseif(m>2)then
czy_jedno=czy_jedno and pierwszy_rozdzial and (pierwszy_rozdzial<poziom_rozdzialu);
end;
end;
end;
if(czy_jedno)then
table.remove(tab_numer_artykulu,1);
end;
end;
return tab_numer_artykulu;
end;
function LaczNumeracjaArtykuluZNumeracjaSpisuTresci(numer_artykulu,numer_spisu)
local tab_numer_artykulu=ZamienNumerArtykuluNaTabele(numer_artykulu);
if(#tab_numer_artykulu<=1)then return tab_numer_artykulu;end;
local tab_numer_spisu=ZamienNumerArtykuluNaTabele(numer_spisu);
local lens=#tab_numer_spisu;
for i=lens,1,-1 do
if(i==lens)then
tab_numer_artykulu[1]=tab_numer_spisu[i];
else
table.insert(tab_numer_artykulu,1,tab_numer_spisu[i]);
end;
end;
return tab_numer_artykulu;
end;
p["PobierzNumerArtykułu"]=function(frame,tabela_listy_danych_analizy_ksiazki)
local s=1;
local parametry_modul=require("Module:Parametry");
local args_kopia;
local tab_spis;
local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_pozapodrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki)
local nazwa_artykulu=pierwszy_parametr_szablonu();
if((nazwa_artykulu==artykul)or(((przekierowanie)and(parametry_modul.TypeString(przekierowanie))and(przekierowanie==nazwa_artykulu))or(parametry_modul.TypeTable(przekierowanie)and(przekierowanie[1]==nazwa_artykulu))))then
if(s==ktory)then
if(poziomowo)then
local numer_artykulu=(table.concat(tab_numer,".")..((#tab_numer>0) and ((#tab_poziomowo>0) and "." or "") or "")..table.concat(tab_poziomowo,"."));
if((not nazwa_spisu)or(not numer_spisu)
or ((not glowny_spis_tresci_ksiazki)and((tonumber(numer_artykulu) or 1)>1))
or((glowny_spis_tresci_ksiazki)and((numer_spisu or 1)>1))
)then
return numer_artykulu,glowny_spis_tresci_ksiazki;
elseif((numer_spisu)and(numer_spisu==1))then
if(glowny_spis_tresci_ksiazki)then
return numer_artykulu,glowny_spis_tresci_ksiazki;
else
local tab_numer_artykulu=ZamienNumerArtykuluNaTabele(numer_artykulu);
tab_numer_artykulu=UsuwajPoczatkoweJedynki(frame,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu);
return table.concat(tab_numer_artykulu,"."),glowny_spis_tresci_ksiazki;
end;
end;
local numer_spisu_tresci;local glowny_spis_tresci_ksiazki_spisu_tresci;
if((not tab_spis)or(not tab_spis[nazwa_spisu]))then
if(not args_kopia)then
local args=parametry_modul.PobierzArgsParametry(frame,true);
args_kopia=parametry_modul["KopiujRekurencyjnieTabelęElementów"](args);
end;
args_kopia[1]=nazwa_spisu;
if(not tab_spis)then tab_spis={};end;
tab_spis[nazwa_spisu]={};
numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci=PobierzNumerLubNazweArtykulu({args=args_kopia,},tabela_listy_danych_analizy_ksiazki,__FUNKCJA,false);
tab_spis[nazwa_spisu]={numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci,};
else
local tab_element=tab_spis[nazwa_spisu];
numer_spisu_tresci=tab_element[1];
glowny_spis_tresci_ksiazki_spisu_tresci=tab_element[2];
end;
if((not numer_spisu_tresci)or((not glowny_spis_tresci_ksiazki_spisu_tresci)and((tonumber(numer_spisu_tresci) or 1)>1)))then return numer_artykulu,glowny_spis_tresci_ksiazki;end;
local tab_numer_artykulu=LaczNumeracjaArtykuluZNumeracjaSpisuTresci(numer_artykulu,numer_spisu_tresci);
tab_numer_artykulu=(not glowny_spis_tresci_ksiazki_spisu_tresci) and UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu) or tab_numer_artykulu;
return table.concat(tab_numer_artykulu,"."),glowny_spis_tresci_ksiazki;
else
return i,glowny_spis_tresci_ksiazki;
end;
end;
s=s+1;
end;
end;
local wartosc,glowny_spis_tresci_ksiazki=PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,false);
return wartosc,glowny_spis_tresci_ksiazki;
end;
p["PobierzNazwęArtykułu"]=function(frame,tabela_listy_danych_analizy_ksiazki)
local s=1;
local parametry_modul=require("Module:Parametry");
local args_kopia;
local tab_spis;
local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_pozapodrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki)
local numer,czy_nazwa=pierwszy_parametr_szablonu();
if((not poziomowo)and(i==numer))then
if(s==ktory)then
return (not czy_nazwa) and artykul or (nazwa or artykul);
else
s=s+1;
end;
elseif(poziomowo)then
local function NumerArtykulu(tab_numer,tab_poziomowo)
return (table.concat(tab_numer,".")..((#tab_numer>0) and "." or "")..table.concat(tab_poziomowo,"."));
end;
local function WynikArtykulowyZNumeru(numer_artykulu)
if(numer_artykulu==numer)then
if(s==ktory)then
return (not czy_nazwa) and artykul or (nazwa or artykul);
else
s=s+1;
end;
end;
end;
local numer_artykulu=NumerArtykulu(tab_numer,tab_poziomowo);
if((not nazwa_spisu)or(not numer_spisu)
or ((not glowny_spis_tresci_ksiazki)and((tonumber(numer_artykulu) or 1)>1))
or((glowny_spis_tresci_ksiazki)and((numer_spisu or 1)>1))
)then
local wynik=WynikArtykulowyZNumeru(numer_artykulu);
if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
elseif((numer_spisu)and(numer_spisu==1))then
if(glowny_spis_tresci_ksiazki)then
local wynik=WynikArtykulowyZNumeru(numer_artykulu);
if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
else
local tab_numer_artykulu=ZamienNumerArtykuluNaTabele(numer_artykulu);
tab_numer_artykulu=UsuwajPoczatkoweJedynki(frame,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu);
local numer_artykulu=table.concat(tab_numer_artykulu,".");
local wynik=WynikArtykulowyZNumeru(numer_artykulu);
if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
end;
else
local numer_spisu_tresci;local glowny_spis_tresci_ksiazki_spisu_tresci;
if((not tab_spis)or(not tab_spis[nazwa_spisu]))then
if(not args_kopia)then
local args=parametry_modul.PobierzArgsParametry(frame,true);
args_kopia=parametry_modul["KopiujRekurencyjnieTabelęElementów"](args);
end;
args_kopia[1]=nazwa_spisu;
numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci=p["PobierzNumerArtykułu"]({args=args_kopia,},tabela_listy_danych_analizy_ksiazki);
if(not tab_spis)then tab_spis={};end;
tab_spis[nazwa_spisu]={numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci,};
else
local tab_element=tab_spis[nazwa_spisu];
numer_spisu_tresci=tab_element[1];
glowny_spis_tresci_ksiazki_spisu_tresci=tab_element[2];
end;
if((not numer_spisu_tresci)or((not glowny_spis_tresci_ksiazki_spisu_tresci)and((tonumber(numer_spisu_tresci) or 1)>1)))then
local wynik=WynikArtykulowyZNumeru(numer_artykulu);
if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
end;
local tab_numer_artykulu=LaczNumeracjaArtykuluZNumeracjaSpisuTresci(numer_artykulu,numer_spisu_tresci);
tab_numer_artykulu=(not glowny_spis_tresci_ksiazki_spisu_tresci) and UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_artykulu) or tab_numer_artykulu;
local numer_artykulu=table.concat(tab_numer_artykulu,".");
local wynik=WynikArtykulowyZNumeru(numer_artykulu);
if(wynik)then return wynik,glowny_spis_tresci_ksiazki;end;
end;
end;
end;
local wartosc,glowny_spis_tresci_ksiazki=PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,true);
return wartosc,glowny_spis_tresci_ksiazki;
end;
p["PobierzDaneKsiążki"]=function(frame,tabela_listy_danych_analizy_ksiazki,kodowanie_nie_json)
local tab_dane_ksiazki=nil;
local s=1;
local nazwy_modul=require("Module:Nazwy");
local parametry_modul=require("Module:Parametry");
local args_kopia;
local tab_spis;
local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
local tab_nazw_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tab_nazw_generalnego_spisu_rzeczy_woluminu;
local pierwszy_spis_tresci=nil;
local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_pozapodrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki,czy_dodane)
if((artykul_spisu)and(nazwa_spisu)and(artykul_spisu~=nazwa_spisu))then return false;end;
if(not tab_dane_ksiazki)then tab_dane_ksiazki={};end;
if(not tab_dane_ksiazki[rozdzial])then tab_dane_ksiazki[rozdzial]={};end;
local tab_rozdzial=tab_dane_ksiazki[rozdzial];
local numer_rozdzialu=tab_numer and table.concat(tab_numer,".") or "";
if((nazwa_spisu)and(numer_spisu)and(not glowny_spis_tresci_ksiazki)and(numer_rozdzialu~=""))then
local numer_spisu_tresci;local glowny_spis_tresci_ksiazki_spisu_tresci;
if((numer_spisu)and(numer_spisu==1))then
if(not glowny_spis_tresci_ksiazki)then
local tab_numer_rozdzialu=ZamienNumerArtykuluNaTabele(numer_rozdzialu);
tab_numer_rozdzialu=UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_rozdzialu);
numer_rozdzialu=table.concat(tab_numer_rozdzialu,".");
end;
else
if((not tab_spis)or(not tab_spis[nazwa_spisu]))then
if(not args_kopia)then
local args=parametry_modul.PobierzArgsParametry(frame,true);
args_kopia=parametry_modul["KopiujRekurencyjnieTabelęElementów"](args);
end;
args_kopia[1]=nazwa_spisu;
numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci=p["PobierzNumerArtykułu"]({args=args_kopia,},tabela_listy_danych_analizy_ksiazki);
if(not tab_spis)then tab_spis={};end;
tab_spis[nazwa_spisu]={numer_spisu_tresci,glowny_spis_tresci_ksiazki_spisu_tresci,};
else
local tab_element=tab_spis[nazwa_spisu];
numer_spisu_tresci=tab_element[1];
glowny_spis_tresci_ksiazki_spisu_tresci=tab_element[2];
end;
if(((not glowny_spis_tresci_ksiazki_spisu_tresci)and(numer_spisu_tresci)and((tonumber(numer_spisu_tresci) or 1)==1))or((glowny_spis_tresci_ksiazki_spisu_tresci)))then
local tab_numer_rozdzialu=LaczNumeracjaArtykuluZNumeracjaSpisuTresci(numer_rozdzialu,numer_spisu_tresci);
tab_numer_rozdzialu=(not glowny_spis_tresci_ksiazki_spisu_tresci) and UsuwajPoczatkoweJedynki(tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_rozdzialu) or tab_numer_rozdzialu;
numer_rozdzialu=table.concat(tab_numer_rozdzialu,".");
end;
end;
elseif((not pierwszy_spis_tresci)and(nazwa_spisu)and(numer_spisu)and(glowny_spis_tresci_ksiazki)and(numer_rozdzialu~=""))then
local czy_spis_tresci=tab_nazw_generalnego_spisu_rzeczy_woluminu[rozdzial];
if(czy_spis_tresci)then
pierwszy_spis_tresci=true;
local tab_numer_rozdzialu=ZamienNumerArtykuluNaTabele(numer_rozdzialu);
tab_numer_rozdzialu=UsuwajPoczatkoweJedynki(frame,tabela_listy_danych_analizy_ksiazki,tab_lista_artykulow_w_ksiazce,tab_numer_rozdzialu);
numer_rozdzialu=table.concat(tab_numer_rozdzialu,".");
end;
end;
if(not tab_rozdzial[numer_rozdzialu])then
tab_rozdzial[numer_rozdzialu]={};
end;
local tab_numer_rozdzialu=tab_rozdzial[numer_rozdzialu];
if(not tab_numer_rozdzialu[artykul])then
tab_numer_rozdzialu[artykul]={};
end;
local tab_artykul=tab_numer_rozdzialu[artykul];
local numer_artykulu=tab_poziomowo and table.concat(tab_poziomowo,".") or "";
if(not tab_artykul[numer_artykulu])then
tab_artykul[numer_artykulu]={};
end;
local tab_numer_artykulu=tab_artykul[numer_artykulu];
local czy_tabelka=parametry_modul.TypeTable(przekierowanie);
----
table.insert(tab_numer_artykulu,{["przekierowanie"]=czy_tabelka and przekierowanie[1] or ((not czy_tabelka) and przekierowanie or nil),["kod języka"]=czy_tabelka and przekierowanie[3] or nil,["kod projektu"]=czy_tabelka and przekierowanie[4] or nil,["pełna nazwa książki"]=(czy_tabelka and przekierowanie[2]) and nazwy_modul["NazwaModułu"](przekierowanie[2][1],przekierowanie[2][2],przekierowanie[2][3],"") or nil,["nazwa"]=nazwa,["spis treści"]=czy_nienilowy_rozdzial,["czy w podręczniku"]=((artykul~="") and ((not czy_artykuly_pozapodrecznikowe) and true or nil) or nil),["dodane"]=czy_dodane,["numer"]=s});
----
s=s+1;
return false;
end;
PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,false,true);
return (not kodowanie_nie_json) and mw.text.jsonEncode(tab_dane_ksiazki,mw.text.JSON_PRESERVE_KEYS) or tab_dane_ksiazki;
end;
return p;