Moduł:StronicowyParser/NumerLubNazwaArtykułówKsiążek
Zobacz podstrony tego modułu.
|
local p={};
local function PobierzNumerLubNazweArtykulu(frame,tabela_listy_danych_analizy_ksiazki,__FUNKCJA,typ,zbieraj_dane_wszystkie)
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 nie_wszystkie=parametry_modul.CzyTak(args["nie wszystkie"]);
----
local dane=tonumber(args["dane"]);
if((not dane)or((dane~=1)and(dane~=2)and(dane~=3)))then dane=1;end;
----
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_wszystkie)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,dane,};
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_tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=stronicowyparser_obiekty_modul.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu;
local tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu);
local odczyt_tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu;
local tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu=parametry_modul["KopiujTabelęElementów"](odczyt_tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu);
setmetatable(tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
setmetatable(tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu,parametry_modul.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter);
local HNumerPoziomow_4=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 tab_numer=poziomowo and {} or nil;
tab_numer_baza_spis_tresci=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 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 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 czy_pierwszy_nilowy_rozdzial=nil;
local czy_ostatni_rozdzial_jest_centrowany=nil;
local glowny_spis_tresci_ksiazki=nil;
local poprz_poziom_rozdzialu_lub_artykulu=nil;
local poprz_numeracji_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 poziom_spisu_tresci_dodatek=nil;
----
local odejmnij_od_dwukropka=0;
-----
local czy_w_trakcie_dwukropkowania=nil;
-----
local numer_poprz=nil;
----
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][6]==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 ZerowyArtykul(tab_lista_2,p,w_rozdziale,poziom_zerowego_artykulu,poziom_zerowego_naglowka,poziom_zerowego_artykulu_poprz)
if((not w_rozdziale)
and(poziom_zerowego_artykulu>0)
and(poziom_zerowego_naglowka>0))then
if(p>1)then
local czy_jest_nast=tab_lista_2[p-1];
if(czy_jest_nast)then
local numer=tonumber(tab_lista_2[p-1][2][1]);
if(numer>0)then
poziom_zerowego_artykulu=0;
end;
else
poziom_zerowego_artykulu=0;
end;
end;
elseif(poziom_zerowego_artykulu==0)then
poziom_zerowego_artykulu=poziom_zerowego_artykulu_poprz;
end;
return poziom_zerowego_artykulu;
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;
local prawdziwy_poziom_rozdzialu_poprz=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;
local czy_jest_teraz_spis_tresci=nil;
local czy_rozdzial_centrowany=nil;
-----
local zbieraj_dane=true;
-----
local function PoziomNumerNaglowka(poziom_naglowka,poziom_numeracji_rozdzialu,poprz_poziom_rozdzialu_lub_artykulu,poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu)
if(not poprz_czysty_poziom_rozdzialu_lub_artykulu)then
staly_dodatek_rozdzialu={poziom_numeracji_rozdzialu,};
return poziom_naglowka,staly_dodatek_rozdzialu;
end;
if(poziom_naglowka==poprz_czysty_poziom_rozdzialu_lub_artykulu)then
local poziom_numeracji=poziom_numeracji_rozdzialu-(staly_dodatek_rozdzialu[1] or 0);
return poziom_naglowka+((poziom_numeracji>=0)and poziom_numeracji or 0),staly_dodatek_rozdzialu;
elseif(poziom_naglowka~=poprz_czysty_poziom_rozdzialu_lub_artykulu)then
staly_dodatek_rozdzialu={poziom_numeracji_rozdzialu,};
return poziom_naglowka,staly_dodatek_rozdzialu;
end;
end;
local function PoziomNumerNaglowkaStalyDodatekRozdzialu(staly_dodatek_rozdzialu,poziom_naglowka,poprz_czysty_poziom_rozdzialu_lub_artykulu)
if(parametry_modul.TypeTable(staly_dodatek_rozdzialu))then
return 0;
elseif(poziom_naglowka>poprz_czysty_poziom_rozdzialu_lub_artykulu)then
local dodatek=(parametry_modul.TypeTable(staly_dodatek_rozdzialu) and staly_dodatek_rozdzialu[2] or 0);
return dodatek;
elseif(poziom_naglowka<poprz_czysty_poziom_rozdzialu_lub_artykulu)then
local dodatek=(parametry_modul.TypeTable(staly_dodatek_rozdzialu) and staly_dodatek_rozdzialu[1] or 0);
return dodatek;
end;
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_temp=poziom_zerowego_naglowka or 0;
local poziom_srednikowego_naglowka_temp=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_temp=staly_dodatek_rozdzialu or 0;
local poczatek_poprz=nil;
local ostatni_rozdzial_dodatni_temp=ostatni_rozdzial_dodatni;
local ostatni_rozdzial_centrowany_temp=ostatni_rozdzial_centrowany;
local poziom_zerowego_artykulu=0;
local staly_poziom_rozdzialu_z_artykulami=0;
local ostatni_artykul_w_rozdziale=nil;
local czy_dwukropek=nil;
local czy_rozdzial_centrowany_temp=nil;
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
local rozdzial=nil;
if(czy_rozdzial)then
artykul_w_bazie=artykul_w_bazie[1];
rozdzial=artykul_w_bazie[1];
czy_rozdzial_centrowany_temp=artykul_w_bazie[2][4];
end;
local poziom_artykulu=artykul_w_bazie[2][1];
local czy_dwukropek_aktualnie=nil;
if((czy_rozdzial)and(rozdzial)and(poziom_artykulu)and(poziom_artykulu==0))then
czy_dwukropek_aktualnie=mw.ustring.match(rozdzial,":%s*$")
czy_dwukropek=czy_dwukropek_aktualnie or czy_dwukropek;
end;
local poziom_znakowy_artykulu=poziom_artykulu;
poziom_artykulu=math.abs(poziom_artykulu);
local poziom_poczatku_artykulu=artykul_w_bazie[2][2];
local w_rozdziale=(not czy_rozdzial) and artykul_w_bazie[2][4] or nil;
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;
local poziom_srednikowego_naglowka_srednik=0;
if(czy_rozdzial)then
if(poziom_znakowy_artykulu)then
if(poziom_znakowy_artykulu==0)then
poziom_zerowego_naglowka_temp=1;
elseif(poziom_znakowy_artykulu>0)then
poziom_zerowego_naglowka_temp=0;
poziom_srednikowego_naglowka_temp=0;
ostatni_rozdzial_dodatni_temp=(not czy_rozdzial_centrowany_temp) and ostatni_rozdzial_dodatni_temp or nil;
czy_dwukropek=nil;
else
local poziom_srednikowego_naglowka_srednik_temp=mw.ustring.match(poziom_poczatku_artykulu,"^;+.*$");
if(poziom_srednikowego_naglowka_srednik_temp)then
poziom_srednikowego_naglowka_srednik=#poziom_srednikowego_naglowka_srednik_temp;
poziom_srednikowego_naglowka_temp=poziom_srednikowego_naglowka_srednik;
end;
end;
end;
end;
if((czy_rozdzial)and(poziom_znakowy_artykulu>0))then
ostatni_rozdzial_dodatni_temp=0;
ostatni_rozdzial_centrowany_temp=w_rozdziale and 0 or ostatni_rozdzial_centrowany_temp;
end;
local id=(not czy_rozdzial)and artykul_w_bazie[4] or nil;
local poziom_zerowego_artykulu_aktualny=poziom_artykulu;
local poziom_artykulu_zerowy;
if(not czy_rozdzial)then
local poziom_zerowego_artykulu_poprz=poziom_zerowego_artykulu;
poziom_artykulu,poziom_zerowego_artykulu=ToNumberPoziomArtykulu(poziom_artykulu);
poziom_artykulu_zerowy=poziom_artykulu;
----
poziom_zerowego_artykulu=ZerowyArtykul(tab_lista_artykulowa,p,w_rozdziale,poziom_zerowego_artykulu,poziom_zerowego_naglowka_temp,poziom_zerowego_artykulu_poprz);
----
poziom_artykulu=poziom_artykulu+poziom_zerowego_artykulu;
end;
if((not czy_rozdzial)and(poziom_znakowy_rozdzialu<0)and(rozdzial==""))then
poziom_artykulu=poziom_artykulu+poziom_naglowka_bez_poprawki;
else
---
if(not czy_rozdzial)then
poziom_zerowego_naglowka_temp=((not w_rozdziale)and(ostatni_artykul_w_rozdziale)and(poziom_zerowego_naglowka_temp>0)and(poziom_zerowego_artykulu_aktualny==0)) and (poziom_zerowego_naglowka_temp-1) or poziom_zerowego_naglowka_temp;
end;
----
poziom_artykulu=(((czy_rozdzial)and(--[[((ostatni_rozdzial_centrowany_temp or 0)>0)or]](poziom_znakowy_artykulu<=0))or(not czy_rozdzial))and ((ostatni_rozdzial_centrowany_temp or 0)+(ostatni_rozdzial_dodatni_temp or 0)+(poziom_zerowego_naglowka_temp+(((poziom_znakowy_artykulu)and(poziom_znakowy_artykulu==0)and(czy_dwukropek)and(not czy_dwukropek_aktualnie))and 1 or 0)+poziom_srednikowego_naglowka_temp)) or 0)+(((czy_rozdzial)and(poziom_znakowy_artykulu>0)and(not czy_rozdzial_centrowany_temp))and ostatni_rozdzial_centrowany_temp or 0)+poziom_artykulu--[[+staly_dodatek_rozdzialu_temp]]+(id and 1 or 0);
-----
if(czy_rozdzial)then
if(poziom_znakowy_artykulu==0)then
if(not czy_dwukropek_aktualnie)then
poziom_zerowego_naglowka_temp=1+(czy_dwukropek and 1 or 0);
else
poziom_zerowego_naglowka_temp=2;
end;
end;
end;
end;
if(not czy_rozdzial)then
if(w_rozdziale)then ostatni_artykul_w_rozdziale=true else ostatni_artykul_w_rozdziale=false;end;
end;
if((czy_rozdzial)and(poziom_znakowy_artykulu>0))then
if(w_rozdziale)then
ostatni_rozdzial_dodatni_temp=nil;
ostatni_rozdzial_centrowany_temp=poziom_znakowy_artykulu;
else
ostatni_rozdzial_dodatni_temp=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_temp=#poziom_poczatku_artykulu;end;
poczatek_poprz=poziom_poczatku_artykulu;
poziom_artykulu=poziom_artykulu+((czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
local wynik=__FUNKCJA(poziom_artykulu,poziom_naglowka_bez_poprawki,poziom_znakowy_artykulu,w_rozdziale,ostatni_rozdzial_centrowany_temp,{poziom_srednikowego_naglowka_temp,poziom_srednikowego_naglowka_srednik,},poziom_zerowego_naglowka_temp,poziom_artykulu_zerowy);
ostatni_rozdzial_dodatni_temp=(czy_rozdzial_centrowany_temp) and poziom_artykulu or ostatni_rozdzial_dodatni_temp;
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;
else
break;
end;
end;
end;
return ile_w_rozdziale
end;
local function KoniecSpisuTresci(poziom_naglowka_bez_poprawki,znak_poziom,czy_srednik)
if((tab_numer_baza_spis_tresci)and(#tab_numer_baza_spis_tresci>0))then
local function UsunElementySpisTresci(tab_numer_temp)
if(not tab_numer_temp)then return;end;
local tab_numer_prawd;local HNumerPoziomow_prawd;local HNumerPoziomowNaglowkow_prawd;
for i=#tab_numer_temp,1,-1 do
local tab_naglowka=tab_numer_temp[i];
if((tab_naglowka[4]>=poziom_naglowka_bez_poprawki)or((tab_naglowka[5]<0)and((znak_poziom>0)or(czy_srednik))))then
tab_numer_prawd=tab_naglowka[1];
HNumerPoziomow_prawd=tab_naglowka[2];
HNumerPoziomowNaglowkow_prawd=tab_naglowka[3]
table.remove(tab_numer_temp,i);
else
break;
end;
end;
if(tab_numer_prawd)then
tab_numer=tab_numer_prawd;
HNumerPoziomow=HNumerPoziomow_prawd;
if(HNumerPoziomowNaglowkow_prawd)then HNumerPoziomowNaglowkow=HNumerPoziomowNaglowkow_prawd;end;
return true;
end;
return nil;
end;
if(znak_poziom>0)then
if(not UsunElementySpisTresci(tab_numer_baza_spis_tresci))then return;end;
if(#tab_numer_baza_spis_tresci==0)then
glowny_spis_tresci_ksiazki=false;
end;
tab_poziomowo={};
end;
end;
end;
----
-----
czy_nienilowy_rozdzial=tab_lista[1][2][1];
poziom_rozdzialu=czy_nienilowy_rozdzial or 0;
----
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;
tab_poziomowo={};
local rozdzial_bez_dwukropka=mw.ustring.match(rozdzial,"^%s*(.-)%s*:[%s:]*$") or rozdzial;
czy_jest_teraz_spis_tresci=((m==1)and (czy_nienilowy_rozdzial and tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu[rozdzial_bez_dwukropka]
or ((not czy_nienilowy_rozdzial)and true or false))
or ((m>1)and tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu[rozdzial_bez_dwukropka]
or false));
poziom_spisu_tresci_dodatek=(czy_jest_teraz_spis_tresci and ((poziom_rozdzialu==0)and 1 or 0) or (poziom_spisu_tresci_dodatek or 0));
local czy_nie_ten_rozdzial;
if((tab_numer_baza_spis_tresci)and(#tab_numer_baza_spis_tresci>0))then
czy_nie_ten_rozdzial=false;
glowny_spis_tresci_ksiazki=true;
else
glowny_spis_tresci_ksiazki=false;
if(nie_wszystkie)then
czy_nie_ten_rozdzial=tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu[rozdzial_bez_dwukropka];
end;
end;
if((m==1)and(not czy_nienilowy_rozdzial))then
czy_pierwszy_nilowy=true;
czy_pierwszy_nilowy_rozdzial=true;
end;
if(not czy_nie_ten_rozdzial)then
if(poziomowo)then
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);
czy_rozdzial_centrowany=tab_lista[1][2][4];
----
local czy_z_dwukropkiem=nil;
----
if(poziom_rozdzialu<0)then
poziom_rozdzialu,odejmnij_od_dwukropka,czy_w_trakcie_dwukropkowania=OdejmnijOdDwukropka(-poziom_rozdzialu,poziom_poczatku_rozdzialu,numer_poprz or 0,czy_w_trakcie_dwukropkowania,odejmnij_od_dwukropka);
numer_poprz=-tab_lista[1][2][1] or 0;
poziom_rozdzialu=-poziom_rozdzialu;
else
numer_poprz=nil;
czy_w_trakcie_dwukropkowania=nil;
odejmnij_od_dwukropka=0;
end;
local czy_sredniki;
-----
poprzedni_poziom_znakowy_rozdzialu=poziom_znakowy_rozdzialu;
poziom_znakowy_rozdzialu=poziom_rozdzialu;
poziom_rozdzialu=math.abs(poziom_rozdzialu);
local poprzedni_tab_poziomowo_temp=poprzedni_tab_poziomowo;
if(poziom_znakowy_rozdzialu>0)then
poziom_naglowka=poziom_rozdzialu+(czy_rozdzial_centrowany and 0 or (ostatni_rozdzial_centrowany or 0));
poziom_naglowka_bez_poprawki=poziom_naglowka;
poziom_spisu_tresci_dodatek=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;
----
czy_poziom_ujemny_spisu_tresci=nil;
----
if((poprz_ujemnego_rozdzialu_dodatniego_rozdzialu)and(poprz_ujemnego_rozdzialu_dodatniego_rozdzialu>0))then
pierwszy_ujemny_naglowek=nil;
end;
end;
KoniecSpisuTresci(poziom_naglowka_bez_poprawki,1);
if((tab_numer_baza_spis_tresci)and(#tab_numer_baza_spis_tresci>0)and(not spis_tresci))then
numer_rozdzialu=HNumerPoziomow(poziom_naglowka,1);
spis_tresci=true;
pierwszy_rozdzial_dodatni=1;
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;
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(glowny_ujemny_rozdzial)then
HNumerPoziomow=HNumerPoziomow_4;
HNumerPoziomow_4=nil;
tab_numer=tab_numer_4;
poziom_pierwszego_ujemnego_naglowka=nil;
glowny_ujemny_rozdzial=nil;
----
czy_poziom_ujemny_spisu_tresci=nil;
----
if((poprz_ujemnego_rozdzialu_dodatniego_rozdzialu)and(poprz_ujemnego_rozdzialu_dodatniego_rozdzialu>0))then
pierwszy_ujemny_naglowek=nil;
end;
end;
----
poziom_srednikowego_naglowka=poziom_rozdzialu;
poziom_naglowka=(ostatni_rozdzial_centrowany or 0) + (ostatni_rozdzial_dodatni or 0) + poziom_zerowego_naglowka + poziom_srednikowego_naglowka+((not czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
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;
KoniecSpisuTresci(poziom_naglowka_bez_poprawki,-1,true);
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+((not czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
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+((not czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
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+((not czy_jest_teraz_spis_tresci) and poziom_spisu_tresci_dodatek or 0);
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;
----
KoniecSpisuTresci(poziom_naglowka_bez_poprawki,-1);
----
numer_rozdzialu=HNumerPoziomow(poziom_naglowka);
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;
end;
else
if((m>1)or((m==1)and(not czy_pierwszy_nilowy)))then
local poziom_zerowego_naglowka_temp=poziom_zerowego_naglowka;
czy_z_dwukropkiem=mw.ustring.match(rozdzial,":%s*$");
local dodatek=((czy_z_dwukropkiem)and 1 or 0);
poziom_zerowego_naglowka=1+((not czy_z_dwukropkiem)and ((poziom_zerowego_naglowka_temp==2) and 1 or 0) or 1);
poziom_naglowka=1+(((not czy_z_dwukropkiem)and(poziom_zerowego_naglowka_temp==2))and 1 or 0)+ (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);
KoniecSpisuTresci(poziom_naglowka_bez_poprawki,-1);
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_naglowka);
elseif(poziom_znakowy_rozdzialu<0)then
end;
if(poziom_rozdzialu>0)then
if(((czy_ostatni_rozdzial_jest_centrowany)and(ostatni_rozdzial_centrowany or 0)>0)and(#tab_numer>0)and(tab_numer[#tab_numer]==0)and(#tab_numer<=numer_rozdzialu))then
tab_numer[#tab_numer]=nil;
numer_rozdzialu=HNumerPoziomow(poziom_naglowka,((numer_rozdzialu>1)and(numer_rozdzialu-1) or 1));
czy_ostatni_rozdzial_jest_centrowany=nil;
elseif(poprzedni_tab_poziomowo)then
local lens=math.min(#poprzedni_tab_poziomowo,numer_rozdzialu-#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<numer_rozdzialu)then
for i=#tab_numer+1,numer_rozdzialu,1 do
table.insert(tab_numer,1);
end;
elseif(#tab_numer>numer_rozdzialu)then
for i=#tab_numer, numer_rozdzialu+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,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
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(((m==2)and(czy_pierwszy_nilowy_rozdzial))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
local czy_artykuly=nil;
if(tab_lista[2])then
local czy_w_rozdziale_artykuly=nil;
local wynik=AnalizaArtykulowaLubRozdzialowa(tab_lista[2],nil,function(poziom_artykulu,poziom_naglowka,_,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
if(not w_rozdziale)then
czy_artykuly=true;
if(((((not czy_z_dwukropkiem)and(czy_w_rozdziale_artykuly))or(poziom_artykulu-(poziom_zerowego_naglowka or 0)<=poziom_naglowka)or(poziom_artykulu-(poziom_srednikowego_naglowka[1] or 0)<=poziom_naglowka))and(poziom_artykulu_zerowy)and(poziom_artykulu_zerowy==0)and(poziom_zerowego_naglowka)and(poziom_zerowego_naglowka>0))and((m>2)or((m==2)and(not czy_pierwszy_nilowy_rozdzial))))then
return true;
end;
if(poziom_artykulu<=poziom_naglowka)then
return true;
end;
else
czy_w_rozdziale_artykuly=true;
end;
end);
if(wynik)then return true;end;
end;
if((czy_artykuly)or(m==1))then
local wynik=AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_aktualnego_naglowka,poziom_naglowka,poziom_znakowy_naglowka,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
if(poziom_znakowy_naglowka<=0)then
if(poziom_aktualnego_naglowka<=poziom_naglowka)then
if((poziom_srednikowego_naglowka[2])and(poziom_srednikowego_naglowka[2]>0))then
return false;
else
return true;
end;
end;
else
if((m==1)and(poziom_znakowy_rozdzialu<0)and(poziom_znakowy_naglowka>0))then return true;end;
return false;
end
end);
return wynik;
else
return true;
end;
else
return true;
end;
end;
local function DodajNaSamPoczatek()
local function ArtykulyNieWRozdziale()
local ile=0;
if(tab_lista[2])then
for p,artykul_w_bazie in ipairs(tab_lista[2])do
local w_rozdziale=artykul_w_bazie[2][4];
if(not w_rozdziale)then
ile=ile+1;
end;
end;
end;
return ile;
end;
if((tab_lista_artykulow_w_ksiazce[m+1])and(ArtykulyNieWRozdziale()>0)
and((
(poziom_znakowy_rozdzialu>0)
and AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
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 AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka_temp,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
if((poziom_srednikowego_naglowka_temp[2])and(poziom_srednikowego_naglowka)and(poziom_srednikowego_naglowka_temp[2]>poziom_srednikowego_naglowka))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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
zbieraj_dane=false;
end;
tab_numer={};
elseif((czy_jest_teraz_spis_tresci)and((poziom_znakowy_rozdzialu>0)or(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,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
if(poziom_artykulu>poziom_naglowka)then
return true;
elseif(czy_sredniki)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,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
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,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
zbieraj_dane=false;
end;
----
if(not tab_poziomowo_1)then tab_poziomowo_1={};end;
table.insert(tab_poziomowo_1,{tab_poziomowo,poziom_naglowka_bez_poprawki,});
----
tab_poziomowo={};
tab_numer_zapasowe=tab_numer;
------
if(not tab_numer_baza_spis_tresci)then tab_numer_baza_spis_tresci={};end;
table.insert(tab_numer_baza_spis_tresci,{tab_numer,HNumerPoziomow,HNumerPoziomowNaglowkow,poziom_naglowka_bez_poprawki,1,});
-----
HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
HNumerPoziomowNaglowkow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
spis_tresci=false;
-----
tab_numer={};
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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
zbieraj_dane=false;
end;
----
if(not tab_poziomowo_1)then tab_poziomowo_2={};end;
table.insert(tab_poziomowo_2,{tab_poziomowo,poziom_naglowka_bez_poprawki,});
----
tab_poziomowo={};
tab_numer_zapasowe=tab_numer;
-----
if(not tab_numer_baza_spis_tresci)then tab_numer_baza_spis_tresci={};end;
table.insert(tab_numer_baza_spis_tresci,{tab_numer,HNumerPoziomow,nil,poziom_naglowka_bez_poprawki,-1,});
spis_tresci=false;
-----
HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
-----
tab_numer={};
end;
local wartosc,glowny_spis_tresci_ksiazki=DodajNaSamPoczatek();
if((not parametry_modul.TypeBoolean(wartosc))and(wartosc))then return wartosc,glowny_spis_tresci_ksiazki;end;
elseif(((not czy_jest_teraz_spis_tresci)and(((not pierwszy_dodatni_naglowek)and(poziom_znakowy_rozdzialu>0))
or(((not pierwszy_ujemny_naglowek)or((prawdziwy_poziom_rozdzialu_poprz)and(prawdziwy_poziom_rozdzialu_poprz>0)))and(poziom_znakowy_rozdzialu<0))))
and(not CzyJestONumerzeMniejszymLubRownymPoziomieNizAktualnyRozdzial()))and((not czy_pierwszy_nilowy_rozdzial)or((#tab_numer~=1)or(tab_numer[1]==1)))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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
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;
poprz_ujemnego_rozdzialu_dodatniego_rozdzialu=(m>1) and prawdziwy_poziom_rozdzialu_poprz or false;
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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
zbieraj_dane=false;
end;
end;
local wartosc,glowny_spis_tresci_ksiazki=DodajNaSamPoczatek();
if((not parametry_modul.TypeBoolean(wartosc))and(wartosc))then return wartosc,glowny_spis_tresci_ksiazki;end;
else
local wartosc,glowny_spis_tresci_ksiazki=DodajNaSamPoczatek();
if((not parametry_modul.TypeBoolean(wartosc))and(wartosc))then return wartosc,glowny_spis_tresci_ksiazki;end;
----
if(wartosc)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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
zbieraj_dane=false;
end;
end;
end;
-- end;
zbieraj_dane=true;
poprz_numeracji_rozdzialu_lub_artykulu=poziom_numeracji_rozdzialu;
poprz_poziom_rozdzialu_lub_artykulu=poziom_naglowka;
poprz_numer_rozdzialu_lub_artykulu=numer_rozdzialu;
poprz_czysty_poziom_rozdzialu_lub_artykulu=poziom_naglowka_bez_poprawki;
prawdziwy_poziom_rozdzialu_poprz=prawdziwy_poziom_rozdzialu;
-----
if((m>1)or((m==1)and(not czy_pierwszy_nilowy_rozdzial)))then
if(prawdziwy_poziom_rozdzialu>0)then
pierwszy_dodatni_naglowek=true;
pierwszy_ujemny_naglowek=nil;
else
pierwszy_ujemny_naglowek=true;
pierwszy_dodatni_naglowek=true;
end;
end;
----
czy_ostatni_rozdzial_jest_centrowany=((poziom_znakowy_rozdzialu>0)and(czy_rozdzial_centrowany and true or nil) or ((poziom_znakowy_rozdzialu<=0)and czy_ostatni_rozdzial_jest_centrowany or nil));
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);
if(wartosc)then return wartosc,glowny_spis_tresci_ksiazki;end;
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 k=1;
-----
local czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
local artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
local czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka=nil;
-----
local numer_poprz_w_rozdziale=nil;
local poczatek_poprz=nil;
local id_poprz=nil;
local poprz_numer_artykulu=nil;
local tab_poprzedni_artykul_w_bazie=nil;
local odejmnij_od_dwukropka_w_rozdziale=0;
-----
local czy_w_trakcie_dwukropkowania_w_rozdziale=nil;
-----
local poziom_zerowego_artykulu=0;
local staly_poziom_rozdzialu_z_artykulami=0;
local nilowanie_poprzedniego_rejestru_tab_poziomowo=nil;
local czy_w_podreczniku_poprz=nil;
-----
local stare_HNumerPoziomu_poza_rozdzialem=nil;
local czy_dodano_zero_do_tab_numer=nil;
local ile_w_rozdziale_licznik=1;
local staly_dodatek_rozdzialu_temp=0;
local staly_dodatek_rozdzialu_roz=staly_dodatek_rozdzialu;
local staly_dodatek_artykulu=0;
local ostatni_artykul_w_rozdziale=nil;
local tab_numer_w_rozdziale=nil;
local podrozdzial_spisu=nil;
local dodatek_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_w_podreczniku=artykul_w_bazie[5];
local przekierowanie=(czy_w_podreczniku) and (czy_table_baza_artykulu and ((not artykul_w_bazie[1][4])and(not artykul_w_bazie[1][7]) and Przekierowanie(artykul_w_bazie[1][3]) or {Przekierowanie(artykul_w_bazie[1][3]),artykul_w_bazie[1][4],nil,nil,artykul_w_bazie[1][7],}) or nil) or (((not czy_w_podreczniku)and(czy_table_baza_artykulu)and(artykul_w_bazie[1][5])or(artykul_w_bazie[1][6])or(artykul_w_bazie[1][7])) and {nil,nil,artykul_w_bazie[1][5],artykul_w_bazie[1][6],artykul_w_bazie[1][7],} or nil);
---
local czy_dodane=czy_table_baza_artykulu and artykul_w_bazie[1][8] 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;
local w_rozdziale;
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));
w_rozdziale=artykul_w_bazie[2][4];
if(w_rozdziale)then
poziom_artykulu,odejmnij_od_dwukropka_w_rozdziale,czy_w_trakcie_dwukropkowania_w_rozdziale=OdejmnijOdDwukropka(poziom_artykulu,poziom_poczatku_artykulu,numer_poprz_w_rozdziale or 0,czy_w_trakcie_dwukropkowania_w_rozdziale,odejmnij_od_dwukropka_w_rozdziale);
numer_poprz_w_rozdziale=tonumber(tab_lista[2][p][2][1]);
else
poziom_artykulu,odejmnij_od_dwukropka,czy_w_trakcie_dwukropkowania=OdejmnijOdDwukropka(poziom_artykulu,poziom_poczatku_artykulu,numer_poprz or 0,czy_w_trakcie_dwukropkowania,odejmnij_od_dwukropka);
end;
----
local numeracja_artykulu=artykul_w_bazie[2][3];
local poziom_numeracji_artykulu=PoziomNumeracji(numeracja_artykulu);
local w_rozdziale=artykul_w_bazie[2][4];
local czy_rozdzial_z_poczatkiem_jedynki=nil;
if(w_rozdziale)then
if(not stare_HNumerPoziomu_poza_rozdzialem)then
stare_HNumerPoziomu_poza_rozdzialem=HNumerPoziomow;
HNumerPoziomow=stronicowyparser_potrzebne_modul.LiczonyHNumer();
-----
tab_numer_w_rozdziale=tab_numer;
tab_numer=tab_numer_zapasowe or tab_numer;
end;
function CzyRozdzialMaArtykulyNieWewnetrzNaglowka()
local czy_artykuly=nil;
return AnalizaArtykulowaLubRozdzialowa(tab_lista[2],false,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
if(not w_rozdziale)then
czy_artykuly=true;
if(poziom_artykulu>poziom_naglowka)then
return true;
end;
return false;
end;
end),czy_artykuly;
end;
function CzyRozdzialMaRozdzialyNieWewnetrzNaglowka()
return AnalizaArtykulowaLubRozdzialowa(tab_lista_artykulow_w_ksiazce,true,function(poziom_artykulu,poziom_naglowka,poziom_znakowy_rozdzialu_artykulu,w_rozdziale,ostatni_rozdzial_centrowany,poziom_srednikowego_naglowka,poziom_zerowego_naglowka,poziom_artykulu_zerowy)
if((poziom_znakowy_rozdzialu<0)and(poziom_znakowy_rozdzialu_artykulu>0))then
return false;
else
if(poziom_artykulu>poziom_naglowka)then
return true;
end;
return false;
end;
end);
end;
if(not ile_w_rozdziale)then
ile_w_rozdziale=IleArtykolowWRozdzialeWewnatrzNaglowka(tab_lista,false);
end;
if(ile_w_rozdziale_licznik==ile_w_rozdziale)then
czy_w_trakcie_dwukropkowania_w_rozdziale=nil;
odejmnij_od_dwukropka_w_rozdziale=0;
numer_poprz_w_rozdziale=nil;
ostatni_artykul_w_rozdziale=true;
end;
ile_w_rozdziale_licznik=ile_w_rozdziale_licznik+1;
if((poziom_znakowy_rozdzialu>0)and(ile_w_rozdziale==1))then
local wartosc=__FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,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
artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=true;
if(parametry_modul.TypeNil(czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka))then
local czy_ma_artykuly;
czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka,czy_artykuly=CzyRozdzialMaArtykulyNieWewnetrzNaglowka();
if((not czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka)and(not czy_artykuly))then
czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka=CzyRozdzialMaRozdzialyNieWewnetrzNaglowka();
end;
end;
if((czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka)and(not glowny_ujemny_rozdzial))then
tab_numer[#tab_numer+1]=0;
end;
end;
else
if((artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka)or(czy_w_rozdziale_rejestrowane_osobno_artykuly))then
-----
tab_poziomowo={};
HNumerPoziomu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
HNumerArtykulu=stronicowyparser_potrzebne_modul.LiczonyHNumer();
-----
artykuly_w_rozdziale_nie_tylko_wewnatrz_naglowka=nil;
czy_w_rozdziale_rejestrowane_osobno_artykuly=nil;
----
k=1;
tab_poprzedni_artykul_w_bazie=nil;
end;
---
if(not czy_zera)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;
else
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;
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_numeracji_rozdzialu_lub_artykulu==0)and(numer+poziom_numeracji_artykulu>0)));
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_sa_jakies_artykuly_niezerowe=false;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_nie_ma_artykulow=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_sa_jakies_artykuly_niezerowe=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_sa_jakies_artykuly_niezerowe)or(not czy_nienilowy_rozdzial))or(poziom_zerowy>0))then
if(ile<=5)then
table.insert(tab_numer,0);
else
nilowanie_poprzedniego_rejestru_tab_poziomowo=true;
end
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);
local poziom_zerowego_artykulu_aktualny=poziom_artykulu;
poziom_zerowego_artykulu=ZerowyArtykul(tab_lista[2],p,w_rozdziale,poziom_zerowego_artykulu,poziom_zerowego_naglowka,poziom_zerowego_artykulu_poprz);
----
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;
----
czy_poziom_ujemny_spisu_tresci=nil;
end;
KoniecSpisuTresci(poziom_naglowka_bez_poprawki,-1,true);
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_zerowego_naglowka=((ostatni_artykul_w_rozdziale)and(not w_rozdziale)and(poziom_zerowego_naglowka>0)and(poziom_zerowego_artykulu_aktualny==0)) and (poziom_zerowego_naglowka-1) or poziom_zerowego_naglowka;
if((ostatni_artykul_w_rozdziale)and(not w_rozdziale))then
ostatni_artykul_w_rozdziale=nil;
end;
----
if((poziom_znakowy_rozdzialu<0)and(rozdzial==""))then
poziom_artykulu=poziom_naglowka+poziom_artykulu+poziom_zerowego_artykulu+(poziom_spisu_tresci_dodatek or 0);
else
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)+(poziom_spisu_tresci_dodatek or 0);
end;
----
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;
if(not w_rozdziale)then
if(k==1)then
staly_dodatek_rozdzialu_temp=staly_dodatek_rozdzialu_roz;
end;
end;
poziom_artykulu,staly_dodatek_rozdzialu_temp--[[staly_dodatek]]=PoziomNumerNaglowka(poziom_podany_artykulu_bez_numeracji,poziom_numeracji_artykulu,__poprz_poziom_rozdzialu_lub_artykulu,__poprz_czysty_poziom_rozdzialu_lub_artykulu,staly_dodatek_rozdzialu_temp--[[staly_dodatek]]);
if(not w_rozdziale)then staly_dodatek_rozdzialu=staly_dodatek_rozdzialu_temp;end;
----
local prefix_poziom_artykulu=poziom_artykulu;
local function WielopoziomowyAdres(poziom_artykulu,poprz_poziom_artykulu_bez_b,tab_poprzedni_artykul_w_bazie,staly_dodatek_artykulu)
local b=0;
local tab_artykul_w_bazie=mw.text.split(artykul,"/");
if((tab_poprzedni_artykul_w_bazie)and((czy_w_podreczniku_poprz)and(czy_w_podreczniku)))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;
else
if(k==1)then
if(#tab_artykul_w_bazie>1)then
local podrozdzial_artykulu=tab_artykul_w_bazie[1];
podrozdzial_artykulu=parametry_modul["Odstępy"]{[1]=podrozdzial_artykulu,[2]="tak",};
podrozdzial_artykulu=mw.getContentLanguage():ucfirst(podrozdzial_artykulu);
if(not podrozdzial_spisu)then
podrozdzial_spisu=parametry_modul["Odstępy"]{[1]=rozdzial,[2]="tak",};
podrozdzial_spisu=mw.getContentLanguage():ucfirst(podrozdzial_spisu);
end;
local czy_z_rozdzialem=(podrozdzial_artykulu==podrozdzial_spisu);
if(czy_z_rozdzialem)then b=1;end;
end;
end
end;
if((#tab_artykul_w_bazie==b)and(#tab_poprzedni_artykul_w_bazie==b))then b=b-1;end;
if(not poprz_poziom_artykulu_bez_b)then
staly_dodatek_artykulu={b,true};
return 0,staly_dodatek_artykulu,tab_artykul_w_bazie;
end;
if(poziom_artykulu==poprz_poziom_artykulu_bez_b)then
if((k>=2)and(czy_w_podreczniku)and(staly_dodatek_artykulu[2])and(staly_dodatek_artykulu[1]==0)and(#tab_poprzedni_artykul_w_bazie>1)and(b>0)and(#tab_poprzedni_artykul_w_bazie>=b+1))then
staly_dodatek_artykulu[1]=b;
staly_dodatek_artykulu[2]=false;
end;
if(((k==2)or(staly_dodatek_artykulu[3]))and(not czy_w_podreczniku))then
staly_dodatek_artykulu[3]=k;
elseif((k>2)and(czy_w_podreczniku)and((staly_dodatek_artykulu[3] or 0)+2==k)and(b>0))then
staly_dodatek_artykulu[3]=nil;
staly_dodatek_artykulu[1]=b;
end;
local poziom_numeracji=b-(staly_dodatek_artykulu[1] or 0);
return ((czy_w_podreczniku)and ((poziom_numeracji>=0)and poziom_numeracji or 0)or(dodatek_poprz)),staly_dodatek_artykulu,tab_artykul_w_bazie;
elseif(poziom_artykulu~=poprz_poziom_artykulu_bez_b)then
staly_dodatek_artykulu={b,true};
if((k==2)and(not czy_w_podreczniku))then
staly_dodatek_artykulu[3]=k;
end;
return 0,staly_dodatek_artykulu,tab_artykul_w_bazie;
end;
return 0,staly_dodatek_artykulu,tab_artykul_w_bazie;
end;
-----
local dodatek;
dodatek,staly_dodatek_artykulu,tab_artykul_w_bazie=WielopoziomowyAdres(poziom_artykulu,poprz_poziom_artykulu_bez_b,tab_poprzedni_artykul_w_bazie,staly_dodatek_artykulu);
poprz_poziom_artykulu_bez_b=poziom_artykulu;
local numer_poziomu=HNumerPoziomow(poziom_artykulu);
-----
if(not w_rozdziale)then
if(poziom_znakowy_rozdzialu<0)then
if(poziom_artykulu<=(poziom_pierwszego_ujemnego_naglowka or 0))then
tab_poziomowo=tab_numer_4;
tab_numer={};
HNumerPoziomu=HNumerPoziomow_4;
HNumerArtykulu(poziom_artykulu,HNumerPoziomu(0));
else
local numer=numer_rozdzialu-numer_poziomu;
if(numer>=0)then
local tab_numer_s=tab_numer;
local tab_poziomowo_s=tab_poziomowo;
tab_numer={};tab_poziomowo={};
if(#tab_numer_s>=numer_poziomu-1)then
for i=1,numer_poziomu-1,1 do
tab_numer[i]=tab_numer_s[i];
end;
for i=numer_poziomu,#tab_numer_s,1 do
tab_poziomowo[i-numer_poziomu+1]=tab_numer_s[i];
end;
for i=1,#tab_poziomowo_s,1 do
tab_poziomowo[i+#tab_numer_s-numer_poziomu+1]=tab_poziomowo_s[i];
end;
else
for i=1,#tab_numer_s,1 do
tab_numer[i]=tab_numer_s[i];
end;
for i=1,numer_poziomu-1,1 do
tab_numer[i+#tab_numer_s]=tab_poziomowo_s[i];
end;
for i=numer_poziomu,#tab_poziomowo_s,1 do
tab_poziomowo[i-numer_poziomu+1]=tab_poziomowo_s[i];
end;
end;
end;
end;
end;
end;
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);
HNumerArtykulu(poziom_artykulu,1);
end;
end;
local stala=poziom_artykulu;
if(czy_rozdzial_z_poczatkiem_jedynki)then
HNumerPoziomu(stala,1);
HNumerArtykulu(stala,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_numeracji_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=(not w_rozdziale)and tonumber(tab_lista[2][p][2][1]) or ((w_rozdziale)and numer_poprz or nil);
poprz_numer_artykulu=numer;
poprz_numer_rozdzialu_lub_artykulu=numer_poziomu;
poczatek_poprz=tab_lista[2][p][2][2];
id_poprz=tab_lista[2][p][4];
czy_w_podreczniku_poprz=czy_w_podreczniku;
dodatek_poprz=dodatek;
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;
else
if((ostatni_artykul_w_rozdziale)and(w_rozdziale))then
HNumerPoziomow=stare_HNumerPoziomu_poza_rozdzialem;
stare_HNumerPoziomu_poza_rozdzialem=nil;
tab_numer=tab_numer_w_rozdziale;
poprzedni_tab_poziomowo=nil;
-----
poziom_zerowego_artykulu=0;
-----
czy_sa_artykuly_lub_rozdzialy_w_rozdziale_nie_wewnatrz_naglowka=nil;
if((#tab_numer>0)and(tab_numer[#tab_numer]==0))then
tab_numer[#tab_numer]=nil;
end;
else
if(not nilowanie_poprzedniego_rejestru_tab_poziomowo)then
poprzedni_tab_poziomowo=tab_poziomowo;
else
poprzedni_tab_poziomowo={1,};
end;
end;
end;
k=k+1;
end;
end;
if(not czy_ma_elementy)then
poprzedni_tab_poziomowo=nil;
end;
else
poprzedni_tab_poziomowo=nil;
end;
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;
if(czy_artykul)then
tab_w_spis[artykul]=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_podrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki)
----
local dane_szablonu=pierwszy_parametr_szablonu();
local nazwa_artykulu,czy_nazwa,dane=dane_szablonu[1],dane_szablonu[2],dane_szablonu[3];
----
if((((dane==2)or(dane==3))and(artykul=="")and(rozdzial==nazwa_artykulu))or(((dane==1)or(dane==3))and(artykul~="")and((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_podrecznikowe,przekierowanie,nazwa,artykul_spisu,nazwa_spisu,numer_spisu,tab_lista_artykulow_w_ksiazce,glowny_spis_tresci_ksiazki)
----
local dane_szablonu=pierwszy_parametr_szablonu();
local numer,czy_nazwa,dane=dane_szablonu[1],dane_szablonu[2],dane_szablonu[3];
----
if((not poziomowo)and(i==numer))then
if(s==ktory)then
if(artykul~="")then
local wartosc=(not czy_nazwa) and artykul or (nazwa or artykul);
return wartosc;
else
return rozdzial;
end;
else
s=s+1;
end;
elseif(poziomowo)then
local function NumerArtykulu(tab_numer,tab_poziomowo)
return (table.concat(tab_numer,".")..((#tab_numer>0) and ((#tab_poziomowo>0) and "." or "") or "")..table.concat(tab_poziomowo,"."));
end;
local function WynikArtykulowyZNumeru(numer_artykulu)
if((((dane==2)or(dane==3))and(artykul=="")and(numer_artykulu==numer))or(((dane==1)or(dane==3))and(artykul~="")and(numer_artykulu==numer)))then
if(s==ktory)then
if(artykul~="")then
local wartosc=(not czy_nazwa) and artykul or (nazwa or artykul);
return wartosc;
else
return rozdzial;
end;
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 tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu=stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu;
local pierwszy_spis_tresci=nil;
local artykul_spisowy=nil;
local function __FUNKCJA(poziomowo,i,ktory,pierwszy_parametr_szablonu,rozdzial,artykul,tab_numer,tab_poziomowo,czy_nienilowy_rozdzial,czy_artykuly_podrecznikowe,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))then
if((artykul_spisu~=nazwa_spisu))then
if(not artykul_spisowy)then return false;else return true;end;
elseif((not artykul_spisowy)and(artykul_spisu==nazwa_spisu))then
artykul_spisowy=true;
end;
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=tablica_nazw_wprowadzenia_tekstu_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,["link"]=czy_tabelka and przekierowanie[5] or nil,["nazwa"]=nazwa,["spis treści"]=czy_nienilowy_rozdzial,["czy w podręczniku"]=(((artykul~="")or(numer_artykulu~="")) and ((czy_artykuly_podrecznikowe) 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;